Hakila Docs
Responses

建立 Response

對齊 OpenAI Responses 規格(`POST https://api.openai.com/v1/responses`)。 OpenAI 模型:除了模型路由、金鑰與記帳,Hakila 會把請求、回應與 SSE 事件原樣透傳, 因此 `tools`、structured outputs、reasoning、`background`、`previous_response_id` 等能力 由上游 OpenAI 決定,不需要 Hakila 額外支援。 其他模型(Claude、Gemini、Grok、OpenRouter、地端服務…)走**轉換模式**:Hakila 把請求轉成各家協定, 回應與 SSE 事件再轉回 Responses 格式。轉換模式是無狀態的: - 每次都要帶完整歷史;`previous_response_id` 與 `background` 回 `400`,`store` 會被忽略,回應不能 retrieve - `function`、`custom`(例如 Codex 的 `apply_patch`)與 `namespace` 工具會轉換;`web_search` 等 OpenAI 內建工具會被移除, 移除的類型列在回應 header `X-Hakila-Dropped-Tools` - `reasoning.effort` 會換成各家的推理設定;Claude 的思考摘要以 `reasoning_summary_text` 事件送出, 需要原樣送回的推理資料加密放在 reasoning item 的 `encrypted_content`,下一輪原樣帶回即可延續推理 - 沒有前綴的 `model`(例如 `gpt-5.6`)在目錄中只有一個同名模型時補上開發商前綴(`openai/gpt-5.6`),官方 SDK 只換 `base_url` 即可使用;多個同名模型時回 `400`,沒有時回 `404` - `hakila/auto` 可用,候選可落在任何供應商;帶 `previous_response_id` 或 `background` 時只挑 OpenAI - `model` 仍須是平台目錄已啟用、且通過組織 ∩ API Key 允許清單的 id(見 `GET /v1/models`) - `"stream": true` 以 SSE 回傳事件(`response.output_text.delta`…),結尾為 `response.completed`,**沒有** `data: [DONE]` - `"background": true` 會立刻回 `queued`;此時不計費,等之後 `GET /v1/responses/{id}` 拿到 usage 才記一次帳 - 錯誤形狀與 OpenAI 一致(`error.message` / `type` / `param` / `code`) - 上游首字元逾時(預設 30 秒)回傳 `504` - 可引用工作區 Preset(`@preset/slug`、`model@preset/slug` 或 `preset` 欄位);Preset 的系統提示對應 `instructions` - `usage.input_tokens_details` 回報 Prompt Cache 讀取/寫入 tokens - 支援 Response Cache header(`background: true` 的請求不快取);命中時 response `id` 維持原值、`usage` 歸零

POST/v1/responses

對齊 OpenAI Responses 規格(POST https://api.openai.com/v1/responses)。 OpenAI 模型:除了模型路由、金鑰與記帳,Hakila 會把請求、回應與 SSE 事件原樣透傳, 因此 tools、structured outputs、reasoning、background、previous_response_id 等能力 由上游 OpenAI 決定,不需要 Hakila 額外支援。

其他模型(Claude、Gemini、Grok、OpenRouter、地端服務…)走轉換模式:Hakila 把請求轉成各家協定, 回應與 SSE 事件再轉回 Responses 格式。轉換模式是無狀態的:

  • 每次都要帶完整歷史;previous_response_id 與 background 回 400,store 會被忽略,回應不能 retrieve

  • function、custom(例如 Codex 的 apply_patch)與 namespace 工具會轉換;web_search 等 OpenAI 內建工具會被移除, 移除的類型列在回應 header X-Hakila-Dropped-Tools

  • reasoning.effort 會換成各家的推理設定;Claude 的思考摘要以 reasoning_summary_text 事件送出, 需要原樣送回的推理資料加密放在 reasoning item 的 encrypted_content,下一輪原樣帶回即可延續推理

  • 沒有前綴的 model(例如 gpt-5.6)在目錄中只有一個同名模型時補上開發商前綴(openai/gpt-5.6),官方 SDK 只換 base_url 即可使用;多個同名模型時回 400,沒有時回 404

  • hakila/auto 可用,候選可落在任何供應商;帶 previous_response_id 或 background 時只挑 OpenAI

  • model 仍須是平台目錄已啟用、且通過組織 ∩ API Key 允許清單的 id(見 GET /v1/models)

  • "stream": true 以 SSE 回傳事件(response.output_text.delta…),結尾為 response.completed,沒有 data: [DONE]

  • "background": true 會立刻回 queued;此時不計費,等之後 GET /v1/responses/{id} 拿到 usage 才記一次帳

  • 錯誤形狀與 OpenAI 一致(error.message / type / param / code)

  • 上游首字元逾時(預設 30 秒)回傳 504

  • 可引用工作區 Preset(@preset/slug、model@preset/slug 或 preset 欄位);Preset 的系統提示對應 instructions

  • usage.input_tokens_details 回報 Prompt Cache 讀取/寫入 tokens

  • 支援 Response Cache header(background: true 的請求不快取);命中時 response id 維持原值、usage 歸零

Authorization

bearerAuth
AuthorizationBearer <token>

在 Authorization 標頭帶入 Workspace API Key: Authorization: Bearer sk-hakila-...

In: header

Header Parameters

X-Hakila-Cache?string

true 啟用 Response Cache、false 停用。Preset 設為強制關閉時 true 無效; 未帶時依 Preset 設定(預設關閉)。

Value in

  • "true"
  • "false"
X-Hakila-Cache-TTL?string

快取存活秒數(只取前導數字),範圍 1–86400;未帶時用 Preset 設定,否則 300。

X-Hakila-Cache-Clear?"true"

啟用快取時先刪除同一個 cache key 的舊條目,再照常呼叫上游並存入新結果。

Value in

  • "true"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

只列出 Hakila 會檢查或改寫的欄位,其餘欄位(tools、text.format、reasoning、 include、max_output_tokens、metadata、store…)與 OpenAI Responses 規格完全相同, OpenAI 模型原樣透傳,請以 OpenAI 官方文件 為準; 非 OpenAI 模型由 Hakila 轉換(見建立 Response 的說明)。 空的 tools/tool_choice/text.format 會在轉發前移除,避免上游回 400。

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/responses" \  -H "Content-Type: application/json" \  -d '{    "model": "openai/gpt-5.6-luna",    "input": "用一句話介紹 Hakila"  }'
{  "id": "resp_68a1b2c3",  "object": "response",  "status": "completed",  "model": "gpt-5.6-luna",  "output": [    {      "id": "msg_1",      "type": "message",      "role": "assistant",      "content": [        {          "type": "output_text",          "text": "Hakila 是統一的 AI Gateway。"        }      ]    }  ],  "usage": {    "input_tokens": 12,    "output_tokens": 8,    "total_tokens": 20  }}