Reference API
Chat completions
/v1/chat/completionsPříklad
Funguje s libovolným OpenAI SDK. Nastavte base URL na https://api.sweetrouter.com/v1 a model na sweet-character-1.
# pip install openai
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.sweetrouter.com/v1",
api_key=os.environ["SWEETROUTER_API_KEY"],
)
reply = client.chat.completions.create(
model="sweet-character-1",
messages=[
{"role": "system", "content": "You are Mia, a cheerful barista who loves bad puns."},
{"role": "user", "content": "Hi Mia! What should I order today?"},
],
max_tokens=300,
)
print(reply.choices[0].message.content)Tělo požadavku
| Pole | Typ | Popis |
|---|---|---|
modelPovinné | string | Vždy sweet-character-1. |
messagesPovinné | array | Konverzace od nejstarší zprávy. Každá položka má role (system, user nebo assistant) a textový content. Až 200 zpráv a 60 000 znaků, alespoň jedna zpráva od uživatele. |
max_tokensVolitelné | integer | Nejdelší povolená odpověď, 1 až 4 096. Výchozí 1 024. Funguje i max_completion_tokens. |
temperatureVolitelné | number | 0 až 2. Vyšší hodnota dává pestřejší odpovědi. |
top_pVolitelné | number | 0 až 1. Alternativa k temperature; měňte jen jedno z nich. |
frequency_penalty / presence_penaltyVolitelné | number | -2 až 2. Kladné hodnoty omezují opakování. |
stopVolitelné | string | string[] | Až 4 sekvence, na kterých odpověď skončí. |
streamVolitelné | boolean | Výchozí false. S true se odpověď streamuje. Viz Streamování. |
stream_options.include_usageVolitelné | boolean | Při streamování nastavte true a spotřebu tokenů dostanete v posledním chunku. |
userVolitelné | string | Volitelné id vašeho koncového uživatele, uložené u volání ve vašich záznamech. Až 256 znaků. |
Odpověď
{
"id": "chatcmpl-cmg8x2k0d0003",
"object": "chat.completion",
"created": 1791105133,
"model": "sweet-character-1",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "A latte, obviously. I'd never steer you wrong, that would be a grave misdeed... or a grave mis-bean." },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 41, "completion_tokens": 27, "total_tokens": 68 },
"sweetrouter": { "job_id": "cmg8x2k0d0003", "cost_usd": "0.00012" }
}usage ukazuje tokeny, za které platíte. sweetrouter.job_id identifikuje volání v záznamech v konzoli a sweetrouter.cost_usd je jeho přesná cena.
Konverzace o více výměnách
API je bezstavové, stejně jako u OpenAI: předchozí volání si nepamatuje. Když chcete v konverzaci pokračovat, držte zprávy ve své aplikaci a s každým požadavkem pošlete všechny: systémovou zprávu, předchozí výměny uživatele a asistenta a nakonec novou zprávu uživatele.
history = [{"role": "system", "content": "You are Mia, a cheerful barista."}]
def say(text):
history.append({"role": "user", "content": text})
reply = client.chat.completions.create(model="sweet-character-1", messages=history)
answer = reply.choices[0].message.content
history.append({"role": "assistant", "content": answer})
return answer
say("Hi Mia!")
say("What did I just say to you?") # Mia remembers, because the history is sent againPožadavek pojme až 200 zpráv a 60 000 znaků a delší historie stojí víc vstupních tokenů. Ponechte systémovou zprávu a nejnovější výměny:
MAX_TURNS = 40 # keep the last 40 user and assistant messages
def build_messages(system_prompt, history, user_text):
recent = history[-MAX_TURNS:]
return [{"role": "system", "content": system_prompt}, *recent, {"role": "user", "content": user_text}]Streamování
Nastavte stream: true a odpověď budete dostávat průběžně, jak vzniká. Stream má formát chunků OpenAI: první chunk s rolí, jeden chunk na každý kus textu, poslední chunk s finish_reason, volitelný chunk se spotřebou a nakonec data: [DONE].
stream = client.chat.completions.create(
model="sweet-character-1",
messages=[{"role": "user", "content": "Tell me a short story about bread."}],
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)API nikdy nevolejte z prohlížeče, prozradili byste klíč. Volejte ho ze svého serveru a stream přepošlete dál:
// app/api/chat/route.ts (Next.js). Your key stays on the server.
import OpenAI from "openai"
const client = new OpenAI({
baseURL: "https://api.sweetrouter.com/v1",
apiKey: process.env.SWEETROUTER_API_KEY,
})
export async function POST(request: Request) {
const { messages } = await request.json()
const stream = await client.chat.completions.create({
model: "sweet-character-1",
messages,
stream: true,
})
return new Response(stream.toReadableStream(), {
headers: { "Content-Type": "text/event-stream" },
})
}- Když volání selže před prvním slovem, dostanete běžnou JSON chybu se stavovým kódem HTTP.
- Když selže uprostřed odpovědi, poslední chunk nese objekt
errora nic se neúčtuje. - Když se váš klient odpojí, odpověď se i tak dokončí a naúčtují se použité tokeny.
Kompatibilita
response_format nejsou podporované a n je vždy 1.Viz také
- Průvodce postavami: persony a doporučené nastavení.
- Chyby: všechny chybové kódy a kdy opakovat.
- Limity: velikosti požadavků a limity.