Preskoči na sadržaj
Responses API

Responses API

Novo

POST /v1/responses prima uputstva i listu stavki ulaza i vraća objekat odgovora sastavljen od stavki izlaza, u OpenAI Responses formatu. Koristite ga sa responses API-jem OpenAI SDK-a i alatima izgrađenim na njemu, kao što je Codex CLI. Endpoint ne čuva stanje: šaljite ceo razgovor uz svaki zahtev.

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

Najmanji zahtev je id modela i tekst. Odgovor nije strimovan osim ako to ne 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 rezonovanje, kada je model rezonovao, 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 zahteva

model i input su ono što zahtev treba. Kolona Primenjuju navodi modele na kojima polje menja odgovor. Hostovani open-weight modeli su dvanaest id-jeva sa liste modela; porodica Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cene

Polje Tip Podrazumevano Opis Primenjuju
model string Obavezno. Id sa liste modela. Poređenje 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 stavki ulaza. Pogledajte Stavke ulaza ispod. Svi modeli
instructions string Uputstva za model, system prompt ovog formata. Hostovani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true šalje odgovor kao server-sent events. Pogledajte Streaming ispod. Svi modeli
max_output_tokens integer 4096 Gornja granica odgovora, u tokenima. Vrednost van opsega od 1 do 65,536 pomera se u taj opseg. To je i iznos koji se izdvaja sa vašeg stanja dok zahtev traje. Pogledajte Ograničenje izlaza ispod. Hostovani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Temperatura uzorkovanja. Na hostovanim open-weight modelima vrednosti se drže između 0 i 2. Hostovani open-weight modeli; shannon-1.6-*, shannon-2-* i shannon-coder-1 na odgovorima bez streama
top_p number Nucleus uzorkovanje. Vrednosti se drže između 0 i 1. Hostovani open-weight modeli
tools array Funkcije koje model sme da pozove, u ravnom obliku ovog formata: {"type": "function", "name", "description", "parameters"}. Pogledajte Alati ispod. Svi modeli
tool_choice string | object auto "auto" prepušta odluku modelu. "required" tera ga da pozove alat. {"type": "function", "name": "…"} tera ga da pozove taj alat. Hostovani open-weight modeli
reasoning object {"effort": "…"} sa off, low, medium ili high. Svaka druga vrednost vraća 400. Hostovani open-weight modeli
text object {"format": {…}} traži JSON odgovor. Pogledajte Strukturirani izlaz ispod. Svi Shannon nivoi; hostovani open-weight modeli kako je navedeno po id-ju

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user i prompt_cache_key se prihvataju da bi postojeći klijentski kod radio nepromenjen. Ne menjaju odgovor. Pošto se nijedan razgovor ne čuva, naknadni zahtev nosi ranije poteze u input.

Stavke ulaza

Stavka ulaza je ili poruka, sa role i content, ili tipizirana stavka koja nosi poziv alata ili njegov rezultat. content je string ili niz delova.

Stavka Opis Primenjuju
{"role": "user", "content": …} Ono što pitate. content je string ili delovi input_text i input_image. Svi modeli
{"role": "assistant", "content": …} Raniji odgovor modela. content je string ili delovi output_text. Svi modeli
{"role": "system", "content": …}
{"role": "developer", "content": …}
Uputstva unutar razgovora. Hostovani open-weight modeli
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Poziv alata koji je model uputio 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 uputstva u polje instructions. Sa id-jem iz porodice Shannon 3 stavite uputstva koja moraju da važe u user poruku.

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

Delovi sadržaja

Deo 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 hostovani open-weight modeli koji navode sliku na ulazu
{"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 fajlovi se čitaju iz poslednje user stavke u input. Veličine i ograničenja imaju svoju stranicu. Slike i fajlovi

Zahtev sa uputstvima i opcijama

Ovaj zahtev šalje uputstva, razgovor kao stavke ulaza, ograničenje izlaza, temperaturu i napor pri zaključivanju. Koristi hostovani open-weight model, koji primenjuje sve 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 hostovanog open-weight modela ima id, object, model, created_at, status, output i usage. Njegov usage dodaje tokene pročitane iz keša i tokene potrošene na rezonovanje:

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 na svakom odgovoru. Na njima gradite svoj kod.

Polje Tip Opis Šalje
id string resp_ iza kog sledi 32 heksadecimalna znaka. Svi modeli
object string Uvek response. Svi modeli
status string completed. U streamu je prvo in_progress, a failed u događaju response.failed. Svi modeli
output array Stavke izlaza redom 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 promptova. Hostovani open-weight modeli
usage.output_tokens_details object reasoning_tokens: izlazni tokeni potrošeni na rezonovanje. Hostovani open-weight modeli
model string Kanonski id modela koji je odgovorio. Porodica Shannon 3, hostovani open-weight modeli
created_at integer Vreme odgovora, u Unix sekundama. Porodica Shannon 3, hostovani open-weight modeli
instructions, tools, temperature, … instructions, tools i temperature ponavljaju zahtev. 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

Stavke izlaza

Stavka Opis
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Rezonovanje modela kao jedan deo summary_text. Prisutno samo kada je model rezonovao.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Odgovor: jedan deo output_text sa tekstom.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Poziv alata. arguments je JSON string. Rezultat pošaljite nazad sa istim call_id.

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

Streaming

Postavite stream na true za server-sent events. Svaki frame ima liniju event: sa imenom događaja i liniju data: sa JSON objektom; objekat ponavlja ime u type. Povežite delta-e sa njihovom stavkom pomoću output_index.

Sa OpenAI SDK-om č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 redom. Grupe za rezonovanje, poruku i pozive alata pojavljuju se samo kada ih odgovor ima.

Događaj Sadržaj Kada
response.created response Uvek prvi. response.status je in_progress, a response.output je prazan.
response.in_progress response Uvek drugi, sa istim objektom.
response.output_item.added output_index, item Rezonovanje počinje: stavka reasoning sa praznim summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Deo rezonovanja.
response.reasoning_summary_text.done output_index, summary_index, text Rezonovanje je završeno: njegov ceo text.
response.output_item.done output_index, item Završena stavka reasoning.
response.output_item.added output_index, item Odgovor počinje: stavka message sa statusom in_progress i bez sadržaja.
response.content_part.added output_index, content_index, part Otvara se prazan deo output_text.
response.output_text.delta output_index, content_index, delta Deo odgovora.
response.output_text.done output_index, content_index, text Odgovor je završen: njegov ceo text.
response.content_part.done output_index, content_index, part Završen deo output_text.
response.output_item.done output_index, item Završena stavka message, sa statusom completed.
response.output_item.added output_index, item Poziv alata počinje: stavka function_call sa call_id, name i praznim arguments.
response.function_call_arguments.delta output_index, delta Argumenti poziva, kompletni u jednom delta-u.
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 Uvek poslednji kod uspeha: ceo objekat odgovora sa 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 uspe

Na Shannon nivoima neuspeli odgovor se završava događajem response.failed umesto response.completed. Njegov response.status je failed, a response.error sadrži code, rate_limit_exceeded ili server_error, i message.

Na hostovanim open-weight modelima kvar je događaj error sa code api_error i message. response.completed i dalje sledi iza njega.

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

Alati

Alat je funkcija koju izvršava vaš kod. Opišite ga u tools; kada ga model želi, odgovor sadrži stavku function_call umesto 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\"}"
  }
]

Izvršite funkciju, zatim ponovo pošaljite zahtev sa pozivom i njegovim rezultatom dodatim 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 se svodi na uobičajene ključne reči JSON šeme: oneOf se čita kao anyOf, a ključne reči kao što su $ref, additionalProperties, const, default i title ne prosleđuju se modelu.

Vrednosti tool_choice required i imenovana funkcija primenjuju hostovani open-weight modeli.

Petlja alata je u celini opisana na svojoj stranici. Pozivanje funkcija

Strukturirani izlaz

Ovaj format piše strukturirani izlaz 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 delu output_text poruke; parsirajte ga sami. Hostovani 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 svojoj stranici. Strukturirani izlazi

Reasoning

Model koji rezonuje vraća svoje rezonovanje kao stavku izlaza tipa reasoning, pre poruke. U streamu stiže kao događaji response.reasoning_summary_text.delta.

Hostovani open-weight modeli primenjuju reasoning.effort: off, low, medium ili high, a high kada ne pošaljete ništa. off ne vraća stavku rezonovanja. Pošaljite ga kao objekat; običan string se na ovom endpointu ne čita.

Nivoi napora opisani su na svojoj stranici. Napor pri zaključivanju

Ograničenje izlaza

max_output_tokens je 4,096 kada ga ne pošaljete. To je broj tokena koji se izdvaja sa vašeg stanja kada zahtev počne; kada je odgovor završen, taj iznos se zamenjuje onim što je zahtev iskoristio. Vrednost koja se ne uklapa 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, i dužinu teksta odgovora na hostovanim open-weight modelima.

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

Telo zahteva može imati do 32 MiB. Ograničenja i stanje

Greške

Greške koriste OpenAI telo greške: objekat error sa type i message; neke nose i code i param sa vrednošću null. Tabela navodi šta ovaj endpoint najčešće vraća. Kompletna lista, sa uputstvom šta ponoviti, ima svoju stranicu. Upravljanje greškama

Status Tip Poruka Kada
401 authentication_error Missing authentication
Invalid API key
API ključ nije poslat, 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 poslata hostovanom open-weight modelu bez podrške za sliku na ulazu.
400 invalid_request_error <id> does not accept response_format text.format je poslat hostovanom open-weight modelu bez strukturiranog izlaza.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort sadrži vrednost van liste.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Telo je važeći 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 preostalo na vašem stanju.
429 rate_limit_error Too many requests. Retry in <n>s. Zaštita od flooda (flood protection): više od 120 zahteva u jednom minutu na vašem nalogu.
500 api_error The model backend failed to answer. Please retry. Model nije proizveo odgovor. Pošaljite zahtev ponovo.
502 api_error The model backend failed to answer. Please retry. Isto, na hostovanim open-weight modelima.
504 api_error upstream timed out Hostovani open-weight model je trajao duže od vremenskog ograničenja odgovora bez streama. Pošaljite ga sa stream postavljenim na true.