Hakila Docs
Chat

建立 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))

POST/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
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.

常用欄位如下。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`