天秤AI(biz.tenbin.ai)の内部 GraphQL API を OpenAI / Anthropic / Gemini 互換の REST API に変換するプロキシサーバー。
天秤AIで利用可能な40+のAIモデル(GPT-5.5, Claude 4.7 Opus, Gemini 2.5 Pro等)を、OpenAIの chat/completions 形式、Anthropicの messages 形式、Geminiの generateContent 形式で呼び出せるようにする。
# OpenAI SDK そのまま使える
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"hello"}]}'- ダッシュボード —
https://tenbin2api.hikamer.f5.si/でアクセス可能 - OpenAI互換 —
POST /v1/chat/completions(ストリーミング対応) - Anthropic互換 —
POST /v1/messages(ストリーミング対応) - Gemini互換 —
POST /v1beta/models/{model}:generateContent - 40+モデル — GPT-5.5, Claude 4.7 Opus, Gemini 2.5 Pro, Grok 4.3, DeepSeek R1 等
- WebSocketストリーミング — 天秤AIのGraphQLサブスクリプション経由でリアルタイム応答
- モデル一覧 —
GET /v1/models
- Python 3.12+
- 天秤AIのアカウントとセッションID
git clone https://github.com/maebahesioru/tenbin2api.git
cd tenbin2api
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt.env ファイルを作成:
# 必須: 天秤AIのセッションID
# 取得方法: ブラウザのDevTools > Application > Cookies > biz-graphql.tenbin.ai > sessionId
TENBIN_SESSION_ID=your-session-id-here
# オプション
TENBIN_HOST=0.0.0.0
TENBIN_PORT=8080
TENBIN_FC_ENABLED=falsepython3 main.pyまたはポート指定:
python3 main.py --port 9090GET /health
{
"status": "ok",
"sessions": 1,
"session_valid": true,
"models_available": 41
}GET /v1/models
POST /v1/chat/completions
リクエスト:
{
"model": "claude-4.7-opus",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
"stream": false
}レスポンス:
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I help you today?"
}
}
]
}ストリーミング(stream: true)時は SSE 形式でチャンクが返る。
POST /v1/messages
{
"model": "claude-4.7-opus",
"system": "You are a helpful assistant.",
"messages": [
{"role": "user", "content": "Hello!"}
],
"stream": false
}POST /v1beta/models/gemini-2.5-pro:generateContent
{
"contents": [
{
"role": "user",
"parts": [{"text": "Hello!"}]
}
]
}tenbin2api は認証機能を備えています。デフォルトでは無効です。
.env ファイルで設定:
TENBIN_AUTH_ENABLED=true
TENBIN_DASHBOARD_PASSWORD=your-password-here
TENBIN_API_KEY=sk-your-api-key-here| 保護対象 | 認証方法 | 説明 |
|---|---|---|
ダッシュボード(/) |
パスワード | ブラウザでパスワード入力(Cookie セッション) |
API エンドポイント(/v1/*) |
Bearer Token | リクエストヘッダーに Authorization: Bearer sk-... |
/health |
なし | 監視用として公開 |
# 認証ありでリクエスト
curl -H "Authorization: Bearer sk-your-api-key" \
https://tenbin2api.hikamer.f5.si/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"hello"}]}'ブラウザで https://tenbin2api.hikamer.f5.si/login にアクセスし、パスワードを入力。
Coolify で https://github.com/maebahesioru/tenbin2api をアプリケーションとして追加し、以下の環境変数を設定:
| 変数名 | 値 | 必須 |
|---|---|---|
TENBIN_SESSION_ID |
天秤AIのセッションID | ✅ |
TENBIN_HOST |
0.0.0.0 |
|
TENBIN_PORT |
8080 |
|
TENBIN_FC_ENABLED |
false |
ビルドパック: dockerfile
ポート: 8080
天秤AIのカテゴリ分類に基づく全モデル一覧:
| モデル名 | 内部名 | コンテキスト(実測chars) |
|---|---|---|
| gpt-4.1-mini | OpenAIgpt41Mini | 500K chars |
| gpt-4.1-nano | OpenAIgpt41Nano | 500K chars |
| gpt-4o-mini | OpenAIgpt4oMini | 500K chars |
| gpt-5-mini | OpenAIgpt5Mini | 100K chars |
| gpt-5-nano | OpenAIgpt5Nano | 100K chars |
| gpt-5.4-mini | OpenAIgpt54Mini | 500K chars |
| gpt-5.4-nano | OpenAIgpt54Nano | 500K chars |
| o3-mini | OpenAIo3Mini | 200K chars |
| o4-mini | OpenAIo4Mini | 500K chars |
| claude-4.5-haiku | AnthropicClaude45Haiku | 50K chars |
| gemini-2.5-flash | GeminiFlash25 | 500K chars |
| gemini-3.0-flash | GeminiFlash3 | 500K chars |
| モデル名 | 内部名 | コンテキスト(実測chars) |
|---|---|---|
| grok-4.2 | XAIGrok41Fast | 50K chars未満 |
| perplexity-sonar | PerplexitySonar | 50K chars |
| plamo-2.1 | Plamo21Prime | 50K chars |
| deepseek-r1 | DeepSeekR1 | 50K chars |
| deepseek-v3 | DeepSeekV3 | 50K chars |
| モデル名 | 内部名 | コンテキスト(実測chars) |
|---|---|---|
| gpt-4.1 | OpenAIgpt41 | 500K chars |
| gpt-5 | OpenAIgpt5 | 100K chars |
| gpt-5.1 | OpenAIgpt51 | 500K chars |
| gpt-5.2 | OpenAIgpt52 | 500K chars |
| gpt-5.4 | OpenAIgpt54 | 500K chars |
| gpt-5.5 | OpenAIgpt55 | 500K chars |
| o3 | OpenAIo3 | 200K chars |
| claude-4.5-opus | AnthropicClaude45Opus | 500K chars |
| claude-4.6-opus | AnthropicClaude46Opus | 500K chars |
| claude-4.7-opus | AnthropicClaude47Opus | 500K chars |
| claude-4-sonnet | AnthropicClaude4Sonnet | 200K chars |
| claude-4.5-sonnet | AnthropicClaude45Sonnet | 200K chars |
| claude-4.6-sonnet | AnthropicClaude46Sonnet | 500K chars |
| gemini-2.5-pro | GeminiPro25 | 500K chars |
| gemini-3.1-pro | GeminiPro31Preview | 500K chars |
| grok-4.3 | XAIGrok43 | 500K chars |
| モデル名 | 内部名 | コンテキスト(実測chars) |
|---|---|---|
| gpt-5-pro | OpenAIgpt5Pro | 100K chars |
| gpt-5.2-pro | OpenAIgpt52Pro | 500K chars |
| gpt-5.4-pro | OpenAIgpt54Pro | 500K chars |
| gpt-5.5-pro | OpenAIgpt55Pro | 500K chars |
| o1 | OpenAIo1 | 500K chars |
| o3-pro | OpenAIo3Pro | 200K chars |
| claude-4-opus | AnthropicClaude4Opus | 200K chars |
| claude-4.1-opus | AnthropicClaude41Opus | 200K chars |
全モデル一覧は GET /v1/models で確認可能。
クライアント → tenbin2api (FastAPI) → 天秤AI GraphQL API
↓
WebSocket (SSEストリーミング)
天秤AIのセッションIDを TENBIN_SESSION_ID として環境変数に設定。リクエストごとに IssueExecutionTokensMultiple で新規トークンを発行(TokenPool方式はトークン無効化問題のため不使用)。
src/model_mapping.py でユーザー指定名から天秤AI内部名への変換を定義。
MIT