Lumaktaw sa nilalaman
Responses API

Responses API

Bago

Ang POST /v1/responses ay tumatanggap ng instructions at listahan ng mga input item at nagbabalik ng response object na binubuo ng mga output item, sa OpenAI Responses format. Gamitin ito sa responses API ng OpenAI SDK at sa mga tool na nakabatay dito, gaya ng Codex CLI. Walang itinatagong state ang endpoint: ipadala ang buong conversation sa bawat request.

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

Ang pinakamaliit na request ay isang model id at isang text. Hindi naka-stream ang reply maliban kung hilingin mo.

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)

Ang reply ay isang response object. Hawak ng output nito ang reasoning, kung nag-reason ang model, at ang 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
  }
}

Mga request field

Ang model at input ang kailangan ng request. Pinangangalanan ng column na Ina-apply ng ang mga model kung saan binabago ng isang field ang reply. Ang mga hosted open-weight model ay ang labindalawang id sa listahan ng model; ang pamilyang Shannon 3 ay shannon-3, shannon-3-pro, shannon-3.1 at shannon-3.1-pro. Mga model at presyo

Field Type Default Paglalarawan Ina-apply ng
model string Kinakailangan. Isang id mula sa listahan ng model. Hindi case-sensitive ang pagtutugma. Ang nawawala o hindi inilathalang id ay nagbabalik ng 400 unknown model. Lahat ng model
input string | array Isang string, na binabasa bilang isang user message, o isang array ng mga input item. Tingnan ang Mga input item sa ibaba. Lahat ng model
instructions string Mga tagubilin para sa model, ang system prompt ng format na ito. Mga hosted open-weight model, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false Ipinapadala ng true ang reply bilang server-sent events. Tingnan ang Streaming sa ibaba. Lahat ng model
max_output_tokens integer 4096 Pinakamataas na limitasyon ng reply, sa tokens. Ang value na wala sa 1 hanggang 65,536 ay ililipat sa saklaw na iyon. Ito rin ang halagang itinatabi mula sa iyong balance habang tumatakbo ang request. Tingnan ang Output limit sa ibaba. Mga hosted open-weight model, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Sampling temperature. Sa mga hosted open-weight model, pinananatili ang mga value sa pagitan ng 0 at 2. Mga hosted open-weight model; shannon-1.6-*, shannon-2-* at shannon-coder-1 sa mga reply na hindi naka-stream
top_p number Nucleus sampling. Pinananatili ang mga value sa pagitan ng 0 at 1. Mga hosted open-weight model
tools array Ang mga function na maaaring tawagin ng model, sa flat na anyo ng format na ito: {"type": "function", "name", "description", "parameters"}. Tingnan ang Tools sa ibaba. Lahat ng model
tool_choice string | object auto Hinahayaan ng "auto" ang model na magpasya. Pinipilit ng "required" itong tumawag ng tool. Pinipilit ng {"type": "function", "name": "…"} itong tawagin ang tool na iyon. Mga hosted open-weight model
reasoning object {"effort": "…"} na may off, low, medium o high. Ang anumang ibang value ay nagbabalik ng 400. Mga hosted open-weight model
text object Humihingi ang {"format": {…}} ng sagot na JSON. Tingnan ang Structured output sa ibaba. Lahat ng Shannon tier; mga hosted open-weight model ayon sa nakalista kada id

Tinatanggap ang previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user at prompt_cache_key para tumakbo nang walang pagbabago ang kasalukuyang client code. Hindi nila binabago ang reply. Dahil walang itinatagong conversation, dala ng kasunod na request ang mga naunang turn sa input.

Mga input item

Ang input item ay alinman sa message, na may role at content, o typed na item na may dalang tool call o ang resulta nito. Ang content ay isang string o array ng mga part.

Item Paglalarawan Ina-apply ng
{"role": "user", "content": …} Ang itinatanong mo. Ang content ay isang string, o mga input_text at input_image part. Lahat ng model
{"role": "assistant", "content": …} Naunang reply ng model. Ang content ay isang string, o mga output_text part. Lahat ng model
{"role": "system", "content": …}
{"role": "developer", "content": …}
Mga tagubilin sa loob ng conversation. Mga hosted open-weight model
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Isang tool call na ginawa ng model sa naunang reply. Ang arguments ay isang JSON string. Lahat ng model
{"type": "function_call_output", "call_id": "…", "output": "…"} Ang resulta ng call na iyon. Ang call_id ay ang id ng call at ang output ang resulta bilang string. Lahat ng model

Ilagay ang mga tagubilin sa field na instructions. Sa isang id ng pamilyang Shannon 3, ilagay sa user message ang mga tagubiling dapat masunod.

Ang mga item ng output ng reply ay maaaring bumalik sa input nang buo: binabasa ang mga message at function_call item, nilalaktawan ang mga reasoning item.

Mga content part

Part Paglalarawan Available sa
{"type": "input_text", "text": "…"} Text ng user message. Lahat ng model
{"type": "output_text", "text": "…"} Text ng assistant message. Lahat ng model
{"type": "input_image", "image_url": "…"} Isang image, bilang data: URL na may base64 na content o bilang http(s) URL. Pamilyang Shannon 3, shannon-1.6-lite, shannon-1.6-pro, at ang mga hosted open-weight model na may image input
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Isang dokumento (PDF, Word, PowerPoint o Excel): ang file_data ay may hawak na data: URL, o ang file_url ay http(s) URL. Pamilyang Shannon 3

Sa mga Shannon tier, binabasa ang mga image at file mula sa huling user item ng input. May sariling pahina ang mga laki at limitasyon. Mga image at file

Isang request na may instructions at mga opsyon

Nagpapadala ang request na ito ng instructions, isang conversation bilang mga input item, output limit, temperature at reasoning effort. Gumagamit ito ng hosted open-weight model, na ina-apply ang lahat ng ito.

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)

Ang reply ng hosted open-weight model ay may id, object, model, created_at, status, output at usage. Nagdaragdag ang usage nito ng mga token na binasa mula sa cache at mga token na ginugol sa reasoning:

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

Ang response object

Nasa bawat reply ang id, object, status, output at usage. Itayo ang iyong code sa mga iyon.

Field Type Paglalarawan Ipinadala ng
id string resp_ na sinusundan ng 32 hexadecimal na character. Lahat ng model
object string Palaging response. Lahat ng model
status string completed. Sa isang stream, ito ay in_progress muna, at failed sa isang response.failed event. Lahat ng model
output array Ang mga output item sa pagkakasunod na binuo ng model: reasoning, message, function_call. Lahat ng model
usage object input_tokens, output_tokens at total_tokens. Lahat ng model
usage.input_tokens_details object cached_tokens: ang input tokens na binasa mula sa prompt cache. Mga hosted open-weight model
usage.output_tokens_details object reasoning_tokens: ang output tokens na ginugol sa reasoning. Mga hosted open-weight model
model string Ang canonical id ng model na sumagot. Pamilyang Shannon 3, mga hosted open-weight model
created_at integer Oras ng reply, sa Unix seconds. Pamilyang Shannon 3, mga hosted open-weight model
instructions, tools, temperature, … Inuulit ng instructions, tools at temperature ang request. Ang error at incomplete_details ay null, ang metadata ay {}, ang parallel_tool_calls ay true, ang tool_choice ay auto at ang top_p ay null. Pamilyang Shannon 3

Mga output item

Item Paglalarawan
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Ang reasoning ng model bilang isang summary_text part. Naroroon lamang kapag nag-reason ang model.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Ang sagot: isang output_text part na may text.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Isang tool call. Ang arguments ay isang JSON string. Ipadala pabalik ang resulta gamit ang parehong call_id.

Ang mga OpenAI SDK ang nagdurugtong ng text ng message para sa iyo sa response.output_text.

Streaming

I-set ang stream sa true para sa server-sent events. Ang bawat frame ay may event: line na may pangalan ng event at data: line na may JSON object; inuulit ng object ang pangalan sa type. Itugma ang mga delta sa item nila gamit ang output_index.

Sa OpenAI SDK, basahin ang mga event ayon sa type ng mga ito:

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")

Dumarating ang mga event sa pagkakasunod na ito. Lumalabas lamang ang mga grupo para sa reasoning, message at tool call kapag mayroon ang reply.

Event Payload Kailan
response.created response Palaging una. Ang response.status ay in_progress at walang laman ang response.output.
response.in_progress response Palaging pangalawa, na may parehong object.
response.output_item.added output_index, item Nagsisimula ang reasoning: isang reasoning item na may walang lamang summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Isang piraso ng reasoning.
response.reasoning_summary_text.done output_index, summary_index, text Kumpleto na ang reasoning: ang buong text nito.
response.output_item.done output_index, item Ang natapos na reasoning item.
response.output_item.added output_index, item Nagsisimula ang sagot: isang message item na may status na in_progress at walang content.
response.content_part.added output_index, content_index, part Nagbubukas ang walang lamang output_text part.
response.output_text.delta output_index, content_index, delta Isang piraso ng sagot.
response.output_text.done output_index, content_index, text Kumpleto na ang sagot: ang buong text nito.
response.content_part.done output_index, content_index, part Ang natapos na output_text part.
response.output_item.done output_index, item Ang natapos na message item, na may status na completed.
response.output_item.added output_index, item Nagsisimula ang tool call: isang function_call item na may call_id, name at walang lamang arguments.
response.function_call_arguments.delta output_index, delta Ang mga argument ng call, kumpleto sa isang delta.
response.function_call_arguments.done output_index, arguments Ang parehong mga argument, bilang arguments.
response.output_item.done output_index, item Ang natapos na function_call item.
response.completed response Palaging huli kapag matagumpay: ang buong response object na may output at 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}, …}}

Isang stream na nabibigo

Sa mga Shannon tier, ang nabigong reply ay nagtatapos sa response.failed sa halip na response.completed. Ang response.status nito ay failed at ang response.error ay may hawak na code, rate_limit_exceeded o server_error, at isang message.

Sa mga hosted open-weight model, ang pagkabigo ay isang error event na may code na api_error at isang message. Sumusunod pa rin ang response.completed.

Ituring na nabigo ang stream kapag may hawak itong response.failed o error event, at ipadala muli ang request.

Tools

Ang tool ay isang function na pinapatakbo ng iyong code. Ilarawan ito sa tools; kapag kailangan ito ng model, may function_call item ang reply bilang kapalit ng, o katabi ng, message.

Isang tool definition sa tools:

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

Ang output ng reply na tumatawag dito:

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

Patakbuhin ang function, saka ipadala muli ang request na may call at resulta nito na idinagdag sa 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\"}"
  }
]

Mga tool lang na type na function ang binabasa. Sa shannon-1.6-*, shannon-2-* at shannon-coder-1, binabawasan ang parameters schema sa mga karaniwang JSON Schema keyword: ang oneOf ay binabasa bilang anyOf, at ang mga keyword gaya ng $ref, additionalProperties, const, default at title ay hindi ipinapasa sa model.

Ina-apply ng mga hosted open-weight model ang mga value ng tool_choice na required at isang pinangalanang function.

Buong inilalarawan ang tool loop sa sarili nitong pahina. Function calling

Structured output

Isinusulat ng format na ito ang structured output bilang text.format. Ang schema ay direktang nasa format, katabi ng name at strict, hindi sa ilalim ng miyembrong json_schema tulad sa Chat Completions.

  • Humihingi ang {"type": "json_object"} ng anumang JSON object.
  • Humihingi ang {"type": "json_schema", "name", "schema", "strict"} ng JSON na sumusunod sa iyong schema. Ang strict ay true kapag inalis mo ito.
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"
        ]
      }
    }
  }
}

Dumarating ang JSON bilang text sa output_text part ng message; i-parse mo ito mismo. Ang hosted open-weight model na walang structured output ay nagbabalik ng 400.

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

Nakalista sa sarili nitong pahina kung aling model ang tumatanggap ng aling anyo. Structured outputs

Reasoning

Ibinabalik ng model na nag-re-reason ang reasoning nito bilang output item na type na reasoning, bago ang message. Sa isang stream, dumarating ito bilang mga event na response.reasoning_summary_text.delta.

Ina-apply ng mga hosted open-weight model ang reasoning.effort: off, low, medium o high, na high kapag wala kang ipinadala. Ang off ay walang ibinabalik na reasoning item. Ipadala ito bilang object; hindi binabasa ang payak na string sa endpoint na ito.

Inilalarawan ang mga effort sa kanilang sariling pahina. Reasoning effort

Output limit

Ang max_output_tokens ay 4,096 kapag hindi mo ito ipinadala. Ito ang bilang ng token na itinatabi mula sa iyong balance kapag nagsimula ang request; kapag kumpleto na ang reply, pinapalitan ang halagang iyon ng nagamit ng request. Ang value na hindi kasya sa natitira mong balance ay nagbabalik ng 429 Quota exceeded.

Nililimitahan nito ang haba ng reply sa shannon-1.6-*, shannon-2-* at shannon-coder-1, at ang haba ng text ng sagot sa mga hosted open-weight model.

Sa endpoint na ito, ang shannon-coder-1 ay sinisingil sa tokens mula sa iyong balance, tulad ng bawat ibang model.

Ang request body ay maaaring umabot sa 32 MiB. Mga limitasyon at balance

Mga error

Ginagamit ng mga error ang OpenAI error body: isang error object na may type at message; ang ilan ay may dala ring code at param na may value na null. Inililista ng talahanayan ang pinakamadalas na ibinabalik ng endpoint na ito. May sariling pahina ang buong listahan, kasama kung ano ang dapat i-retry. Paghawak ng Error

Status Type Mensahe Kailan
401 authentication_error Missing authentication
Invalid API key
Walang API key na naipadala, o hindi kilala o na-revoke ang key.
400 invalid_request_error unknown model: <id> Nawawala ang model o hindi ito inilathalang id.
400 invalid_request_error No user message provided. Mga Shannon tier: walang user text ang input.
400 invalid_request_error <id> does not accept image input Nagpadala ng image sa isang hosted open-weight model na walang image input.
400 invalid_request_error <id> does not accept response_format Nagpadala ng text.format sa isang hosted open-weight model na walang structured output.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Ang reasoning.effort ay may value na wala sa listahan.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Valid na JSON ang body pero mali ang type ng isang field.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Mas malaki ang max_output_tokens kaysa sa natitira sa iyong balance.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: higit sa 120 request sa loob ng isang minuto sa iyong account.
500 api_error The model backend failed to answer. Please retry. Hindi nakabuo ng reply ang model. Ipadala muli ang request.
502 api_error The model backend failed to answer. Please retry. Pareho, sa mga hosted open-weight model.
504 api_error upstream timed out Mas natagalan ang isang hosted open-weight model kaysa sa time limit ng reply na hindi naka-stream. Ipadala ito na naka-set ang stream sa true.