Chat

Conclusões de chat

A API Chat Completions da OpenAI, para todos os modelos de texto: a mesma requisição e resposta, o mesmo streaming, os mesmos SDKs.

POST/v1/chat/completions

Requisição

modelstringobrigatório
Um ID de modelo da página de modelos, como claude-opus-5-5 ou gpt-6-sol.
messagesarrayobrigatório
A conversa: mensagens system (ou developer), user, assistant e tool. content é uma string ou um array de partes para adicionar imagens, PDFs, áudio ou vídeo.
streamboolean
Envia a resposta como eventos enviados pelo servidor enquanto ela é gerada. Veja Streaming abaixo.
stream_optionsobject
{ "include_usage": true } adiciona um bloco final com o uso de tokens.
max_completion_tokensinteger
O máximo de tokens a gerar, incluindo o raciocínio. max_tokens também funciona.
temperaturenumber
0 a 2. Valores menores geram respostas mais focadas; maiores, mais variadas. Alguns modelos de raciocínio ignoram esse parâmetro. Claude a partir de Opus 4.7 (Opus 5 e 5.5, Fable 5 e 5.1, Sonnet 5.5, Haiku 5.5) não aceita esse parâmetro, então o omitimos nesses modelos.
top_pnumber
Amostragem por núcleo, de 0 a 1. Altere este parâmetro ou temperature, não os dois. Omitido nos mesmos modelos Claude, assim como top_k nesses modelos e no Muse Wonder.
stopstring | array
Até 4 sequências que interrompem a geração.
toolsarray
Funções que o modelo pode chamar. Veja Chamada de ferramentas abaixo.
tool_choicestring | object
auto, none, required ou uma função específica. Quando o laboratório de um modelo rejeita ou ignora uma dessas opções (uma ferramenta forçada no Claude Opus 5.5, Sonnet 5.5 e Fable 5.1; qualquer opção exceto auto no Muse Wonder; none em alguns modelos Gemini, DeepSeek Flash, MiMo, HY4 e MiniMax), enviamos a opção em um formato que o modelo respeita e informamos ao modelo o que você pediu; uma função forçada pelo nome é enviada como a única disponível.
response_formatobject
Saída em JSON: { "type": "json_object" } ou json_schema com um esquema. Veja Saída estruturada abaixo.
reasoning_effortstring
O esforço de raciocínio do modelo: none, minimal, low, medium, high, xhigh ou max. Cada modelo aceita alguns desses níveis (veja Raciocínio abaixo); se você escolher outro nível, será usado o nível aceito mais próximo. Níveis mais altos raciocinam por mais tempo e consomem mais tokens de saída.
seedinteger
Reprodutibilidade na medida do possível, para os modelos que oferecem suporte.
modelsarray
Roteamento inteligente para esta requisição: alternativas a tentar, em ordem, se o modelo estiver indisponível. Veja Roteamento inteligente.
Outros parâmetros da OpenAI são repassados ao modelo sem alterações, exceto user e metadata, que ficam conosco. Quais deles o modelo respeita (ferramentas, esquemas JSON, raciocínio) depende do modelo, assim como acontece no próprio laboratório. Com o SDK Python da OpenAI, envie models como extra_body={"models": [...]}.

Resposta

Resposta
{
"id": "chatcmpl-AbC123...",
"object": "chat.completion",
"created": 1790870400,
"model": "claude-opus-5-5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Here's the summary..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1204,
"completion_tokens": 312,
"total_tokens": 1516,
"prompt_tokens_details": { "cached_tokens": 1024 },
"completion_tokens_details": { "reasoning_tokens": 128 }
}
}
  • model é o modelo que respondeu. É o que você pediu, a menos que o roteamento inteligente tenha usado uma alternativa.
  • Modelos de raciocínio podem adicionar reasoning_content à mensagem: o raciocínio do modelo, quando ele o compartilha.
  • usage é o que você paga. cached_tokens são tokens de entrada lidos do cache de prompts do modelo, cobrados pelo preço de cache quando o modelo tem um.

Toda resposta também tem estes cabeçalhos:

CabeçalhoValor
x-request-idO ID da requisição, como aparece no seu registro de requisições. Informe-o ao suporte.
x-zurelay-modelO modelo que respondeu.
x-zurelay-routed-fromSomente após o roteamento inteligente: o modelo que você pediu.
x-zurelay-reasoning-effortSomente quando a requisição definiu um nível de raciocínio: o nível usado pelo modelo, o mais próximo que ele aceita (veja Raciocínio).
x-zurelay-stoppedSomente quando o saldo ou o orçamento da chave acabou durante a resposta, ou quando a resposta atingiu o max_tokens ao qual foi reduzido porque eles não cobriam mais: insufficient_quota, key_budget_exceeded ou key_daily_budget_exceeded. A resposta contém o que foi escrito até então, com finish_reason: "length".

Streaming

Com stream: true, a resposta chega como eventos enviados pelo servidor (SSE) no formato de chunks da OpenAI, terminando com data: [DONE]. Todo SDK lê esses eventos para você.

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
stream = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[
{
"role": "user",
"content": "Write a limerick about databases."
}
],
stream=True,
stream_options={
"include_usage": True
},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
  • Nenhuma resposta é enviada até o modelo produzir o primeiro token, então uma nova tentativa ou a troca para outra rota fica invisível para você.
  • Períodos sem dados (enquanto o modelo pensa entre etapas) são preenchidos com linhas de comentário SSE (: keep-alive) a cada 15 segundos. Os clientes as ignoram; elas impedem que proxies fechem a conexão. Se o primeiro token demorar mais de 20 segundos (um prompt longo ou uma rota que travou e está sendo substituída), o stream é aberto nesse momento: os cabeçalhos e comentários de keep-alive chegam enquanto você espera. Cada rota tem até 3 minutos para começar (5 com esforço de raciocínio alto) antes de tentar a próxima, então configure o timeout do seu cliente para 10 minutos.
  • Um stream aberto antes do primeiro token só inclui x-zurelay-model quando nenhum outro modelo pode responder (roteamento inteligente desativado), e um erro após a abertura chega como um evento de erro no stream (com a mesma estrutura do corpo de erro), em vez de um status de erro.
  • Com include_usage, o último chunk antes de [DONE] tem uma lista choices vazia e o usage.

Chamada de ferramentas

Descreva funções em tools; quando o modelo quiser usar uma, ele responde com tool_calls em vez de texto. Execute a função, envie o resultado de volta como uma mensagem tool com o ID da chamada, e o modelo continua.

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6-sol",
messages=[
{
"role": "user",
"content": "What's the weather in Lisbon right now?"
}
],
tools=[
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
}
],
)
print(response.choices[0].message.content)

Saída estruturada

Peça JSON com response_format. Um json_schema faz com que os modelos compatíveis sigam seu esquema; json_object pede qualquer JSON válido (diga isso no seu prompt também).

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[
{
"role": "user",
"content": "Extract the people: 'Ana met Ben and Chloe in Porto.'"
}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "people",
"schema": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"names"
]
}
}
},
)
print(response.choices[0].message.content)

Raciocínio

Modelos de raciocínio pensam antes de responder. Defina reasoning_effort para equilibrar velocidade e custo com profundidade: um nível mais alto pensa por mais tempo, demora mais e usa mais tokens de saída. Cada modelo aceita os níveis documentados pelo seu laboratório, de none (sem raciocínio), passando por minimal, low, medium, high e xhigh (extra alto), até max; a tabela abaixo lista esses níveis. Se você omitir esse parâmetro, o modelo usa o padrão. Funciona da mesma forma com qualquer SDK da OpenAI, e você pode testar cada nível no Playground do painel.

from openai import OpenAI
client = OpenAI(base_url="https://api.zurelay.com/v1", api_key="YOUR_ZURELAY_KEY")
response = client.chat.completions.create(
model="zurelay-auto",
reasoning_effort="high",
messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],
)
message = response.choices[0].message
print(getattr(message, "reasoning_content", None)) # the thinking, when the model shares it
print(message.content)

O raciocínio vem junto com a resposta em message.reasoning_content (em streaming, em delta.reasoning_content) nos modelos que o compartilham; alguns chamam o campo de reasoning. Ele é cobrado como tokens de saída e sempre faz parte de completion_tokens; completion_tokens_details.reasoning_tokens o contabiliza separadamente quando o modelo informa esse dado. Com esforço alto, uma resposta pode levar minutos para começar, então configure um timeout generoso no seu cliente (veja Confiabilidade e timeouts).

Níveis de cada modelo

Com base na documentação de cada laboratório. Um nível que o modelo não aceita é executado no nível aceito mais próximo (entre dois igualmente próximos, o menor; e o raciocínio só é desativado quando você envia none), então a mesma requisição funciona em qualquer modelo, inclusive com roteamento inteligente. O cabeçalho de resposta x-zurelay-reasoning-effort informa qual nível foi usado. Uma palavra que não corresponde a um nível é rejeitada com um 400 que lista os níveis do modelo.

ModeloIDNíveisPadrão
Abliterated Large V2abliterated-large-v2low, high, maxmax
Claude Fable 5claude-fable-5low, medium, high, xhigh, maxhigh
Claude Fable 5.1claude-fable-5-1low, medium, high, xhigh, maxhigh
Claude Haiku 5.5claude-haiku-5-5low, medium, high, xhigh, maxmedium
Claude Opus 4.6claude-opus-4-6low, medium, high, maxDesativado até você definir um nível
Claude Opus 4.7claude-opus-4-7low, medium, high, xhigh, maxDesativado até você definir um nível
Claude Opus 4.8claude-opus-4-8low, medium, high, xhigh, maxDesativado até você definir um nível
Claude Opus 5claude-opus-5low, medium, high, xhigh, maxhigh
Claude Opus 5.5claude-opus-5-5low, medium, high, xhigh, maxmedium
Claude Sonnet 5.5claude-sonnet-5-5low, medium, high, xhigh, maxhigh
DeepSeek V4 Flashdeepseek-v4-flashnone, high, maxhigh
DeepSeek V4 Flash 0731deepseek-v4-flash-0731none, low, high, maxhigh
DeepSeek V4 Pro 0813deepseek-v4-pro-0813none, low, high, maxhigh
DeepSeek V4.1 Flashdeepseek-v4.1-flashnone, high, maxhigh
DeepSeek V4.1 Flash 1017deepseek-v4.1-flash-1017none, high, maxhigh
Gemini 3.1 Flash-Litegemini-3.1-flash-liteminimal, low, medium, highminimal
Gemini 3.1 Progemini-3.1-prolow, medium, highhigh
Gemini 3.5 Flash-Litegemini-3.5-flash-liteminimal, low, medium, highminimal
Gemini 3.7 Flashgemini-3.7-flashlow, medium, highmedium
Gemini 3.8 Flashgemini-3.8-flashlow, medium, highmedium
Gemini 4 Argongemini-4-argonlow, medium, highmedium
GLM-5.2glm-5.2none, high, maxmax
GLM-5.3glm-5.3low, high, maxmax
GLM-5.3 Flashglm-5.3-flashlow, high, maxmax
GLM-5.3 FlashXglm-5.3-flashxlow, high, maxmax
GPT-5.6 Lunagpt-5.6-lunanone, low, medium, high, xhigh, maxmedium
GPT-5.6 Solgpt-5.6-solnone, low, medium, high, xhigh, maxmedium
GPT-5.6 Terragpt-5.6-terranone, low, medium, high, xhigh, maxmedium
GPT-6 Astragpt-6-astralow, medium, high, xhigh, maxmedium
GPT-6 Lunagpt-6-lunanone, low, medium, high, xhigh, maxmedium
GPT-6 Solgpt-6-solnone, low, medium, high, xhigh, maxmedium
GPT-6.1 Solgpt-6.1-sollow, medium, high, xhigh, maxmedium
GPT-6.1 Terragpt-6.1-terranone, low, medium, high, xhigh, maxmedium
Grok 4.7grok-4.7low, medium, high, xhighhigh
HY4 Previewhy4-previewnone, highhigh
Kimi K2.5kimi-k2.5none, highhigh
Kimi K2.6kimi-k2.6none, highhigh
Kimi K3kimi-k3low, high, maxmax
Kimi K3.1 Prokimi-k3.1-prolow, high, maxmax
Kimi K3.1 Pro Highspeedkimi-k3.1-pro-highspeedlow, high, maxmax
MiMo V2.6 Flashmimo-v2.6-flashnone, highhigh
MiMo V2.6 Promimo-v2.6-pronone, highhigh
MiniMax M3minimax-m3none, highhigh
MiniMax M3.1 Flashminimax-m3.1-flashlow, medium, high, xhigh, maxmax
Muse Spark 1.3 Contributormuse-spark-1.3-contributorminimal, low, medium, high, xhighmedium
Muse Wondermuse-wonder-1.0minimal, low, medium, high, xhigh, maxhigh
Qwen 3.8 Flashqwen3.8-flashnone, low, medium, xhighxhigh
Qwen 3.8 Maxqwen3.8-maxnone, low, medium, xhighxhigh
Qwen 3.8 Omni Flashqwen3.8-omni-flashnone, low, medium, xhighxhigh
Etapa 5 Previewstep-5-previewlow, medium, highmedium
Zurelay Autozurelay-autonone, minimal, low, medium, high, xhigh, maxDesativado até você definir um nível
MiniMax M2.5minimax-m2.5Nada a configurarSempre raciocina
Claude Haiku 4.5claude-haiku-4-5Nenhum (um orçamento de raciocínio no formato Anthropic)Desativado
Ministral 3 14Bministral-3-14bNenhumDesativado
Ministral 3 3Bministral-3-3bNenhumDesativado

Raciocínio do Claude

Por este endpoint, Claude aceita reasoning_effort como qualquer outro modelo: low, medium, high, xhigh ou max (Opus 4.6 não tem xhigh). No formato da própria Anthropic, Claude raciocina de forma adaptativa em um nível: envie thinking: { type: "adaptive", display: "summarized" } com output_config: { effort: "xhigh" } e leia os blocos de raciocínio. Veja Anthropic Messages.

Tem dúvidas ou falta algo? Fale com nossa equipe de suporte e responderemos por e-mail, geralmente em até um minuto.