modelos

Mistral: Codestral 2508

Markdown · JSON

Mistral: Codestral 2508

Codestral 2508 es el modelo de texto de Mistral AI para generación de código y autocompletado que tiene en cuenta el contexto. Está optimizado para tareas frecuentes del editor, incluidas la inserción de código en huecos y la edición de varias líneas, con un contexto de 128k según el fabricante y funciones documentadas de chat, salida estructurada y herramientas.

Sobre el modelo

Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.

Codestral 2508 es el modelo de programación de Mistral AI para tareas frecuentes de autocompletado y generación sensibles a la latencia. Recibe código fuente y requisitos textuales y devuelve texto que puede contener una implementación, una continuación, una corrección o una explicación. La edición 2508 se centra en el contexto de edición actual del desarrollador; por sí sola no es un modelo de embeddings ni un agente completo para repositorios.

Autocompletado de código y actualización 2508

El fabricante orienta Codestral al autocompletado de huecos, denominado fill-in-the-middle, y a la edición de varias líneas. La versión describe mejoras en el comportamiento del autocompletado, incluida la reducción de generaciones que se prolongan sin control, junto con mejoras en el seguimiento de instrucciones y las tareas de código en modo chat. Estos cambios corresponden a esta edición de Codestral; las funciones de recuperación y de agentes autónomos del entorno de programación pertenecen a componentes con nombres independientes.

Para una tarea de autocompletado, conserva la firma de la función, las declaraciones y el contexto de las llamadas pertinentes junto con la posición del cursor. Identifica si el resultado deseado es únicamente el código que falta o una función revisada completa. Una solicitud propia de un editor puede pedir el cuerpo de un bucle que conserve el tipo de retorno existente, mantenga los valores duplicados y no modifique la entrada del llamador. Así, el resultado tiene un punto de inserción concreto y un comportamiento definido.

Preparación para completar un hueco

En la interfaz FIM del fabricante, el prompt proporciona el texto o código que se debe completar y un sufijo opcional aporta el material situado después del hueco. Cuando se proporcionan ambos, el modelo rellena el espacio entre ellos. Sin sufijo, continúa a partir del prompt. Esto difiere de una solicitud conversacional ordinaria que pide un cambio de código y una explicación; cada forma de preparación define un contrato de salida diferente.

Una entrada útil para completar un hueco incluye el comienzo de la función, el código que debe seguir a la inserción y cualquier definición pertinente de tipos o funciones auxiliares. Conserva la sangría y los delimitadores para que el texto devuelto encaje en el fragmento existente. Si la tarea necesita únicamente el cuerpo que falta, pide ese cuerpo en lugar de reescribir todo el archivo. Una pregunta de chat independiente puede explicar por qué el fragmento completado cumple el requisito.

La documentación oficial de FIM permite un presupuesto de tokens de salida y exige que el prompt más ese presupuesto permanezcan dentro del contexto del modelo. También documenta secuencias de parada y transmisión del contenido generado. Elige un flujo de autocompletado cuando el resultado deba encajar en el hueco del código, y un flujo conversacional cuando la tarea pida código acompañado de una explicación.

Contexto y funciones complementarias

La página del modelo indica una ventana de contexto de 128k. Utiliza el contexto para conservar el código fuente y las declaraciones que determinan el cambio previsto, y mantén explícita la tarea de edición real. Para corregir un error, proporciona la función afectada, una entrada concreta que falle, el resultado esperado y el error o comportamiento observado. Solicita la corrección propuesta por separado de su explicación y sus ejemplos.

La página también enumera salidas estructuradas, llamadas a funciones, salidas predichas, preguntas y respuestas sobre documentos, prefijos de respuesta y procesamiento por lotes junto con las capacidades de chat y FIM. Para una revisión de código estructurada, define campos como el símbolo afectado, la discrepancia observada, el cambio propuesto y la suposición que aún necesita aclaración. Las indicaciones de Mistral sobre salida estructurada distinguen el modo JSON de un esquema personalizado, y requieren indicar en el prompt el formato JSON deseado.

Las salidas predichas están pensadas para contenido del que ya se conoce una parte sustancial de la respuesta. Pueden utilizarse al regenerar un documento o archivo de código con una edición limitada, manteniendo el resto del contenido. Especifica el cambio exacto y el material que se debe conservar. Un prefijo de respuesta, en cambio, proporciona un comienzo conocido a partir del cual continúa la generación; es distinto tanto de un cuerpo completo conocido como de un sufijo FIM.

Una pregunta sobre documentación puede utilizar el flujo de procesamiento documental del fabricante para preparar el texto y la estructura mediante OCR antes del análisis del modelo lingüístico. Para material de programación ya disponible como texto, proporciona los pasajes pertinentes de la documentación y pregunta qué condición rige la implementación. Mantén cada requisito extraído asociado a su sección de origen para que el código generado o la explicación sigan conectados con la especificación suministrada.

Herramientas y resultados prácticos

Las llamadas a funciones permiten que la aplicación proporcione operaciones descritas y sus parámetros. El modelo prepara una llamada, la aplicación la ejecuta y el resultado devuelto pasa a formar parte del contexto de la siguiente respuesta. Un asistente de código puede recibir un resultado de consulta o de cálculo mediante ese ciclo, pero compilar, probar o aplicar un cambio propuesto sigue requiriendo el entorno de desarrollo que lo rodea.

Para una corrección práctica, define la interfaz pública que debe seguir siendo compatible y solicita el fragmento revisado, una explicación concisa y entradas de ejemplo con sus salidas esperadas. Para generar una función, indica los tipos aceptados y los casos límite. Para una explicación, proporciona la entrada que se debe seguir paso a paso, de modo que la respuesta relacione una ruta de ejecución concreta con el valor devuelto.

Codestral produce texto. No hereda los vectores de búsqueda de código de Codestral Embed, la automatización de repositorios de Devstral ni la generación de imágenes de un modelo visual. La página específica de Codestral 2508 no publica un número de parámetros ni una longitud máxima independiente de respuesta que se pueda tomar de otra versión. Conserva la edición indicada, el contexto de programación y el resultado requerido al preparar un flujo repetible de editor o chat.

Tarea práctica

Tarea práctica

Ejemplo técnico en inglés

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.

Resultado esperado

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

Comprobar el resultado

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

Mistral /mistralai/codestral-2508

Primeros pasos

Codestral 2508 es el modelo de texto de Mistral AI para generación de código y autocompletado que tiene en cuenta el contexto. Está optimizado para tareas frecuentes del editor, incluidas la inserción de código en huecos y la edición de varias líneas, con un contexto de 128k según el fabricante y funciones documentadas de chat, salida estructurada y herramientas.

Entradas aceptadas
Texto
Resultados
Texto

Disponible en Ailoot · entradas y métodos

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Tipos de entrada
text
Tipos de salida
text
Formato de salida
json o SSE
CampoTipoRequisitoValores y límitesPredeterminado
CampomodelTipostringRequisitoObligatorioValores y límites
mistralai/codestral-2508
Predeterminado—
CampomessagesTipomessage[]RequisitoObligatorioValores y límites
Número mínimo de elementos: 1
Predeterminado—
Campomessages[].roleTipostringRequisitoObligatorioValores y límites
Ejemplos: system, user, assistant, tool, function
Condiciones: Estos roles están representados explícitamente por los tipos de compatibilidad del código fuente; el conjunto exacto de roles depende del modelo.
Depende del modelo
Predeterminado—
Campomessages[].contentTipostring|content_part[]|nullRequisitoOpcionalValores y límitesPredeterminado—
Campomessages[].tool_callsTipotool_call[]RequisitoOpcionalValores y límitesPredeterminado—
Campomessages[].tool_call_idTipostringRequisitoOpcionalValores y límites
Se aplica cuando: role=tool; utiliza el ID real devuelto
Predeterminado—
Campomessages[].nameTipostringRequisitoOpcionalValores y límitesPredeterminado—
Campomessages[].reasoning_contentTipostringRequisitoOpcionalValores y límites
Se aplica cuando: Devuelve en los turnos siguientes el razonamiento realmente recibido cuando este modelo lo utilice
Predeterminado—
Campomessages[].reasoning_detailsTipoobject|arrayRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campomax_tokensTipointegerRequisitoOpcionalValores y límites
Mínimo: 1
Depende del modelo
Predeterminado—
Campomax_completion_tokensTipointegerRequisitoOpcionalValores y límites
Mínimo: 1
Depende del modelo
Predeterminado—
CampostreamTipobooleanRequisitoOpcionalValores y límitesPredeterminadofalse
Campostream_options.include_usageTipobooleanRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampotemperatureTiponumberRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campotop_pTiponumberRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampostopTipostring|string[]RequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampotoolsTipofunction_tool[]RequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campotools[].typeTipostringRequisitoOpcionalValores y límites
function
Depende del modelo
Predeterminado—
Campotools[].function.nameTipostringRequisitoObligatorioValores y límites
Se aplica cuando: herramienta de función proporcionada
Predeterminado—
Campotools[].function.descriptionTipostringRequisitoOpcionalValores y límitesPredeterminado—
Campotools[].function.parametersTipoJSON_schemaRequisitoOpcionalValores y límitesPredeterminado—
Campotool_choiceTipostring|objectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campoparallel_tool_callsTipobooleanRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Camporesponse_formatTipoobjectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Camporeasoning_effortTipostringRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CamporeasoningTipoobjectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Camposervice_tierTipostringRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampoinstructionsTipostringRequisitoOpcionalValores y límites
Campo de compatibilidad
Predeterminado—
CampofunctionsTipofunction[]RequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campofunction_callTipostring|objectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campoprompt_cache_optionsTipoobjectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampomodalitiesTipostring[]RequisitoOpcionalValores y límites
text
Predeterminado—
CampoproviderTipoobjectRequisitoOpcionalValores y límites
Condiciones: provider.options se rechaza en esta ruta de texto Ultra
Predeterminado—
Campocache_control.ttlTipostringRequisitoOpcionalValores y límites
Condiciones: 1h se rechaza en los campos reales de caché de instrucciones
Predeterminado—
Combinaciones de materiales de entrada

Texto · Texto UTF8

messages[].content

Parámetros del método y ciclo de vida
ParámetroContrato
Parámetrocontent_typeContratoapplication/json
ParámetrorequiredContratomodel, messages
Parámetromaterial_typesContratotext
ParámetromessagesContratomatriz de mensajes con estructura role/content
Parámetrofile_materialContratodocumento real en UTF-8 insertado como texto literal; no se deduce ningún ID de archivo
Parámetrooptional_controlsContratostream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parámetrocontrol_scopeContratodepende del modelo; las herramientas de funciones del usuario difieren de las herramientas alojadas
Parámetrooutput_modalitiesContratotext
Parámetrohosted_operationsContratofalse
Parámetromultimodal_input_bindingContratonull

Ciclo de vida: synchronous_or_streamed

Envía el ID exacto del modelo junto con messages.

La longitud del contexto no es un límite máximo de salida.

Un archivo de texto puede aportar texto literal; las entradas de imagen, audio u objetos de archivo requieren una vinculación exacta.

Planes

Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.

Modo rápido
Tarifa estándar Cuando se selecciona el modo rápido
Modo flex
Tarifa estándar Cuando se selecciona el modo flex
Esfuerzo máximo de razonamiento
Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)

Tarifas de Ailoot

Precios por configuración

Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.

ConfiguraciónTabla de tarifasTokens de contexto, más deTokens de contexto, hasta inclusiveCargo
ConfiguraciónTarifas base por tokenTabla de tarifasTarifa baseTokens de contexto, más de—Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.0006 / 1K tokens
Salida · Tokens de salida $0.0018 / 1K tokens
Entrada · Lectura de caché $0.00006 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens
ConfiguraciónTramo 1 por longitud de la solicitudTabla de tarifas—Tokens de contexto, más de0Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.0006 / 1K tokens
Salida · Tokens de salida $0.0018 / 1K tokens
Entrada · Lectura de caché $0.00006 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens

Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →

Solicitudes de ejemplo

Ailoot Ultra · OpenAI Chat

curlPython SDKFlujo en Python
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
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"))
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")

Recibir y guardar resultados

Ailoot Ultra · OpenAI Chat

json o SSE

Conserva todos los resultados completados

Conserva todas las respuestas, archivos y partes de contenido completos recibidos.

Conserva cada alternativa y su contenido, llamadas de herramientas y razonamiento. En SSE, ensambla los fragmentos incrementales por índice de alternativa/herramienta y conserva el motivo final de terminación y el uso.

Si es necesario revisar la respuesta original

Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.

Campos de respuesta
CampoTipo
Campochoices[].indexTipointeger
Campochoices[].message.contentTipostring|null
Campochoices[].message.tool_callsTipotool_call[]
Campochoices[].message.reasoning_contentTipostring
Campochoices[].message.reasoning_detailsTipoobject|array
Campochoices[].finish_reasonTipostring|null
CampousageTipoobject
Errores y siguientes pasos
RespuestaCondiciónSiguiente paso
Respuesta400 · invalid_request_errorCondiciónCampos obligatorios, representación del material o valor del parámetro no válidosSiguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación.

Alias

Alias del modelo

Ailoot Ultra mistralai/codestral-2508

Alias de rutas de métodos

Usa las rutas de método indicadas arriba.

ID de modelo relacionados

mistralai/codestral-2508

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

mistralai/codestral-2508

Mistral /mistralai/codestral-2508

Primeros pasos

Codestral 2508 es el modelo de texto de Mistral AI para generación de código y autocompletado que tiene en cuenta el contexto. Está optimizado para tareas frecuentes del editor, incluidas la inserción de código en huecos y la edición de varias líneas, con un contexto de 128k según el fabricante y funciones documentadas de chat, salida estructurada y herramientas.

Entradas aceptadas
Texto
Resultados
json · sse

Disponible en Ailoot · entradas y métodos

Ailoot Ultra · Anthropic Messages POST /v1/messages
Tipos de entrada
text
Tipos de salida
json, sse
Formato de salida
JSON o SSE
CampoTipoRequisitoValores y límitesPredeterminado
CampomodelTipostringRequisitoObligatorioValores y límites
mistralai/codestral-2508
Predeterminado—
CampomessagesTipomessage[]RequisitoObligatorioValores y límitesPredeterminado—
Campomessages[].roleTipostringRequisitoObligatorioValores y límites
user, assistant
Predeterminado—
Campomessages[].contentTipostringRequisitoObligatorioValores y límitesPredeterminado—
Campomax_tokensTipointegerRequisitoObligatorioValores y límitesPredeterminado—
CampostreamTipobooleanRequisitoOpcionalValores y límitesPredeterminadofalse
Combinaciones de materiales de entrada

Texto · Texto UTF-8

cadena messages[].content

Parámetros del método y ciclo de vida
ParámetroContrato
Parámetrocontent_typeContratoapplication/json
ParámetrorequiredContratomodel, messages, max_tokens
Parámetrooptional_controlsContratostream
Parámetromaterial_typesContratotext
Parámetrotext_file_materialContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje.

Ciclo de vida: synchronous_or_streamed

Planes

Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.

Modo rápido
Tarifa estándar Cuando se selecciona el modo rápido
Modo flex
Tarifa estándar Cuando se selecciona el modo flex
Esfuerzo máximo de razonamiento
Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)

Tarifas de Ailoot

Precios por configuración

Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.

ConfiguraciónTabla de tarifasTokens de contexto, más deTokens de contexto, hasta inclusiveCargo
ConfiguraciónTarifas base por tokenTabla de tarifasTarifa baseTokens de contexto, más de—Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.0006 / 1K tokens
Salida · Tokens de salida $0.0018 / 1K tokens
Entrada · Lectura de caché $0.00006 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens
ConfiguraciónTramo 1 por longitud de la solicitudTabla de tarifas—Tokens de contexto, más de0Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.0006 / 1K tokens
Salida · Tokens de salida $0.0018 / 1K tokens
Entrada · Lectura de caché $0.00006 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens

Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →

Solicitudes de ejemplo

Ailoot Ultra · Anthropic Messages

Cuerpo JSON mínimo completocurl · usa tu documento en UTF-8Python · guarda el resultado completo
{
  "model": "mistralai/codestral-2508",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
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
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))

Recibir y guardar resultados

Ailoot Ultra · Anthropic Messages

JSON o SSE

Conserva todos los resultados completados

Conserva todas las respuestas, archivos y partes de contenido completos recibidos.

Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.

Si es necesario revisar la respuesta original

Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.

Campos de respuesta
CampoTipo
CampoidTipostring
CampomodelTipostring
Campocontent[]Tipotext|thinking|tool_use|other content block
Campostop_reasonTipostring|null
CampousageTipoobject
Errores y siguientes pasos
RespuestaCondiciónSiguiente paso
Respuesta400 · invalid_request_errorCondiciónCampos obligatorios, representación del material o valor del parámetro no válidosSiguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación.

Alias

Alias del modelo

Ailoot Ultra mistralai/codestral-2508

Alias de rutas de métodos

Usa las rutas de método indicadas arriba.

ID de modelo relacionados

mistralai/codestral-2508

FAQ · Mistral: Codestral 2508
¿Qué entradas y resultados están disponibles?

POST /v1/chat/completions · mistralai/codestral-2508: text → text

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

¿Qué campos utiliza la solicitud?

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

POST /v1/messages · mistralai/codestral-2508: model, messages, max_tokens, stream

¿Qué límites se aplican?

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

Más detalles

Conecta Ailoot a Claude Code, OpenCode, Hermes o tu aplicación.

La empresa y su cartera de proyectos

La empresa y su cartera de proyectos: millones de clientes; ventas por miles de millones al mes.

Compra tokens con descuento.

Ahorro por suscripción para trabajo habitual. Códigos promocionales: hasta el 50% al comprar tokens.

Suscripción
Elige un plan con descuento para tus peticiones habituales.
Código de hasta el 50%
Introduce el código al comprar. El precio se recalcula según la promoción vigente.
Gasto en el historial
Modelo, tokens e importe quedan guardados por cada petición.

Elegir suscripción · Consultar precios de modelos

Conecta la API al producto que vendes.

SaaS, aplicaciones y bots bajo la oferta y el acuerdo de licencia Ailoot. Solicita una licencia de reventa para redistribuir el acceso.

Aplicación comercial
Integra generación de texto, imágenes, vídeo y sonido en funciones de pago de tu servicio.
Licencia para revendedores
Envía descripción del proyecto y esquema de acceso. Solicita condiciones escritas de uso y reventa.
Documentos en la web
La oferta, el acuerdo de licencia y la política de datos están disponibles antes de conectar.

Solicitar licencia de reventa · Oferta y acuerdo de licencia