建立 Chat Completion
對齊 OpenAI Chat Completions 規格。`model` 必須是平台目錄中已啟用、且通過組織 ∩ API Key 允許清單的 id。 - Gateway 強制驗證 `model`;`messages` 請一併帶入(文件 Try it 與實務皆需要) - 設定 `"stream": true` 時以 SSE(`text/event-stream`)回傳 - 轉發時把 model id 換成該供應商的上游模型名稱 - 同一模型有多家供應商時,依平台優先順序 → `provider` 偏好 → 組織供應商限制 → 金鑰(BYOK 優先)挑選, 429/5xx 等錯誤且尚未開始回應時自動改送下一家;費用依實際供應商單價計算(見[多供應商與備援](/docs/guides/models#多供應商與備援)) - 回應 header `x-hakila-provider` 標示實際提供服務的供應商;非 streaming 回應的 JSON 另有 `provider` 欄位 - 未知欄位會盡可能透傳給上游(pass-through);空的 `tools`/`response_format`/`tool_choice` 會在轉發前移除 - `hakila/auto` 會先把請求內容交給內部選路模型,從通過允許清單的 auto candidate 中挑一個; 選路失敗時退回候選順序中第一個有上游金鑰者 - 上游首字元逾時(預設 30 秒)回傳 `504` - `model` 可引用工作區 Preset:`@preset/slug` 或 `openai/gpt-4o@preset/slug`,也可用 `preset` 欄位(見 [Presets](/docs/guides/presets)) - `usage.prompt_tokens_details` 回報 Prompt Cache 讀取/寫入 tokens(見 [Prompt Cache](/docs/guides/prompt-cache)) - `X-Hakila-Cache: true` 啟用 Response Cache,命中時不呼叫上游、不計費(見 [Response Cache](/docs/guides/response-cache))
/v1/chat/completions對齊 OpenAI Chat Completions 規格。model 必須是平台目錄中已啟用、且通過組織 ∩ API Key 允許清單的 id。
- Gateway 強制驗證
model;messages請一併帶入(文件 Try it 與實務皆需要) - 設定
"stream": true時以 SSE(text/event-stream)回傳 - 轉發時把 model id 換成該供應商的上游模型名稱
- 同一模型有多家供應商時,依平台優先順序 →
provider偏好 → 組織供應商限制 → 金鑰(BYOK 優先)挑選, 429/5xx 等錯誤且尚未開始回應時自動改送下一家;費用依實際供應商單價計算(見多供應商與備援) - 回應 header
x-hakila-provider標示實際提供服務的供應商;非 streaming 回應的 JSON 另有provider欄位 - 未知欄位會盡可能透傳給上游(pass-through);空的
tools/response_format/tool_choice會在轉發前移除 hakila/auto會先把請求內容交給內部選路模型,從通過允許清單的 auto candidate 中挑一個; 選路失敗時退回候選順序中第一個有上游金鑰者- 上游首字元逾時(預設 30 秒)回傳
504 model可引用工作區 Preset:@preset/slug或openai/gpt-4o@preset/slug,也可用preset欄位(見 Presets)usage.prompt_tokens_details回報 Prompt Cache 讀取/寫入 tokens(見 Prompt Cache)X-Hakila-Cache: true啟用 Response Cache,命中時不呼叫上游、不計費(見 Response Cache)
Authorization
bearerAuth 在 Authorization 標頭帶入 Workspace API Key:
Authorization: Bearer sk-hakila-...
In: header
Header Parameters
true 啟用 Response Cache、false 停用。Preset 設為強制關閉時 true 無效;
未帶時依 Preset 設定(預設關閉)。
Value in
- "true"
- "false"
快取存活秒數(只取前導數字),範圍 1–86400;未帶時用 Preset 設定,否則 300。
啟用快取時先刪除同一個 cache key 的舊條目,再照常呼叫上游並存入新結果。
Value in
- "true"
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
常用欄位如下。tools/tool_choice/response_format 等進階欄位可透傳(additionalProperties),
請用 JSON Editor 自行帶入完整結構;勿送空物件,否則上游會回 400。
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.6-luna", "messages": [ { "role": "user", "content": "用一句話介紹 Hakila" } ] }'{ "id": "chatcmpl-example", "object": "chat.completion", "created": 1710000000, "model": "gpt-5.6-luna", "provider": "openai", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "Hakila 是統一的 AI Gateway。" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 12, "completion_tokens": 8, "total_tokens": 20, "prompt_tokens_details": { "cached_tokens": 0, "cache_write_tokens": 0 } }}Claude Desktop 模型清單 GET
Claude Desktop 第三方推論設定的 `inferenceModels`:這把 API Key 能用的 Claude 模型,不含 `anthropic/` 前綴,第一個是預設模型。 回應帶 `ETag`,送 `If-None-Match` 且內容沒變時回 `304`。額度用完時仍可呼叫(金鑰本身仍須有效)。
建立 Embeddings POST
對齊 OpenAI Embeddings 規格(`POST https://api.openai.com/v1/embeddings`)。 `model` 必須是平台目錄中 `type: embedding`、已啟用、且通過組織 ∩ API Key 允許清單的 id。 - **OpenAI**(`openai/text-embedding-3-*` 等):原樣轉發,`dimensions`、`encoding_format`、token 陣列 input 都由上游處理 - **Gemini**(`google/gemini-embedding-*`):Hakila 翻譯成原生 `batchEmbedContents`, `dimensions` → `outputDimensionality`、`task_type` → `taskType`、`title` 對應帶入;回應轉回 OpenAI 形狀 - 後台新增的 OpenAI 相容供應商(地端服務等)與 xAI 走 OpenAI 相容 `/embeddings` - Anthropic 沒有 Embeddings API;把 chat 模型帶進來會回 `400` 並提示改用 `/v1/chat/completions` - 沒有前綴的 `model` 會在已啟用的 embedding 模型中比對名稱並補上開發商前綴;有多個同名模型時回 `400`,找不到時回 `404` - 不支援 `hakila/auto`、Preset 與 streaming - 只以輸入 tokens 計費(`usage.prompt_tokens`);Gemini 原生 API 不回 usage,Hakila 以文字長度估算 - 支援 Response Cache header:同一組 input 的向量是穩定的,命中時不呼叫上游、不計費 - 上游首字元逾時(預設 30 秒)回傳 `504`