Preskoči na vsebino
API Responses

API Responses

Novo

POST /v1/responses sprejme navodila in seznam elementov vhoda ter vrne objekt odgovora, sestavljen iz elementov izhoda, v formatu OpenAI Responses. Uporabljajte ga z API-jem responses v SDK-ju OpenAI in z orodji, zgrajenimi nanj, kot je Codex CLI. Končna točka ne hrani stanja: z vsakim zahtevkom pošljite celoten pogovor.

POST https://api.shannon-ai.com/v1/responses

Najmanjši zahtevek je id modela in besedilo. Odgovor ni pretakan, razen če to zahtevate.

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)

Odgovor je objekt odgovora. Njegov output vsebuje razmišljanje, kadar je model razmišljal, in sporočilo:

200 JSON
{
  "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
  }
}

Polja zahtevka

Zahtevek potrebuje model in input. Stolpec Upoštevajo navaja modele, pri katerih polje spremeni odgovor. Gostovani modeli z odprtimi utežmi so dvanajst id s seznama modelov; družina Shannon 3 so shannon-3, shannon-3-pro, shannon-3.1 in shannon-3.1-pro. Modeli in cene

Polje Tip Privzeto Opis Upoštevajo
model string Obvezno. Id s seznama modelov. Ujemanje ne razlikuje velikih in malih črk. Manjkajoč ali neobjavljen id vrne 400 unknown model. Vsi modeli
input string | array Niz, ki se bere kot eno sporočilo uporabnika, ali polje elementov vhoda. Glejte Elementi vhoda spodaj. Vsi modeli
instructions string Navodila za model, sistemski prompt tega formata. Gostovani modeli z odprtimi utežmi, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true pošlje odgovor kot dogodke, ki jih pošilja strežnik (server-sent events). Glejte Pretakanje spodaj. Vsi modeli
max_output_tokens integer 4096 Zgornja meja odgovora, v tokenih. Vrednost zunaj razpona od 1 do 65,536 se premakne v ta razpon. Je tudi znesek, ki se odloži z vašega stanja, medtem ko zahtevek teče. Glejte Omejitev izhoda spodaj. Gostovani modeli z odprtimi utežmi, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Temperatura vzorčenja. Pri gostovanih modelih z odprtimi utežmi so vrednosti omejene med 0 in 2. Gostovani modeli z odprtimi utežmi; shannon-1.6-*, shannon-2-* in shannon-coder-1 pri odgovorih brez pretakanja
top_p number Jedrno vzorčenje (nucleus sampling). Vrednosti so omejene med 0 in 1. Gostovani modeli z odprtimi utežmi
tools array Funkcije, ki jih model lahko pokliče, v ravni obliki tega formata: {"type": "function", "name", "description", "parameters"}. Glejte Orodja spodaj. Vsi modeli
tool_choice string | object auto "auto" prepusti odločitev modelu. "required" ga prisili, da pokliče orodje. {"type": "function", "name": "…"} ga prisili, da pokliče to orodje. Gostovani modeli z odprtimi utežmi
reasoning object {"effort": "…"} z off, low, medium ali high. Vsaka druga vrednost vrne 400. Gostovani modeli z odprtimi utežmi
text object {"format": {…}} zahteva odgovor v JSON. Glejte Strukturiran izhod spodaj. Vse stopnje Shannon; gostovani modeli z odprtimi utežmi, kot je navedeno po id

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user in prompt_cache_key so sprejeti, da obstoječa odjemalska koda deluje nespremenjena. Odgovora ne spreminjajo. Ker se noben pogovor ne shranjuje, nadaljevalni zahtevek v input nosi prejšnje obrate.

Elementi vhoda

Element vhoda je sporočilo, z role in content, ali tipiziran element, ki nosi klic orodja ali njegov rezultat. content je niz ali polje delov.

Element Opis Upoštevajo
{"role": "user", "content": …} Kar vprašate. content je niz ali deli input_text in input_image. Vsi modeli
{"role": "assistant", "content": …} Prejšnji odgovor modela. content je niz ali deli output_text. Vsi modeli
{"role": "system", "content": …}
{"role": "developer", "content": …}
Navodila znotraj pogovora. Gostovani modeli z odprtimi utežmi
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Klic orodja, ki ga je model naredil v prejšnjem odgovoru. arguments je niz JSON. Vsi modeli
{"type": "function_call_output", "call_id": "…", "output": "…"} Rezultat tistega klica. call_id je id klica, output pa rezultat kot niz. Vsi modeli

Navodila vstavite v polje instructions. Pri id družine Shannon 3 navodila, ki morajo veljati, vstavite v sporočilo user.

Elemente output odgovora lahko vrnete v input take, kot so: elementi message in function_call se preberejo, elementi reasoning se preskočijo.

Deli vsebine

Del Opis Na voljo na
{"type": "input_text", "text": "…"} Besedilo sporočila uporabnika. Vsi modeli
{"type": "output_text", "text": "…"} Besedilo sporočila asistenta. Vsi modeli
{"type": "input_image", "image_url": "…"} Slika, kot URL data: z vsebino base64 ali kot URL http(s). Družina Shannon 3, shannon-1.6-lite, shannon-1.6-pro in gostovani modeli z odprtimi utežmi, ki navajajo vhod slik
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Dokument (PDF, Word, PowerPoint ali Excel): file_data vsebuje URL data: ali file_url URL http(s). Družina Shannon 3

Pri stopnjah Shannon se slike in datoteke berejo iz zadnjega elementa user v input. Velikosti in omejitve imajo svojo stran. Slike in datoteke

Zahtevek z navodili in možnostmi

Ta zahtevek pošilja navodila, pogovor kot elemente vhoda, omejitev izhoda, temperaturo in napor razmišljanja. Uporablja gostovani model z odprtimi utežmi, ki upošteva vse to.

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)

Odgovor gostovanega modela z odprtimi utežmi ima id, object, model, created_at, status, output in usage. Njegov usage doda tokene, prebrane iz predpomnilnika, in tokene, porabljene za razmišljanje:

200 JSON
{
  "usage": {
    "input_tokens": 58,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 67,
    "output_tokens_details": {
      "reasoning_tokens": 19
    },
    "total_tokens": 125
  }
}

Objekt odgovora

id, object, status, output in usage so v vsakem odgovoru. Svojo kodo gradite na njih.

Polje Tip Opis Pošlje
id string resp_, ki mu sledi 32 šestnajstiških znakov. Vsi modeli
object string Vedno response. Vsi modeli
status string completed. V toku je najprej in_progress, v dogodku response.failed pa failed. Vsi modeli
output array Elementi izhoda v vrstnem redu, v katerem jih je model ustvaril: reasoning, message, function_call. Vsi modeli
usage object input_tokens, output_tokens in total_tokens. Vsi modeli
usage.input_tokens_details object cached_tokens: vhodni tokeni, prebrani iz predpomnilnika promptov. Gostovani modeli z odprtimi utežmi
usage.output_tokens_details object reasoning_tokens: izhodni tokeni, porabljeni za razmišljanje. Gostovani modeli z odprtimi utežmi
model string Kanonični id modela, ki je odgovoril. Družina Shannon 3, gostovani modeli z odprtimi utežmi
created_at integer Čas odgovora, v sekundah Unix. Družina Shannon 3, gostovani modeli z odprtimi utežmi
instructions, tools, temperature, … instructions, tools in temperature ponovijo zahtevek. error in incomplete_details sta null, metadata je {}, parallel_tool_calls je true, tool_choice je auto in top_p je null. Družina Shannon 3

Elementi izhoda

Element Opis
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Razmišljanje modela kot en del summary_text. Prisotno samo, kadar je model razmišljal.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Odgovor: en del output_text z besedilom.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Klic orodja. arguments je niz JSON. Rezultat pošljite nazaj z istim call_id.

SDK-ji OpenAI besedilo sporočila združijo namesto vas v response.output_text.

Pretakanje

Za dogodke, ki jih pošilja strežnik (server-sent events), nastavite stream na true. Vsak okvir ima vrstico event: z imenom dogodka in vrstico data: z objektom JSON; objekt ponovi ime v type. Delte povežite z njihovim elementom prek output_index.

Z SDK-jem OpenAI dogodke preberite po njihovem 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")

Dogodki prispejo v tem vrstnem redu. Skupine za razmišljanje, sporočilo in klice orodij se pojavijo samo, kadar jih odgovor ima.

Dogodek Vsebina Kdaj
response.created response Vedno prvi. response.status je in_progress, response.output pa je prazen.
response.in_progress response Vedno drugi, z istim objektom.
response.output_item.added output_index, item Razmišljanje se začne: element reasoning s praznim summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Košček razmišljanja.
response.reasoning_summary_text.done output_index, summary_index, text Razmišljanje je popolno: njegov celoten text.
response.output_item.done output_index, item Dokončani element reasoning.
response.output_item.added output_index, item Odgovor se začne: element message s statusom in_progress in brez vsebine.
response.content_part.added output_index, content_index, part Odpre se prazen del output_text.
response.output_text.delta output_index, content_index, delta Košček odgovora.
response.output_text.done output_index, content_index, text Odgovor je popoln: njegov celoten text.
response.content_part.done output_index, content_index, part Dokončani del output_text.
response.output_item.done output_index, item Dokončani element message s statusom completed.
response.output_item.added output_index, item Klic orodja se začne: element function_call z call_id, name in praznimi arguments.
response.function_call_arguments.delta output_index, delta Argumenti klica, popolni v enem delta.
response.function_call_arguments.done output_index, arguments Isti argumenti, kot arguments.
response.output_item.done output_index, item Dokončani element function_call.
response.completed response Ob uspehu vedno zadnji: celoten objekt odgovora z output in usage.
200 text/event-stream
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}, …}}

Tok, ki odpove

Pri stopnjah Shannon se neuspel odgovor konča z response.failed namesto z response.completed. Njegov response.status je failed, response.error pa vsebuje code, rate_limit_exceeded ali server_error, in message.

Pri gostovanih modelih z odprtimi utežmi je napaka dogodek error s code api_error in message. Za njim še vedno sledi response.completed.

Tok obravnavajte kot neuspel, kadar vsebuje dogodek response.failed ali error, in zahtevek pošljite znova.

Orodja

Orodje je funkcija, ki jo zažene vaša koda. Opišite ga v tools; kadar ga model želi, odgovor namesto sporočila ali ob njem vsebuje element function_call.

Definicija orodja v tools:

tools
[
  {
    "type": "function",
    "name": "get_weather",
    "description": "Current weather for a city.",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    }
  }
]

output odgovora, ki ga kliče:

200 output
[
  {
    "id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "type": "function_call",
    "name": "get_weather",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "arguments": "{\"city\":\"Paris\"}"
  }
]

Zaženite funkcijo, nato zahtevek pošljite znova, z dodanim klicem in njegovim rezultatom v input:

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\"}"
  }
]

Berejo se samo orodja tipa function. Pri shannon-1.6-*, shannon-2-* in shannon-coder-1 je shema parameters zožena na skupne ključne besede JSON Schema: oneOf se bere kot anyOf, ključne besede, kot so $ref, additionalProperties, const, default in title, pa se modelu ne posredujejo.

Vrednosti tool_choice required in poimenovana funkcija upoštevajo gostovani modeli z odprtimi utežmi.

Zanka orodij je v celoti opisana na svoji strani. Klicanje funkcij

Strukturiran izhod

Ta format strukturiran izhod zapiše kot text.format. Shema je neposredno v format, ob name in strict, ne pod članom json_schema kot pri Chat Completions.

  • {"type": "json_object"} zahteva poljuben objekt JSON.
  • {"type": "json_schema", "name", "schema", "strict"} zahteva JSON, ki sledi vaši shemi. strict je true, kadar ga izpustite.
POST /v1/responses
{
  "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 prispe kot besedilo v delu output_text sporočila; razčlenite ga sami. Gostovani model z odprtimi utežmi brez strukturiranega izhoda vrne 400.

output_text
{"city": "Lisbon", "date": "2027-05-12"}

Kateri model sprejema katero obliko, je navedeno na svoji strani. Strukturirani izhodi

Razmišljanje

Model, ki razmišlja, vrne svoje razmišljanje kot element izhoda tipa reasoning, pred sporočilom. V toku prispe kot dogodki response.reasoning_summary_text.delta.

Gostovani modeli z odprtimi utežmi upoštevajo reasoning.effort: off, low, medium ali high, pri čemer velja high, kadar ne pošljete ničesar. off ne vrne elementa razmišljanja. Pošljite ga kot objekt; goli niz na tej končni točki ni prebran.

Napori so opisani na svoji strani. Napor razmišljanja

Omejitev izhoda

max_output_tokens je 4,096, kadar ga ne pošljete. To je število tokenov, odloženih z vašega stanja, ko se zahtevek začne; ko je odgovor popoln, se ta znesek nadomesti s tem, kar je zahtevek porabil. Vrednost, ki se ne prilega v vaše preostalo stanje, vrne 429 Quota exceeded.

Omejuje dolžino odgovora pri shannon-1.6-*, shannon-2-* in shannon-coder-1 ter dolžino besedila odgovora pri gostovanih modelih z odprtimi utežmi.

Na tej končni točki se shannon-coder-1 obračuna v tokenih z vašega stanja, kot vsak drug model.

Telo zahtevka je lahko veliko do 32 MiB. Omejitve in stanje

Napake

Napake uporabljajo telo napake OpenAI: objekt error s type in message; nekatere nosijo tudi code in param z vrednostjo null. Tabela navaja, kar ta končna točka vrača najpogosteje. Celoten seznam, s tem, kaj ponoviti, ima svojo stran. Obravnava napak

Status Tip Sporočilo Kdaj
401 authentication_error Missing authentication
Invalid API key
API ključ ni bil poslan ali pa je ključ neznan ali preklican.
400 invalid_request_error unknown model: <id> model manjka ali ni objavljen id.
400 invalid_request_error No user message provided. Stopnje Shannon: input ne vsebuje besedila uporabnika.
400 invalid_request_error <id> does not accept image input Slika je bila poslana gostovanemu modelu z odprtimi utežmi brez vhoda slik.
400 invalid_request_error <id> does not accept response_format text.format je bil poslan gostovanemu modelu z odprtimi utežmi brez strukturiranega izhoda.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort vsebuje vrednost zunaj seznama.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Telo je veljaven JSON, vendar ima polje napačen tip.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens je večji od tega, kar je ostalo od vašega stanja.
429 rate_limit_error Too many requests. Retry in <n>s. Zaščita pred poplavo: več kot 120 zahtevkov v eni minuti na vašem računu.
500 api_error The model backend failed to answer. Please retry. Model ni ustvaril odgovora. Pošljite zahtevek znova.
502 api_error The model backend failed to answer. Please retry. Enako, pri gostovanih modelih z odprtimi utežmi.
504 api_error upstream timed out Gostovani model z odprtimi utežmi je potreboval dlje od časovne omejitve odgovora brez pretakanja. Pošljite ga z stream nastavljenim na true.