Completaciones de chat
Completions de chat compatibles con OpenAI, con streaming, imágenes, llamadas a herramientas y control de razonamiento.
POST /v1/chat/completions
curl https://api.unquant.io/v1/chat/completions \
-H "Authorization: Bearer $UNQUANT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"glm-5.3-flash",
"messages":[{"role":"user","content":"Hello!"}]}'Campos de la solicitud
modelstringRequeridoglm-5.3-flash o qwen-3.8-flash-next.
messagesarrayRequeridoRoles system, user, assistant y tool. El contenido es una cadena o un array de partes text e image_url.
streambooleanTransmite la respuesta como server-sent events.
stream_optionsobject{"include_usage": true} agrega un chunk final con los contadores de tokens.
max_tokensintegerLímite superior de la longitud de la respuesta.
max_completion_tokensintegerEquivalente a max_tokens.
temperaturenumberAleatoriedad del muestreo.
top_pnumberMuestreo por núcleo.
top_kintegerMuestrea de los k tokens más probables.
min_pnumberProbabilidad relativa mínima para un token.
seedintegerSemilla para muestreo reproducible.
stopstring or arraySecuencias de parada.
frequency_penaltynumberPenaliza los tokens según la frecuencia con que aparecieron.
presence_penaltynumberPenaliza los tokens que aparecieron aunque sea una vez.
repetition_penaltynumberPenalización multiplicativa por repetición.
toolsarrayFunciones que el modelo puede llamar, en formato OpenAI.
tool_choicestring or objectauto, none, required o una función con nombre.
parallel_tool_callsbooleanPermite varias llamadas a herramientas en un turno.
response_formatobjectSalida en JSON.
logprobsbooleanDevuelve las probabilidades logarítmicas de los tokens.
top_logprobsintegerCuántas alternativas devolver por token.
nintegerDebe ser 1: un completion por solicitud.
reasoning_effortstringAmbos modelos: none, low o high; GLM-5.3-Flash también acepta max.
chat_template_kwargsobjectModificadores de plantilla, como {"enable_thinking": false}.
Los demás campos se ignoran.
Respuesta
response.choices[0].message.contentLos contadores de uso se devuelven para monitoreo propio; nunca se facturan.
Streaming
Con "stream": true la respuesta llega como server-sent events en formato de chunk de OpenAI, finalizando con data: [DONE]. Lee el texto desde choices[0].delta.content.
Imágenes
Ambos modelos aceptan imágenes como partes image_url que contienen una data URL en base64 (data:image/png;base64,..., JPEG o WebP). Los enlaces de imágenes por URL no se recuperan y devuelven 400.
{"role": "user", "content": [
{"type": "text", "text": "Describe this image."},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQ..."}}
]}Llamadas a herramientas
Pasa tools como en la API de OpenAI. Cuando el modelo llama a una herramienta, la respuesta tiene finish_reason: "tool_calls" y message.tool_calls; ejecuta la herramienta, agrega un mensaje tool con su resultado y el tool_call_id correspondiente, y vuelve a llamar.
Razonamiento
Ambos modelos razonan antes de responder y ambos aceptan reasoning_effort: none para respuestas directas, low para razonamiento ligero o high para problemas más complejos; GLM-5.3-Flash también tiene max y usa high por defecto. El razonamiento se devuelve por separado en reasoning_content, nunca mezclado con content. "thinking": {"type": "disabled"} y "chat_template_kwargs": {"enable_thinking": false} también lo desactivan.
Concurrencia
El plan determina cuántas solicitudes pueden ejecutarse a la vez en todas las claves. Una solicitud que supere ese límite devuelve 429 de inmediato y no se pone en cola; las solicitudes en curso no se ven afectadas.