Zum Inhalt sprangen
Responses-API

Responses-API

Nei

POST /v1/responses hëlt Instruktiounen an eng Lëscht vun Input-Items a gëtt e Response-Objet zréck, dat aus Output-Items besteet, am OpenAI-Responses-Format. Benotzt en mat der Responses-API vum OpenAI-SDK a mat Tools, déi doropper opbauen, wéi Codex CLI. Den Endpoint hält keen Zoustand: schéckt déi ganz Konversatioun mat all Ufro.

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

Déi klengst Ufro ass eng Modell-ID an en Text. D'Äntwert gëtt net gestreamt, ausser Dir freet dorëms.

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)

D'Äntwert ass e Response-Objet. Säin output enthält d'Reasoning, wann de Modell reasonéiert huet, an d'Message:

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

Request-Felder

model an input brauch eng Ufro. D'Kolonn Ugewannt vun nennt d'Modeller, bei deenen e Feld d'Äntwert ännert. D'Hosted Open-Weight-Modeller sinn déi zwielef IDen aus der Modellëscht; d'Shannon-3-Famill ass shannon-3, shannon-3-pro, shannon-3.1 an shannon-3.1-pro. Modeller a Präisser

Feld Typ Standard Beschreiwung Ugewannt vun
model string Erfuerderlech. Eng ID aus der Modellëscht. D'Schreifweis ënnerscheet net tëscht Grouss- a Klengschreiwung. Eng ID, déi feelt oder net publizéiert ass, gëtt 400 unknown model zréck. All Modeller
input string | array E String, deen als eng Benotzer-Message gelies gëtt, oder en Array vun Input-Items. Kuckt Input-Items ënnen. All Modeller
instructions string Instruktioune fir de Modell, de System-Prompt vun dësem Format. Hosted Open-Weight-Modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true schéckt d'Äntwert als Server-sent Events. Kuckt Streaming ënnen. All Modeller
max_output_tokens integer 4096 Uewegräns vun der Äntwert, an Tokens. E Wäert baussent 1 bis 65,536 gëtt an dee Beräich geréckelt. Et ass och de Betrag, deen aus Ärem Solde apaart geluecht gëtt, wärend d'Ufro leeft. Kuckt Output-Längt ënnen. Hosted Open-Weight-Modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Sampling-Temperatur. Bei den Hosted Open-Weight-Modeller ginn d'Wäerter tëscht 0 an 2 gehalen. Hosted Open-Weight-Modeller; shannon-1.6-*, shannon-2-* a shannon-coder-1 bei Äntwerten, déi net gestreamt ginn
top_p number Nucleus Sampling. D'Wäerter ginn tëscht 0 an 1 gehalen. Hosted Open-Weight-Modeller
tools array D'Funktiounen, déi de Modell däerf ruffen, an der flaacher Form vun dësem Format: {"type": "function", "name", "description", "parameters"}. Kuckt Tools ënnen. All Modeller
tool_choice string | object auto "auto" léisst de Modell entscheeden. "required" zwéngt en, en Tool ze ruffen. {"type": "function", "name": "…"} zwéngt en, dat Tool ze ruffen. Hosted Open-Weight-Modeller
reasoning object {"effort": "…"} mat off, low, medium oder high. All aneren Wäert gëtt 400 zréck. Hosted Open-Weight-Modeller
text object {"format": {…}} freet eng JSON-Äntwert un. Kuckt Strukturéierten Output ënnen. All Shannon-Stufen; Hosted Open-Weight-Modeller, wéi pro ID opgelëscht

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user an prompt_cache_key ginn akzeptéiert, sou datt bestoenden Client-Code onverännert leeft. Si änneren d'Äntwert net. Well keng Konversatioun gespäichert gëtt, enthält eng Folleg-Ufro déi fréiere Tourë an input.

Input-Items

En Input-Item ass entweder eng Message, mat engem role an engem content, oder en typiséiert Item, dat en Tool-Ruff oder säi Resultat enthält. content ass e String oder en Array vun Deeler.

Item Beschreiwung Ugewannt vun
{"role": "user", "content": …} Wat Dir freet. content ass e String, oder input_text- an input_image-Deeler. All Modeller
{"role": "assistant", "content": …} Eng fréier Äntwert vum Modell. content ass e String, oder output_text-Deeler. All Modeller
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instruktioune bannent der Konversatioun. Hosted Open-Weight-Modeller
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} E Tool-Ruff, deen de Modell an enger fréierer Äntwert gemaach huet. arguments ass e JSON-String. All Modeller
{"type": "function_call_output", "call_id": "…", "output": "…"} D'Resultat vun deem Ruff. call_id ass d'ID vum Ruff an output d'Resultat als String. All Modeller

Setzt Instruktiounen an d'Feld instructions. Bei enger ID aus der Shannon-3-Famill setzt Instruktiounen, déi gëllen mussen, an d'user-Message.

D'Items aus output vun enger Äntwert kënnen esou, wéi se sinn, zréck an input: message- a function_call-Items ginn gelies, reasoning-Items ginn iwwersprong.

Inhaltsdeeler

Deel Beschreiwung Verfügbar bei
{"type": "input_text", "text": "…"} Text vun enger Benotzer-Message. All Modeller
{"type": "output_text", "text": "…"} Text vun enger Assistent-Message. All Modeller
{"type": "input_image", "image_url": "…"} E Bild, als data:-URL mat base64-Inhalt oder als http(s)-URL. Shannon-3-Famill, shannon-1.6-lite, shannon-1.6-pro, an d'Hosted Open-Weight-Modeller, déi Bild-Input oplëschten
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} E Dokument (PDF, Word, PowerPoint oder Excel): file_data enthält eng data:-URL, oder file_url eng http(s)-URL. Shannon-3-Famill

Bei de Shannon-Stufe ginn Biller a Fichieren aus dem leschten user-Item vun input gelies. Gréissten a Limite hunn eng eege Säit. Biller a Fichieren

Eng Ufro mat Instruktiounen an Optiounen

Dës Ufro schéckt Instruktiounen, eng Konversatioun als Input-Items, eng Output-Limit, eng Temperatur an en Reasoning-Effort. Si benotzt en Hosted Open-Weight-Modell, dat all dës benotzt.

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)

D'Äntwert vun engem Hosted Open-Weight-Modell huet id, object, model, created_at, status, output an usage. Säin usage füügt d'Tokens, déi aus dem Cache gelies goufen, an d'Tokens, déi fir Reasoning ausginn goufen, derbäi:

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

D'Response-Objet

id, object, status, output an usage sinn an all Äntwert. Baut Äre Code op dës op.

Feld Typ Beschreiwung Geschéckt vun
id string resp_ gefollegt vun 32 hexadezimale Zeechen. All Modeller
object string Ëmmer response. All Modeller
status string completed. An engem Stream ass et fir d'éischt in_progress, a failed an engem response.failed-Event. All Modeller
output array D'Output-Items an där Reiefolleg, an där de Modell se produzéiert huet: reasoning, message, function_call. All Modeller
usage object input_tokens, output_tokens an total_tokens. All Modeller
usage.input_tokens_details object cached_tokens: d'Input-Tokens, déi aus dem Prompt-Cache gelies goufen. Hosted Open-Weight-Modeller
usage.output_tokens_details object reasoning_tokens: d'Output-Tokens, déi fir Reasoning ausginn goufen. Hosted Open-Weight-Modeller
model string Déi kanonesch ID vum Modell, dat geäntwert huet. Shannon-3-Famill, Hosted Open-Weight-Modeller
created_at integer Zäit vun der Äntwert, a Unix-Sekonnen. Shannon-3-Famill, Hosted Open-Weight-Modeller
instructions, tools, temperature, … instructions, tools an temperature widderhuelen d'Ufro. error an incomplete_details sinn null, metadata ass {}, parallel_tool_calls ass true, tool_choice ass auto an top_p ass null. Shannon-3-Famill

Output-Items

Item Beschreiwung
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} D'Reasoning vum Modell als een summary_text-Deel. Nëmmen do, wann de Modell reasonéiert huet.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} D'Äntwert: een output_text-Deel mam Text.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} E Tool-Ruff. arguments ass e JSON-String. Schéckt d'Resultat mat deemselwechte call_id zréck.

D'OpenAI-SDKs setzen den Text vun der Message fir Iech an response.output_text zesummen.

Streaming

Setzt stream op true fir Server-sent Events. All Frame huet eng event:-Zeil mam Numm vum Event an eng data:-Zeil mat engem JSON-Objet; d'Objet widderhëlt den Numm an type. Ordnet d'Deltaen hirem Item no output_index zou.

Liest d'Events mam OpenAI-SDK no hirem 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")

D'Events kommen an dëser Reiefolleg un. D'Gruppe fir Reasoning, d'Message an d'Tool-Ruffer erscheinen nëmmen, wann d'Äntwert se huet.

Event Payload Wéini
response.created response Ëmmer als éischt. response.status ass in_progress an response.output ass eidel.
response.in_progress response Ëmmer als zweet, mam selwechten Objet.
response.output_item.added output_index, item D'Reasoning fänkt un: e reasoning-Item mat engem eidele summary.
response.reasoning_summary_text.delta output_index, summary_index, delta E Stéck vun der Reasoning.
response.reasoning_summary_text.done output_index, summary_index, text D'Reasoning ass komplett: hire ganzen text.
response.output_item.done output_index, item Dat fäerdegt reasoning-Item.
response.output_item.added output_index, item D'Äntwert fänkt un: e message-Item mam Status in_progress an ouni Inhalt.
response.content_part.added output_index, content_index, part En eidelen output_text-Deel geet op.
response.output_text.delta output_index, content_index, delta E Stéck vun der Äntwert.
response.output_text.done output_index, content_index, text D'Äntwert ass komplett: hire ganzen text.
response.content_part.done output_index, content_index, part Deen fäerdegen output_text-Deel.
response.output_item.done output_index, item Dat fäerdegt message-Item, mam Status completed.
response.output_item.added output_index, item E Tool-Ruff fänkt un: e function_call-Item mat call_id, name an eidelen arguments.
response.function_call_arguments.delta output_index, delta D'Argumenter vum Ruff, komplett an engem Delta.
response.function_call_arguments.done output_index, arguments Déiselwecht Argumenter, als arguments.
response.output_item.done output_index, item Dat fäerdegt function_call-Item.
response.completed response Ëmmer als lescht bei Erfolleg: dat ganzt Response-Objet mat output an 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}, …}}

E Stream, dee feelschléit

Bei de Shannon-Stufe hält eng gescheitert Äntwert mat response.failed amplaz vun response.completed op. Hire response.status ass failed an response.error enthält e code, rate_limit_exceeded oder server_error, an eng message.

Bei den Hosted Open-Weight-Modeller ass e Feeler en error-Event mat code api_error an enger message. response.completed follegt trotzdem dernoer.

Behandelt e Stream als gescheitert, wann en e response.failed- oder en error-Event enthält, a schéckt d'Ufro nach eng Kéier.

Tools

E Tool ass eng Funktioun, déi Äre Code ausféiert. Beschreift se an tools; wann de Modell se wëll, enthält d'Äntwert e function_call-Item amplaz vun, oder niewent, der Message.

Eng Tool-Definitioun an tools:

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

Den output vun enger Äntwert, déi se rifft:

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

Féiert d'Funktioun aus, schéckt dann d'Ufro nach eng Kéier, mam Ruff a sengem Resultat an input derbäigesat:

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

Nëmmen Tools vum Typ function ginn gelies. Bei shannon-1.6-*, shannon-2-* a shannon-coder-1 gëtt d'parameters-Schema op déi gemeinsam JSON-Schema-Schlësselwierder reduzéiert: oneOf gëtt als anyOf gelies, a Schlësselwierder wéi $ref, additionalProperties, const, default an title ginn net un de Modell weiderginn.

D'tool_choice-Wäerter required an eng genannt Funktioun ginn vun den Hosted Open-Weight-Modeller ugewannt.

D'Tool-Loop ass op hirer eegener Säit am Ganze beschriwwen. Funktiounsofruff

Strukturéierten Output

Dëst Format schreift strukturéierten Output als text.format. D'Schema steet direkt an format, niewent name an strict, net ënner engem json_schema-Member wéi bei Chat Completions.

  • {"type": "json_object"} freet e JSON-Objet vun enger Form no Wal un.
  • {"type": "json_schema", "name", "schema", "strict"} freet JSON no Ärem Schema un. strict ass true, wann Dir et ewech léisst.
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"
        ]
      }
    }
  }
}

D'JSON kënnt als Text am output_text-Deel vun der Message; parst et selwer. En Hosted Open-Weight-Modell ouni strukturéierten Output gëtt 400 zréck.

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

Wéi e Modell wéi eng Form hëlt, steet op senger eegener Säit. Strukturéiert Output

Reasoning

E Modell, dee reasonéiert, gëtt seng Reasoning als Output-Item vum Typ reasoning zréck, virun der Message. An engem Stream kënnt se als response.reasoning_summary_text.delta-Events.

D'Hosted Open-Weight-Modeller wenden reasoning.effort un: off, low, medium oder high, mat high, wann Dir näischt schéckt. off gëtt kee Reasoning-Item zréck. Schéckt et als Objet; e bloussen String gëtt op dësem Endpoint net gelies.

D'Efforten si op hirer eegener Säit beschriwwen. Reasoning-Effort

Output-Längt

max_output_tokens ass 4,096, wann Dir et net schéckt. Et ass d'Zuel vun Tokens, déi aus Ärem Solde apaart geluecht ginn, wann d'Ufro ufänkt; wann d'Äntwert komplett ass, gëtt dee Betrag duerch dat ersat, wat d'Ufro benotzt huet. E Wäert, deen net an Ären iwwerbleiwende Solde passt, gëtt 429 Quota exceeded zréck.

Et begrenzt d'Längt vun der Äntwert bei shannon-1.6-*, shannon-2-* a shannon-coder-1, an d'Längt vum Äntwert-Text bei den Hosted Open-Weight-Modeller.

Op dësem Endpoint gëtt shannon-coder-1 a Tokens aus Ärem Solde berechent, wéi all aner Modell.

E Body vun enger Ufro däerf bis zu 32 MiB grouss sinn. Limiten a Solde

Feeler

Feeler benotzen de OpenAI-Feeler-Body: en error-Objet mat type a message; e puer enthalen och code a param mam Wäert null. D'Tabell lëscht op, wat dësen Endpoint am meeschten zréckgëtt. Déi komplett Lëscht, mat deem, wat nach eng Kéier probéiert gëtt, huet eng eege Säit. Feelerbehandlung

Status Typ Message Wéini
401 authentication_error Missing authentication
Invalid API key
Et gouf kee API-Schlëssel geschéckt, oder de Schlëssel ass onbekannt oder widderruff.
400 invalid_request_error unknown model: <id> model feelt oder ass keng publizéiert ID.
400 invalid_request_error No user message provided. Shannon-Stufen: input enthält keen Text vum Benotzer.
400 invalid_request_error <id> does not accept image input E Bild gouf un en Hosted Open-Weight-Modell ouni Bild-Input geschéckt.
400 invalid_request_error <id> does not accept response_format text.format gouf un en Hosted Open-Weight-Modell ouni strukturéierten Output geschéckt.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort enthält e Wäert baussent der Lëscht.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … De Body ass gültegt JSON, awer e Feld huet de falsche Typ.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens ass méi grouss wéi dat, wat vun Ärem Solde iwwereg ass.
429 rate_limit_error Too many requests. Retry in <n>s. Flood-Schutz: méi wéi 120 Ufroen an enger Minutt op Ärem Kont.
500 api_error The model backend failed to answer. Please retry. De Modell huet keng Äntwert produzéiert. Schéckt d'Ufro nach eng Kéier.
502 api_error The model backend failed to answer. Please retry. Datselwecht, bei den Hosted Open-Weight-Modeller.
504 api_error upstream timed out En Hosted Open-Weight-Modell huet méi laang gebraucht wéi d'Zäitlimit vun enger Äntwert, déi net gestreamt gëtt. Schéckt se mat stream op true.