Responses (OpenAI)

Senast uppdaterad:

På denna sida
text
POST https://api.staik.se/v1/responses

Endpoint som är kompatibel med OpenAI:s Responses API. OpenAI-SDK:ernas responses.create, Codex CLI och andra klienter som pratar Responses-protokollet fungerar direkt. Autentisera med Authorization: Bearer (samma nyckel).

Anropet körs på samma väg som chat completions: samma modeller, kvoter, köer, failover och debitering. Användningen bokförs med endpointen responses.

python
from openai import OpenAI

client = OpenAI(api_key="sk-st-your-key", base_url="https://api.staik.se/v1")

response = client.responses.create(
    model="qwen3.6:35b-a3b",
    instructions="Svara kort och på svenska.",
    input="Förklara hur en transformer fungerar.",
)
print(response.output_text)

Tillståndslöst: skicka hela historiken

staik lagrar aldrig svar. Varje anrop måste innehålla hela konversationen i input, inklusive tidigare modellsvar, verktygsanrop och verktygsresultat. store ignoreras och svaret har alltid "store": false.

Funktionsverktyg

Verktyg anges i Responses-format (type: "function" med name och parameters direkt på verktyget). Modellen svarar med function_call-items, du kör verktyget och skickar tillbaka resultatet som function_call_output med samma call_id:

python
import json

tools = [{
    "type": "function",
    "name": "get_weather",
    "description": "Hämta aktuellt väder för en stad.",
    "parameters": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"],
    },
}]

history = [{"role": "user", "content": "Hur är vädret i Göteborg?"}]
response = client.responses.create(model="qwen3.6:35b-a3b", input=history, tools=tools)

# Tillståndslöst: lägg modellens output i historiken innan verktygssvaren.
history += response.output
for item in response.output:
    if item.type == "function_call":
        args = json.loads(item.arguments)
        result = {"city": args["city"], "temp_c": 11}  # ditt eget verktyg
        history.append({
            "type": "function_call_output",
            "call_id": item.call_id,
            "output": json.dumps(result),
        })

response = client.responses.create(model="qwen3.6:35b-a3b", input=history, tools=tools)
print(response.output_text)

Det här stöds:

  • function-verktyg, även flera parallella anrop i samma tur (parallel_tool_calls)
  • namespace-verktyg: grupperade funktioner. Svaret har både name och namespace
  • custom-verktyg (fritext-indata): svaret blir ett custom_tool_call med input som sträng, och resultatet skickas som custom_tool_call_output
  • tool_choice: auto, none, required eller en specifik funktion. Okända värden tolkas som auto
  • Bilder i verktygssvar: input_image med data-URL i output

Hostade verktyg ignoreras

OpenAI:s hostade verktyg (web_search, file_search, code_interpreter, computer_use, image_generation, mcp med flera) tas bort ur anropet utan fel. Modellen kan bara anropa funktionsverktyg som du själv kör. Behöver du webbsökning, använd den inbyggda webbsökningen på chat completions.

Mer om hur modellerna hanterar verktyg finns i Tool calling.

Streaming

Sätt stream: true så kommer svaret som server-sent events i Responses-format:

python
stream = client.responses.create(
    model="qwen3.6:35b-a3b",
    input="Skriv en haiku om Stockholm.",
    stream=True,
)
for event in stream:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)
EventNär
response.created, response.in_progressDirekt när anropet tagits emot
response.output_item.addedEtt nytt item börjar (text, reasoning eller verktygsanrop)
response.output_text.deltaInkrementell text
response.reasoning_text.deltaInkrementellt resonemang (thinking-alias)
response.function_call_arguments.deltaArgumenten till ett verktygsanrop, i ett stycke
response.output_text.done, response.function_call_arguments.done, response.output_item.doneEtt item är klart
response.completedSvaret är klart, med usage
response.incompletemax_output_tokens nåddes
response.failedFel under genereringen, se Fel

Varje event har ett stigande sequence_number.

Verktygsanrop kommer i ett stycke

Text och resonemang strömmas token för token även när anropet har tools. Ett verktygsanrop skickas när modellen är klar med det: output_item.added, ett enda function_call_arguments.delta med alla argument, function_call_arguments.done och output_item.done kommer direkt efter varandra. Kör verktyget när du fått output_item.done.

Övriga parametrar

ParameterBeteende
modelAlla chattmodeller, även thinking-alias
instructionsLäggs först som systemprompt. developer-meddelanden i input behandlas också som system
inputSträng eller lista med message, function_call, function_call_output, custom_tool_call, custom_tool_call_output och reasoning
max_output_tokensMax antal genererade tokens. Nås gränsen får svaret status: "incomplete"
temperature, top_pSkickas vidare till modellen
text.formatjson_schema och json_object ger strukturerad output
reasoning.effort"none" stänger av thinking. Andra värden ignoreras: slå på thinking med ett thinking-alias
metadataEkas tillbaka i svaret
storeIgnoreras, inget lagras

reasoning-items som du skickar tillbaka i input tas bort: tidigare resonemang skickas aldrig till modellen igen. Bilder skickas som input_image med en data-URL, med samma modeller och regler som chat completions.

Usage

usage i response.completed (och i icke-strömmade svar) har Responses-formatet: input_tokens, input_tokens_details.cached_tokens (prompt-cache-träffar), output_tokens, output_tokens_details.reasoning_tokens och total_tokens. Debiteringen är densamma som för chat completions.

Fel

Fel returneras i OpenAI-format: {"error": {"message", "type", "param", "code"}}.

StatusNär
400previous_response_id, conversation, background, item_reference, input_file eller bild via file_id (kräver lagrat tillstånd), eller ogiltig body. param pekar ut fältet
400 context_length_exceededAnropet ryms inte i modellens kontextfönster
401 invalid_api_keySaknad eller ogiltig nyckel
429Tokengräns (insufficient_quota) eller kapacitetstak (capacity_exceeded), med Retry-After

Uppstår felet mitt i en ström kommer det som response.failed med code context_length_exceeded, invalid_prompt eller server_error (tillfälligt, försök igen). Se Fel för hela listan.

Codex CLI

Codex pratar Responses API och fungerar mot den här endpointen. Konfigurationen finns under Codex CLI.