Cấu hình
Python (openai)
from openai import OpenAI
client = OpenAI(base_url="https://api.apimodelhub.com/v1", api_key="sk-spk-...")
res = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(res.choices[0].message.content)TypeScript (openai)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.apimodelhub.com/v1",
apiKey: process.env.OPENAI_API_KEY,
});
const res = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "Hello" }],
});Endpoint là POST https://api.apimodelhub.com/v1/chat/completions. Nếu tool của bạn hỏi "base URL" thì điền https://api.apimodelhub.com/v1 (SDK tự nối /chat/completions); nếu tool hỏi "full endpoint" thì điền cả đường dẫn đầy đủ.
Đường này chỉ dành cho model họ OpenAI (gpt-*, grok-*, deepseek-*)Gateway chuyển path nguyên văn lên nhà cung cấp của model, không dịch giao thức.
claude-* gọi qua /v1/chat/completions sẽ tới Anthropic bằng đường không tồn tại và nhận 404 của họ; gemini-* cũng vậy với Google. Model Claude dùng /v1/messages, xem trang Anthropic Messages.curl — không cần SDK
curl https://api.apimodelhub.com/v1/chat/completions \
-H "Authorization: Bearer sk-spk-..." \
-H "content-type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}'Có cả /v1/responsesResponses API cũng được hỗ trợ nguyên văn. Nếu code của bạn đã chuyển sang
client.responses.create(...) thì không phải đổi gì. Lưu ý: đây là đường PASSTHROUGH — nó chỉ chạy với model có vendor thật sự hỗ trợ Responses API (hiện là OpenAI); vendor khác thì dùng /v1/chat/completions.Streaming và function calling
stream: true trả SSE như bình thường. Chúng tôi tự thêm stream_options.include_usage để biết số token thật của lượt gọi (và bỏ nó khỏi phần trả về của bạn) — nếu không, hoá đơn sẽ phải ước lượng, và ước lượng là cách chắc chắn nhất để thu sai.
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Count to 5"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")Function calling / tool use giữ nguyên hình dạng OpenAI — tools, tool_choice, tool_calls trong response đều được chuyển nguyên văn.