Responses API
NovéPOST /v1/responses berie pokyny a zoznam vstupných položiek a vracia objekt odpovede zložený z výstupných položiek, vo formáte OpenAI Responses. Použite ho s API responses v SDK OpenAI a s nástrojmi na ňom postavenými, ako Codex CLI. Endpoint neuchováva stav: celú konverzáciu posielajte s každým requestom.
POST https://api.shannon-ai.com/v1/responses
Najmenší request je id modelu a text. Odpoveď nie je streamovaná, pokiaľ oň nepožiadate.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.responses.create(
model="shannon-3",
input="Say hello in one sentence.",
)
print(response.output_text) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.responses.create({
model: "shannon-3",
input: "Say hello in one sentence.",
});
console.log(response.output_text); curl https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"input": "Say hello in one sentence."
}' Odpoveď je objekt odpovede. Jeho output obsahuje uvažovanie, ak model uvažoval, a správu:
{
"id": "resp_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "response",
"created_at": 1791625200,
"model": "shannon-3",
"status": "completed",
"error": null,
"incomplete_details": null,
"instructions": null,
"metadata": {},
"parallel_tool_calls": true,
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"output": [
{
"id": "rs_8a2e6c1f4b7d4e03b9c5a1d70f3e2b64",
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "The user wants a greeting in one sentence. Keep it short and friendly."
}
]
},
{
"id": "msg_1c7b9e3a5d2f4a86b0e4c8d19a6f7e25",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Hello, it is good to meet you.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 1184,
"output_tokens": 46,
"total_tokens": 1230
}
} Polia requestu
model a input sú to, čo request potrebuje. Stĺpec Uplatňujú uvádza modely, na ktorých pole mení odpoveď. Hostované open-weight modely sú dvanásť id zo zoznamu modelov; rodina Shannon 3 je shannon-3, shannon-3-pro, shannon-3.1 a shannon-3.1-pro. Modely a ceny
| Pole | Typ | Predvolené | Popis | Uplatňujú |
|---|---|---|---|---|
model | string | Povinné. Id zo zoznamu modelov. Zhoda nerozlišuje veľké a malé písmená. Chýbajúce alebo nezverejnené id vráti 400 unknown model. | Všetky modely | |
input | string | array | Reťazec, ktorý sa číta ako jedna správa používateľa, alebo pole vstupných položiek. Pozri Vstupné položky nižšie. | Všetky modely | |
instructions | string | Pokyny pre model, systémový prompt tohto formátu. | Hostované open-weight modely, shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
stream | boolean | false | true posiela odpoveď ako server-sent events. Pozri Streamovanie nižšie. | Všetky modely |
max_output_tokens | integer | 4096 | Horný limit odpovede v tokenoch. Hodnota mimo 1 až 65,536 sa posunie do tohto rozsahu. Je to aj suma odložená zo zostatku, kým request beží. Pozri Limit výstupu nižšie. | Hostované open-weight modely, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | number | Teplota vzorkovania. Na hostovaných open-weight modeloch sa hodnoty držia medzi 0 a 2. | Hostované open-weight modely; shannon-1.6-*, shannon-2-* a shannon-coder-1 pri odpovediach bez streamovania | |
top_p | number | Nucleus sampling. Hodnoty sa držia medzi 0 a 1. | Hostované open-weight modely | |
tools | array | Funkcie, ktoré môže model volať, v plochom tvare tohto formátu: {"type": "function", "name", "description", "parameters"}. Pozri Nástroje nižšie. | Všetky modely | |
tool_choice | string | object | auto | "auto" nechá rozhodnúť model. "required" ho prinúti zavolať nástroj. {"type": "function", "name": "…"} ho prinúti zavolať daný nástroj. | Hostované open-weight modely |
reasoning | object | {"effort": "…"} s off, low, medium alebo high. Akákoľvek iná hodnota vráti 400. | Hostované open-weight modely | |
text | object | {"format": {…}} žiada odpoveď vo formáte JSON. Pozri Štruktúrovaný výstup nižšie. | Všetky úrovne Shannon; hostované open-weight modely podľa uvedenia pri každom id |
previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user a prompt_cache_key sa prijímajú, aby existujúci kód klienta bežal bez zmien. Odpoveď nemenia. Keďže sa neukladá žiadna konverzácia, nadväzujúci request nesie predchádzajúce kroky v input.
Vstupné položky
Vstupná položka je buď správa s role a content, alebo typovaná položka, ktorá nesie volanie nástroja alebo jeho výsledok. content je reťazec alebo pole častí.
| Položka | Popis | Uplatňujú |
|---|---|---|
{"role": "user", "content": …} | Na čo sa pýtate. content je reťazec alebo časti input_text a input_image. | Všetky modely |
{"role": "assistant", "content": …} | Skoršia odpoveď modelu. content je reťazec alebo časti output_text. | Všetky modely |
{"role": "system", "content": …}{"role": "developer", "content": …} | Pokyny vo vnútri konverzácie. | Hostované open-weight modely |
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} | Volanie nástroja, ktoré model urobil v skoršej odpovedi. arguments je reťazec JSON. | Všetky modely |
{"type": "function_call_output", "call_id": "…", "output": "…"} | Výsledok tohto volania. call_id je id volania a output výsledok ako reťazec. | Všetky modely |
Pokyny dajte do poľa instructions. Pri id z rodiny Shannon 3 dajte pokyny, ktoré musia platiť, do správy user.
Položky output odpovede možno poslať späť do input tak, ako sú: položky message a function_call sa čítajú, položky reasoning sa preskočia.
Časti obsahu
| Časť | Popis | Dostupné na |
|---|---|---|
{"type": "input_text", "text": "…"} | Text správy používateľa. | Všetky modely |
{"type": "output_text", "text": "…"} | Text správy asistenta. | Všetky modely |
{"type": "input_image", "image_url": "…"} | Obrázok, ako URL data: s obsahom base64 alebo ako URL http(s). | Rodina Shannon 3, shannon-1.6-lite, shannon-1.6-pro a hostované open-weight modely, ktoré uvádzajú vstup obrázkov |
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} | Dokument (PDF, Word, PowerPoint alebo Excel): file_data obsahuje URL data: alebo file_url URL http(s). | Rodina Shannon 3 |
Na úrovniach Shannon sa obrázky a súbory čítajú z poslednej položky user v input. Veľkosti a limity majú vlastnú stránku. Obrázky a súbory
Request s pokynmi a možnosťami
Tento request posiela pokyny, konverzáciu ako vstupné položky, limit výstupu, teplotu a úsilie pri uvažovaní. Používa hostovaný open-weight model, ktorý uplatní všetky.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.responses.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
instructions="You are a physics teacher. Answer in two sentences.",
input=[
{"role": "user", "content": "Why is the sky blue?"},
{"role": "assistant", "content": "Air scatters blue light more than red light."},
{"role": "user", "content": "And why are sunsets red?"},
],
max_output_tokens=512,
temperature=0.3,
reasoning={"effort": "low"},
)
for item in response.output:
if item.type == "reasoning":
print("reasoning:", item.summary[0].text)
elif item.type == "message":
print("answer:", item.content[0].text)
print(response.usage) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.responses.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
instructions: "You are a physics teacher. Answer in two sentences.",
input: [
{ role: "user", content: "Why is the sky blue?" },
{ role: "assistant", content: "Air scatters blue light more than red light." },
{ role: "user", content: "And why are sunsets red?" },
],
max_output_tokens: 512,
temperature: 0.3,
reasoning: { effort: "low" },
});
for (const item of response.output) {
if (item.type === "reasoning") console.log("reasoning:", item.summary[0].text);
if (item.type === "message") console.log("answer:", item.content[0].text);
}
console.log(response.usage); curl https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"instructions": "You are a physics teacher. Answer in two sentences.",
"input": [
{"role": "user", "content": "Why is the sky blue?"},
{"role": "assistant", "content": "Air scatters blue light more than red light."},
{"role": "user", "content": "And why are sunsets red?"}
],
"max_output_tokens": 512,
"temperature": 0.3,
"reasoning": {"effort": "low"}
}' Odpoveď hostovaného open-weight modelu má id, object, model, created_at, status, output a usage. Jeho usage pridáva tokeny prečítané z cache a tokeny minuté na uvažovanie:
{
"usage": {
"input_tokens": 58,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 67,
"output_tokens_details": {
"reasoning_tokens": 19
},
"total_tokens": 125
}
} Objekt odpovede
id, object, status, output a usage sú v každej odpovedi. Svoj kód stavajte na nich.
| Pole | Typ | Popis | Posiela |
|---|---|---|---|
id | string | resp_ a za ním 32 hexadecimálnych znakov. | Všetky modely |
object | string | Vždy response. | Všetky modely |
status | string | completed. V streame je najprv in_progress a failed v udalosti response.failed. | Všetky modely |
output | array | Výstupné položky v poradí, v akom ich model vytvoril: reasoning, message, function_call. | Všetky modely |
usage | object | input_tokens, output_tokens a total_tokens. | Všetky modely |
usage.input_tokens_details | object | cached_tokens: vstupné tokeny prečítané z cache promptu. | Hostované open-weight modely |
usage.output_tokens_details | object | reasoning_tokens: výstupné tokeny minuté na uvažovanie. | Hostované open-weight modely |
model | string | Kanonické id modelu, ktorý odpovedal. | Rodina Shannon 3, hostované open-weight modely |
created_at | integer | Čas odpovede v sekundách Unix. | Rodina Shannon 3, hostované open-weight modely |
instructions, tools, temperature, … | instructions, tools a temperature opakujú request. error a incomplete_details sú null, metadata je {}, parallel_tool_calls je true, tool_choice je auto a top_p je null. | Rodina Shannon 3 |
Výstupné položky
| Položka | Popis |
|---|---|
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} | Uvažovanie modelu ako jedna časť summary_text. Prítomné, len ak model uvažoval. |
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} | Odpoveď: jedna časť output_text s textom. |
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} | Volanie nástroja. arguments je reťazec JSON. Výsledok pošlite späť s rovnakým call_id. |
SDK OpenAI zložia text správy za vás do response.output_text.
Streamovanie
Nastavte stream na true pre server-sent events. Každý frame má riadok event: s názvom udalosti a riadok data: s objektom JSON; objekt opakuje názov v type. Delty priraďujte k ich položke podľa output_index.
So SDK OpenAI čítajte udalosti podľa ich type:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
stream = client.responses.create(
model="shannon-3",
input="Explain server-sent events in three sentences.",
stream=True,
)
for event in stream:
kind = getattr(event, "type", "error") # an event without a type is an error event
if kind == "response.reasoning_summary_text.delta":
pass # a piece of reasoning: event.delta
elif kind == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif kind == "response.output_item.done" and event.item.type == "function_call":
print("\ntool call:", event.item.name, event.item.arguments)
elif kind == "response.completed":
print("\n", event.response.usage)
elif kind in ("response.failed", "error"):
raise RuntimeError("the stream failed, send the request again") import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const stream = await client.responses.create({
model: "shannon-3",
input: "Explain server-sent events in three sentences.",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.reasoning_summary_text.delta") {
// a piece of reasoning: event.delta
} else if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_item.done" && event.item.type === "function_call") {
console.log("\ntool call:", event.item.name, event.item.arguments);
} else if (event.type === "response.completed") {
console.log("\n", event.response.usage);
} else if (event.type === "response.failed" || event.type === "error") {
throw new Error("the stream failed, send the request again");
}
} curl -N https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"input": "Explain server-sent events in three sentences.",
"stream": true
}' Udalosti prichádzajú v tomto poradí. Skupiny pre uvažovanie, správu a volania nástrojov sa objavia, len ak ich odpoveď má.
| Udalosť | Obsah | Kedy |
|---|---|---|
response.created | response | Vždy prvá. response.status je in_progress a response.output je prázdne. |
response.in_progress | response | Vždy druhá, s tým istým objektom. |
response.output_item.added | output_index, item | Uvažovanie začína: položka reasoning s prázdnym summary. |
response.reasoning_summary_text.delta | output_index, summary_index, delta | Kúsok uvažovania. |
response.reasoning_summary_text.done | output_index, summary_index, text | Uvažovanie je úplné: celý jeho text. |
response.output_item.done | output_index, item | Dokončená položka reasoning. |
response.output_item.added | output_index, item | Odpoveď začína: položka message so statusom in_progress a bez obsahu. |
response.content_part.added | output_index, content_index, part | Otvorí sa prázdna časť output_text. |
response.output_text.delta | output_index, content_index, delta | Kúsok odpovede. |
response.output_text.done | output_index, content_index, text | Odpoveď je úplná: celý jej text. |
response.content_part.done | output_index, content_index, part | Dokončená časť output_text. |
response.output_item.done | output_index, item | Dokončená položka message so statusom completed. |
response.output_item.added | output_index, item | Začína volanie nástroja: položka function_call s call_id, name a prázdnym arguments. |
response.function_call_arguments.delta | output_index, delta | Argumenty volania, úplné v jednej delte. |
response.function_call_arguments.done | output_index, arguments | Tie isté argumenty, ako arguments. |
response.output_item.done | output_index, item | Dokončená položka function_call. |
response.completed | response | Pri úspechu vždy posledná: celý objekt odpovede s output a usage. |
event: response.created
data: {"type":"response.created","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}
event: response.in_progress
data: {"type":"response.in_progress","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}
event: response.output_item.added
data: {"type":"response.output_item.added","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"in_progress","content":[]}}
event: response.content_part.added
data: {"type":"response.content_part.added","output_index":0,"content_index":0,"part":{"type":"output_text","text":""}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"Server-sent"}
event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":" events let a server push text over one HTTP reply."}
event: response.output_text.done
data: {"type":"response.output_text.done","output_index":0,"content_index":0,"text":"Server-sent events let a server push text over one HTTP reply."}
event: response.content_part.done
data: {"type":"response.content_part.done","output_index":0,"content_index":0,"part":{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply."}}
event: response.output_item.done
data: {"type":"response.output_item.done","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply.","annotations":[]}]}}
event: response.completed
data: {"type":"response.completed","response":{"id":"resp_5f0c…","object":"response","status":"completed","output":[…],"usage":{"input_tokens":1190,"output_tokens":18,"total_tokens":1208}, …}} Stream, ktorý zlyhá
Na úrovniach Shannon sa zlyhaná odpoveď končí response.failed namiesto response.completed. Jej response.status je failed a response.error obsahuje code, rate_limit_exceeded alebo server_error, a message.
Na hostovaných open-weight modeloch je zlyhanie udalosť error s code api_error a message. Po nej stále nasleduje response.completed.
Stream považujte za zlyhaný, keď obsahuje udalosť response.failed alebo error, a pošlite request znova.
Nástroje
Nástroj je funkcia, ktorú spúšťa váš kód. Opíšte ju v tools; keď ju model chce, odpoveď obsahuje položku function_call namiesto správy alebo vedľa nej.
Definícia nástroja v tools:
[
{
"type": "function",
"name": "get_weather",
"description": "Current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
] output odpovede, ktorá ho volá:
[
{
"id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"type": "function_call",
"name": "get_weather",
"call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"arguments": "{\"city\":\"Paris\"}"
}
] Spustite funkciu, potom pošlite request znova s pridaným volaním a jeho výsledkom v input:
[
{
"role": "user",
"content": "What is the weather in Paris?"
},
{
"type": "function_call",
"call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"arguments": "{\"city\":\"Paris\"}"
},
{
"type": "function_call_output",
"call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"output": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
}
] Čítajú sa len nástroje typu function. Na shannon-1.6-*, shannon-2-* a shannon-coder-1 sa schéma parameters zredukuje na bežné kľúčové slová JSON Schema: oneOf sa číta ako anyOf a kľúčové slová ako $ref, additionalProperties, const, default a title sa modelu nepodávajú.
Hodnoty tool_choice required a pomenovaná funkcia uplatňujú hostované open-weight modely.
Slučka nástrojov je úplne popísaná na vlastnej stránke. Volanie funkcií
Štruktúrovaný výstup
Tento formát zapisuje štruktúrovaný výstup ako text.format. Schéma je priamo vo format, vedľa name a strict, nie pod členom json_schema ako na Chat Completions.
{"type": "json_object"}žiada ľubovoľný objekt JSON.{"type": "json_schema", "name", "schema", "strict"}žiada JSON, ktorý zodpovedá vašej schéme.strictjetrue, keď ho vynecháte.
{
"model": "shannon-1.6-lite",
"input": "Extract the city and the date: 'The conference opens in Lisbon on 12 May 2027.'",
"text": {
"format": {
"type": "json_schema",
"name": "event",
"strict": true,
"schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"date": {
"type": "string",
"description": "ISO 8601 date"
}
},
"required": [
"city",
"date"
]
}
}
}
} JSON prichádza ako text v časti output_text správy; spracujte ho sami. Hostovaný open-weight model bez štruktúrovaného výstupu vracia 400.
{"city": "Lisbon", "date": "2027-05-12"} Ktorý model berie ktorú podobu, je uvedené na vlastnej stránke. Štruktúrované výstupy
Uvažovanie
Model, ktorý uvažuje, vracia uvažovanie ako výstupnú položku typu reasoning, pred správou. V streame prichádza ako udalosti response.reasoning_summary_text.delta.
Hostované open-weight modely uplatňujú reasoning.effort: off, low, medium alebo high, pričom high platí, keď neposlíte nič. off nevracia žiadnu položku uvažovania. Pošlite ho ako objekt; holý reťazec sa na tomto endpointe nečíta.
Úrovne úsilia sú popísané na vlastnej stránke. Úsilie pri uvažovaní
Limit výstupu
max_output_tokens je 4,096, keď ho neposlíte. Je to počet tokenov odložených zo zostatku na začiatku requestu; keď je odpoveď úplná, táto suma sa nahradí tým, čo request použil. Hodnota, ktorá sa nezmestí do zvyšného zostatku, vráti 429 Quota exceeded.
Obmedzuje dĺžku odpovede na shannon-1.6-*, shannon-2-* a shannon-coder-1 a dĺžku textu odpovede na hostovaných open-weight modeloch.
Na tomto endpointe sa shannon-coder-1 účtuje v tokenoch zo zostatku, ako každý iný model.
Telo requestu môže mať až 32 MiB. Limity a zostatok
Chyby
Chyby používajú telo chyby OpenAI: objekt error s type a message; niektoré nesú aj code a param s hodnotou null. Tabuľka uvádza, čo tento endpoint vracia najčastejšie. Úplný zoznam s tým, čo zopakovať, má vlastnú stránku. Spracovanie chýb
| Status | Typ | Správa | Kedy |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Nebol poslaný žiadny API kľúč, alebo je kľúč neznámy či zrušený. |
400 | invalid_request_error | unknown model: <id> | model chýba alebo nie je zverejnené id. |
400 | invalid_request_error | No user message provided. | Úrovne Shannon: input neobsahuje žiadny text používateľa. |
400 | invalid_request_error | <id> does not accept image input | Obrázok bol poslaný hostovanému open-weight modelu bez vstupu obrázkov. |
400 | invalid_request_error | <id> does not accept response_format | text.format bol poslaný hostovanému open-weight modelu bez štruktúrovaného výstupu. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning.effort obsahuje hodnotu mimo zoznamu. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Telo je platný JSON, ale pole má nesprávny typ. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_output_tokens je väčšie, než čo zostalo z vášho zostatku. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Ochrana pred zahltením: viac než 120 requestov za jednu minútu na vašom účte. |
500 | api_error | The model backend failed to answer. Please retry. | Model nevytvoril odpoveď. Pošlite request znova. |
502 | api_error | The model backend failed to answer. Please retry. | To isté, na hostovaných open-weight modeloch. |
504 | api_error | upstream timed out | Hostovaný open-weight model trval dlhšie než časový limit odpovede bez streamovania. Pošlite request s stream nastaveným na true. |