Hoppa till innehållet
Responses API

Responses API

Ny

POST /v1/responses tar instruktioner och en lista med inputobjekt och returnerar ett response-objekt som består av outputobjekt, i OpenAI Responses-formatet. Använd den med responses-API:et i OpenAI-SDK:n och med verktyg som bygger på det, som Codex CLI. Endpointen sparar inget tillstånd: skicka hela konversationen med varje begäran.

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

Den minsta begäran är ett modell-id och en text. Svaret streamas inte om du inte ber om det.

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)

Svaret är ett response-objekt. Dess output innehåller resonemanget, när modellen resonerade, och meddelandet:

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
  }
}

Begäranfält

model och input är vad en begäran behöver. Kolumnen Tillämpas av anger de modeller där ett fält ändrar svaret. De hostade open-weight-modellerna är de tolv id:na i modelllistan; Shannon 3-familjen är shannon-3, shannon-3-pro, shannon-3.1 och shannon-3.1-pro. Modeller och priser

Fält Typ Standard Beskrivning Tillämpas av
model string Obligatoriskt. Ett id från modelllistan. Matchningen är inte skiftlägeskänslig. Ett saknat eller opublicerat id returnerar 400 unknown model. Alla modeller
input string | array En sträng, som läses som ett användarmeddelande, eller en array av inputobjekt. Se Inputobjekt nedan. Alla modeller
instructions string Instruktioner till modellen, det här formatets systemprompt. Hostade open-weight-modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true skickar svaret som server-sent events. Se Streaming nedan. Alla modeller
max_output_tokens integer 4096 Övre gräns för svaret, i tokens. Ett värde utanför 1 till 65,536 flyttas in i det intervallet. Det är också det belopp som reserveras från din balans medan begäran pågår. Se Outputgräns nedan. Hostade open-weight-modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Samplingtemperatur. På de hostade open-weight-modellerna hålls värdena mellan 0 och 2. Hostade open-weight-modeller; shannon-1.6-*, shannon-2-* och shannon-coder-1 i svar som inte streamas
top_p number Nucleus sampling. Värdena hålls mellan 0 och 1. Hostade open-weight-modeller
tools array De funktioner som modellen får anropa, i det här formatets platta form: {"type": "function", "name", "description", "parameters"}. Se Verktyg nedan. Alla modeller
tool_choice string | object auto "auto" låter modellen bestämma. "required" får den att anropa ett verktyg. {"type": "function", "name": "…"} får den att anropa just det verktyget. Hostade open-weight-modeller
reasoning object {"effort": "…"} med off, low, medium eller high. Varje annat värde returnerar 400. Hostade open-weight-modeller
text object {"format": {…}} ber om ett JSON-svar. Se Strukturerad output nedan. Alla Shannon-nivåer; hostade open-weight-modeller enligt listan per id

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user och prompt_cache_key accepteras så att befintlig klientkod körs oförändrad. De ändrar inte svaret. Eftersom ingen konversation sparas bär en uppföljande begäran de tidigare vändningarna i input.

Inputobjekt

Ett inputobjekt är antingen ett meddelande, med en role och ett content, eller ett typat objekt som bär ett verktygsanrop eller dess resultat. content är en sträng eller en array av delar.

Objekt Beskrivning Tillämpas av
{"role": "user", "content": …} Vad du frågar. content är en sträng, eller delar av typen input_text och input_image. Alla modeller
{"role": "assistant", "content": …} Ett tidigare svar från modellen. content är en sträng, eller output_text-delar. Alla modeller
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instruktioner inne i konversationen. Hostade open-weight-modeller
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Ett verktygsanrop som modellen gjorde i ett tidigare svar. arguments är en JSON-sträng. Alla modeller
{"type": "function_call_output", "call_id": "…", "output": "…"} Resultatet av det anropet. call_id är anropets id och output resultatet som en sträng. Alla modeller

Lägg instruktioner i fältet instructions. Med ett id i Shannon 3-familjen lägger du instruktioner som måste gälla i user-meddelandet.

Objekten i ett svars output kan gå tillbaka in i input som de är: message- och function_call-objekt läses, reasoning-objekt hoppas över.

Innehållsdelar

Del Beskrivning Tillgängligt på
{"type": "input_text", "text": "…"} Text i ett användarmeddelande. Alla modeller
{"type": "output_text", "text": "…"} Text i ett assistentmeddelande. Alla modeller
{"type": "input_image", "image_url": "…"} En bild, som en data:-URL med base64-innehåll eller som en http(s)-URL. Shannon 3-familjen, shannon-1.6-lite, shannon-1.6-pro och de hostade open-weight-modeller som anger bildinput
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Ett dokument (PDF, Word, PowerPoint eller Excel): file_data innehåller en data:-URL, eller file_url en http(s)-URL. Shannon 3-familjen

På Shannon-nivåerna läses bilder och filer från det sista user-objektet i input. Storlekar och gränser har en egen sida. Bilder och filer

En begäran med instruktioner och alternativ

Den här begäran skickar instruktioner, en konversation som inputobjekt, en outputgräns, en temperatur och en resonemangsnivå. Den använder en hostad open-weight-modell, som tillämpar alla.

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)

Svaret från en hostad open-weight-modell har id, object, model, created_at, status, output och usage. Dess usage lägger till de tokens som lästes från cachen och de tokens som gick åt till resonemang:

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

Response-objektet

id, object, status, output och usage finns i varje svar. Bygg din kod på dem.

Fält Typ Beskrivning Skickas av
id string resp_ följt av 32 hexadecimala tecken. Alla modeller
object string Alltid response. Alla modeller
status string completed. I en ström är den först in_progress, och failed i en response.failed-händelse. Alla modeller
output array Outputobjekten i den ordning som modellen skapade dem: reasoning, message, function_call. Alla modeller
usage object input_tokens, output_tokens och total_tokens. Alla modeller
usage.input_tokens_details object cached_tokens: de inputtokens som lästes från prompt-cachen. Hostade open-weight-modeller
usage.output_tokens_details object reasoning_tokens: de outputtokens som gick åt till resonemang. Hostade open-weight-modeller
model string Det kanoniska id:t för modellen som svarade. Shannon 3-familjen, hostade open-weight-modeller
created_at integer Svarets tidpunkt, i Unix-sekunder. Shannon 3-familjen, hostade open-weight-modeller
instructions, tools, temperature, … instructions, tools och temperature upprepar begäran. error och incomplete_details är null, metadata är {}, parallel_tool_calls är true, tool_choice är auto och top_p är null. Shannon 3-familjen

Outputobjekt

Objekt Beskrivning
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Modellens resonemang som en summary_text-del. Finns bara när modellen resonerade.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Svaret: en output_text-del med texten.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Ett verktygsanrop. arguments är en JSON-sträng. Skicka tillbaka resultatet med samma call_id.

OpenAI-SDK:erna sammanfogar meddelandets text åt dig i response.output_text.

Streaming

Sätt stream till true för server-sent events. Varje frame har en event:-rad med händelsens namn och en data:-rad med ett JSON-objekt; objektet upprepar namnet i type. Koppla deltan till sitt objekt med output_index.

Med OpenAI-SDK:n läser du händelserna efter deras 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")

Händelserna kommer i den här ordningen. Grupperna för resonemang, meddelandet och verktygsanrop förekommer bara när svaret har dem.

Händelse Nyttolast När
response.created response Alltid först. response.status är in_progress och response.output är tomt.
response.in_progress response Alltid tvåa, med samma objekt.
response.output_item.added output_index, item Resonemanget startar: ett reasoning-objekt med en tom summary.
response.reasoning_summary_text.delta output_index, summary_index, delta En bit av resonemanget.
response.reasoning_summary_text.done output_index, summary_index, text Resonemanget är komplett: hela dess text.
response.output_item.done output_index, item Det färdiga reasoning-objektet.
response.output_item.added output_index, item Svaret startar: ett message-objekt med status in_progress och inget innehåll.
response.content_part.added output_index, content_index, part En tom output_text-del öppnas.
response.output_text.delta output_index, content_index, delta En bit av svaret.
response.output_text.done output_index, content_index, text Svaret är komplett: hela dess text.
response.content_part.done output_index, content_index, part Den färdiga output_text-delen.
response.output_item.done output_index, item Det färdiga message-objektet, med status completed.
response.output_item.added output_index, item Ett verktygsanrop startar: ett function_call-objekt med call_id, name och tomma arguments.
response.function_call_arguments.delta output_index, delta Anropets argument, kompletta i ett enda delta.
response.function_call_arguments.done output_index, arguments Samma argument, som arguments.
response.output_item.done output_index, item Det färdiga function_call-objektet.
response.completed response Alltid sist vid lyckat svar: hela response-objektet med output och 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}, …}}

En ström som misslyckas

På Shannon-nivåerna slutar ett misslyckat svar med response.failed i stället för response.completed. Dess response.status är failed och response.error innehåller en code, rate_limit_exceeded eller server_error, och ett message.

På de hostade open-weight-modellerna är ett fel en error-händelse med code api_error och ett message. response.completed följer ändå efter den.

Behandla en ström som misslyckad när den innehåller en response.failed- eller en error-händelse, och skicka begäran igen.

Verktyg

Ett verktyg är en funktion som din kod kör. Beskriv det i tools; när modellen vill ha det innehåller svaret ett function_call-objekt i stället för, eller bredvid, meddelandet.

En verktygsdefinition i tools:

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

output i ett svar som anropar det:

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

Kör funktionen och skicka sedan begäran igen med anropet och dess resultat tillagda i 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\"}"
  }
]

Endast verktyg av typen function läses. På shannon-1.6-*, shannon-2-* och shannon-coder-1 reduceras parameters-schemat till de vanliga JSON Schema-nyckelorden: oneOf läses som anyOf, och nyckelord som $ref, additionalProperties, const, default och title förs inte vidare till modellen.

tool_choice-värdena required och en namngiven funktion tillämpas av de hostade open-weight-modellerna.

Verktygsloopen beskrivs i sin helhet på sin egen sida. Funktionsanrop

Strukturerad output

Det här formatet skriver strukturerad output som text.format. Schemat ligger direkt i format, bredvid name och strict, inte under en json_schema-medlem som på Chat Completions.

  • {"type": "json_object"} ber om vilket JSON-objekt som helst.
  • {"type": "json_schema", "name", "schema", "strict"} ber om JSON som följer ditt schema. strict är true när du utelämnar det.
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-koden kommer som text i meddelandets output_text-del; parsa den själv. En hostad open-weight-modell utan strukturerad output returnerar 400.

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

Vilken modell som tar vilken form listas på sin egen sida. Strukturerade utdata

Resonemang

En modell som resonerar returnerar sitt resonemang som ett outputobjekt av typen reasoning, före meddelandet. I en ström kommer det som response.reasoning_summary_text.delta-händelser.

De hostade open-weight-modellerna tillämpar reasoning.effort: off, low, medium eller high, med high när du inte skickar något. off returnerar inget resonemangsobjekt. Skicka det som ett objekt; en ren sträng läses inte på den här endpointen.

Resonemangsnivåerna beskrivs på sin egen sida. Resonemangsansträngning

Outputgräns

max_output_tokens är 4,096 när du inte skickar det. Det är det antal tokens som reserveras från din balans när begäran startar; när svaret är komplett ersätts det beloppet av det som begäran använde. Ett värde som inte ryms i din återstående balans returnerar 429 Quota exceeded.

Den begränsar svarets längd på shannon-1.6-*, shannon-2-* och shannon-coder-1, och svarstextens längd på de hostade open-weight-modellerna.

På den här endpointen debiteras shannon-coder-1 i tokens från din balans, som varje annan modell.

En begäranbody kan vara upp till 32 MiB. Gränser och balans

Fel

Fel använder OpenAI:s felbody: ett error-objekt med type och message; vissa bär också code och param med värdet null. Tabellen listar det som den här endpointen oftast returnerar. Den fullständiga listan, med vad som kan försökas igen, har en egen sida. Felhantering

Status Typ Meddelande När
401 authentication_error Missing authentication
Invalid API key
Ingen API-nyckel skickades, eller nyckeln är okänd eller återkallad.
400 invalid_request_error unknown model: <id> model saknas eller är inte ett publicerat id.
400 invalid_request_error No user message provided. Shannon-nivåer: input innehåller ingen användartext.
400 invalid_request_error <id> does not accept image input En bild skickades till en hostad open-weight-modell utan bildinput.
400 invalid_request_error <id> does not accept response_format text.format skickades till en hostad open-weight-modell utan strukturerad output.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort innehåller ett värde utanför listan.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Bodyn är giltig JSON men ett fält har fel typ.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens är större än det som återstår av din balans.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: fler än 120 begäranden på en minut på ditt konto.
500 api_error The model backend failed to answer. Please retry. Modellen skapade inget svar. Skicka begäran igen.
502 api_error The model backend failed to answer. Please retry. Samma sak, på de hostade open-weight-modellerna.
504 api_error upstream timed out En hostad open-weight-modell tog längre tid än tidsgränsen för ett svar som inte streamas. Skicka den med stream satt till true.