Preskoči na sadržaj
Responses API

Responses API

Novo

POST /v1/responses prima upute i listu ulaznih stavki i vraća objekat odgovora sastavljen od izlaznih stavki, u formatu OpenAI Responses. Koristite ga s responses API-jem OpenAI SDK-a i s alatima izgrađenim na njemu, kao što je Codex CLI. Endpoint ne čuva stanje: šaljite cijeli razgovor sa svakim zahtjevom.

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

Najmanji zahtjev je id modela i tekst. Odgovor nema streaming osim ako ga zatražite.

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 objekat odgovora. Njegov output sadrži razmišljanje, kada je model razmišljao, i poruku:

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 zahtjeva

model i input su ono što zahtjev treba. Kolona Primjenjuju navodi modele na kojima polje mijenja odgovor. Hostirani open-weight modeli su dvanaest id-ova s liste modela; porodica Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cijene

Polje Tip Zadano Opis Primjenjuju
model string Obavezno. Id s liste modela. Podudaranje ne razlikuje velika i mala slova. Id koji nedostaje ili nije objavljen vraća 400 unknown model. Svi modeli
input string | array String, koji se čita kao jedna korisnička poruka, ili niz ulaznih stavki. Pogledajte Ulazne stavke u nastavku. Svi modeli
instructions string Upute za model, system prompt ovog formata. Hostirani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true šalje odgovor kao server-sent events. Pogledajte Streaming u nastavku. Svi modeli
max_output_tokens integer 4096 Gornja granica odgovora, u tokenima. Vrijednost izvan raspona od 1 do 65,536 pomjera se u taj raspon. To je i iznos izdvojen sa vašeg stanja dok zahtjev traje. Pogledajte Ograničenje izlaza u nastavku. Hostirani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Temperatura uzorkovanja. Na hostiranim open-weight modelima vrijednosti se drže između 0 i 2. Hostirani open-weight modeli; shannon-1.6-*, shannon-2-* i shannon-coder-1 na odgovorima bez streaminga
top_p number Nucleus uzorkovanje. Vrijednosti se drže između 0 i 1. Hostirani open-weight modeli
tools array Funkcije koje model smije pozvati, u ravnom obliku ovog formata: {"type": "function", "name", "description", "parameters"}. Pogledajte Alati u nastavku. Svi modeli
tool_choice string | object auto "auto" prepušta odluku modelu. "required" tjera ga da pozove alat. {"type": "function", "name": "…"} tjera ga da pozove taj alat. Hostirani open-weight modeli
reasoning object {"effort": "…"} sa off, low, medium ili high. Svaka druga vrijednost vraća 400. Hostirani open-weight modeli
text object {"format": {…}} traži JSON odgovor. Pogledajte Strukturirani izlaz u nastavku. Svi Shannon nivoi; hostirani open-weight modeli kako je navedeno po id-u

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user i prompt_cache_key se prihvataju kako bi postojeći klijentski kod radio neizmijenjen. Ne mijenjaju odgovor. Budući da se nijedan razgovor ne sprema, naredni zahtjev nosi ranije krugove u input.

Ulazne stavke

Ulazna stavka je ili poruka, s role i content, ili tipizirana stavka koja nosi poziv alata ili njegov rezultat. content je string ili niz dijelova.

Stavka Opis Primjenjuju
{"role": "user", "content": …} Ono što pitate. content je string, ili dijelovi input_text i input_image. Svi modeli
{"role": "assistant", "content": …} Raniji odgovor modela. content je string, ili dijelovi output_text. Svi modeli
{"role": "system", "content": …}
{"role": "developer", "content": …}
Upute unutar razgovora. Hostirani open-weight modeli
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Poziv alata koji je model napravio u ranijem odgovoru. arguments je JSON string. Svi modeli
{"type": "function_call_output", "call_id": "…", "output": "…"} Rezultat tog poziva. call_id je id poziva, a output rezultat kao string. Svi modeli

Stavite upute u polje instructions. Uz id porodice Shannon 3, upute koje moraju važiti stavite u poruku user.

Stavke output iz odgovora mogu se vratiti u input takve kakve jesu: stavke message i function_call se čitaju, stavke reasoning se preskaču.

Dijelovi sadržaja

Dio Opis Dostupno na
{"type": "input_text", "text": "…"} Tekst korisničke poruke. Svi modeli
{"type": "output_text", "text": "…"} Tekst poruke asistenta. Svi modeli
{"type": "input_image", "image_url": "…"} Slika, kao data: URL sa base64 sadržajem ili kao http(s) URL. Porodica Shannon 3, shannon-1.6-lite, shannon-1.6-pro i hostirani open-weight modeli koji navode ulaz slika
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Dokument (PDF, Word, PowerPoint ili Excel): file_data sadrži data: URL, ili file_url http(s) URL. Porodica Shannon 3

Na Shannon nivoima slike i datoteke se čitaju iz posljednje stavke user u input. Veličine i ograničenja imaju svoju stranicu. Slike i datoteke

Zahtjev s uputama i opcijama

Ovaj zahtjev šalje upute, razgovor kao ulazne stavke, ograničenje izlaza, temperaturu i jačinu razmišljanja. Koristi hostirani open-weight model, koji primjenjuje sve njih.

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 hostiranog open-weight modela ima id, object, model, created_at, status, output i usage. Njegov usage dodaje tokene pročitane iz keša i tokene utrošene na 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
  }
}

Objekat odgovora

id, object, status, output i usage nalaze se u svakom odgovoru. Na njima zasnujte svoj kod.

Polje Tip Opis Šalje
id string resp_ iza kojeg slijedi 32 heksadecimalna znaka. Svi modeli
object string Uvijek response. Svi modeli
status string completed. U streamu je prvo in_progress, a failed u događaju response.failed. Svi modeli
output array Izlazne stavke redoslijedom kojim ih je model proizveo: reasoning, message, function_call. Svi modeli
usage object input_tokens, output_tokens i total_tokens. Svi modeli
usage.input_tokens_details object cached_tokens: ulazni tokeni pročitani iz keša prompta. Hostirani open-weight modeli
usage.output_tokens_details object reasoning_tokens: izlazni tokeni utrošeni na razmišljanje. Hostirani open-weight modeli
model string Kanonski id modela koji je odgovorio. Porodica Shannon 3, hostirani open-weight modeli
created_at integer Vrijeme odgovora, u Unix sekundama. Porodica Shannon 3, hostirani open-weight modeli
instructions, tools, temperature, … instructions, tools i temperature ponavljaju zahtjev. error i incomplete_details su null, metadata je {}, parallel_tool_calls je true, tool_choice je auto, a top_p je null. Porodica Shannon 3

Izlazne stavke

Stavka Opis
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Razmišljanje modela kao jedan dio summary_text. Postoji samo kada je model razmišljao.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Odgovor: jedan dio output_text s tekstom.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Poziv alata. arguments je JSON string. Pošaljite rezultat nazad s istim call_id.

OpenAI SDK-ovi za vas spajaju tekst poruke u response.output_text.

Streaming

Postavite stream na true za server-sent events. Svaki frame ima liniju event: s imenom događaja i liniju data: s JSON objektom; objekat ponavlja ime u type. Delte uparujte s njihovom stavkom preko output_index.

Uz OpenAI SDK, čitajte događaje po njihovom 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")

Događaji stižu ovim redoslijedom. Grupe za razmišljanje, poruku i pozive alata pojavljuju se samo kada ih odgovor ima.

Događaj Sadržaj Kada
response.created response Uvijek prvi. response.status je in_progress, a response.output je prazan.
response.in_progress response Uvijek drugi, s istim objektom.
response.output_item.added output_index, item Počinje razmišljanje: stavka reasoning s praznim summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Dio razmišljanja.
response.reasoning_summary_text.done output_index, summary_index, text Razmišljanje je završeno: njegov cijeli text.
response.output_item.done output_index, item Završena stavka reasoning.
response.output_item.added output_index, item Počinje odgovor: stavka message sa statusom in_progress i bez sadržaja.
response.content_part.added output_index, content_index, part Otvara se prazan dio output_text.
response.output_text.delta output_index, content_index, delta Dio odgovora.
response.output_text.done output_index, content_index, text Odgovor je završen: njegov cijeli text.
response.content_part.done output_index, content_index, part Završen dio output_text.
response.output_item.done output_index, item Završena stavka message, sa statusom completed.
response.output_item.added output_index, item Počinje poziv alata: stavka function_call sa call_id, name i praznim arguments.
response.function_call_arguments.delta output_index, delta Argumenti poziva, kompletni u jednoj delti.
response.function_call_arguments.done output_index, arguments Isti argumenti, kao arguments.
response.output_item.done output_index, item Završena stavka function_call.
response.completed response Uvijek zadnji pri uspjehu: cijeli objekat odgovora s output i 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}, …}}

Stream koji ne uspije

Na Shannon nivoima neuspjeli odgovor završava s response.failed umjesto response.completed. Njegov response.status je failed, a response.error sadrži code, rate_limit_exceeded ili server_error, i message.

Na hostiranim open-weight modelima greška je događaj error s code api_error i message. Iza njega i dalje slijedi response.completed.

Smatrajte stream neuspjelim kada sadrži response.failed ili događaj error, i pošaljite zahtjev ponovo.

Alati

Alat je funkcija koju pokreće vaš kod. Opišite ga u tools; kada ga model želi, odgovor sadrži stavku function_call umjesto poruke ili pored nje.

Definicija alata u tools:

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

output odgovora koji ga poziva:

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

Pokrenite funkciju, zatim ponovo pošaljite zahtjev s pozivom i njegovim rezultatom dodanim u 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\"}"
  }
]

Čitaju se samo alati tipa function. Na shannon-1.6-*, shannon-2-* i shannon-coder-1 šema parameters svodi se na zajedničke ključne riječi JSON Schema: oneOf se čita kao anyOf, a ključne riječi kao što su $ref, additionalProperties, const, default i title ne prosljeđuju se modelu.

Vrijednosti tool_choice required i imenovana funkcija primjenjuju hostirani open-weight modeli.

Petlja alata opisana je u cijelosti na vlastitoj stranici. Pozivanje funkcija

Strukturirani izlaz

Ovaj format strukturirani izlaz piše kao text.format. Šema stoji direktno u format, pored name i strict, a ne pod članom json_schema kao na Chat Completions.

  • {"type": "json_object"} traži bilo koji JSON objekat.
  • {"type": "json_schema", "name", "schema", "strict"} traži JSON koji prati vašu šemu. strict je true kada ga izostavite.
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 stiže kao tekst u dijelu output_text poruke; parsirajte ga sami. Hostirani open-weight model bez strukturiranog izlaza vraća 400.

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

Koji model prima koji oblik navedeno je na vlastitoj stranici. Strukturirani izlazi

Razmišljanje

Model koji razmišlja vraća svoje razmišljanje kao izlaznu stavku tipa reasoning, prije poruke. U streamu stiže kao događaji response.reasoning_summary_text.delta.

Hostirani open-weight modeli primjenjuju reasoning.effort: off, low, medium ili high, a high kada ne pošaljete ništa. off ne vraća stavku razmišljanja. Pošaljite ga kao objekat; goli string se na ovom endpointu ne čita.

Jačine razmišljanja opisane su na vlastitoj stranici. Reasoning effort

Ograničenje izlaza

max_output_tokens je 4,096 kada ga ne pošaljete. To je broj tokena izdvojen sa vašeg stanja kada zahtjev počne; kada je odgovor kompletan, taj iznos se zamjenjuje onim što je zahtjev iskoristio. Vrijednost koja ne stane u vaše preostalo stanje vraća 429 Quota exceeded.

Ograničava dužinu odgovora na shannon-1.6-*, shannon-2-* i shannon-coder-1, te dužinu teksta odgovora na hostiranim open-weight modelima.

Na ovom endpointu shannon-coder-1 se naplaćuje u tokenima sa vašeg stanja, kao i svaki drugi model.

Tijelo zahtjeva može imati do 32 MiB. Ograničenja i stanje

Greške

Greške koriste OpenAI tijelo greške: objekat error s type i message; neke nose i code i param s vrijednošću null. Tabela navodi ono što ovaj endpoint najčešće vraća. Puna lista, s onim što treba ponoviti, ima svoju stranicu. Upravljanje greškama

Status Tip Poruka Kada
401 authentication_error Missing authentication
Invalid API key
API ključ nije poslan, ili je ključ nepoznat ili opozvan.
400 invalid_request_error unknown model: <id> model nedostaje ili nije objavljeni id.
400 invalid_request_error No user message provided. Shannon nivoi: input ne sadrži korisnički tekst.
400 invalid_request_error <id> does not accept image input Slika je poslana hostiranom open-weight modelu bez ulaza slika.
400 invalid_request_error <id> does not accept response_format text.format je poslan hostiranom open-weight modelu bez strukturiranog izlaza.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort sadrži vrijednost izvan liste.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Tijelo je valjan JSON, ali polje ima pogrešan tip.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens je veći od onoga što je ostalo na vašem stanju.
429 rate_limit_error Too many requests. Retry in <n>s. Flood zaštita: više od 120 zahtjeva u jednoj minuti na vašem računu.
500 api_error The model backend failed to answer. Please retry. Model nije proizveo odgovor. Pošaljite zahtjev ponovo.
502 api_error The model backend failed to answer. Please retry. Isto, na hostiranim open-weight modelima.
504 api_error upstream timed out Hostirani open-weight model trebao je duže od vremenskog ograničenja odgovora bez streaminga. Pošaljite zahtjev sa stream postavljenim na true.