Source: https://ailoot.ai/models/de-ch/mistralai-codestral-2508/
Canonical: https://ailoot.ai/models/de-ch/mistralai-codestral-2508/
Language: de-ch

# Mistral: Codestral 2508

[Markdown](https://ailoot.ai/models/de-ch/mistralai-codestral-2508/index.md) · [JSON](https://ailoot.ai/models/de-ch/mistralai-codestral-2508/facts.json)

## [Mistral: Codestral 2508](https://ailoot.ai/models/de-ch/mistralai-codestral-2508/)

Codestral 2508 ist das Textmodell von Mistral AI für Codegenerierung und kontextbezogene Vervollständigung. Es ist für häufige Editoraufgaben wie das Ausfüllen von Codelücken und mehrzeilige Änderungen optimiert, mit einem Herstellerkontext von 128k und dokumentierten Chat-, Strukturierungs- und Werkzeugfunktionen.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/mistralai-codestral-2508/#method-0)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/mistralai-codestral-2508/#method-1)

Über das Modell

Diese Beschreibung erläutert die Fähigkeiten des Modells. Die über Ailoot verfügbaren Eingaben, Ausgaben und Optionen sind unten für die ausgewählte Methode aufgeführt.

Codestral 2508 ist das Programmiermodell von Mistral AI für häufige Vervollständigungs- und Generierungsaufgaben, bei denen geringe Latenz wichtig ist. Es erhält Quellcode und textliche Anforderungen und liefert Text zurück, der eine Implementierung, Ergänzung, Korrektur oder Erklärung enthalten kann. Die benannte Ausgabe 2508 konzentriert sich auf den aktuellen Bearbeitungskontext der Entwicklerin oder des Entwicklers; sie ist weder ein Embedding-Modell noch für sich allein ein vollständiger Repository-Agent.

Codevervollständigung und die Aktualisierung 2508

Der Hersteller positioniert Codestral für das Ausfüllen von Codelücken und mehrzeilige Bearbeitungen. Die Veröffentlichung beschreibt Verbesserungen des Vervollständigungsverhaltens, darunter weniger unkontrolliert weiterlaufende Generierung, sowie Verbesserungen bei der Anweisungsbefolgung und bei Codeaufgaben im Chatmodus. Diese Änderungen betreffen diese Codestral-Ausgabe; Abruf- und autonome Agentenfunktionen der umgebenden Programmierumgebung gehören zu separat benannten Komponenten.

Halten Sie bei einer Vervollständigungsaufgabe die relevante Funktionssignatur, Deklarationen und den Aufrufkontext zusammen mit der Cursorposition bereit. Geben Sie an, ob nur der fehlende Code oder eine vollständig überarbeitete Funktion gewünscht ist. Eine editorbezogene Anfrage könnte einen Schleifenrumpf verlangen, der den bestehenden Rückgabetyp bewahrt, doppelte Werte beibehält und die Eingabe des Aufrufers nicht verändert. Das Ergebnis hat dann eine konkrete Einfügestelle und ein definiertes Verhalten.

Vorbereitung für Fill-in-the-Middle

In der FIM-Schnittstelle des Herstellers liefert der Prompt den zu vervollständigenden Text oder Code, während ein optionales Suffix das Material nach der Lücke bereitstellt. Sind beide angegeben, füllt das Modell den Raum dazwischen. Ohne Suffix setzt es den Prompt fort. Dies unterscheidet sich von einer gewöhnlichen Gesprächsanfrage nach einer Codeänderung mit Erklärung; jede Vorbereitungsart legt einen anderen Ausgabevertrag fest.

Eine nützliche Eingabe zum Ausfüllen einer Lücke enthält den Funktionsanfang, den Code, der auf die Einfügung folgen muss, und relevante Typ- oder Hilfsdefinitionen. Bewahren Sie Einrückungen und Begrenzungszeichen, damit der zurückgegebene Text in das vorhandene Fragment passt. Benötigt die Aufgabe nur den fehlenden Rumpf, fordern Sie diesen statt einer Neufassung der gesamten Datei an. Eine separate Chatfrage kann erklären, warum das vervollständigte Fragment die Anforderung erfüllt.

Die offizielle FIM-Dokumentation erlaubt ein Budget für Ausgabetokens und verlangt, dass Prompt und dieses Budget zusammen innerhalb des Modellkontexts bleiben. Sie dokumentiert auch Stoppsequenzen und das Streaming erzeugter Inhalte. Wählen Sie einen Vervollständigungsablauf, wenn das Ergebnis in die Codelücke passen muss, und einen Gesprächsablauf, wenn Code zusammen mit einer Erklärung verlangt wird.

Kontext und unterstützende Funktionen

Die Modellseite nennt ein Kontextfenster von 128k. Nutzen Sie den Kontext für den Quellcode und die Deklarationen, die die beabsichtigte Änderung bestimmen, und halten Sie die eigentliche Bearbeitungsaufgabe ausdrücklich fest. Geben Sie für eine Fehlerbehebung die betroffene Funktion, eine konkrete fehlerauslösende Eingabe, das erwartete Ergebnis sowie den Fehler oder das beobachtete Verhalten an. Fordern Sie die vorgeschlagene Korrektur getrennt von ihrer Erklärung und ihren Beispielen an.

Die Seite nennt neben Chat und FIM auch strukturierte Ausgaben, Funktionsaufrufe, vorhergesagte Ausgaben, Dokumentfragen, Antwortpräfixe und Stapelverarbeitung. Definieren Sie für eine strukturierte Codeprüfung Felder wie das betroffene Symbol, die beobachtete Abweichung, die vorgeschlagene Änderung und die noch zu klärende Annahme. Mistrals Anleitung für strukturierte Ausgaben unterscheidet den JSON-Modus von einem benutzerdefinierten Schema; das gewünschte JSON-Format wird dabei im Prompt angegeben.

Vorhergesagte Ausgaben sind für Inhalte gedacht, bei denen grosse Teile der Antwort bereits bekannt sind. Sie lassen sich bei der Neugenerierung eines Dokuments oder einer Codedatei mit einer begrenzten Änderung einsetzen, während der übrige Inhalt erhalten bleibt. Geben Sie die genaue Änderung und das zu bewahrende Material an. Ein Antwortpräfix liefert dagegen einen bekannten Anfang, von dem aus die Generierung fortgesetzt wird; es unterscheidet sich sowohl von einem bekannten vollständigen Inhalt als auch von einem FIM-Suffix.

Eine Dokumentationsfrage kann den Dokumentverarbeitungsablauf des Herstellers nutzen, um Text und Struktur per OCR vor der Sprachmodellanalyse aufzubereiten. Stellen Sie bereits als Text verfügbares Programmiermaterial in Form der relevanten Dokumentationspassagen bereit und fragen Sie, welche Bedingung die Implementierung bestimmt. Halten Sie jede extrahierte Anforderung mit ihrem Quellabschnitt verknüpft, damit erzeugter Code oder Erklärung mit der bereitgestellten Spezifikation verbunden bleibt.

Werkzeuge und praktische Ergebnisse

Funktionsaufrufe erlauben der Anwendung, beschriebene Vorgänge und ihre Parameter bereitzustellen. Das Modell bereitet einen Aufruf vor, die Anwendung führt ihn aus, und das zurückgegebene Ergebnis wird zum Kontext für die nächste Antwort. Ein Programmierassistent kann durch diesen Zyklus ein Abfrage- oder Rechenergebnis erhalten; das Kompilieren, Testen oder Anwenden einer vorgeschlagenen Änderung erfordert jedoch weiterhin die umgebende Entwicklungsumgebung.

Definieren Sie für eine praktische Korrektur die öffentliche Schnittstelle, die kompatibel bleiben muss, und fordern Sie das überarbeitete Fragment, eine knappe Erklärung sowie Beispieleingaben mit erwarteten Ausgaben an. Geben Sie für eine generierte Funktion die zulässigen Typen und Randbedingungen an. Stellen Sie für eine Erklärung die nachzuverfolgende Eingabe bereit, damit die Antwort einen konkreten Ausführungspfad mit dem zurückgegebenen Wert verbindet.

Codestral erzeugt Text. Es übernimmt weder Codesuchvektoren von Codestral Embed noch Repository-Automatisierung von Devstral oder Bilderzeugung von einem visuellen Modell. Die konkrete Modellseite zu 2508 veröffentlicht weder eine Parameterzahl noch eine eigenständige maximale Antwortlänge, die aus einer anderen Veröffentlichung übernommen werden könnte. Bewahren Sie die benannte Ausgabe, den Programmierkontext und das erforderliche Artefakt, wenn Sie einen wiederholbaren Editor- oder Chatablauf vorbereiten.

Praktische Aufgabe

### Praktische Aufgabe

Technisches Beispiel auf Englisch

```
Fill a nonmutating loop body

Complete only the missing body in this Python function: 'def doubled(values):
    result = []
    # missing body
    return result'. It must append twice every input value, preserve order and duplicate values, and leave values unchanged. Return the indented insertion followed by assert tests for [2, 2, -1] and []. This is a chat completion request, not a FIM transport request.
```

#### Erwartetes Ergebnis

```
Only the missing indented loop body, then two tests verifying [4, 4, -2] and an empty result.
```

#### Ergebnis prüfen

```
The insertion fits before return result and never deduplicates or mutates the input.
```

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `mistralai/codestral-2508`

[`mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/#m=mistralai%2Fcodestral-2508&route=Ultra&caller=mistralai%2Fcodestral-2508&fmt=chat)

Mistral /`mistralai/codestral-2508`

### Einstieg

Codestral 2508 ist das Textmodell von Mistral AI für Codegenerierung und kontextbezogene Vervollständigung. Es ist für häufige Editoraufgaben wie das Ausfüllen von Codelücken und mehrzeilige Änderungen optimiert, mit einem Herstellerkontext von 128k und dokumentierten Chat-, Strukturierungs- und Werkzeugfunktionen.

Zulässige Eingaben

Text

Ergebnisse

Text

### In Ailoot verfügbar · Eingaben und Methoden

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Eingabe

`text`

Ausgabe

`text`

Ausgabeformat

json oder SSE

| Feld | Typ | Anforderung | Werte und Limits | Standard |
| --- | --- | --- | --- | --- |
| Feld`model` | Typ`string` | AnforderungErforderlich | Werte und Limits mistralai/codestral-2508 | Standard— |
| Feld`messages` | Typ`message[]` | AnforderungErforderlich | Werte und Limits Mindestanzahl Elemente: 1 | Standard— |
| Feld`messages[].role` | Typ`string` | AnforderungErforderlich | Werte und Limits Beispiele: system, user, assistant, tool, function Bedingungen: Diese Rollen sind in den Kompatibilitätstypen des Quellcodes ausdrücklich dargestellt; der genaue Rollenumfang bleibt modellspezifisch. Modellabhängig | Standard— |
| Feld`messages[].content` | Typ`string\|content_part[]\|null` | AnforderungOptional | Werte und Limits | Standard— |
| Feld`messages[].tool_calls` | Typ`tool_call[]` | AnforderungOptional | Werte und Limits | Standard— |
| Feld`messages[].tool_call_id` | Typ`string` | AnforderungOptional | Werte und Limits Gilt, wenn: role=tool; die tatsächlich zurückgegebene ID verwenden | Standard— |
| Feld`messages[].name` | Typ`string` | AnforderungOptional | Werte und Limits | Standard— |
| Feld`messages[].reasoning_content` | Typ`string` | AnforderungOptional | Werte und Limits Gilt, wenn: Tatsächlich zurückgegebene Reasoning-Daten erneut übermitteln, sofern dieses Modell sie verwendet | Standard— |
| Feld`messages[].reasoning_details` | Typ`object\|array` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`max_tokens` | Typ`integer` | AnforderungOptional | Werte und Limits Minimum: 1 Modellabhängig | Standard— |
| Feld`max_completion_tokens` | Typ`integer` | AnforderungOptional | Werte und Limits Minimum: 1 Modellabhängig | Standard— |
| Feld`stream` | Typ`boolean` | AnforderungOptional | Werte und Limits | Standardfalse |
| Feld`stream_options.include_usage` | Typ`boolean` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`temperature` | Typ`number` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`top_p` | Typ`number` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`stop` | Typ`string\|string[]` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`tools` | Typ`function_tool[]` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`tools[].type` | Typ`string` | AnforderungOptional | Werte und Limits function Modellabhängig | Standard— |
| Feld`tools[].function.name` | Typ`string` | AnforderungErforderlich | Werte und Limits Gilt, wenn: Funktionswerkzeug bereitgestellt | Standard— |
| Feld`tools[].function.description` | Typ`string` | AnforderungOptional | Werte und Limits | Standard— |
| Feld`tools[].function.parameters` | Typ`JSON_schema` | AnforderungOptional | Werte und Limits | Standard— |
| Feld`tool_choice` | Typ`string\|object` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`parallel_tool_calls` | Typ`boolean` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`response_format` | Typ`object` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`reasoning_effort` | Typ`string` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`reasoning` | Typ`object` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`service_tier` | Typ`string` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`instructions` | Typ`string` | AnforderungOptional | Werte und Limits Kompatibilitätsfeld | Standard— |
| Feld`functions` | Typ`function[]` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`function_call` | Typ`string\|object` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`prompt_cache_options` | Typ`object` | AnforderungOptional | Werte und Limits Modellabhängig | Standard— |
| Feld`modalities` | Typ`string[]` | AnforderungOptional | Werte und Limits text | Standard— |
| Feld`provider` | Typ`object` | AnforderungOptional | Werte und Limits Bedingungen: provider.options wird auf dieser Ultra-Textroute abgelehnt | Standard— |
| Feld`cache_control.ttl` | Typ`string` | AnforderungOptional | Werte und Limits Bedingungen: 1h wird in den tatsächlichen Prompt-Cache-Feldern abgelehnt | Standard— |

Kombinationen von Eingabematerialien

**Text** · UTF8-Text

`messages[].content`

Methodenparameter und Lebenszyklus

| Parameter | Vertrag |
| --- | --- |
| Parameter`content_type` | Vertragapplication/json |
| Parameter`required` | Vertragmodel, messages |
| Parameter`material_types` | Vertragtext |
| Parameter`messages` | VertragNachrichtenarray mit role/content-Struktur |
| Parameter`file_material` | VertragTatsächliches UTF-8-Dokument als wörtlicher Text eingefügt; keine Datei-ID abgeleitet |
| Parameter`optional_controls` | Vertragstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | VertragModellspezifisch; benutzerseitige Funktionswerkzeuge unterscheiden sich von gehosteten Werkzeugen |
| Parameter`output_modalities` | Vertragtext |
| Parameter`hosted_operations` | Vertragfalse |
| Parameter`multimodal_input_binding` | Vertragnull |

Lebenszyklus: `synchronous_or_streamed`

Die genaue Modell-ID zusammen mit messages senden.

Die Kontextlänge ist keine Ausgabeobergrenze.

Eine Textdatei kann wörtlichen Text liefern; Bild-, Audio- und Dateiobjekteingaben benötigen eine exakte Zuordnung.

### Tarife

Tarifangaben erweitern die Anfrageoptionen nicht. Unterstützte Parameter stehen bei der ausgewählten Methode.

Schnellmodus

Standardtarif Wenn der Schnellmodus ausgewählt ist

Flex-Modus

Standardtarif Wenn der Modus flex ausgewählt ist

Maximaler Denkaufwand

Standardtarif Wenn beim maximalen Denkaufwand die Standardanpassung (default) verwendet wird

#### Ailoot-Tarife

#### Preise nach Konfiguration

Ordnen Sie jede Gebühr den angezeigten Bedingungen zu. Verwenden Sie für jede Gruppe alternativer Konfigurationen einen Tarif.

| Konfiguration | Tarifstaffel | Kontexttoken, mehr als | Kontexttoken, bis einschliesslich | Gebühr |
| --- | --- | --- | --- | --- |
| KonfigurationBasistarife für Token | TarifstaffelGrundtarif | Kontexttoken, mehr als— | Kontexttoken, bis einschliesslichKeine Obergrenze | Gebühr Eingabe · Eingabetoken **$0.0006** / 1K Tokens Ausgabe · Ausgabetoken **$0.0018** / 1K Tokens Eingabe · Cache lesen **$0.00006** / 1K Tokens Eingabe · Cache schreiben **—** / 1K Tokens Eingabe · Cache schreiben, 1 Stunde **—** / 1K Tokens |
| KonfigurationAnfragelängenstufe 1 | Tarifstaffel— | Kontexttoken, mehr als0 | Kontexttoken, bis einschliesslichKeine Obergrenze | Gebühr Eingabe · Eingabetoken **$0.0006** / 1K Tokens Ausgabe · Ausgabetoken **$0.0018** / 1K Tokens Eingabe · Cache lesen **$0.00006** / 1K Tokens Eingabe · Cache schreiben **—** / 1K Tokens Eingabe · Cache schreiben, 1 Stunde **—** / 1K Tokens |

Ailoot reserviert vor einer Anfrage einen geschätzten Betrag. Nach dem Ergebnis rechnet Ailoot die endgültige Gebühr anhand des gemessenen Verbrauchs ab. Bei Streaming erfolgt die Abrechnung anhand des abschliessenden Verbrauchsdatensatzes. [So funktionieren Reservierung und Abrechnung →](https://ailoot.ai/docs/de-ch/billing/reserve/)

### Beispielanfragen

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPython-Stream

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "mistralai/codestral-2508", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='mistralai/codestral-2508',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='mistralai/codestral-2508',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Ergebnisse abrufen und speichern

#### Ailoot Ultra · OpenAI Chat

json oder SSE

##### Alle fertiggestellten Ergebnisse aufbewahren

Bewahren Sie jede vollständig zurückgegebene Antwort, Datei und jeden Inhaltsteil auf.

Alle Antwortvarianten mit ihren Inhalten, Werkzeugaufrufen und Reasoning-Daten beibehalten. In SSE die Deltas nach Varianten- und Werkzeugindex zusammensetzen; endgültigen Beendigungsgrund und Verbrauchsdaten beibehalten.

##### Wenn die ursprüngliche Antwort geprüft werden muss

Anfrage- und Antwort-IDs sowie Header beibehalten. Eine allgemeine URL zum Abrufen von Textaufträgen wird nicht angegeben.

Antwortfelder

| Feld | Typ |
| --- | --- |
| Feld`choices[].index` | Typinteger |
| Feld`choices[].message.content` | Typstring\|null |
| Feld`choices[].message.tool_calls` | Typtool\_call\[\] |
| Feld`choices[].message.reasoning_content` | Typstring |
| Feld`choices[].message.reasoning_details` | Typobject\|array |
| Feld`choices[].finish_reason` | Typstring\|null |
| Feld`usage` | Typobject |

Fehler und nächste Schritte

| Antwort | Bedingung | Nächster Schritt |
| --- | --- | --- |
| Antwort400 · `invalid_request_error` | BedingungPflichtfelder, Darstellung des Eingabematerials oder Parameterwert ungültig | Nächster SchrittDie angegebenen Felder vor einer neuen Erstellungsanfrage korrigieren. |

### Aliasnamen

#### Modellaliasnamen

**Ailoot Ultra** [`mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/#m=mistralai%2Fcodestral-2508&route=Ultra&caller=mistralai%2Fcodestral-2508&fmt=chat)

#### Aliasnamen für Methodenpfade

Verwenden Sie die oben angezeigten Methodenpfade.

#### Zugehörige Aufrufer-IDs

[`mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/#m=mistralai%2Fcodestral-2508&route=Ultra&caller=mistralai%2Fcodestral-2508&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `mistralai/codestral-2508`

[`mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/#m=mistralai%2Fcodestral-2508&route=Ultra&caller=mistralai%2Fcodestral-2508&fmt=messages)

Mistral /`mistralai/codestral-2508`

### Einstieg

Codestral 2508 ist das Textmodell von Mistral AI für Codegenerierung und kontextbezogene Vervollständigung. Es ist für häufige Editoraufgaben wie das Ausfüllen von Codelücken und mehrzeilige Änderungen optimiert, mit einem Herstellerkontext von 128k und dokumentierten Chat-, Strukturierungs- und Werkzeugfunktionen.

Zulässige Eingaben

Text

Ergebnisse

json · sse

### In Ailoot verfügbar · Eingaben und Methoden

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Eingabe

`text`

Ausgabe

`json`, `sse`

Ausgabeformat

JSON oder SSE

| Feld | Typ | Anforderung | Werte und Limits | Standard |
| --- | --- | --- | --- | --- |
| Feld`model` | Typ`string` | AnforderungErforderlich | Werte und Limits mistralai/codestral-2508 | Standard— |
| Feld`messages` | Typ`message[]` | AnforderungErforderlich | Werte und Limits | Standard— |
| Feld`messages[].role` | Typ`string` | AnforderungErforderlich | Werte und Limits user, assistant | Standard— |
| Feld`messages[].content` | Typ`string` | AnforderungErforderlich | Werte und Limits | Standard— |
| Feld`max_tokens` | Typ`integer` | AnforderungErforderlich | Werte und Limits | Standard— |
| Feld`stream` | Typ`boolean` | AnforderungOptional | Werte und Limits | Standardfalse |

Kombinationen von Eingabematerialien

**Text** · UTF-8-Text

`Zeichenfolge messages[].content`

Methodenparameter und Lebenszyklus

| Parameter | Vertrag |
| --- | --- |
| Parameter`content_type` | Vertragapplication/json |
| Parameter`required` | Vertragmodel, messages, max\_tokens |
| Parameter`optional_controls` | Vertragstream |
| Parameter`material_types` | Vertragtext |
| Parameter`text_file_material` | VertragDas tatsächliche UTF-8-Dokument lesen und seinen Text in die angegebene Zeichenfolge für Eingabe oder Nachrichteninhalt einfügen. |

Lebenszyklus: `synchronous_or_streamed`

### Tarife

Tarifangaben erweitern die Anfrageoptionen nicht. Unterstützte Parameter stehen bei der ausgewählten Methode.

Schnellmodus

Standardtarif Wenn der Schnellmodus ausgewählt ist

Flex-Modus

Standardtarif Wenn der Modus flex ausgewählt ist

Maximaler Denkaufwand

Standardtarif Wenn beim maximalen Denkaufwand die Standardanpassung (default) verwendet wird

#### Ailoot-Tarife

#### Preise nach Konfiguration

Ordnen Sie jede Gebühr den angezeigten Bedingungen zu. Verwenden Sie für jede Gruppe alternativer Konfigurationen einen Tarif.

| Konfiguration | Tarifstaffel | Kontexttoken, mehr als | Kontexttoken, bis einschliesslich | Gebühr |
| --- | --- | --- | --- | --- |
| KonfigurationBasistarife für Token | TarifstaffelGrundtarif | Kontexttoken, mehr als— | Kontexttoken, bis einschliesslichKeine Obergrenze | Gebühr Eingabe · Eingabetoken **$0.0006** / 1K Tokens Ausgabe · Ausgabetoken **$0.0018** / 1K Tokens Eingabe · Cache lesen **$0.00006** / 1K Tokens Eingabe · Cache schreiben **—** / 1K Tokens Eingabe · Cache schreiben, 1 Stunde **—** / 1K Tokens |
| KonfigurationAnfragelängenstufe 1 | Tarifstaffel— | Kontexttoken, mehr als0 | Kontexttoken, bis einschliesslichKeine Obergrenze | Gebühr Eingabe · Eingabetoken **$0.0006** / 1K Tokens Ausgabe · Ausgabetoken **$0.0018** / 1K Tokens Eingabe · Cache lesen **$0.00006** / 1K Tokens Eingabe · Cache schreiben **—** / 1K Tokens Eingabe · Cache schreiben, 1 Stunde **—** / 1K Tokens |

Ailoot reserviert vor einer Anfrage einen geschätzten Betrag. Nach dem Ergebnis rechnet Ailoot die endgültige Gebühr anhand des gemessenen Verbrauchs ab. Bei Streaming erfolgt die Abrechnung anhand des abschliessenden Verbrauchsdatensatzes. [So funktionieren Reservierung und Abrechnung →](https://ailoot.ai/docs/de-ch/billing/reserve/)

### Beispielanfragen

#### Ailoot Ultra · Anthropic Messages

Vollständiger minimaler JSON-Bodycurl · eigenes UTF-8-Dokument verwendenPython · das vollständige Ergebnis speichern

```json
{
  "model": "mistralai/codestral-2508",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'mistralai/codestral-2508', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'mistralai/codestral-2508', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Ergebnisse abrufen und speichern

#### Ailoot Ultra · Anthropic Messages

JSON oder SSE

##### Alle fertiggestellten Ergebnisse aufbewahren

Bewahren Sie jede vollständig zurückgegebene Antwort, Datei und jeden Inhaltsteil auf.

Alle Inhaltsblöcke, Thinking-Signaturen und tatsächlichen Werkzeugaufruf-IDs beibehalten. Alle SSE-Blockdeltas zusammensetzen; der erste Textblock ist nicht die vollständige Ausgabe.

##### Wenn die ursprüngliche Antwort geprüft werden muss

Anfrage- und Antwort-IDs sowie Header beibehalten. Eine allgemeine URL zum Abrufen von Textaufträgen wird nicht angegeben.

Antwortfelder

| Feld | Typ |
| --- | --- |
| Feld`id` | Typstring |
| Feld`model` | Typstring |
| Feld`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Feld`stop_reason` | Typstring\|null |
| Feld`usage` | Typobject |

Fehler und nächste Schritte

| Antwort | Bedingung | Nächster Schritt |
| --- | --- | --- |
| Antwort400 · `invalid_request_error` | BedingungPflichtfelder, Darstellung des Eingabematerials oder Parameterwert ungültig | Nächster SchrittDie angegebenen Felder vor einer neuen Erstellungsanfrage korrigieren. |

### Aliasnamen

#### Modellaliasnamen

**Ailoot Ultra** [`mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/#m=mistralai%2Fcodestral-2508&route=Ultra&caller=mistralai%2Fcodestral-2508&fmt=messages)

#### Aliasnamen für Methodenpfade

Verwenden Sie die oben angezeigten Methodenpfade.

#### Zugehörige Aufrufer-IDs

[`mistralai/codestral-2508`](https://ailoot.ai/models/de-ch/#m=mistralai%2Fcodestral-2508&route=Ultra&caller=mistralai%2Fcodestral-2508&fmt=messages)

FAQ · Mistral: Codestral 2508

Welche Eingaben und Ergebnisse sind verfügbar?

`POST /v1/chat/completions` · `mistralai/codestral-2508`: `text` → `text` `POST /v1/messages` · `mistralai/codestral-2508`: `text` → `json`, `sse`

Welche Felder verwendet die Anfrage?

`POST /v1/chat/completions` · `mistralai/codestral-2508`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/messages` · `mistralai/codestral-2508`: `model`, `messages`, `max_tokens`, `stream`

Welche Grenzen gelten?

`POST /v1/chat/completions` · `mistralai/codestral-2508`: `messages.min_items`: `1`

Verbinden Sie Ailoot mit Claude Code, OpenCode, Hermes oder Ihrer eigenen Anwendung.

## Das Unternehmen und sein Projektportfolio

Das Unternehmen und sein Projektportfolio: Millionen von Kunden; monatliche Umsätze in Milliardenhöhe.

## Tokens mit Rabatt kaufen.

Aborabatt für regelmäßige Arbeit. Aktionscodes bieten bis 50% beim Tokenkauf.

Abo

Wählen Sie einen Tarif mit Rabatt für Ihre regelmäßigen Anfragen.

Aktionscode bis 50%

Geben Sie den Code beim Kauf ein. Der Preis wird nach den gültigen Aktionsbedingungen berechnet.

Ausgaben in der Historie

Modell, Tokens und Betrag werden für jede Anfrage gespeichert.

[Abo wählen](https://ailoot.ai/docs/de-ch/billing/subscriptions/) · [Modellpreise ansehen](https://ailoot.ai/models/de-ch/)

## Verbinden Sie die API mit dem Produkt, das Sie verkaufen.

SaaS, Anwendungen und Bots nach dem offiziellen Angebot und Lizenzvertrag von Ailoot. Fordern Sie für den Weiterverkauf eine Reseller-Lizenz an.

Kommerzielle Anwendung

Integrieren Sie Text-, Bild-, Video- und Audioerzeugung in kostenpflichtige Funktionen Ihres Dienstes.

Reseller-Lizenz

Senden Sie Projektbeschreibung und Zugangsmodell. Fordern Sie schriftliche Nutzungs- und Weiterverkaufsbedingungen an.

Dokumente auf der Website

Offizielles Angebot, Lizenzvertrag und Datenschutzerklärung sind vor der Verbindung zugänglich.

[Reseller-Lizenz anfordern](mailto:support@ailoot.ai) · [Offizielles Angebot und Lizenzvertrag](https://ailoot.ai/legal/offer?lang=de-ch)

## Ailoot · Das Unternehmen und sein Projektportfolio





Ailoot baut auf bewährte Betriebserfahrung, einen großen Kundenstamm, stabilen Service und kontinuierliche KPI-Kontrolle.





Das Unternehmen und sein Projektportfolio: Millionen von Kunden; monatliche Umsätze in Milliardenhöhe.





Ailoot nutzt diese Betriebserfahrung für den API-Zugang zu KI-Funktionen in Kundenprodukten, Agenten, Anwendungen und Automatisierungen.
