Chat completions
Gera uma resposta do modelo a partir de uma conversa. Compatível com POST /v1/chat/completions da OpenAI.
POST https://api.norlen.io/v1/chat/completionsAuthorization: Bearer SUA_API_KEYContent-Type: application/jsonParâmetros
Seção intitulada “Parâmetros”| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model | string | sim | id do modelo, ex. qwen3.6-35b, qwen3-coder, gemma-4-12b |
messages | array | sim | Lista de mensagens { role, content }. role ∈ system, user, assistant |
temperature | number | não | Aleatoriedade (0–2). Padrão 1 |
top_p | number | não | Amostragem por núcleo (0–1) |
max_tokens | integer | não | Máximo de tokens na resposta |
stream | boolean | não | Se true, envia a resposta token a token via SSE |
stop | string | array | não | Sequência(s) que interrompem a geração |
frequency_penalty | number | não | Penaliza repetição (-2 a 2) |
presence_penalty | number | não | Incentiva novos tópicos (-2 a 2) |
seed | integer | não | Torna a saída mais reprodutível |
Exemplo
Seção intitulada “Exemplo”curl https://api.norlen.io/v1/chat/completions \ -H "Authorization: Bearer $NORLEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.6-35b", "messages": [ {"role": "system", "content": "Você é um assistente conciso."}, {"role": "user", "content": "O que é RAG em uma frase?"} ], "temperature": 0.7 }'from openai import OpenAI
client = OpenAI(base_url="https://api.norlen.io/v1", api_key="seu-token")
resp = client.chat.completions.create( model="qwen3.6-35b", messages=[ {"role": "system", "content": "Você é um assistente conciso."}, {"role": "user", "content": "O que é RAG em uma frase?"}, ], temperature=0.7,)print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.norlen.io/v1", apiKey: process.env.NORLEN_API_KEY,});
const resp = await client.chat.completions.create({ model: "qwen3.6-35b", messages: [ { role: "system", content: "Você é um assistente conciso." }, { role: "user", content: "O que é RAG em uma frase?" }, ], temperature: 0.7,});console.log(resp.choices[0].message.content);Resposta
Seção intitulada “Resposta”{ "id": "chatcmpl-...", "object": "chat.completion", "created": 1750000000, "model": "qwen3.6-35b", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "RAG combina recuperação de documentos com geração..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 32, "completion_tokens": 28, "total_tokens": 60 }}Streaming
Seção intitulada “Streaming”Com stream: true, a resposta chega em chunks no formato Server-Sent Events. Cada chunk traz um delta; o fluxo termina com data: [DONE].
stream = client.chat.completions.create( model="qwen3.6-35b", messages=[{"role": "user", "content": "Escreva um haiku sobre infraestrutura."}], stream=True,)for chunk in stream: print(chunk.choices[0].delta.content or "", end="", flush=True)const stream = await client.chat.completions.create({ model: "qwen3.6-35b", messages: [{ role: "user", content: "Escreva um haiku sobre infraestrutura." }], stream: true,});for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? "");}curl https://api.norlen.io/v1/chat/completions \ -H "Authorization: Bearer $NORLEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"qwen3.6-35b","messages":[{"role":"user","content":"Olá"}],"stream":true}'