Mistral: Codestral 2508 (batch)
Codestral 2508 to model tekstowy firmy Mistral AI do generowania kodu i uzupełniania z uwzględnieniem kontekstu. Jest zoptymalizowany do częstych zadań w edytorze, w tym uzupełniania luk w kodzie i edycji wielu wierszy, z kontekstem producenta o wielkości 128 tys. tokenów oraz udokumentowanymi funkcjami czatu, uporządkowanych wyników i narzędzi.
O modelu
Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.
Codestral 2508 to model programistyczny firmy Mistral AI do częstych zadań uzupełniania i generowania, w których istotne są niskie opóźnienia. Otrzymuje kod źródłowy i wymagania tekstowe oraz zwraca tekst, który może zawierać implementację, uzupełnienie, poprawkę lub wyjaśnienie. Wskazana edycja 2508 skupia się na bieżącym kontekście edycji programisty; sama nie jest modelem embeddingowym ani kompletnym agentem repozytorium.
Uzupełnianie kodu i aktualizacja 2508
Producent pozycjonuje Codestral do uzupełniania luk w kodzie i edycji wielu wierszy. Opis wydania wskazuje ulepszenia zachowania podczas uzupełniania, w tym ograniczenie niekontrolowanego generowania, a także lepsze wykonywanie instrukcji i zadania programistyczne w trybie czatu. Są to zmiany w tej edycji Codestral; wyszukiwanie i autonomiczne funkcje agentowe otaczającego zestawu narzędzi programistycznych należą do osobno nazwanych komponentów.
W zadaniu uzupełniania zachowaj istotną sygnaturę funkcji, deklaracje i kontekst wywołania wraz z pozycją kursora. Wskaż, czy oczekiwanym wynikiem jest wyłącznie brakujący kod, czy kompletna zmieniona funkcja. Żądanie w stylu edytora może dotyczyć ciała pętli, które zachowuje istniejący typ zwracany, pozostawia powtarzające się wartości i nie modyfikuje danych wejściowych wywołującego. Wynik ma wówczas konkretne miejsce wstawienia i zdefiniowane zachowanie.
Przygotowanie do uzupełniania luk
W interfejsie FIM producenta prompt dostarcza tekst lub kod do uzupełnienia, a opcjonalny sufiks zawiera materiał po luce. Gdy podano oba elementy, model wypełnia przestrzeń między nimi. Bez sufiksu kontynuuje od promptu. Różni się to od zwykłej prośby w rozmowie o zmianę kodu i wyjaśnienie; każdy sposób przygotowania definiuje inny kontrakt wyniku.
Przydatne dane wejściowe do uzupełnienia luki obejmują początek funkcji, kod, który musi nastąpić po wstawieniu, oraz istotne definicje typów lub funkcji pomocniczych. Zachowaj wcięcia i delimitery, aby zwrócony tekst pasował do istniejącego fragmentu. Jeśli zadanie wymaga tylko brakującego ciała, poproś o to ciało zamiast o przepisanie całego pliku. Osobne pytanie w czacie może wyjaśnić, dlaczego uzupełniony fragment spełnia wymaganie.
Oficjalna dokumentacja FIM pozwala określić budżet tokenów wyjściowych i wymaga, aby prompt wraz z tym budżetem mieścił się w kontekście modelu. Dokumentuje też sekwencje zatrzymujące i strumieniowanie generowanej treści. Wybierz przepływ uzupełniania, gdy wynik musi pasować do luki w kodzie, oraz przepływ rozmowy, gdy zadanie wymaga kodu wraz z wyjaśnieniem.
Kontekst i funkcje pomocnicze
Strona modelu podaje okno kontekstowe o wielkości 128 tys. tokenów. Używaj kontekstu do zachowania źródeł i deklaracji określających zamierzoną zmianę, jednocześnie jasno formułując właściwe zadanie edycyjne. Przy prośbie o naprawę błędu podaj dotkniętą funkcję, konkretne dane wejściowe wywołujące błąd, oczekiwany wynik oraz błąd lub obserwowane zachowanie. Poproś o proponowaną poprawkę oddzielnie od jej wyjaśnienia i przykładów.
Obok czatu i FIM strona wymienia też uporządkowane wyniki, wywoływanie funkcji, przewidywane wyniki, odpowiadanie na pytania o dokumenty, prefiksy odpowiedzi i przetwarzanie wsadowe. Dla uporządkowanego wyniku przeglądu kodu zdefiniuj pola takie jak dotknięty symbol, zaobserwowana niezgodność, proponowana zmiana i założenie nadal wymagające wyjaśnienia. Wskazówki Mistral dotyczące uporządkowanych wyników rozróżniają tryb JSON i schemat niestandardowy, przy czym pożądany format JSON określa się w prompcie.
Przewidywane wyniki są przeznaczone do treści, w których znaczna część odpowiedzi jest już znana. Można ich używać przy ponownym generowaniu dokumentu lub pliku kodu z ograniczoną zmianą i zachowaniem pozostałej treści. Określ dokładną zmianę i materiał, który ma pozostać. Prefiks odpowiedzi dostarcza natomiast znany początek, od którego generowanie jest kontynuowane; różni się zarówno od znanej pełnej treści, jak i od sufiksu FIM.
Pytanie dotyczące dokumentacji może wykorzystać przepływ przetwarzania dokumentów producenta do przygotowania tekstu i struktury za pomocą OCR przed analizą modelu językowego. W przypadku materiałów programistycznych już dostępnych jako tekst podaj istotne fragmenty dokumentacji i zapytaj, który warunek reguluje implementację. Zachowaj powiązanie każdego wyodrębnionego wymagania z jego sekcją źródłową, aby wygenerowany kod lub wyjaśnienie pozostały połączone z dostarczoną specyfikacją.
Narzędzia i praktyczne wyniki
Wywoływanie funkcji pozwala aplikacji udostępnić opisane operacje i ich parametry. Model przygotowuje wywołanie, aplikacja je wykonuje, a zwrócony wynik staje się kontekstem kolejnej odpowiedzi. Asystent programistyczny może w tym cyklu otrzymać wynik wyszukiwania lub obliczenia, ale kompilowanie, testowanie lub zastosowanie proponowanej zmiany nadal wymaga otaczającego środowiska programistycznego.
W przypadku praktycznej poprawki zdefiniuj publiczny interfejs, który musi zachować zgodność, i poproś o zmieniony fragment, zwięzłe wyjaśnienie oraz przykładowe dane wejściowe z oczekiwanymi wynikami. Dla generowanej funkcji określ akceptowane typy i warunki brzegowe. Dla wyjaśnienia podaj dane wejściowe do prześledzenia, aby odpowiedź powiązała konkretną ścieżkę wykonania ze zwracaną wartością.
Codestral generuje tekst. Nie dziedziczy wektorów wyszukiwania kodu z Codestral Embed, automatyzacji repozytorium z Devstral ani generowania obrazów z modelu wizualnego. Strona konkretnego modelu 2508 nie publikuje liczby parametrów ani niezależnej maksymalnej długości odpowiedzi, którą można by zapożyczyć z innego wydania. Zachowaj wskazaną edycję, kontekst programistyczny i wymagany artefakt podczas przygotowywania powtarzalnego przepływu edytora lub czatu.
Ailoot Ultra · Batch POST /v1/batches mistralai/codestral-2508:batch
mistralai/codestral-2508:batch
mistralai/codestral-2508:batchStart
Codestral 2508 to model tekstowy firmy Mistral AI do generowania kodu i uzupełniania z uwzględnieniem kontekstu. Jest zoptymalizowany do częstych zadań w edytorze, w tym uzupełniania luk w kodzie i edycji wielu wierszy, z kontekstem producenta o wielkości 128 tys. tokenów oraz udokumentowanymi funkcjami czatu, uporządkowanych wyników i narzędzi.
- Akceptowane dane wejściowe
- Tekst
- Wyniki
- Tekst
Dostępne w Ailoot · dane wejściowe i metody
Ailoot Ultra · Batch POST /v1/batches
- Wejście
text- Wyjście
text- Format wyjściowy
- JSON bezpośrednio w results[].response.body
| Pole | Typ | Wymaganie | Wartości i limity | Domyślnie |
|---|---|---|---|---|
Poleendpoint | Typstring | WymaganieWymagane | Wartości i limity /v1/chat/completions | Domyślnie— |
Polemodel | Typstring | WymaganieWymagane | Wartości i limity mistralai/codestral-2508:batch | Domyślnie— |
Polerequests | Typbatch_item[] | WymaganieWymagane | Wartości i limity Minimalna liczba elementów: 1 | Domyślnie— |
Polerequests[].custom_id | Typstring | WymaganieWymagane | Wartości i limity | Domyślnie— |
Polerequests[].body.messages | Typmessage[] | WymaganieWymagane | Wartości i limity | Domyślnie— |
Polecompletion_window | Typstring | WymaganieOpcjonalne | Wartości i limity 24h | Domyślnie— |
Poleprovider | Typobject|null | WymaganieOpcjonalne | Wartości i limity | Domyślnie— |
Polerequests[].body.model | Typstring | WymaganieOpcjonalne | Wartości i limity mistralai/codestral-2508:batch, mistralai/codestral-2508 | Domyślnie— |
Poleprovider.only | Typstring[] | WymaganieOpcjonalne | Wartości i limity mistral | Domyślnie— |
Poleprovider.allow_fallbacks | Typboolean|null | WymaganieOpcjonalne | Wartości i limity false, null | Domyślnie— |
Parametry i cykl życia metody
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktendpoint, model, requests |
Parametrmaterial_types | Kontrakttext |
Parametrrepresentation | Kontraktrequests[] bezpośrednio w żądaniu; każdy element zawiera custom_id i body |
Parametrrequest_endpoint_profile | Kontrakt/v1/chat/completions |
Parametrfile_material | KontraktWywołujący może lokalnie wczytać rzeczywisty plik JSONL w kodowaniu UTF-8 do requests[]. Nie używa się przeznaczenia przesyłanego pliku, input_file_id ani odwołania do pliku. Brak materiałów klienta lub ich pusta zawartość zatrzymują przygotowanie przed POST. |
Parametrserialization_order | Kontraktendpoint, model, provider (jeśli podano), completion_window (jeśli podano), requests na końcu |
Parametroptional_controls | Kontraktprovider.only, provider.allow_fallbacks, completion_window |
Parametrschema_scope | KontraktTreści żądań tekstowych Chat Completions w udokumentowanej strukturze Batch z danymi bezpośrednio w żądaniu. |
Cykl życia: asynchronous
GET /v1/batches/{operation_id} · Rzeczywista wartość response.id zwrócona przy pierwotnym utworzeniu; ten sam użytkownik, klucz i grupa
Cennik
Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.
- Tryb szybki
- Nie określono Gdy wybrany jest tryb szybki
- Tryb flex
- Nie określono Gdy wybrany jest tryb flex
- Maksymalna intensywność rozumowania
- Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
- Wycena jawnej pamięci podręcznej
- Niewłączone Gdy zażądano jawnej pamięci podręcznej
Stawki Ailoot
Ceny według konfiguracji
Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.
| Konfiguracja | Tabela stawek | Tokeny kontekstu, więcej niż | Tokeny kontekstu, do podanej wartości włącznie | Opłata |
|---|---|---|---|---|
| KonfiguracjaPodstawowe stawki za tokeny | Tabela stawekStawka podstawowa | Tokeny kontekstu, więcej niż— | Tokeny kontekstu, do podanej wartości włącznieBez górnej granicy | Opłata Wejście · Tokeny wejściowe $0.0003 / 1K tokenów Wyjście · Tokeny wyjściowe $0.0009 / 1K tokenów Wejście · Odczyt cache $0.00003 / 1K tokenów Wejście · Zapis do cache — / 1K tokenów Wejście · Zapis do cache, 1 godz. — / 1K tokenów |
| KonfiguracjaPrzedział długości żądania 1 | Tabela stawek— | Tokeny kontekstu, więcej niż0 | Tokeny kontekstu, do podanej wartości włącznieBez górnej granicy | Opłata Wejście · Tokeny wejściowe $0.0003 / 1K tokenów Wyjście · Tokeny wyjściowe $0.0009 / 1K tokenów Wejście · Odczyt cache $0.00003 / 1K tokenów Wejście · Zapis do cache — / 1K tokenów Wejście · Zapis do cache, 1 godz. — / 1K tokenów |
Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →
Przykładowe żądania
Ailoot Ultra · Batch
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json
from pathlib import Path
body=json.loads('{"endpoint":"/v1/chat/completions","model":"mistralai/codestral-2508:batch","requests":[{"custom_id":"req-0001","body":{"messages":[{"role":"user","content":"Hello!"}],"max_tokens":16}}]}')
Path("batch-request.json").write_text(json.dumps(body,ensure_ascii=False),encoding="utf-8")
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/batches \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @batch-request.json -D batch-response-headers.txt -o batch-create-response.json
import json, os
from pathlib import Path
from urllib.request import Request, urlopen
def prepare_requests(customer_path):
path = Path(customer_path)
if not path.is_file(): raise ValueError("Customer JSONL file is missing")
items = [json.loads(line) for line in path.read_text(encoding="utf-8").splitlines() if line.strip()]
if not items: raise ValueError("Customer JSONL contains no requests")
ids = set()
for item in items:
if set(item) != {"custom_id", "body"}: raise ValueError("Each item needs custom_id and body")
cid = item["custom_id"]
if not isinstance(cid, str) or not cid.strip() or cid in ids: raise ValueError("custom_id must be nonempty and unique")
ids.add(cid)
if not isinstance(item["body"], dict) or not item["body"].get("messages"): raise ValueError("Supply actual text messages")
supplied_model = item["body"].get("model")
if supplied_model is not None and supplied_model not in ['mistralai/codestral-2508:batch', 'mistralai/codestral-2508']: raise ValueError("body.model must be an exact documented caller or wire ID")
return {"endpoint":"/v1/chat/completions", "model":"mistralai/codestral-2508:batch", "requests":items}
if __name__ == "__main__":
material = os.environ.get("AILOOT_BATCH_REQUESTS_JSONL", "")
if not material: raise SystemExit("Set AILOOT_BATCH_REQUESTS_JSONL to your actual customer file")
body = prepare_requests(material)
key = os.environ.get("AILOOT_API_KEY", "")
if not key: raise SystemExit("Set AILOOT_API_KEY")
request = Request("https://api.ailoot.ai/v1/batches", data=json.dumps(body, ensure_ascii=False).encode("utf-8"), headers={"Authorization":"Bearer " + key, "Content-Type":"application/json"}, method="POST")
with urlopen(request) as response:
raw = response.read()
Path("batch-create-response.json").write_bytes(raw)
print(raw.decode("utf-8"))
import json
from pathlib import Path
raw = Path("batch-status-response.json").read_bytes()
response = json.loads(raw)
if response.get("status") != "completed":
raise SystemExit("Keep the original operation; read its status without resubmitting")
results = response.get("results")
if not isinstance(results, list) or not results:
raise SystemExit("Preserve the original response; completed results are missing")
Path("batch-results.jsonl").write_text("".join(json.dumps(item, ensure_ascii=False) + "\n" for item in results), encoding="utf-8")
# Preserve batch-status-response.json with aggregate usage and every result/error.
Odbieranie i zapisywanie wyników
Ailoot Ultra · Batch
JSON bezpośrednio w results[].response.body
GET /v1/batches/{operation_id}
Sprawdź status zadania
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
BATCH_OPERATION_ID="$(python3 - <<'PY_ID'
import json
from pathlib import Path
from urllib.parse import quote
response = json.loads(Path("batch-create-response.json").read_text(encoding="utf-8"))
operation = response.get("id")
if not isinstance(operation, str) or not operation: raise SystemExit("No actual original operation ID; preserve the response and do not resubmit")
print(quote(operation, safe=""))
PY_ID
)"
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/batches/$BATCH_OPERATION_ID" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o batch-status-response.json
Zachowaj wszystkie ukończone wyniki
Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.
Zachowaj pełny pierwotny JSON stanu, każdy wynik i custom_id oraz pełną treść odpowiedzi lub błędu. Zapisz ukończone wyniki z results[] jako JSONL bez filtrowania.
Jeśli trzeba sprawdzić pierwotną odpowiedź
Zachowaj pierwotny identyfikator operacji. Odpowiedź 503 result_pending_check zawiera X-Should-Retry:false; nigdy nie wysyłaj ponownie pierwotnego żądania Batch, którego wynik jest nieznany.
Pola odpowiedzi
| Pole | Typ |
|---|---|
Poleresults[].custom_id | Typstring |
Poleresults[].response.body.choices[].message.content | Typstring|null |
Poleresults[].error | Typobject|null |
Poleusage | Typobject|null |
Poleid | Typstring |
Polemodel | Typstring |
Poleendpoint | Typstring |
Polestatus | Typstring |
Polerequest_counts | Typobject |
Poleresults[].id | Typstring |
Poleresults[].response.status_code | Typinteger |
Poleresults[].response.request_id | Typstring |
Błędy i dalsze kroki
| Odpowiedź | Warunek | Następny krok |
|---|---|---|
Odpowiedź400 · invalid_request_error | WarunekNieprawidłowa udokumentowana struktura z danymi bezpośrednio w żądaniu, zduplikowane klucze, problem z tożsamością elementu lub konflikt ze skonfigurowanymi możliwościami modelu. | Następny krokPopraw wskazane pola przed wysłaniem jakiegokolwiek nowego żądania. |
Odpowiedź401 · authentication_error | WarunekNieprawidłowy klucz API. | Następny krokUżyj autoryzowanego klucza Ailoot. |
Odpowiedź403 · permission_error | WarunekGrupa Batch jest niedostępna. | Następny krokSprawdź uprawnienia klucza i grupy. |
Odpowiedź422 · invalid_request_error | WarunekBatch korzysta z rozliczania z salda; utworzenie w ramach subskrypcji jest odrzucane. | Następny krokUżyj autoryzowanej grupy rozliczanej z salda. |
Odpowiedź422 · price_unavailable | WarunekNie można wycenić danych wejściowych Batch. | Następny krokZachowaj odpowiedź; użyj danych wejściowych udokumentowanych dla tej rodziny API. |
Odpowiedź402 · billing_error | WarunekRezerwa dla Batch jest niedostępna. | Następny krokRozwiąż problem dopuszczenia żądania przed wysłaniem nowego. |
Odpowiedź503 · price_unavailable | WarunekCena metody Batch lub stawki natywne są niedostępne. | Następny krokZachowaj odpowiedź; nie zastępuj cen innymi. |
Odpowiedź503 · api_error | WarunekDokładna trasa dostawcy jest niedostępna. | Następny krokZachowaj odpowiedź na potrzeby naprawy trasy. |
Odpowiedź503 · result_pending_check | WarunekPierwotny wynik wymaga sprawdzenia; X-Should-Retry:false. | Następny krokZachowaj pierwotny operation_id/id i odczytuj stan operacji; nigdy nie powtarzaj pierwotnego POST. |
Odpowiedź404 · not_found | WarunekOperacja sprawdzania stanu Batch nie istnieje lub należy do innej tożsamości. | Następny krokUżyj dokładnego pierwotnego id oraz tego samego użytkownika, klucza i grupy. |
Aliasy
Aliasy modelu
Ailoot Ultra mistralai/codestral-2508:batch
Aliasy ścieżek metod
Użyj ścieżek metod podanych powyżej.
Powiązane ID modeli
FAQ · Mistral: Codestral 2508 (batch)
- Jakie dane wejściowe i wyniki są dostępne?
POST /v1/batches·mistralai/codestral-2508:batch:text→text- Jakich pól używa żądanie?
POST /v1/batches·mistralai/codestral-2508:batch:endpoint,model,requests,completion_window,provider- Jakie limity obowiązują?
POST /v1/batches·mistralai/codestral-2508:batch:requests.min_items:1