Kalo te përmbajtja
Responses API

Responses API

E re

POST /v1/responses merr udhëzime dhe një listë elementësh hyrjeje dhe kthen një objekt përgjigjeje të përbërë nga elementë dalje, në formatin OpenAI Responses. Përdoreni me responses API të SDK-së OpenAI dhe me mjetet e ndërtuara mbi të, si Codex CLI. Endpoint-i nuk mban gjendje: dërgoni gjithë bisedën me çdo kërkesë.

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

Kërkesa më e vogël është një id modeli dhe një tekst. Përgjigjja nuk bëhet me stream përveç nëse e kërkoni.

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)

Përgjigjja është një objekt response. output i saj mban arsyetimin, kur modeli ka arsyetuar, dhe mesazhin:

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

Fushat e kërkesës

model dhe input janë ato që i duhen një kërkese. Kolona Zbatohet nga emërton modelet te të cilat një fushë ndryshon përgjigjen. Modelet open-weight të hostuara janë dymbëdhjetë id-të e listës së modeleve; familja Shannon 3 është shannon-3, shannon-3-pro, shannon-3.1 dhe shannon-3.1-pro. Modelet dhe çmimet

Fusha Lloji Parazgjedhja Përshkrimi Zbatohet nga
model string E detyrueshme. Një id nga lista e modeleve. Përputhja nuk është e ndjeshme ndaj shkronjave të mëdha. Një id që mungon ose nuk është e publikuar kthen 400 unknown model. Të gjitha modelet
input string | array Një string, që lexohet si një mesazh përdoruesi, ose një varg elementësh hyrjeje. Shihni Elementët e hyrjes më poshtë. Të gjitha modelet
instructions string Udhëzime për modelin, system prompt-i i këtij formati. Modele open-weight të hostuara, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true e dërgon përgjigjen si server-sent events. Shihni Streaming më poshtë. Të gjitha modelet
max_output_tokens integer 4096 Kufiri i sipërm i përgjigjes, në tokens. Një vlerë jashtë intervalit 1 deri 65,536 zhvendoset brenda tij. Është edhe sasia që rezervohet nga bilanci juaj gjatë ekzekutimit të kërkesës. Shihni Kufiri i daljes më poshtë. Modele open-weight të hostuara, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Temperatura e kampionimit. Te modelet open-weight të hostuara vlerat mbahen mes 0 dhe 2. Modele open-weight të hostuara; shannon-1.6-*, shannon-2-* dhe shannon-coder-1 në përgjigje pa stream
top_p number Kampionim nucleus. Vlerat mbahen mes 0 dhe 1. Modele open-weight të hostuara
tools array Funksionet që modeli mund t'i thërrasë, në formën e sheshtë të këtij formati: {"type": "function", "name", "description", "parameters"}. Shihni Mjetet më poshtë. Të gjitha modelet
tool_choice string | object auto "auto" e lë modelin të vendosë. "required" e detyron të thërrasë një mjet. {"type": "function", "name": "…"} e detyron të thërrasë atë mjet. Modele open-weight të hostuara
reasoning object {"effort": "…"} me off, low, medium ose high. Çdo vlerë tjetër kthen 400. Modele open-weight të hostuara
text object {"format": {…}} kërkon përgjigje JSON. Shihni Dalje e strukturuar më poshtë. Të gjitha nivelet Shannon; modelet open-weight të hostuara siç listohen për çdo id

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user dhe prompt_cache_key pranohen që kodi ekzistues i klientit të punojë pa ndryshime. Ato nuk e ndryshojnë përgjigjen. Meqë nuk ruhet bisedë, një kërkesë vijuese i mban radhët e mëparshme te input.

Elementët e hyrjes

Një element hyrjeje është ose një mesazh, me role dhe content, ose një element i tipizuar që mban një thirrje mjeti ose rezultatin e saj. content është string ose varg pjesësh.

Elementi Përshkrimi Zbatohet nga
{"role": "user", "content": …} Ajo që pyesni. content është string, ose pjesë input_text dhe input_image. Të gjitha modelet
{"role": "assistant", "content": …} Një përgjigje e mëparshme e modelit. content është string, ose pjesë output_text. Të gjitha modelet
{"role": "system", "content": …}
{"role": "developer", "content": …}
Udhëzime brenda bisedës. Modele open-weight të hostuara
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Një thirrje mjeti që modeli bëri në një përgjigje të mëparshme. arguments është string JSON. Të gjitha modelet
{"type": "function_call_output", "call_id": "…", "output": "…"} Rezultati i asaj thirrjeje. call_id është id-ja e thirrjes dhe output rezultati si string. Të gjitha modelet

Vendosini udhëzimet në fushën instructions. Me një id të familjes Shannon 3, vendosini udhëzimet që duhet të mbahen në mesazhin user.

Elementët e output të një përgjigjeje mund të kthehen te input siç janë: elementët message dhe function_call lexohen, elementët reasoning kapërcehen.

Pjesët e përmbajtjes

Pjesa Përshkrimi I disponueshëm në
{"type": "input_text", "text": "…"} Teksti i një mesazhi përdoruesi. Të gjitha modelet
{"type": "output_text", "text": "…"} Teksti i një mesazhi assistant. Të gjitha modelet
{"type": "input_image", "image_url": "…"} Një imazh, si URL data: me përmbajtje base64 ose si URL http(s). Familja Shannon 3, shannon-1.6-lite, shannon-1.6-pro, dhe modelet open-weight të hostuara që listojnë hyrje imazhi
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Një dokument (PDF, Word, PowerPoint ose Excel): file_data mban një URL data:, ose file_url një URL http(s). Familja Shannon 3

Te nivelet Shannon imazhet dhe skedarët lexohen nga elementi i fundit user i input. Madhësitë dhe kufijtë kanë faqen e tyre. Imazhet dhe skedarët

Një kërkesë me udhëzime dhe opsione

Kjo kërkesë dërgon udhëzime, një bisedë si elementë hyrjeje, një kufi dalje, një temperaturë dhe një përpjekje arsyetimi. Përdor një model open-weight të hostuar, i cili i zbaton të gjitha.

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)

Përgjigjja e një modeli open-weight të hostuar ka id, object, model, created_at, status, output dhe usage. usage i saj shton tokens-at e lexuar nga cache-i dhe tokens-at e shpenzuar për arsyetim:

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

Objekti i përgjigjes

id, object, status, output dhe usage janë në çdo përgjigje. Ndërtojeni kodin tuaj mbi to.

Fusha Lloji Përshkrimi Dërguar nga
id string resp_ e ndjekur nga 32 karaktere heksadecimale. Të gjitha modelet
object string Gjithmonë response. Të gjitha modelet
status string completed. Në një stream është fillimisht in_progress, dhe failed në një ngjarje response.failed. Të gjitha modelet
output array Elementët e daljes në radhën që i prodhoi modeli: reasoning, message, function_call. Të gjitha modelet
usage object input_tokens, output_tokens dhe total_tokens. Të gjitha modelet
usage.input_tokens_details object cached_tokens: tokens-at e hyrjes të lexuar nga cache-i i prompt-it. Modele open-weight të hostuara
usage.output_tokens_details object reasoning_tokens: tokens-at e daljes të shpenzuar për arsyetim. Modele open-weight të hostuara
model string Id-ja kanonike e modelit që u përgjigj. Familja Shannon 3, modele open-weight të hostuara
created_at integer Koha e përgjigjes, në sekonda Unix. Familja Shannon 3, modele open-weight të hostuara
instructions, tools, temperature, … instructions, tools dhe temperature e përsërisin kërkesën. error dhe incomplete_details janë null, metadata është {}, parallel_tool_calls është true, tool_choice është auto dhe top_p është null. Familja Shannon 3

Elementët e daljes

Elementi Përshkrimi
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Arsyetimi i modelit si një pjesë summary_text. I pranishëm vetëm kur modeli ka arsyetuar.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Përgjigjja: një pjesë output_text me tekstin.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Një thirrje mjeti. arguments është string JSON. Dërgojeni rezultatin mbrapsht me të njëjtin call_id.

SDK-të OpenAI e bashkojnë për ju tekstin e mesazhit te response.output_text.

Streaming

Vendosni stream në true për server-sent events. Çdo frame ka një rresht event: me emrin e ngjarjes dhe një rresht data: me një objekt JSON; objekti e përsërit emrin te type. Lidhini delta-t me elementin e tyre sipas output_index.

Me SDK-në OpenAI, lexojini ngjarjet sipas 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")

Ngjarjet arrijnë në këtë radhë. Grupet për arsyetimin, mesazhin dhe thirrjet e mjeteve shfaqen vetëm kur përgjigjja i ka.

Ngjarja Ngarkesa Kur
response.created response Gjithmonë i pari. response.status është in_progress dhe response.output është bosh.
response.in_progress response Gjithmonë i dyti, me të njëjtin objekt.
response.output_item.added output_index, item Arsyetimi fillon: një element reasoning me summary bosh.
response.reasoning_summary_text.delta output_index, summary_index, delta Një copë e arsyetimit.
response.reasoning_summary_text.done output_index, summary_index, text Arsyetimi është i plotë: i gjithë text i tij.
response.output_item.done output_index, item Elementi i përfunduar reasoning.
response.output_item.added output_index, item Përgjigjja fillon: një element message me status in_progress dhe pa përmbajtje.
response.content_part.added output_index, content_index, part Hapet një pjesë output_text bosh.
response.output_text.delta output_index, content_index, delta Një copë e përgjigjes.
response.output_text.done output_index, content_index, text Përgjigjja është e plotë: i gjithë text i saj.
response.content_part.done output_index, content_index, part Pjesa e përfunduar output_text.
response.output_item.done output_index, item Elementi i përfunduar message, me status completed.
response.output_item.added output_index, item Fillon një thirrje mjeti: një element function_call me call_id, name dhe arguments bosh.
response.function_call_arguments.delta output_index, delta Argumentet e thirrjes, të plota në një delta.
response.function_call_arguments.done output_index, arguments Të njëjtat argumente, si arguments.
response.output_item.done output_index, item Elementi i përfunduar function_call.
response.completed response Gjithmonë i fundit në rast suksesi: i gjithë objekti response me output dhe 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}, …}}

Një stream që dështon

Te nivelet Shannon një përgjigje e dështuar mbaron me response.failed në vend të response.completed. response.status i saj është failed dhe response.error mban një code, rate_limit_exceeded ose server_error, dhe një message.

Te modelet open-weight të hostuara një dështim është ngjarje error me code api_error dhe një message. response.completed vijon prapë pas saj.

Trajtojeni një stream si të dështuar kur përmban një ngjarje response.failed ose error, dhe dërgoni kërkesën përsëri.

Mjetet

Një mjet është një funksion që e ekzekuton kodi juaj. Përshkruajeni te tools; kur modeli e dëshiron, përgjigjja mban një element function_call në vend të mesazhit ose pranë tij.

Një përkufizim mjeti te tools:

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

output i një përgjigjeje që e thërret:

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

Ekzekutojeni funksionin, pastaj dërgojeni kërkesën përsëri me thirrjen dhe rezultatin e saj të shtuar te 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\"}"
  }
]

Lexohen vetëm mjetet e llojit function. Te shannon-1.6-*, shannon-2-* dhe shannon-coder-1 skema parameters zvogëlohet në fjalët kyçe të zakonshme JSON Schema: oneOf lexohet si anyOf, dhe fjalë kyçe si $ref, additionalProperties, const, default dhe title nuk i kalohen modelit.

Vlerat required dhe një funksion i emërtuar të tool_choice zbatohen nga modelet open-weight të hostuara.

Cikli i mjeteve përshkruhet i plotë në faqen e vet. Thirrje funksionesh

Dalje e strukturuar

Ky format e shkruan daljen e strukturuar si text.format. Skema qëndron drejtpërdrejt te format, pranë name dhe strict, jo nën një anëtar json_schema si te Chat Completions.

  • {"type": "json_object"} kërkon çdo objekt JSON.
  • {"type": "json_schema", "name", "schema", "strict"} kërkon JSON që ndjek skemën tuaj. strict është true kur e lini jashtë.
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-i arrin si tekst te pjesa output_text e mesazhit; parsojeni vetë. Një model open-weight i hostuar pa dalje të strukturuar kthen 400.

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

Cili model e pranon cilën formë listohet në faqen e vet. Dalje të strukturuara

Arsyetimi

Një model që arsyeton e kthen arsyetimin si element dalje të llojit reasoning, para mesazhit. Në një stream arrin si ngjarje response.reasoning_summary_text.delta.

Modelet open-weight të hostuara zbatojnë reasoning.effort: off, low, medium ose high, me high kur nuk dërgoni asgjë. off nuk kthen element arsyetimi. Dërgojeni si objekt; një string i zhveshur nuk lexohet në këtë endpoint.

Përpjekjet përshkruhen në faqen e tyre. Përpjekja e arsyetimit

Kufiri i daljes

max_output_tokens është 4,096 kur nuk e dërgoni. Është numri i tokens-ave që rezervohet nga bilanci juaj kur kërkesa fillon; kur përgjigjja është e plotë, ajo sasi zëvendësohet me atë që përdori kërkesa. Një vlerë që nuk ngjit në bilancin tuaj të mbetur kthen 429 Quota exceeded.

Kufizon gjatësinë e përgjigjes te shannon-1.6-*, shannon-2-* dhe shannon-coder-1, dhe gjatësinë e tekstit të përgjigjes te modelet open-weight të hostuara.

Në këtë endpoint shannon-coder-1 faturohet në tokens nga bilanci juaj, si çdo model tjetër.

Trupi i një kërkese mund të jetë deri në 32 MiB. Kufijtë dhe bilanci

Gabimet

Gabimet përdorin trupin e gabimit të OpenAI: një objekt error me type dhe message; disa mbajnë edhe code dhe param me vlerën null. Tabela liston ato që ky endpoint kthen më shpesh. Lista e plotë, me atë që duhet provuar përsëri, ka faqen e vet. Trajtimi i gabimeve

Statusi Lloji Mesazhi Kur
401 authentication_error Missing authentication
Invalid API key
Nuk u dërgua çelës API, ose çelësi është i panjohur ose i shfuqizuar.
400 invalid_request_error unknown model: <id> model mungon ose nuk është id e publikuar.
400 invalid_request_error No user message provided. Nivelet Shannon: input nuk mban tekst përdoruesi.
400 invalid_request_error <id> does not accept image input Një imazh iu dërgua një modeli open-weight të hostuar pa hyrje imazhi.
400 invalid_request_error <id> does not accept response_format text.format iu dërgua një modeli open-weight të hostuar pa dalje të strukturuar.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort mban një vlerë jashtë listës.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Trupi është JSON i vlefshëm por një fushë ka lloj të gabuar.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens është më i madh se ç'ka mbetur nga bilanci juaj.
429 rate_limit_error Too many requests. Retry in <n>s. Mbrojtja nga vërshimi i kërkesave: më shumë se 120 kërkesa në një minutë në llogarinë tuaj.
500 api_error The model backend failed to answer. Please retry. Modeli nuk prodhoi përgjigje. Dërgoni kërkesën përsëri.
502 api_error The model backend failed to answer. Please retry. I njëjti, te modelet open-weight të hostuara.
504 api_error upstream timed out Një model open-weight i hostuar zgjati më shumë se kufiri i kohës i një përgjigjeje pa stream. Dërgojeni me stream të vendosur në true.