コンテンツにスキップ

Models

Claude Code

Claude Code は、Anthropic Messages 形式を話すホストをすべてゲートウェイとして扱います。Grafilab はその形式を https://llm.grafilab.ai/v1/messages で提供しているので、CLI を Grafilab に向けるのに必要なのは環境変数 2 つとモデル ID だけです。

  • Claude Code がインストールされ、動作していること。claude --version で確認できます。
  • A Grafilab API key. In the console open API (https://app.grafilab.ai/api) and click Generate New Key — see API Keys.

キーには claude-code という名前を付けて、他のツールと支出を分けておきます。

The model catalog is live, so list it rather than copying ids from a page. Every entry’s id is the exact string to use in any tool or SDK.

Terminal window
curl https://llm.grafilab.ai/v1/models \
-H "Authorization: Bearer $GRAFILAB_API_KEY" | jq -r '.data[].id'

The same ids appear as cards in the Playground, with context size and prices.

Anthropic 互換 API 自体にはモデル一覧がないので、上記のように OpenAI 互換 API でカタログを取得し、id を ANTHROPIC_MODEL に貼り付けてください。

ベース URL にはホスト部分のみを設定します。Claude Code は /v1/messages を自分で追加するため、/v1 で終わるベース URL を指定すると /v1/v1/messages へのリクエストになり 404 が返ります。

ターミナルウィンドウ
export ANTHROPIC_BASE_URL="https://llm.grafilab.ai"
export ANTHROPIC_AUTH_TOKEN="sk-grafilab-..."
export ANTHROPIC_MODEL="grafilab/qwen3.6-flash"
claude

ANTHROPIC_AUTH_TOKEN はキーを Authorization: Bearer として送り、Grafilab はこれを受け付けます。ANTHROPIC_API_KEY を併用しないでください。こちらはキーを x-api-key として送るもので Grafilab も受け付けますが、両方を設定していると Claude Code が API キーの承認を求めてきたうえ、認証情報が 2 系統あるという起動時の警告が出ます。どちらか一方にし、ANTHROPIC_AUTH_TOKEN を選んでください。

ANTHROPIC_MODEL が対象とするのはセッションのメインモデルだけです。Claude Code はバックグラウンド処理のために小さなモデルも呼び出し、サブエージェントも起動しますが、どちらも既定では Grafilab が提供していない Anthropic のモデル名を指しています。これらにも Grafilab の ID を設定しないと、その呼び出しは 404 で失敗します。

ターミナルウィンドウ
export ANTHROPIC_DEFAULT_HAIKU_MODEL="grafilab/qwen3.6-flash"
export CLAUDE_CODE_SUBAGENT_MODEL="grafilab/qwen3.6-flash"

ANTHROPIC_DEFAULT_HAIKU_MODEL は haiku エイリアスの解決先であり、Claude Code がバックグラウンド処理に使うモデルでもあります。ANTHROPIC_DEFAULT_SONNET_MODEL と ANTHROPIC_DEFAULT_OPUS_MODEL が sonnet と opus に対して同じ役割を果たすので、/model でモデルを切り替えるならそれらも設定してください。ANTHROPIC_SMALL_FAST_MODEL は haiku 用変数の非推奨の前身なので、新しい名前を使ってください。

export はターミナルのセッション 1 回きりです。すべての Claude Code セッションを Grafilab で動かしたいのか、一部だけにしたいのかによって、設定を残す方法が 2 つあります。

変数を Claude Code の設定ファイルの env ブロックに書きます。~/.claude/settings.json はすべてのプロジェクトに適用され、.claude/settings.local.json は 1 つのプロジェクトだけに適用されて自動的に gitignore されます。設定ファイルはバックグラウンドエージェントにも届きますが、シェルの export は確実には届きません。

~/.claude/settings.json
{
"env": {
"ANTHROPIC_BASE_URL": "https://llm.grafilab.ai",
"ANTHROPIC_AUTH_TOKEN": "sk-grafilab-...",
"ANTHROPIC_MODEL": "grafilab/qwen3.6-flash",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "grafilab/qwen3.6-flash",
"CLAUDE_CODE_SUBAGENT_MODEL": "grafilab/qwen3.6-flash"
}
}

設定ファイルは厳密な JSON です。末尾のカンマや // コメントがあると、次回の起動時に Claude Code が設定エラーを報告します。

Anthropic に対しても Claude Code を使っているなら、Grafilab 用の設定を関数にまとめておけば、素の claude はそのままで gclaude が Grafilab で動きます。

~/.zshrc or ~/.bashrc
gclaude() {
ANTHROPIC_BASE_URL="https://llm.grafilab.ai" \
ANTHROPIC_AUTH_TOKEN="sk-grafilab-..." \
ANTHROPIC_MODEL="grafilab/qwen3.6-flash" \
ANTHROPIC_DEFAULT_HAIKU_MODEL="grafilab/qwen3.6-flash" \
CLAUDE_CODE_SUBAGENT_MODEL="grafilab/qwen3.6-flash" \
command claude "$@"
}

PowerShell では finally ブロックが重要です。$env: への代入は関数の外にも残り、そのウィンドウで次に素の claude を実行したときに漏れ込んでしまいます。bash の書き方は 1 コマンドだけに変数を設定するので、後始末は不要です。

両方を用意する場合は、設定ファイルの env の値が同じ変数のシェル export より優先されることを覚えておいてください。

  1. Claude Code を開く前にエンドポイントをテストしておくと、失敗したときに CLI ではなくゲートウェイが原因だと切り分けられます。

    ターミナルウィンドウ
    curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
    -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
    -H "content-type: application/json" \
    -d '{"model": "grafilab/qwen3.6-flash", "max_tokens": 16, "messages": [{"role": "user", "content": "Say hi."}]}'

    {"id":"msg_ で始まるボディが返れば、URL とキーの両方が機能しています。

  2. セッションを開始してプロンプトを送ります。

    ターミナルウィンドウ
    claude "say hi"
  3. /status を実行して Status タブを見ます。次の 2 行が経路を裏づけます。

    Anthropic base URL: https://llm.grafilab.ai
    Auth token: ANTHROPIC_AUTH_TOKEN

    ベース URL の行がない場合、変数がセッションに届いていません。export したシェルから claude を起動するか、設定ファイルに移してください。

  4. /cost を実行します。トークン数と支出はいつもどおり表示されますが、キャッシュ書き込みの数値はゼロのままです。これは想定どおりで、下で説明します。

その後、コンソールで API を開き、claude-code キーの View Usage を選ぶと、同じリクエストを Grafilab 側から確認できます。集計は 30 分ほど遅れることがあります。

Grafilab は Messages プロトコルのサブセットを実装しています。編集、コマンド実行、MCP サーバーの呼び出しなど Claude Code に必要なものはすべて揃っていますが、次の点は目に付くかもしれません。

項目見え方対処
トークン数計測エンドポイントなしGrafilab は /v1/messages/count_tokens を実装していないため、Claude Code はゲートウェイにプロンプトの計測を依頼できず、残りコンテキストの表示は推定値になります対処不要。コンテキストの表示は概算だと考えてください
サーバーサイドツールの拒否web_search_*、bash_*、および type が custom 以外のツールは 400 を返します。Claude Code 組み込みの WebSearch ツールは機能を落として動くのではなく失敗します設定ファイルの permissions.deny に "WebSearch" を追加し、Claude Code がそもそも提示しないようにします
cache_control の無視プロンプトキャッシュの書き込みは報告されません。cache_creation_input_tokens は常に 0 で、/cost にもキャッシュ書き込みは表示されません。モデルがキャッシュに対応していれば、キャッシュ読み取りは引き続き報告されます対処不要。ゼロをバグと読まないでください
thinking の無視モデルがネイティブに推論しない限り、拡張思考の切り替えは効果がありません。Claude Code は認識できないモデル名(Grafilab のエイリアスを含む)に対して thinking を送りますが、Grafilab はエラーにせず受け付けたうえで破棄します対処不要
top_k、output_config、context_management の無視受け付けたうえで破棄されるので、effort やコンテキスト編集の設定は致命的ではなく単に無効になります対処不要
anthropic-version を読まない送っても害はありません対処不要
ゲートウェイのモデル検出CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 を設定すると Claude Code は起動時に /v1/models を読みますが、claude または anthropic を含む ID しか残さないため、Grafilab の ID はほとんど /model のピッカーに現れませんANTHROPIC_MODEL または claude --model でモデルを指定します
429 はウォレットが空という意味Grafilab は残高不足に対して 429 を返すのであって、スループット制限ではありませんコンソールでチャージします
Anthropic を直接呼ぶ機能Remote Control と音声ディクテーションは claude.ai の ID を必要とするため、ゲートウェイの認証情報を設定している間は使えませんそれらが必要なセッションでは変数を解除します
症状原因対処
すべてのリクエストで authentication_errorトークンに改行や末尾の空白が入っている。多くはターミナルからコピーしたときに起こりますコンソールの API からコピーし直し、値を引用符で囲む
curl のテストは通るのに Claude Code がログイン画面を出す到達できるベース URL は認証情報ではなく、プロジェクトの env ブロックはフォルダー信頼のプロンプトの後にしか適用されませんANTHROPIC_AUTH_TOKEN をシェルの export か ~/.claude/settings.json で設定する
モデル名を挙げた not_found_errorエイリアスの綴りが違うか、バックグラウンドまたはサブエージェントのモデルが Anthropic の名前のままになっていますGET /v1/models で取り直し、ANTHROPIC_DEFAULT_HAIKU_MODEL と CLAUDE_CODE_SUBAGENT_MODEL を設定する
すべてのリクエストで 404ベース URL が /v1 で終わっているホストのみの https://llm.grafilab.ai を使う
リクエストが固まり、何も表示されないまま落ちる上流呼び出しには最初のトークンまで 120 秒の制限があります再試行する。出力が出なかったリクエストは課金されていません
返答が途中で止まりエラーになる最初のフレームより後で失敗したストリームは HTTP 200 のまま、event: error をインバンドで届けます再試行する。生成された分の部分的な出力は課金されています
ゲートウェイからの 500インフラ障害であり、502 や 504 ではなく意図的に 500 を返していますレスポンスに x-should-retry: false がない限り再試行して問題ありません。この値は処理が完了して課金済みであることを示します