Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/alibaba_open-code-review.json
T

1 line
150 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "alibaba/open-code-review", "files": {"pages/src/content/docs/ja/configuration.md": {"5829539379ecc3c2e43c36061b73469f7a261f8d": {"t": 1785674661.4065151, "n": 5770, "h": "fedaf895861fa764", "c": "---\ntitle: 設定\nsidebar:\n order: 5\n---\n\n設定ファイルは `~/.opencodereview/config.json` にあります。編集方法は 3 つあります。\n\n- **インタラクティブ TUI** —— `ocr config provider` / `ocr config model`。ガイド付きメニューが表示されます。\n- **コマンドライン** —— `ocr config set <key> <value>`。スクリプトや CI に適しています。\n- **手動編集(非推奨)** —— この JSON ファイルを直接編集(次回の `ocr config set` 書き込み時に再フォーマットされます)。\n\n## モデルを設定する\n\n### 推奨:インタラクティブ設定\n\n```bash\nocr config provider\n```\n\n組み込みまたはカスタムの provider を選択し、API key を入力し、model を選び、すべてを設定ファイルに保存したうえで、`ocr llm test` を 1 回実行してエンドポイントを検証します。あとで model を切り替えるには:\n\n```bash\nocr config model\n```\n\n### 非インタラクティブ設定(CI / TUI なし環境)\n\n`ocr config set` で同じ設定に書き込みます。\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 組み込み provider\n\n以下の provider が OCR に同梱されており、Base URL とプロトコルがプリセット\nされています——選択後は API key を入力するだけです。`providers.<name>.api_key`\nが未設定の場合は、対応する環境変数に自動的にフォールバックします。\n\n| 名称 | プロトコル | Base URL | API key 環境変数 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### カスタム provider\n\n上記の表にない provider 名はすべてカスタムとみなされ、少なくとも `url` と\n`protocol` を指定する必要があります(`protocol` は `anthropic`、`openai`、\nまたは `openai-responses`)。\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nprovider またはモデルが OpenAI Responses API(`/v1/responses`)を必要とする場合は、\n`openai-responses` プロトコルを使用します。\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` には API の Base URL または完全な `/responses` エンドポイントのどちらを指定してもよく、OCR がどちらの形式も正規化します。\n\nOllama で動かすローカルモデルは、ローカルの OpenAI 互換エンドポイントを\n指すカスタム provider にすぎません。\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama は API key を無視しますが、カスタム provider は空でない `api_key` を\n必要とします(カスタム provider には環境変数のフォールバックがありません)。\nそのため任意のプレースホルダー値を設定してください。モデル自体はネイティブな\nツール呼び出しをサポートしている必要があります——選ぶ前に FAQ の\n[\"No tool calls parsed\"(ローカルモデル / Ollama)](../faq/#no-tool-calls-parsed-ollama)を\n参照してください。\n\n### タイムアウト(Timeouts)\n\n各 LLM リクエストには HTTP タイムアウトがあり、デフォルトは **300 秒**です。\n遅いローカルモデル(あるいは大きなファイル)では、それ以上の時間が必要になることがあります。\nスコープの狭い順に、3 つの設定があります。\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——provider ごと、秒単位。\n- `llm.timeout_sec`——レガシーな `llm` セクション用、秒単位。\n- `OCR_LLM_TIMEOUT` 環境変数——整数(秒単位)。すべての解決パスで設定ファイルの\n 値を上書きします。\n\n`timeout_sec` key は `ocr config set` ではサポートされていません——\n`~/.opencodereview/config.json` を直接編集してください。\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 接続性を検証する\n\n```bash\nocr llm test\n```\n\n### 既存の環境変数を再利用する\n\nClaude Code の `ANTHROPIC_*` や OCR 独自の `OCR_LLM_*` 環境変数をすでに\n設定している場合、OCR はそれらを自動的に認識するため、設定ファイルを書く\n必要はありません。\n\n### CC-Switch を使う\n\n[CC-Switch](https://github.com/farion1231/cc-switch) を\n[ルーティングサービス](https://www.ccswitch.io/en/docs?section=proxy&item=service)\n有効で使用している場合、プロバイダーの `url` をローカルプロキシに向けるだけで、\n追加設定なしで利用できます:\n\n```bash\n# Claude(Anthropic 互換)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 互換 — そのプロバイダーの url キーを設定\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` は任意の値で構いません。`extra_body`(およびその他のプロバイダー固有フィールド)は\n引き続き有効です。\n\n### ベンダー固有のフィールドを送信する\n\n一部の provider は非標準のリクエストフィールド(Bedrock 風の `thinking` など)を\n必要とします。`extra_body`(各リクエストにマージされます)を使えば、ソースコードを\n変更せずにそれらを送信できます。\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## レビュー言語を設定する\n\n`language` はレビューコメントをどの言語で出力するかを決めます。未設定の場合は\nデフォルトで英語になります。\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 関連項目\n\n- [クイックスタート](../quickstart/)——最小限のセットアップと初回のレビュー。\n- [CLI リファレンス](../cli-reference/)——review コマンドが受け入れる各引数。\n"}, "0f3c920fc8ff091cbd1ad9e0632bf54bba56e46b": {"t": 1785809839.01042, "n": 5770, "h": "fedaf895861fa764", "c": "---\ntitle: 設定\nsidebar:\n order: 5\n---\n\n設定ファイルは `~/.opencodereview/config.json` にあります。編集方法は 3 つあります。\n\n- **インタラクティブ TUI** —— `ocr config provider` / `ocr config model`。ガイド付きメニューが表示されます。\n- **コマンドライン** —— `ocr config set <key> <value>`。スクリプトや CI に適しています。\n- **手動編集(非推奨)** —— この JSON ファイルを直接編集(次回の `ocr config set` 書き込み時に再フォーマットされます)。\n\n## モデルを設定する\n\n### 推奨:インタラクティブ設定\n\n```bash\nocr config provider\n```\n\n組み込みまたはカスタムの provider を選択し、API key を入力し、model を選び、すべてを設定ファイルに保存したうえで、`ocr llm test` を 1 回実行してエンドポイントを検証します。あとで model を切り替えるには:\n\n```bash\nocr config model\n```\n\n### 非インタラクティブ設定(CI / TUI なし環境)\n\n`ocr config set` で同じ設定に書き込みます。\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 組み込み provider\n\n以下の provider が OCR に同梱されており、Base URL とプロトコルがプリセット\nされています——選択後は API key を入力するだけです。`providers.<name>.api_key`\nが未設定の場合は、対応する環境変数に自動的にフォールバックします。\n\n| 名称 | プロトコル | Base URL | API key 環境変数 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### カスタム provider\n\n上記の表にない provider 名はすべてカスタムとみなされ、少なくとも `url` と\n`protocol` を指定する必要があります(`protocol` は `anthropic`、`openai`、\nまたは `openai-responses`)。\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nprovider またはモデルが OpenAI Responses API(`/v1/responses`)を必要とする場合は、\n`openai-responses` プロトコルを使用します。\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` には API の Base URL または完全な `/responses` エンドポイントのどちらを指定してもよく、OCR がどちらの形式も正規化します。\n\nOllama で動かすローカルモデルは、ローカルの OpenAI 互換エンドポイントを\n指すカスタム provider にすぎません。\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama は API key を無視しますが、カスタム provider は空でない `api_key` を\n必要とします(カスタム provider には環境変数のフォールバックがありません)。\nそのため任意のプレースホルダー値を設定してください。モデル自体はネイティブな\nツール呼び出しをサポートしている必要があります——選ぶ前に FAQ の\n[\"No tool calls parsed\"(ローカルモデル / Ollama)](../faq/#no-tool-calls-parsed-ollama)を\n参照してください。\n\n### タイムアウト(Timeouts)\n\n各 LLM リクエストには HTTP タイムアウトがあり、デフォルトは **300 秒**です。\n遅いローカルモデル(あるいは大きなファイル)では、それ以上の時間が必要になることがあります。\nスコープの狭い順に、3 つの設定があります。\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——provider ごと、秒単位。\n- `llm.timeout_sec`——レガシーな `llm` セクション用、秒単位。\n- `OCR_LLM_TIMEOUT` 環境変数——整数(秒単位)。すべての解決パスで設定ファイルの\n 値を上書きします。\n\n`timeout_sec` key は `ocr config set` ではサポートされていません——\n`~/.opencodereview/config.json` を直接編集してください。\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 接続性を検証する\n\n```bash\nocr llm test\n```\n\n### 既存の環境変数を再利用する\n\nClaude Code の `ANTHROPIC_*` や OCR 独自の `OCR_LLM_*` 環境変数をすでに\n設定している場合、OCR はそれらを自動的に認識するため、設定ファイルを書く\n必要はありません。\n\n### CC-Switch を使う\n\n[CC-Switch](https://github.com/farion1231/cc-switch) を\n[ルーティングサービス](https://www.ccswitch.io/en/docs?section=proxy&item=service)\n有効で使用している場合、プロバイダーの `url` をローカルプロキシに向けるだけで、\n追加設定なしで利用できます:\n\n```bash\n# Claude(Anthropic 互換)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 互換 — そのプロバイダーの url キーを設定\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` は任意の値で構いません。`extra_body`(およびその他のプロバイダー固有フィールド)は\n引き続き有効です。\n\n### ベンダー固有のフィールドを送信する\n\n一部の provider は非標準のリクエストフィールド(Bedrock 風の `thinking` など)を\n必要とします。`extra_body`(各リクエストにマージされます)を使えば、ソースコードを\n変更せずにそれらを送信できます。\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## レビュー言語を設定する\n\n`language` はレビューコメントをどの言語で出力するかを決めます。未設定の場合は\nデフォルトで英語になります。\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 関連項目\n\n- [クイックスタート](../quickstart/)——最小限のセットアップと初回のレビュー。\n- [CLI リファレンス](../cli-reference/)——review コマンドが受け入れる各引数。\n"}, "e6895dd15481e2612bf65114fab728fabd32451e": {"t": 1785846923.272841, "n": 5770, "h": "fedaf895861fa764", "c": "---\ntitle: 設定\nsidebar:\n order: 5\n---\n\n設定ファイルは `~/.opencodereview/config.json` にあります。編集方法は 3 つあります。\n\n- **インタラクティブ TUI** —— `ocr config provider` / `ocr config model`。ガイド付きメニューが表示されます。\n- **コマンドライン** —— `ocr config set <key> <value>`。スクリプトや CI に適しています。\n- **手動編集(非推奨)** —— この JSON ファイルを直接編集(次回の `ocr config set` 書き込み時に再フォーマットされます)。\n\n## モデルを設定する\n\n### 推奨:インタラクティブ設定\n\n```bash\nocr config provider\n```\n\n組み込みまたはカスタムの provider を選択し、API key を入力し、model を選び、すべてを設定ファイルに保存したうえで、`ocr llm test` を 1 回実行してエンドポイントを検証します。あとで model を切り替えるには:\n\n```bash\nocr config model\n```\n\n### 非インタラクティブ設定(CI / TUI なし環境)\n\n`ocr config set` で同じ設定に書き込みます。\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 組み込み provider\n\n以下の provider が OCR に同梱されており、Base URL とプロトコルがプリセット\nされています——選択後は API key を入力するだけです。`providers.<name>.api_key`\nが未設定の場合は、対応する環境変数に自動的にフォールバックします。\n\n| 名称 | プロトコル | Base URL | API key 環境変数 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### カスタム provider\n\n上記の表にない provider 名はすべてカスタムとみなされ、少なくとも `url` と\n`protocol` を指定する必要があります(`protocol` は `anthropic`、`openai`、\nまたは `openai-responses`)。\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nprovider またはモデルが OpenAI Responses API(`/v1/responses`)を必要とする場合は、\n`openai-responses` プロトコルを使用します。\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` には API の Base URL または完全な `/responses` エンドポイントのどちらを指定してもよく、OCR がどちらの形式も正規化します。\n\nOllama で動かすローカルモデルは、ローカルの OpenAI 互換エンドポイントを\n指すカスタム provider にすぎません。\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama は API key を無視しますが、カスタム provider は空でない `api_key` を\n必要とします(カスタム provider には環境変数のフォールバックがありません)。\nそのため任意のプレースホルダー値を設定してください。モデル自体はネイティブな\nツール呼び出しをサポートしている必要があります——選ぶ前に FAQ の\n[\"No tool calls parsed\"(ローカルモデル / Ollama)](../faq/#no-tool-calls-parsed-ollama)を\n参照してください。\n\n### タイムアウト(Timeouts)\n\n各 LLM リクエストには HTTP タイムアウトがあり、デフォルトは **300 秒**です。\n遅いローカルモデル(あるいは大きなファイル)では、それ以上の時間が必要になることがあります。\nスコープの狭い順に、3 つの設定があります。\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——provider ごと、秒単位。\n- `llm.timeout_sec`——レガシーな `llm` セクション用、秒単位。\n- `OCR_LLM_TIMEOUT` 環境変数——整数(秒単位)。すべての解決パスで設定ファイルの\n 値を上書きします。\n\n`timeout_sec` key は `ocr config set` ではサポートされていません——\n`~/.opencodereview/config.json` を直接編集してください。\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 接続性を検証する\n\n```bash\nocr llm test\n```\n\n### 既存の環境変数を再利用する\n\nClaude Code の `ANTHROPIC_*` や OCR 独自の `OCR_LLM_*` 環境変数をすでに\n設定している場合、OCR はそれらを自動的に認識するため、設定ファイルを書く\n必要はありません。\n\n### CC-Switch を使う\n\n[CC-Switch](https://github.com/farion1231/cc-switch) を\n[ルーティングサービス](https://www.ccswitch.io/en/docs?section=proxy&item=service)\n有効で使用している場合、プロバイダーの `url` をローカルプロキシに向けるだけで、\n追加設定なしで利用できます:\n\n```bash\n# Claude(Anthropic 互換)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 互換 — そのプロバイダーの url キーを設定\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` は任意の値で構いません。`extra_body`(およびその他のプロバイダー固有フィールド)は\n引き続き有効です。\n\n### ベンダー固有のフィールドを送信する\n\n一部の provider は非標準のリクエストフィールド(Bedrock 風の `thinking` など)を\n必要とします。`extra_body`(各リクエストにマージされます)を使えば、ソースコードを\n変更せずにそれらを送信できます。\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## レビュー言語を設定する\n\n`language` はレビューコメントをどの言語で出力するかを決めます。未設定の場合は\nデフォルトで英語になります。\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 関連項目\n\n- [クイックスタート](../quickstart/)——最小限のセットアップと初回のレビュー。\n- [CLI リファレンス](../cli-reference/)——review コマンドが受け入れる各引数。\n"}, "e9d4db51ec1d06fef1123d5a7158a7b311043650": {"t": 1785846959.6413512, "n": 5770, "h": "fedaf895861fa764", "c": "---\ntitle: 設定\nsidebar:\n order: 5\n---\n\n設定ファイルは `~/.opencodereview/config.json` にあります。編集方法は 3 つあります。\n\n- **インタラクティブ TUI** —— `ocr config provider` / `ocr config model`。ガイド付きメニューが表示されます。\n- **コマンドライン** —— `ocr config set <key> <value>`。スクリプトや CI に適しています。\n- **手動編集(非推奨)** —— この JSON ファイルを直接編集(次回の `ocr config set` 書き込み時に再フォーマットされます)。\n\n## モデルを設定する\n\n### 推奨:インタラクティブ設定\n\n```bash\nocr config provider\n```\n\n組み込みまたはカスタムの provider を選択し、API key を入力し、model を選び、すべてを設定ファイルに保存したうえで、`ocr llm test` を 1 回実行してエンドポイントを検証します。あとで model を切り替えるには:\n\n```bash\nocr config model\n```\n\n### 非インタラクティブ設定(CI / TUI なし環境)\n\n`ocr config set` で同じ設定に書き込みます。\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 組み込み provider\n\n以下の provider が OCR に同梱されており、Base URL とプロトコルがプリセット\nされています——選択後は API key を入力するだけです。`providers.<name>.api_key`\nが未設定の場合は、対応する環境変数に自動的にフォールバックします。\n\n| 名称 | プロトコル | Base URL | API key 環境変数 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### カスタム provider\n\n上記の表にない provider 名はすべてカスタムとみなされ、少なくとも `url` と\n`protocol` を指定する必要があります(`protocol` は `anthropic`、`openai`、\nまたは `openai-responses`)。\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nprovider またはモデルが OpenAI Responses API(`/v1/responses`)を必要とする場合は、\n`openai-responses` プロトコルを使用します。\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` には API の Base URL または完全な `/responses` エンドポイントのどちらを指定してもよく、OCR がどちらの形式も正規化します。\n\nOllama で動かすローカルモデルは、ローカルの OpenAI 互換エンドポイントを\n指すカスタム provider にすぎません。\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama は API key を無視しますが、カスタム provider は空でない `api_key` を\n必要とします(カスタム provider には環境変数のフォールバックがありません)。\nそのため任意のプレースホルダー値を設定してください。モデル自体はネイティブな\nツール呼び出しをサポートしている必要があります——選ぶ前に FAQ の\n[\"No tool calls parsed\"(ローカルモデル / Ollama)](../faq/#no-tool-calls-parsed-ollama)を\n参照してください。\n\n### タイムアウト(Timeouts)\n\n各 LLM リクエストには HTTP タイムアウトがあり、デフォルトは **300 秒**です。\n遅いローカルモデル(あるいは大きなファイル)では、それ以上の時間が必要になることがあります。\nスコープの狭い順に、3 つの設定があります。\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——provider ごと、秒単位。\n- `llm.timeout_sec`——レガシーな `llm` セクション用、秒単位。\n- `OCR_LLM_TIMEOUT` 環境変数——整数(秒単位)。すべての解決パスで設定ファイルの\n 値を上書きします。\n\n`timeout_sec` key は `ocr config set` ではサポートされていません——\n`~/.opencodereview/config.json` を直接編集してください。\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 接続性を検証する\n\n```bash\nocr llm test\n```\n\n### 既存の環境変数を再利用する\n\nClaude Code の `ANTHROPIC_*` や OCR 独自の `OCR_LLM_*` 環境変数をすでに\n設定している場合、OCR はそれらを自動的に認識するため、設定ファイルを書く\n必要はありません。\n\n### CC-Switch を使う\n\n[CC-Switch](https://github.com/farion1231/cc-switch) を\n[ルーティングサービス](https://www.ccswitch.io/en/docs?section=proxy&item=service)\n有効で使用している場合、プロバイダーの `url` をローカルプロキシに向けるだけで、\n追加設定なしで利用できます:\n\n```bash\n# Claude(Anthropic 互換)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 互換 — そのプロバイダーの url キーを設定\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` は任意の値で構いません。`extra_body`(およびその他のプロバイダー固有フィールド)は\n引き続き有効です。\n\n### ベンダー固有のフィールドを送信する\n\n一部の provider は非標準のリクエストフィールド(Bedrock 風の `thinking` など)を\n必要とします。`extra_body`(各リクエストにマージされます)を使えば、ソースコードを\n変更せずにそれらを送信できます。\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## レビュー言語を設定する\n\n`language` はレビューコメントをどの言語で出力するかを決めます。未設定の場合は\nデフォルトで英語になります。\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 関連項目\n\n- [クイックスタート](../quickstart/)——最小限のセットアップと初回のレビュー。\n- [CLI リファレンス](../cli-reference/)——review コマンドが受け入れる各引数。\n"}}, "pages/src/content/docs/en/configuration.md": {"5829539379ecc3c2e43c36061b73469f7a261f8d": {"t": 1785674662.415503, "n": 6790, "h": "0ce4b8721bb9f682", "c": "---\ntitle: Configuration\nsidebar:\n order: 5\n---\n\nThe config file lives at `~/.opencodereview/config.json`. You have three ways\nto edit it:\n\n- **Interactive TUI** — `ocr config provider` / `ocr config model`, with guided menus.\n- **Command line** — `ocr config set <key> <value>`, ideal for scripts and CI.\n- **Manual edit (not recommended)** — the JSON file directly (it gets reformatted on the next `ocr config set` write).\n\n## Configuring a model\n\n### Recommended: interactive setup\n\n```bash\nocr config provider\n```\n\nIt lets you pick a built-in or custom provider, enter an API key, choose a model, saves everything to the config file, and then runs `ocr llm test` once to verify the endpoint. To switch models later:\n\n```bash\nocr config model\n```\n\n### Non-interactive setup (CI / no-TUI environments)\n\nWrite to the same config with `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Built-in providers\n\nThe following providers ship with OCR, with the Base URL and protocol\npreset — once selected, you only need to fill in the API key. If\n`providers.<name>.api_key` is unset, OCR falls back to the corresponding\nenvironment variable.\n\n| Name | Protocol | Base URL | API key env var |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Custom providers\n\nAny provider name not in the table above is treated as custom and must\nsupply at least `url` and `protocol` (`protocol` is `anthropic`,\n`openai`, or `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nUse `openai-responses` when a provider or model requires the OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nThe `url` can be either the API base URL or the full `/responses` endpoint — OCR normalizes it either way.\n\nA local model served by Ollama is just a custom provider pointing at the\nlocal OpenAI-compatible endpoint:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama ignores the API key, but custom providers require a non-empty\n`api_key` (there is no environment-variable fallback for them), so set\nany placeholder value. The model itself must support native tool\ncalling — see\n[\"No tool calls parsed\" (local models / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nin the FAQ before picking one.\n\n### Timeouts\n\nEach LLM request has an HTTP timeout, defaulting to **300 seconds**.\nSlow local models (or large files) can need more. Three knobs, in\nincreasing scope:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — per-provider, in seconds.\n- `llm.timeout_sec` — for the legacy `llm` section, in seconds.\n- `OCR_LLM_TIMEOUT` environment variable — integer seconds; overrides\n the config-file value for every resolution path.\n\nThe `timeout_sec` keys are not supported by `ocr config set` — edit\n`~/.opencodereview/config.json` directly:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Verify connectivity\n\n```bash\nocr llm test\n```\n\n### Reuse existing environment variables\n\nIf you already have Claude Code's `ANTHROPIC_*` or OCR's own `OCR_LLM_*`\nenvironment variables configured, OCR picks them up automatically — no\nconfig file needed.\n\n### Using CC-Switch\n\nIf you use [CC-Switch](https://github.com/farion1231/cc-switch) with its\n[routing service](https://www.ccswitch.io/en/docs?section=proxy&item=service)\nenabled, point the provider `url` at the local proxy — no other setup is\nrequired:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` can be any value. `extra_body` (and other per-provider fields)\nstill apply as usual.\n\n### Send vendor-specific fields\n\nSome providers require non-standard request fields (such as Bedrock-style\n`thinking`). Use `extra_body` (merged into every request) to send them\nwithout patching the source:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Configuring the review language\n\n`language` determines which language review comments are written in;\nit defaults to English when unset:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## See Also\n\n- [QuickStart](../quickstart/) — minimal setup and first review.\n- [CLI Reference](../cli-reference/) — every flag the review command accepts.\n"}, "0f3c920fc8ff091cbd1ad9e0632bf54bba56e46b": {"t": 1785809839.0882032, "n": 6790, "h": "0ce4b8721bb9f682", "c": "---\ntitle: Configuration\nsidebar:\n order: 5\n---\n\nThe config file lives at `~/.opencodereview/config.json`. You have three ways\nto edit it:\n\n- **Interactive TUI** — `ocr config provider` / `ocr config model`, with guided menus.\n- **Command line** — `ocr config set <key> <value>`, ideal for scripts and CI.\n- **Manual edit (not recommended)** — the JSON file directly (it gets reformatted on the next `ocr config set` write).\n\n## Configuring a model\n\n### Recommended: interactive setup\n\n```bash\nocr config provider\n```\n\nIt lets you pick a built-in or custom provider, enter an API key, choose a model, saves everything to the config file, and then runs `ocr llm test` once to verify the endpoint. To switch models later:\n\n```bash\nocr config model\n```\n\n### Non-interactive setup (CI / no-TUI environments)\n\nWrite to the same config with `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Built-in providers\n\nThe following providers ship with OCR, with the Base URL and protocol\npreset — once selected, you only need to fill in the API key. If\n`providers.<name>.api_key` is unset, OCR falls back to the corresponding\nenvironment variable.\n\n| Name | Protocol | Base URL | API key env var |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Custom providers\n\nAny provider name not in the table above is treated as custom and must\nsupply at least `url` and `protocol` (`protocol` is `anthropic`,\n`openai`, or `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nUse `openai-responses` when a provider or model requires the OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nThe `url` can be either the API base URL or the full `/responses` endpoint — OCR normalizes it either way.\n\nA local model served by Ollama is just a custom provider pointing at the\nlocal OpenAI-compatible endpoint:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama ignores the API key, but custom providers require a non-empty\n`api_key` (there is no environment-variable fallback for them), so set\nany placeholder value. The model itself must support native tool\ncalling — see\n[\"No tool calls parsed\" (local models / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nin the FAQ before picking one.\n\n### Timeouts\n\nEach LLM request has an HTTP timeout, defaulting to **300 seconds**.\nSlow local models (or large files) can need more. Three knobs, in\nincreasing scope:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — per-provider, in seconds.\n- `llm.timeout_sec` — for the legacy `llm` section, in seconds.\n- `OCR_LLM_TIMEOUT` environment variable — integer seconds; overrides\n the config-file value for every resolution path.\n\nThe `timeout_sec` keys are not supported by `ocr config set` — edit\n`~/.opencodereview/config.json` directly:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Verify connectivity\n\n```bash\nocr llm test\n```\n\n### Reuse existing environment variables\n\nIf you already have Claude Code's `ANTHROPIC_*` or OCR's own `OCR_LLM_*`\nenvironment variables configured, OCR picks them up automatically — no\nconfig file needed.\n\n### Using CC-Switch\n\nIf you use [CC-Switch](https://github.com/farion1231/cc-switch) with its\n[routing service](https://www.ccswitch.io/en/docs?section=proxy&item=service)\nenabled, point the provider `url` at the local proxy — no other setup is\nrequired:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` can be any value. `extra_body` (and other per-provider fields)\nstill apply as usual.\n\n### Send vendor-specific fields\n\nSome providers require non-standard request fields (such as Bedrock-style\n`thinking`). Use `extra_body` (merged into every request) to send them\nwithout patching the source:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Configuring the review language\n\n`language` determines which language review comments are written in;\nit defaults to English when unset:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## See Also\n\n- [QuickStart](../quickstart/) — minimal setup and first review.\n- [CLI Reference](../cli-reference/) — every flag the review command accepts.\n"}, "e6895dd15481e2612bf65114fab728fabd32451e": {"t": 1785846922.7873585, "n": 6790, "h": "0ce4b8721bb9f682", "c": "---\ntitle: Configuration\nsidebar:\n order: 5\n---\n\nThe config file lives at `~/.opencodereview/config.json`. You have three ways\nto edit it:\n\n- **Interactive TUI** — `ocr config provider` / `ocr config model`, with guided menus.\n- **Command line** — `ocr config set <key> <value>`, ideal for scripts and CI.\n- **Manual edit (not recommended)** — the JSON file directly (it gets reformatted on the next `ocr config set` write).\n\n## Configuring a model\n\n### Recommended: interactive setup\n\n```bash\nocr config provider\n```\n\nIt lets you pick a built-in or custom provider, enter an API key, choose a model, saves everything to the config file, and then runs `ocr llm test` once to verify the endpoint. To switch models later:\n\n```bash\nocr config model\n```\n\n### Non-interactive setup (CI / no-TUI environments)\n\nWrite to the same config with `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Built-in providers\n\nThe following providers ship with OCR, with the Base URL and protocol\npreset — once selected, you only need to fill in the API key. If\n`providers.<name>.api_key` is unset, OCR falls back to the corresponding\nenvironment variable.\n\n| Name | Protocol | Base URL | API key env var |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Custom providers\n\nAny provider name not in the table above is treated as custom and must\nsupply at least `url` and `protocol` (`protocol` is `anthropic`,\n`openai`, or `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nUse `openai-responses` when a provider or model requires the OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nThe `url` can be either the API base URL or the full `/responses` endpoint — OCR normalizes it either way.\n\nA local model served by Ollama is just a custom provider pointing at the\nlocal OpenAI-compatible endpoint:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama ignores the API key, but custom providers require a non-empty\n`api_key` (there is no environment-variable fallback for them), so set\nany placeholder value. The model itself must support native tool\ncalling — see\n[\"No tool calls parsed\" (local models / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nin the FAQ before picking one.\n\n### Timeouts\n\nEach LLM request has an HTTP timeout, defaulting to **300 seconds**.\nSlow local models (or large files) can need more. Three knobs, in\nincreasing scope:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — per-provider, in seconds.\n- `llm.timeout_sec` — for the legacy `llm` section, in seconds.\n- `OCR_LLM_TIMEOUT` environment variable — integer seconds; overrides\n the config-file value for every resolution path.\n\nThe `timeout_sec` keys are not supported by `ocr config set` — edit\n`~/.opencodereview/config.json` directly:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Verify connectivity\n\n```bash\nocr llm test\n```\n\n### Reuse existing environment variables\n\nIf you already have Claude Code's `ANTHROPIC_*` or OCR's own `OCR_LLM_*`\nenvironment variables configured, OCR picks them up automatically — no\nconfig file needed.\n\n### Using CC-Switch\n\nIf you use [CC-Switch](https://github.com/farion1231/cc-switch) with its\n[routing service](https://www.ccswitch.io/en/docs?section=proxy&item=service)\nenabled, point the provider `url` at the local proxy — no other setup is\nrequired:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` can be any value. `extra_body` (and other per-provider fields)\nstill apply as usual.\n\n### Send vendor-specific fields\n\nSome providers require non-standard request fields (such as Bedrock-style\n`thinking`). Use `extra_body` (merged into every request) to send them\nwithout patching the source:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Configuring the review language\n\n`language` determines which language review comments are written in;\nit defaults to English when unset:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## See Also\n\n- [QuickStart](../quickstart/) — minimal setup and first review.\n- [CLI Reference](../cli-reference/) — every flag the review command accepts.\n"}, "e9d4db51ec1d06fef1123d5a7158a7b311043650": {"t": 1785846959.726488, "n": 6790, "h": "0ce4b8721bb9f682", "c": "---\ntitle: Configuration\nsidebar:\n order: 5\n---\n\nThe config file lives at `~/.opencodereview/config.json`. You have three ways\nto edit it:\n\n- **Interactive TUI** — `ocr config provider` / `ocr config model`, with guided menus.\n- **Command line** — `ocr config set <key> <value>`, ideal for scripts and CI.\n- **Manual edit (not recommended)** — the JSON file directly (it gets reformatted on the next `ocr config set` write).\n\n## Configuring a model\n\n### Recommended: interactive setup\n\n```bash\nocr config provider\n```\n\nIt lets you pick a built-in or custom provider, enter an API key, choose a model, saves everything to the config file, and then runs `ocr llm test` once to verify the endpoint. To switch models later:\n\n```bash\nocr config model\n```\n\n### Non-interactive setup (CI / no-TUI environments)\n\nWrite to the same config with `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Built-in providers\n\nThe following providers ship with OCR, with the Base URL and protocol\npreset — once selected, you only need to fill in the API key. If\n`providers.<name>.api_key` is unset, OCR falls back to the corresponding\nenvironment variable.\n\n| Name | Protocol | Base URL | API key env var |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Custom providers\n\nAny provider name not in the table above is treated as custom and must\nsupply at least `url` and `protocol` (`protocol` is `anthropic`,\n`openai`, or `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nUse `openai-responses` when a provider or model requires the OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nThe `url` can be either the API base URL or the full `/responses` endpoint — OCR normalizes it either way.\n\nA local model served by Ollama is just a custom provider pointing at the\nlocal OpenAI-compatible endpoint:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama ignores the API key, but custom providers require a non-empty\n`api_key` (there is no environment-variable fallback for them), so set\nany placeholder value. The model itself must support native tool\ncalling — see\n[\"No tool calls parsed\" (local models / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nin the FAQ before picking one.\n\n### Timeouts\n\nEach LLM request has an HTTP timeout, defaulting to **300 seconds**.\nSlow local models (or large files) can need more. Three knobs, in\nincreasing scope:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — per-provider, in seconds.\n- `llm.timeout_sec` — for the legacy `llm` section, in seconds.\n- `OCR_LLM_TIMEOUT` environment variable — integer seconds; overrides\n the config-file value for every resolution path.\n\nThe `timeout_sec` keys are not supported by `ocr config set` — edit\n`~/.opencodereview/config.json` directly:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Verify connectivity\n\n```bash\nocr llm test\n```\n\n### Reuse existing environment variables\n\nIf you already have Claude Code's `ANTHROPIC_*` or OCR's own `OCR_LLM_*`\nenvironment variables configured, OCR picks them up automatically — no\nconfig file needed.\n\n### Using CC-Switch\n\nIf you use [CC-Switch](https://github.com/farion1231/cc-switch) with its\n[routing service](https://www.ccswitch.io/en/docs?section=proxy&item=service)\nenabled, point the provider `url` at the local proxy — no other setup is\nrequired:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` can be any value. `extra_body` (and other per-provider fields)\nstill apply as usual.\n\n### Send vendor-specific fields\n\nSome providers require non-standard request fields (such as Bedrock-style\n`thinking`). Use `extra_body` (merged into every request) to send them\nwithout patching the source:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Configuring the review language\n\n`language` determines which language review comments are written in;\nit defaults to English when unset:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## See Also\n\n- [QuickStart](../quickstart/) — minimal setup and first review.\n- [CLI Reference](../cli-reference/) — every flag the review command accepts.\n"}}, "pages/src/content/docs/zh/configuration.md": {"5829539379ecc3c2e43c36061b73469f7a261f8d": {"t": 1785674662.5233676, "n": 5203, "h": "d038372cc8ea9f26", "c": "---\ntitle: 配置\nsidebar:\n order: 5\n---\n\n配置文件在 `~/.opencodereview/config.json`,你有三种方式编辑它:\n\n- **交互式 TUI** —— `ocr config provider` / `ocr config model`,带引导菜单。\n- **命令行** —— `ocr config set <key> <value>`,适合脚本与 CI。\n- **手动编辑(不推荐)** —— 该 JSON 文件(下次 `ocr config set` 写入时会重新格式化)。\n\n## 配置模型\n\n### 推荐:交互式设置\n\n```bash\nocr config provider\n```\n\n它会让你选择一个内置或自定义 provider、填入 API key、挑选 model,保存到配置文件后自动运行一次 `ocr llm test` 验证端点。之后想换模型:\n\n```bash\nocr config model\n```\n\n### 非交互设置(CI / 无 TUI 环境)\n\n用 `ocr config set` 写入同一份配置:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 内置 provider\n\n下列 provider 随 OCR 发布,已预置 Base URL 与协议,选中后只需填 API key。\n若 `providers.<name>.api_key` 未设置,会自动回退到对应的环境变量。\n\n| 名称 | 协议 | Base URL | API key 环境变量 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### 自定义 provider\n\n任何不在上表中的 provider 名都视为自定义,至少要提供 `url` 和 `protocol`\n(`protocol` 取 `anthropic`、`openai` 或 `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\n当 provider 或模型要求使用 OpenAI Responses API(`/v1/responses`)时,使用\n`openai-responses` 协议:\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` 既可以填 API 的 Base URL,也可以填完整的 `/responses` 端点,OCR 会自动归一化处理。\n\n用 Ollama 跑本地模型,就是一个指向本地 OpenAI 兼容端点的自定义 provider:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama 会忽略 API key,但自定义 provider 要求非空的 `api_key`(自定义\nprovider 没有环境变量回退),所以设任意占位值即可。模型本身必须支持原生\n工具调用——选型前请先看 FAQ 中的\n[\"No tool calls parsed\"(本地模型 / Ollama)](../faq/#no-tool-calls-parsed-本地模型-ollama)。\n\n### 超时\n\n每个 LLM 请求都有 HTTP 超时,默认 **300 秒**。慢的本地模型(或大文件)可能\n需要更长的时间。三个配置项,作用域递增:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——per-provider,单位秒。\n- `llm.timeout_sec`——用于旧版 `llm` 配置段,单位秒。\n- `OCR_LLM_TIMEOUT` 环境变量——整数秒;对每条解析路径都覆盖配置文件里\n 的值。\n\n`ocr config set` 不支持 `timeout_sec` key——直接编辑\n`~/.opencodereview/config.json`:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 验证连通性\n\n```bash\nocr llm test\n```\n\n### 复用已有的环境变量\n\n如果你已经配好了 Claude Code 的 `ANTHROPIC_*`,或 OCR 自己的 `OCR_LLM_*`环境变量,OCR 会自动识别,无需再写配置文件。\n\n### 使用 CC-Switch\n\n如果你使用 [CC-Switch](https://github.com/farion1231/cc-switch) 并开启了\n[路由服务](https://www.ccswitch.io/zh/docs?section=proxy&item=service),\n可以将供应商的 `url` 配置成 CC-Switch 启动的代理地址,无需额外配置:\n\n```bash\n# Claude(Anthropic 兼容)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 兼容 — 将该供应商的 url 键设为代理地址\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` 可设置为任意值。`extra_body`(及其他按供应商字段)依然生效。\n\n### 发送厂商专属字段\n\n某些 provider 需要非标准的请求字段(如 Bedrock 风格的 `thinking`)。用`extra_body`(合并进每次请求)即可发送,无需改源码:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## 配置评审语言\n\n`language` 决定评审评论用哪种语言输出,未设置时默认英文:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 另见\n\n- [快速开始](../quickstart/)——最小化设置与首次评审。\n- [CLI 参考](../cli-reference/)——review 命令接受的每个参数。\n"}, "0f3c920fc8ff091cbd1ad9e0632bf54bba56e46b": {"t": 1785809838.9480562, "n": 5203, "h": "d038372cc8ea9f26", "c": "---\ntitle: 配置\nsidebar:\n order: 5\n---\n\n配置文件在 `~/.opencodereview/config.json`,你有三种方式编辑它:\n\n- **交互式 TUI** —— `ocr config provider` / `ocr config model`,带引导菜单。\n- **命令行** —— `ocr config set <key> <value>`,适合脚本与 CI。\n- **手动编辑(不推荐)** —— 该 JSON 文件(下次 `ocr config set` 写入时会重新格式化)。\n\n## 配置模型\n\n### 推荐:交互式设置\n\n```bash\nocr config provider\n```\n\n它会让你选择一个内置或自定义 provider、填入 API key、挑选 model,保存到配置文件后自动运行一次 `ocr llm test` 验证端点。之后想换模型:\n\n```bash\nocr config model\n```\n\n### 非交互设置(CI / 无 TUI 环境)\n\n用 `ocr config set` 写入同一份配置:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 内置 provider\n\n下列 provider 随 OCR 发布,已预置 Base URL 与协议,选中后只需填 API key。\n若 `providers.<name>.api_key` 未设置,会自动回退到对应的环境变量。\n\n| 名称 | 协议 | Base URL | API key 环境变量 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### 自定义 provider\n\n任何不在上表中的 provider 名都视为自定义,至少要提供 `url` 和 `protocol`\n(`protocol` 取 `anthropic`、`openai` 或 `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\n当 provider 或模型要求使用 OpenAI Responses API(`/v1/responses`)时,使用\n`openai-responses` 协议:\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` 既可以填 API 的 Base URL,也可以填完整的 `/responses` 端点,OCR 会自动归一化处理。\n\n用 Ollama 跑本地模型,就是一个指向本地 OpenAI 兼容端点的自定义 provider:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama 会忽略 API key,但自定义 provider 要求非空的 `api_key`(自定义\nprovider 没有环境变量回退),所以设任意占位值即可。模型本身必须支持原生\n工具调用——选型前请先看 FAQ 中的\n[\"No tool calls parsed\"(本地模型 / Ollama)](../faq/#no-tool-calls-parsed-本地模型-ollama)。\n\n### 超时\n\n每个 LLM 请求都有 HTTP 超时,默认 **300 秒**。慢的本地模型(或大文件)可能\n需要更长的时间。三个配置项,作用域递增:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——per-provider,单位秒。\n- `llm.timeout_sec`——用于旧版 `llm` 配置段,单位秒。\n- `OCR_LLM_TIMEOUT` 环境变量——整数秒;对每条解析路径都覆盖配置文件里\n 的值。\n\n`ocr config set` 不支持 `timeout_sec` key——直接编辑\n`~/.opencodereview/config.json`:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 验证连通性\n\n```bash\nocr llm test\n```\n\n### 复用已有的环境变量\n\n如果你已经配好了 Claude Code 的 `ANTHROPIC_*`,或 OCR 自己的 `OCR_LLM_*`环境变量,OCR 会自动识别,无需再写配置文件。\n\n### 使用 CC-Switch\n\n如果你使用 [CC-Switch](https://github.com/farion1231/cc-switch) 并开启了\n[路由服务](https://www.ccswitch.io/zh/docs?section=proxy&item=service),\n可以将供应商的 `url` 配置成 CC-Switch 启动的代理地址,无需额外配置:\n\n```bash\n# Claude(Anthropic 兼容)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 兼容 — 将该供应商的 url 键设为代理地址\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` 可设置为任意值。`extra_body`(及其他按供应商字段)依然生效。\n\n### 发送厂商专属字段\n\n某些 provider 需要非标准的请求字段(如 Bedrock 风格的 `thinking`)。用`extra_body`(合并进每次请求)即可发送,无需改源码:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## 配置评审语言\n\n`language` 决定评审评论用哪种语言输出,未设置时默认英文:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 另见\n\n- [快速开始](../quickstart/)——最小化设置与首次评审。\n- [CLI 参考](../cli-reference/)——review 命令接受的每个参数。\n"}, "e6895dd15481e2612bf65114fab728fabd32451e": {"t": 1785846922.796352, "n": 5203, "h": "d038372cc8ea9f26", "c": "---\ntitle: 配置\nsidebar:\n order: 5\n---\n\n配置文件在 `~/.opencodereview/config.json`,你有三种方式编辑它:\n\n- **交互式 TUI** —— `ocr config provider` / `ocr config model`,带引导菜单。\n- **命令行** —— `ocr config set <key> <value>`,适合脚本与 CI。\n- **手动编辑(不推荐)** —— 该 JSON 文件(下次 `ocr config set` 写入时会重新格式化)。\n\n## 配置模型\n\n### 推荐:交互式设置\n\n```bash\nocr config provider\n```\n\n它会让你选择一个内置或自定义 provider、填入 API key、挑选 model,保存到配置文件后自动运行一次 `ocr llm test` 验证端点。之后想换模型:\n\n```bash\nocr config model\n```\n\n### 非交互设置(CI / 无 TUI 环境)\n\n用 `ocr config set` 写入同一份配置:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 内置 provider\n\n下列 provider 随 OCR 发布,已预置 Base URL 与协议,选中后只需填 API key。\n若 `providers.<name>.api_key` 未设置,会自动回退到对应的环境变量。\n\n| 名称 | 协议 | Base URL | API key 环境变量 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### 自定义 provider\n\n任何不在上表中的 provider 名都视为自定义,至少要提供 `url` 和 `protocol`\n(`protocol` 取 `anthropic`、`openai` 或 `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\n当 provider 或模型要求使用 OpenAI Responses API(`/v1/responses`)时,使用\n`openai-responses` 协议:\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` 既可以填 API 的 Base URL,也可以填完整的 `/responses` 端点,OCR 会自动归一化处理。\n\n用 Ollama 跑本地模型,就是一个指向本地 OpenAI 兼容端点的自定义 provider:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama 会忽略 API key,但自定义 provider 要求非空的 `api_key`(自定义\nprovider 没有环境变量回退),所以设任意占位值即可。模型本身必须支持原生\n工具调用——选型前请先看 FAQ 中的\n[\"No tool calls parsed\"(本地模型 / Ollama)](../faq/#no-tool-calls-parsed-本地模型-ollama)。\n\n### 超时\n\n每个 LLM 请求都有 HTTP 超时,默认 **300 秒**。慢的本地模型(或大文件)可能\n需要更长的时间。三个配置项,作用域递增:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——per-provider,单位秒。\n- `llm.timeout_sec`——用于旧版 `llm` 配置段,单位秒。\n- `OCR_LLM_TIMEOUT` 环境变量——整数秒;对每条解析路径都覆盖配置文件里\n 的值。\n\n`ocr config set` 不支持 `timeout_sec` key——直接编辑\n`~/.opencodereview/config.json`:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 验证连通性\n\n```bash\nocr llm test\n```\n\n### 复用已有的环境变量\n\n如果你已经配好了 Claude Code 的 `ANTHROPIC_*`,或 OCR 自己的 `OCR_LLM_*`环境变量,OCR 会自动识别,无需再写配置文件。\n\n### 使用 CC-Switch\n\n如果你使用 [CC-Switch](https://github.com/farion1231/cc-switch) 并开启了\n[路由服务](https://www.ccswitch.io/zh/docs?section=proxy&item=service),\n可以将供应商的 `url` 配置成 CC-Switch 启动的代理地址,无需额外配置:\n\n```bash\n# Claude(Anthropic 兼容)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 兼容 — 将该供应商的 url 键设为代理地址\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` 可设置为任意值。`extra_body`(及其他按供应商字段)依然生效。\n\n### 发送厂商专属字段\n\n某些 provider 需要非标准的请求字段(如 Bedrock 风格的 `thinking`)。用`extra_body`(合并进每次请求)即可发送,无需改源码:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## 配置评审语言\n\n`language` 决定评审评论用哪种语言输出,未设置时默认英文:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 另见\n\n- [快速开始](../quickstart/)——最小化设置与首次评审。\n- [CLI 参考](../cli-reference/)——review 命令接受的每个参数。\n"}, "e9d4db51ec1d06fef1123d5a7158a7b311043650": {"t": 1785846960.4230182, "n": 5203, "h": "d038372cc8ea9f26", "c": "---\ntitle: 配置\nsidebar:\n order: 5\n---\n\n配置文件在 `~/.opencodereview/config.json`,你有三种方式编辑它:\n\n- **交互式 TUI** —— `ocr config provider` / `ocr config model`,带引导菜单。\n- **命令行** —— `ocr config set <key> <value>`,适合脚本与 CI。\n- **手动编辑(不推荐)** —— 该 JSON 文件(下次 `ocr config set` 写入时会重新格式化)。\n\n## 配置模型\n\n### 推荐:交互式设置\n\n```bash\nocr config provider\n```\n\n它会让你选择一个内置或自定义 provider、填入 API key、挑选 model,保存到配置文件后自动运行一次 `ocr llm test` 验证端点。之后想换模型:\n\n```bash\nocr config model\n```\n\n### 非交互设置(CI / 无 TUI 环境)\n\n用 `ocr config set` 写入同一份配置:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### 内置 provider\n\n下列 provider 随 OCR 发布,已预置 Base URL 与协议,选中后只需填 API key。\n若 `providers.<name>.api_key` 未设置,会自动回退到对应的环境变量。\n\n| 名称 | 协议 | Base URL | API key 环境变量 |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### 自定义 provider\n\n任何不在上表中的 provider 名都视为自定义,至少要提供 `url` 和 `protocol`\n(`protocol` 取 `anthropic`、`openai` 或 `openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\n当 provider 或模型要求使用 OpenAI Responses API(`/v1/responses`)时,使用\n`openai-responses` 协议:\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\n`url` 既可以填 API 的 Base URL,也可以填完整的 `/responses` 端点,OCR 会自动归一化处理。\n\n用 Ollama 跑本地模型,就是一个指向本地 OpenAI 兼容端点的自定义 provider:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama 会忽略 API key,但自定义 provider 要求非空的 `api_key`(自定义\nprovider 没有环境变量回退),所以设任意占位值即可。模型本身必须支持原生\n工具调用——选型前请先看 FAQ 中的\n[\"No tool calls parsed\"(本地模型 / Ollama)](../faq/#no-tool-calls-parsed-本地模型-ollama)。\n\n### 超时\n\n每个 LLM 请求都有 HTTP 超时,默认 **300 秒**。慢的本地模型(或大文件)可能\n需要更长的时间。三个配置项,作用域递增:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n ——per-provider,单位秒。\n- `llm.timeout_sec`——用于旧版 `llm` 配置段,单位秒。\n- `OCR_LLM_TIMEOUT` 环境变量——整数秒;对每条解析路径都覆盖配置文件里\n 的值。\n\n`ocr config set` 不支持 `timeout_sec` key——直接编辑\n`~/.opencodereview/config.json`:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### 验证连通性\n\n```bash\nocr llm test\n```\n\n### 复用已有的环境变量\n\n如果你已经配好了 Claude Code 的 `ANTHROPIC_*`,或 OCR 自己的 `OCR_LLM_*`环境变量,OCR 会自动识别,无需再写配置文件。\n\n### 使用 CC-Switch\n\n如果你使用 [CC-Switch](https://github.com/farion1231/cc-switch) 并开启了\n[路由服务](https://www.ccswitch.io/zh/docs?section=proxy&item=service),\n可以将供应商的 `url` 配置成 CC-Switch 启动的代理地址,无需额外配置:\n\n```bash\n# Claude(Anthropic 兼容)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI 兼容 — 将该供应商的 url 键设为代理地址\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\n`api_key` 可设置为任意值。`extra_body`(及其他按供应商字段)依然生效。\n\n### 发送厂商专属字段\n\n某些 provider 需要非标准的请求字段(如 Bedrock 风格的 `thinking`)。用`extra_body`(合并进每次请求)即可发送,无需改源码:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## 配置评审语言\n\n`language` 决定评审评论用哪种语言输出,未设置时默认英文:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## 另见\n\n- [快速开始](../quickstart/)——最小化设置与首次评审。\n- [CLI 参考](../cli-reference/)——review 命令接受的每个参数。\n"}}, "internal/llm/providers.go": {"0f3c920fc8ff091cbd1ad9e0632bf54bba56e46b": {"t": 1785809838.7835782, "n": 8753, "h": "5dea4ba68c13d35a", "c": "package llm\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\n// Provider holds the preset configuration for a known LLM provider.\n//\n// Protocol uses the canonical names defined in protocol.go:\n// - ProtocolAnthropic (\"anthropic\")\n// - ProtocolOpenAIChatCompletions (\"openai\")\n// - ProtocolOpenAIResponses (\"openai-responses\")\n//\n// To add a built-in provider that speaks a different protocol, set Protocol\n// accordingly and ensure NewLLMClient has a matching case.\ntype Provider struct {\n\tName string\n\tDisplayName string\n\tProtocol string\n\tBaseURL string\n\tAuthHeader string // Anthropic-only; empty for OpenAI-compatible\n\tEnvVar string // environment variable name for API key fallback\n\tModels []string\n}\n\nvar registry = []Provider{\n\t{\n\t\tName: \"anthropic\",\n\t\tDisplayName: \"Anthropic Claude API\",\n\t\tProtocol: ProtocolAnthropic,\n\t\tBaseURL: \"https://api.anthropic.com\",\n\t\tAuthHeader: \"x-api-key\",\n\t\tEnvVar: \"ANTHROPIC_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"claude-opus-5\",\n\t\t\t\"claude-sonnet-5\",\n\t\t\t\"claude-opus-4-8\",\n\t\t\t\"claude-opus-4-7\",\n\t\t\t\"claude-opus-4-6\",\n\t\t\t\"claude-sonnet-4-6\",\n\t\t},\n\t},\n\t{\n\t\tName: \"openai\",\n\t\tDisplayName: \"OpenAI API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.openai.com/v1\",\n\t\tEnvVar: \"OPENAI_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"gpt-5.6-sol\",\n\t\t\t\"gpt-5.6-terra\",\n\t\t\t\"gpt-5.6-luna\",\n\t\t\t\"gpt-5.5\",\n\t\t\t\"gpt-5.4\",\n\t\t\t\"gpt-5.4-mini\",\n\t\t},\n\t},\n\t{\n\t\tName: \"edenai\",\n\t\tDisplayName: \"Eden AI\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.edenai.run/v3\",\n\t\tEnvVar: \"EDENAI_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"anthropic/claude-opus-4-5\",\n\t\t\t\"anthropic/claude-sonnet-4-5\",\n\t\t\t\"anthropic/claude-haiku-4-5\",\n\t\t\t\"openai/gpt-5.1\",\n\t\t\t\"openai/gpt-5.1-codex\",\n\t\t\t\"google/gemini-3.1-pro-preview\",\n\t\t\t\"mistral/devstral-medium-latest\",\n\t\t\t\"mistral/codestral-latest\",\n\t\t\t\"deepseek/deepseek-v4-pro\",\n\t\t\t\"xai/grok-4\",\n\t\t},\n\t},\n\t{\n\t\tName: \"dashscope\",\n\t\tDisplayName: \"Alibaba DashScope API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n\t\tEnvVar: \"DASHSCOPE_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"qwen3.8-max\",\n\t\t\t\"qwen3.7-max\",\n\t\t\t\"qwen3.7-plus\",\n\t\t\t\"qwen3.6-plus\",\n\t\t\t\"qwen3.6-flash\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"MiniMax-M2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"dashscope-tokenplan\",\n\t\tDisplayName: \"Alibaba DashScope Token Plan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1\",\n\t\tEnvVar: \"DASHSCOPE_TOKENPLAN_KEY\",\n\t\tModels: []string{\n\t\t\t\"qwen3.8-max\",\n\t\t\t\"qwen3.7-max\",\n\t\t\t\"qwen3.7-plus\",\n\t\t\t\"qwen3.6-plus\",\n\t\t\t\"qwen3.6-flash\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"kimi-k2.5\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"MiniMax-M2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"volcengine\",\n\t\tDisplayName: \"Volcano Engine Ark API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://ark.cn-beijing.volces.com/api/v3\",\n\t\tEnvVar: \"ARK_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"doubao-seed-evolving\",\n\t\t\t\"doubao-seed-2-1-pro-260628\",\n\t\t\t\"doubao-seed-2-1-turbo-260628\",\n\t\t\t\"doubao-seed-2-0-lite-260428\",\n\t\t\t\"doubao-seed-2-0-mini-260428\",\n\t\t\t\"doubao-seed-2-0-pro-260215\",\n\t\t},\n\t},\n\t{\n\t\tName: \"deepseek\",\n\t\tDisplayName: \"DeepSeek API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.deepseek.com\",\n\t\tEnvVar: \"DEEPSEEK_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t},\n\t},\n\t{\n\t\tName: \"tencent-tokenhub\",\n\t\tDisplayName: \"Tencent TokenHub API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://tokenhub.tencentmaas.com/v1\",\n\t\tEnvVar: \"TENCENT_TOKENHUB_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"glm-5-turbo\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"kimi-k2.7-code-highspeed\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"minimax-m3\",\n\t\t\t\"minimax-m2.7\",\n\t\t},\n\t},\n\t{\n\t\tName: \"hy-tokenplan\",\n\t\tDisplayName: \"Tencent Hunyuan Token Plan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.lkeap.cloud.tencent.com/plan/v3\",\n\t\tEnvVar: \"TENCENT_HUNYUAN_TOKENPLAN_KEY\",\n\t\tModels: []string{\n\t\t\t\"hy3\",\n\t\t},\n\t},\n\t{\n\t\tName: \"iflytek\",\n\t\tDisplayName: \"iFlytek Spark API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://spark-api-open.xf-yun.com/v1\",\n\t\tEnvVar: \"SPARK_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"4.0Ultra\",\n\t\t\t\"generalv3.5\",\n\t\t\t\"max-32k\",\n\t\t\t\"generalv3\",\n\t\t\t\"pro-128k\",\n\t\t\t\"lite\",\n\t\t},\n\t},\n\t{\n\t\tName: \"kimi\",\n\t\tDisplayName: \"Kimi Moonshot API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.moonshot.cn/v1\",\n\t\tEnvVar: \"MOONSHOT_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"kimi-k3\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"kimi-k2.7-code-highspeed\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"kimi-k2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"z-ai\",\n\t\tDisplayName: \"Z.AI API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://open.bigmodel.cn/api/paas/v4\",\n\t\tEnvVar: \"Z_AI_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"glm-5-turbo\",\n\t\t\t\"glm-4.7\",\n\t\t},\n\t},\n\t{\n\t\tName: \"z-ai-coding\",\n\t\tDisplayName: \"Z.AI Coding Plan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://open.bigmodel.cn/api/coding/paas/v4\",\n\t\tEnvVar: \"Z_AI_CODING_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5-turbo\",\n\t\t\t\"glm-4.7\",\n\t\t},\n\t},\n\t{\n\t\tName: \"mimo\",\n\t\tDisplayName: \"Xiaomi MiMo API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.xiaomimimo.com/v1\",\n\t\tEnvVar: \"MIMO_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"mimo-v2.5-pro\",\n\t\t\t\"mimo-v2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"minimax\",\n\t\tDisplayName: \"MiniMax API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.minimaxi.com/v1\",\n\t\tEnvVar: \"MINIMAX_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"MiniMax-M3\",\n\t\t\t\"MiniMax-M2.7\",\n\t\t\t\"MiniMax-M2.7-highspeed\",\n\t\t\t\"MiniMax-M2.5\",\n\t\t\t\"MiniMax-M2.5-highspeed\",\n\t\t},\n\t},\n\t{\n\t\tName: \"baidu-qianfan\",\n\t\tDisplayName: \"Baidu Qianfan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://qianfan.baidubce.com/v2\",\n\t\tEnvVar: \"QIANFAN_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"ernie-5.1\",\n\t\t\t\"ernie-5.0\",\n\t\t\t\"ernie-x1.1\",\n\t\t\t\"ernie-x1-turbo-32k-preview\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"kimi-k2.6\",\n\t\t},\n\t},\n\t{\n\t\tName: \"ollama-cloud\",\n\t\tDisplayName: \"Ollama Cloud API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://ollama.com/v1\",\n\t\tEnvVar: \"OLLAMA_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"gemma4:31b\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"gpt-oss:120b\",\n\t\t\t\"gpt-oss:20b\",\n\t\t\t\"kimi-k2.5\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"minimax-m2.5\",\n\t\t\t\"minimax-m2.7\",\n\t\t\t\"minimax-m3\",\n\t\t\t\"mistral-large-3:675b\",\n\t\t\t\"nemotron-3-nano:30b\",\n\t\t\t\"nemotron-3-super\",\n\t\t\t\"nemotron-3-ultra\",\n\t\t\t\"qwen3.5:397b\",\n\t\t},\n\t},\n\t{\n\t\tName: \"litellm\",\n\t\tDisplayName: \"LiteLLM AI Gateway\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"http://localhost:4000/v1\",\n\t\tEnvVar: \"LITELLM_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"anthropic/claude-sonnet-4-6\",\n\t\t\t\"anthropic/claude-opus-4-6\",\n\t\t\t\"anthropic/claude-haiku-4-5\",\n\t\t\t\"openai/gpt-4o\",\n\t\t\t\"openai/gpt-5.4\",\n\t\t\t\"openai/o3\",\n\t\t\t\"vertex_ai/gemini-2.5-flash\",\n\t\t\t\"vertex_ai/gemini-2.5-pro\",\n\t\t\t\"bedrock/anthropic.claude-sonnet-4-6-v1\",\n\t\t\t\"groq/llama-4-scout-17b-16e-instruct\",\n\t\t\t\"mistral/mistral-large-latest\",\n\t\t\t\"deepseek/deepseek-chat\",\n\t\t},\n\t},\n}\n\nvar registryMap map[string]Provider\n\nfunc init() {\n\tregistryMap = make(map[string]Provider, len(registry))\n\tfor _, p := range registry {\n\t\tregistryMap[strings.ToLower(p.Name)] = p\n\t}\n}\n\n// LookupProvider returns the preset provider by name.\n// The returned Provider has its own copy of the Models slice.\nfunc LookupProvider(name string) (Provider, bool) {\n\tp, ok := registryMap[strings.ToLower(strings.TrimSpace(name))]\n\tif ok {\n\t\tp = copyProvider(p)\n\t}\n\treturn p, ok\n}\n\n// ListProviders returns all built-in providers sorted by provider name.\n// Each returned Provider has its own copy of the Models slice in registry order.\nfunc ListProviders() []Provider {\n\tout := make([]Provider, len(registry))\n\tfor i, p := range registry {\n\t\tout[i] = copyProvider(p)\n\t}\n\tsort.Slice(out, func(i, j int) bool {\n\t\treturn out[i].Name < out[j].Name\n\t})\n\treturn out\n}\n\nfunc copyProvider(p Provider) Provider {\n\tif p.Models != nil {\n\t\tmodels := make([]string, len(p.Models))\n\t\tcopy(models, p.Models)\n\t\tp.Models = models\n\t}\n\treturn p\n}\n"}, "e9d4db51ec1d06fef1123d5a7158a7b311043650": {"t": 1785846960.52166, "n": 8753, "h": "5dea4ba68c13d35a", "c": "package llm\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\n// Provider holds the preset configuration for a known LLM provider.\n//\n// Protocol uses the canonical names defined in protocol.go:\n// - ProtocolAnthropic (\"anthropic\")\n// - ProtocolOpenAIChatCompletions (\"openai\")\n// - ProtocolOpenAIResponses (\"openai-responses\")\n//\n// To add a built-in provider that speaks a different protocol, set Protocol\n// accordingly and ensure NewLLMClient has a matching case.\ntype Provider struct {\n\tName string\n\tDisplayName string\n\tProtocol string\n\tBaseURL string\n\tAuthHeader string // Anthropic-only; empty for OpenAI-compatible\n\tEnvVar string // environment variable name for API key fallback\n\tModels []string\n}\n\nvar registry = []Provider{\n\t{\n\t\tName: \"anthropic\",\n\t\tDisplayName: \"Anthropic Claude API\",\n\t\tProtocol: ProtocolAnthropic,\n\t\tBaseURL: \"https://api.anthropic.com\",\n\t\tAuthHeader: \"x-api-key\",\n\t\tEnvVar: \"ANTHROPIC_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"claude-opus-5\",\n\t\t\t\"claude-sonnet-5\",\n\t\t\t\"claude-opus-4-8\",\n\t\t\t\"claude-opus-4-7\",\n\t\t\t\"claude-opus-4-6\",\n\t\t\t\"claude-sonnet-4-6\",\n\t\t},\n\t},\n\t{\n\t\tName: \"openai\",\n\t\tDisplayName: \"OpenAI API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.openai.com/v1\",\n\t\tEnvVar: \"OPENAI_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"gpt-5.6-sol\",\n\t\t\t\"gpt-5.6-terra\",\n\t\t\t\"gpt-5.6-luna\",\n\t\t\t\"gpt-5.5\",\n\t\t\t\"gpt-5.4\",\n\t\t\t\"gpt-5.4-mini\",\n\t\t},\n\t},\n\t{\n\t\tName: \"edenai\",\n\t\tDisplayName: \"Eden AI\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.edenai.run/v3\",\n\t\tEnvVar: \"EDENAI_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"anthropic/claude-opus-4-5\",\n\t\t\t\"anthropic/claude-sonnet-4-5\",\n\t\t\t\"anthropic/claude-haiku-4-5\",\n\t\t\t\"openai/gpt-5.1\",\n\t\t\t\"openai/gpt-5.1-codex\",\n\t\t\t\"google/gemini-3.1-pro-preview\",\n\t\t\t\"mistral/devstral-medium-latest\",\n\t\t\t\"mistral/codestral-latest\",\n\t\t\t\"deepseek/deepseek-v4-pro\",\n\t\t\t\"xai/grok-4\",\n\t\t},\n\t},\n\t{\n\t\tName: \"dashscope\",\n\t\tDisplayName: \"Alibaba DashScope API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n\t\tEnvVar: \"DASHSCOPE_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"qwen3.8-max\",\n\t\t\t\"qwen3.7-max\",\n\t\t\t\"qwen3.7-plus\",\n\t\t\t\"qwen3.6-plus\",\n\t\t\t\"qwen3.6-flash\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"MiniMax-M2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"dashscope-tokenplan\",\n\t\tDisplayName: \"Alibaba DashScope Token Plan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1\",\n\t\tEnvVar: \"DASHSCOPE_TOKENPLAN_KEY\",\n\t\tModels: []string{\n\t\t\t\"qwen3.8-max\",\n\t\t\t\"qwen3.7-max\",\n\t\t\t\"qwen3.7-plus\",\n\t\t\t\"qwen3.6-plus\",\n\t\t\t\"qwen3.6-flash\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"kimi-k2.5\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"MiniMax-M2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"volcengine\",\n\t\tDisplayName: \"Volcano Engine Ark API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://ark.cn-beijing.volces.com/api/v3\",\n\t\tEnvVar: \"ARK_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"doubao-seed-evolving\",\n\t\t\t\"doubao-seed-2-1-pro-260628\",\n\t\t\t\"doubao-seed-2-1-turbo-260628\",\n\t\t\t\"doubao-seed-2-0-lite-260428\",\n\t\t\t\"doubao-seed-2-0-mini-260428\",\n\t\t\t\"doubao-seed-2-0-pro-260215\",\n\t\t},\n\t},\n\t{\n\t\tName: \"deepseek\",\n\t\tDisplayName: \"DeepSeek API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.deepseek.com\",\n\t\tEnvVar: \"DEEPSEEK_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t},\n\t},\n\t{\n\t\tName: \"tencent-tokenhub\",\n\t\tDisplayName: \"Tencent TokenHub API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://tokenhub.tencentmaas.com/v1\",\n\t\tEnvVar: \"TENCENT_TOKENHUB_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"glm-5-turbo\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"kimi-k2.7-code-highspeed\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"minimax-m3\",\n\t\t\t\"minimax-m2.7\",\n\t\t},\n\t},\n\t{\n\t\tName: \"hy-tokenplan\",\n\t\tDisplayName: \"Tencent Hunyuan Token Plan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.lkeap.cloud.tencent.com/plan/v3\",\n\t\tEnvVar: \"TENCENT_HUNYUAN_TOKENPLAN_KEY\",\n\t\tModels: []string{\n\t\t\t\"hy3\",\n\t\t},\n\t},\n\t{\n\t\tName: \"iflytek\",\n\t\tDisplayName: \"iFlytek Spark API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://spark-api-open.xf-yun.com/v1\",\n\t\tEnvVar: \"SPARK_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"4.0Ultra\",\n\t\t\t\"generalv3.5\",\n\t\t\t\"max-32k\",\n\t\t\t\"generalv3\",\n\t\t\t\"pro-128k\",\n\t\t\t\"lite\",\n\t\t},\n\t},\n\t{\n\t\tName: \"kimi\",\n\t\tDisplayName: \"Kimi Moonshot API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.moonshot.cn/v1\",\n\t\tEnvVar: \"MOONSHOT_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"kimi-k3\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"kimi-k2.7-code-highspeed\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"kimi-k2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"z-ai\",\n\t\tDisplayName: \"Z.AI API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://open.bigmodel.cn/api/paas/v4\",\n\t\tEnvVar: \"Z_AI_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"glm-5-turbo\",\n\t\t\t\"glm-4.7\",\n\t\t},\n\t},\n\t{\n\t\tName: \"z-ai-coding\",\n\t\tDisplayName: \"Z.AI Coding Plan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://open.bigmodel.cn/api/coding/paas/v4\",\n\t\tEnvVar: \"Z_AI_CODING_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5-turbo\",\n\t\t\t\"glm-4.7\",\n\t\t},\n\t},\n\t{\n\t\tName: \"mimo\",\n\t\tDisplayName: \"Xiaomi MiMo API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.xiaomimimo.com/v1\",\n\t\tEnvVar: \"MIMO_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"mimo-v2.5-pro\",\n\t\t\t\"mimo-v2.5\",\n\t\t},\n\t},\n\t{\n\t\tName: \"minimax\",\n\t\tDisplayName: \"MiniMax API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://api.minimaxi.com/v1\",\n\t\tEnvVar: \"MINIMAX_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"MiniMax-M3\",\n\t\t\t\"MiniMax-M2.7\",\n\t\t\t\"MiniMax-M2.7-highspeed\",\n\t\t\t\"MiniMax-M2.5\",\n\t\t\t\"MiniMax-M2.5-highspeed\",\n\t\t},\n\t},\n\t{\n\t\tName: \"baidu-qianfan\",\n\t\tDisplayName: \"Baidu Qianfan API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://qianfan.baidubce.com/v2\",\n\t\tEnvVar: \"QIANFAN_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"ernie-5.1\",\n\t\t\t\"ernie-5.0\",\n\t\t\t\"ernie-x1.1\",\n\t\t\t\"ernie-x1-turbo-32k-preview\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5\",\n\t\t\t\"kimi-k2.6\",\n\t\t},\n\t},\n\t{\n\t\tName: \"ollama-cloud\",\n\t\tDisplayName: \"Ollama Cloud API\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"https://ollama.com/v1\",\n\t\tEnvVar: \"OLLAMA_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"deepseek-v4-flash\",\n\t\t\t\"deepseek-v4-pro\",\n\t\t\t\"gemma4:31b\",\n\t\t\t\"glm-5.1\",\n\t\t\t\"glm-5.2\",\n\t\t\t\"gpt-oss:120b\",\n\t\t\t\"gpt-oss:20b\",\n\t\t\t\"kimi-k2.5\",\n\t\t\t\"kimi-k2.6\",\n\t\t\t\"kimi-k2.7-code\",\n\t\t\t\"minimax-m2.5\",\n\t\t\t\"minimax-m2.7\",\n\t\t\t\"minimax-m3\",\n\t\t\t\"mistral-large-3:675b\",\n\t\t\t\"nemotron-3-nano:30b\",\n\t\t\t\"nemotron-3-super\",\n\t\t\t\"nemotron-3-ultra\",\n\t\t\t\"qwen3.5:397b\",\n\t\t},\n\t},\n\t{\n\t\tName: \"litellm\",\n\t\tDisplayName: \"LiteLLM AI Gateway\",\n\t\tProtocol: ProtocolOpenAIChatCompletions,\n\t\tBaseURL: \"http://localhost:4000/v1\",\n\t\tEnvVar: \"LITELLM_API_KEY\",\n\t\tModels: []string{\n\t\t\t\"anthropic/claude-sonnet-4-6\",\n\t\t\t\"anthropic/claude-opus-4-6\",\n\t\t\t\"anthropic/claude-haiku-4-5\",\n\t\t\t\"openai/gpt-4o\",\n\t\t\t\"openai/gpt-5.4\",\n\t\t\t\"openai/o3\",\n\t\t\t\"vertex_ai/gemini-2.5-flash\",\n\t\t\t\"vertex_ai/gemini-2.5-pro\",\n\t\t\t\"bedrock/anthropic.claude-sonnet-4-6-v1\",\n\t\t\t\"groq/llama-4-scout-17b-16e-instruct\",\n\t\t\t\"mistral/mistral-large-latest\",\n\t\t\t\"deepseek/deepseek-chat\",\n\t\t},\n\t},\n}\n\nvar registryMap map[string]Provider\n\nfunc init() {\n\tregistryMap = make(map[string]Provider, len(registry))\n\tfor _, p := range registry {\n\t\tregistryMap[strings.ToLower(p.Name)] = p\n\t}\n}\n\n// LookupProvider returns the preset provider by name.\n// The returned Provider has its own copy of the Models slice.\nfunc LookupProvider(name string) (Provider, bool) {\n\tp, ok := registryMap[strings.ToLower(strings.TrimSpace(name))]\n\tif ok {\n\t\tp = copyProvider(p)\n\t}\n\treturn p, ok\n}\n\n// ListProviders returns all built-in providers sorted by provider name.\n// Each returned Provider has its own copy of the Models slice in registry order.\nfunc ListProviders() []Provider {\n\tout := make([]Provider, len(registry))\n\tfor i, p := range registry {\n\t\tout[i] = copyProvider(p)\n\t}\n\tsort.Slice(out, func(i, j int) bool {\n\t\treturn out[i].Name < out[j].Name\n\t})\n\treturn out\n}\n\nfunc copyProvider(p Provider) Provider {\n\tif p.Models != nil {\n\t\tmodels := make([]string, len(p.Models))\n\t\tcopy(models, p.Models)\n\t\tp.Models = models\n\t}\n\treturn p\n}\n"}}, "extensions/vscode/src/shared/providers.ts": {"0f3c920fc8ff091cbd1ad9e0632bf54bba56e46b": {"t": 1785809838.9441366, "n": 4707, "h": "67dfac2398eee691", "c": "export interface OcrProviderPreset {\n name: string;\n displayName: string;\n protocol: 'anthropic' | 'openai';\n baseUrl: string;\n authHeader?: string;\n envVar: string;\n models: string[];\n}\n\n/** 与 internal/llm/providers.go 内置 registry 对齐 */\nexport const PROVIDER_PRESETS: OcrProviderPreset[] = [\n {\n name: 'anthropic',\n displayName: 'Anthropic Claude API',\n protocol: 'anthropic',\n baseUrl: 'https://api.anthropic.com',\n authHeader: 'x-api-key',\n envVar: 'ANTHROPIC_API_KEY',\n models: ['claude-opus-4-8', 'claude-opus-4-7', 'claude-opus-4-6', 'claude-sonnet-4-6'],\n },\n {\n name: 'openai',\n displayName: 'OpenAI API',\n protocol: 'openai',\n baseUrl: 'https://api.openai.com/v1',\n envVar: 'OPENAI_API_KEY',\n models: ['gpt-5.5', 'gpt-5.4', 'gpt-5.4-mini'],\n },\n {\n name: 'dashscope',\n displayName: 'Alibaba DashScope API',\n protocol: 'openai',\n baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n envVar: 'DASHSCOPE_API_KEY',\n models: ['qwen3.7-max', 'qwen3.7-plus', 'qwen3.6-plus', 'qwen3.6-flash'],\n },\n {\n name: 'dashscope-tokenplan',\n displayName: 'Alibaba DashScope Token Plan API',\n protocol: 'openai',\n baseUrl: 'https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1',\n envVar: 'DASHSCOPE_TOKENPLAN_KEY',\n models: [\n 'qwen3.7-max', 'qwen3.7-plus', 'qwen3.6-plus', 'qwen3.6-flash',\n 'deepseek-v4-pro', 'deepseek-v4-flash', 'kimi-k2.6', 'kimi-k2.5',\n 'glm-5.2', 'glm-5.1', 'glm-5', 'MiniMax-M2.5',\n ],\n },\n {\n name: 'volcengine',\n displayName: 'Volcano Engine Ark API',\n protocol: 'openai',\n baseUrl: 'https://ark.cn-beijing.volces.com/api/v3',\n envVar: 'ARK_API_KEY',\n models: ['doubao-seed-2-0-lite-260428', 'doubao-seed-2-0-mini-260428', 'doubao-seed-2-0-pro-260215'],\n },\n {\n name: 'deepseek',\n displayName: 'DeepSeek API',\n protocol: 'openai',\n baseUrl: 'https://api.deepseek.com',\n envVar: 'DEEPSEEK_API_KEY',\n models: ['deepseek-v4-pro', 'deepseek-v4-flash'],\n },\n {\n name: 'tencent-tokenhub',\n displayName: 'Tencent TokenHub API',\n protocol: 'openai',\n baseUrl: 'https://tokenhub.tencentmaas.com/v1',\n envVar: 'TENCENT_TOKENHUB_API_KEY',\n models: ['hy3-preview'],\n },\n {\n name: 'hy-tokenplan',\n displayName: 'Tencent Hunyuan Token Plan API',\n protocol: 'openai',\n baseUrl: 'https://api.lkeap.cloud.tencent.com/plan/v3',\n envVar: 'TENCENT_HUNYUAN_TOKENPLAN_KEY',\n models: ['hy3-preview'],\n },\n {\n name: 'kimi',\n displayName: 'Kimi Moonshot API',\n protocol: 'openai',\n baseUrl: 'https://api.moonshot.cn/v1',\n envVar: 'MOONSHOT_API_KEY',\n models: ['kimi-k2.7-code', 'kimi-k2.6', 'kimi-k2.5'],\n },\n {\n name: 'z-ai',\n displayName: 'Z.AI API',\n protocol: 'openai',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4',\n envVar: 'Z_AI_API_KEY',\n models: ['glm-5.2', 'glm-5.1', 'glm-5-turbo', 'glm-4.7'],\n },\n {\n name: 'z-ai-coding',\n displayName: 'Z.AI Coding Plan API',\n protocol: 'openai',\n baseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4',\n envVar: 'Z_AI_CODING_API_KEY',\n models: ['glm-5.2', 'glm-5.1', 'glm-5-turbo', 'glm-4.7'],\n },\n {\n name: 'mimo',\n displayName: 'Xiaomi MiMo API',\n protocol: 'openai',\n baseUrl: 'https://api.xiaomimimo.com/v1',\n envVar: 'MIMO_API_KEY',\n models: ['mimo-v2.5-pro', 'mimo-v2.5', 'mimo-v2-pro', 'mimo-v2-omni', 'mimo-v2-flash'],\n },\n {\n name: 'minimax',\n displayName: 'MiniMax API',\n protocol: 'openai',\n baseUrl: 'https://api.minimaxi.com/v1',\n envVar: 'MINIMAX_API_KEY',\n models: ['MiniMax-M3', 'MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5', 'MiniMax-M2.5-highspeed'],\n },\n {\n name: 'baidu-qianfan',\n displayName: 'Baidu Qianfan API',\n protocol: 'openai',\n baseUrl: 'https://qianfan.baidubce.com/v2',\n envVar: 'QIANFAN_API_KEY',\n models: ['ernie-5.1', 'ernie-5.0', 'ernie-x1.1', 'ernie-x1-turbo-32k-preview', 'deepseek-v4-pro', 'deepseek-v4-flash'],\n },\n];\n\nconst presetMap = new Map(PROVIDER_PRESETS.map((p) => [p.name.toLowerCase(), p]));\n\nexport function lookupPreset(name: string): OcrProviderPreset | undefined {\n return presetMap.get(name.trim().toLowerCase());\n}\n\nexport function isPresetProvider(name: string): boolean {\n return presetMap.has(name.trim().toLowerCase());\n}\n\nexport function mergeModelLists(...lists: string[][]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of lists) {\n for (const raw of list) {\n const model = raw.trim();\n if (!model || seen.has(model)) continue;\n seen.add(model);\n out.push(model);\n }\n }\n return out;\n}\n"}, "e9d4db51ec1d06fef1123d5a7158a7b311043650": {"t": 1785846959.8967772, "n": 4707, "h": "67dfac2398eee691", "c": "export interface OcrProviderPreset {\n name: string;\n displayName: string;\n protocol: 'anthropic' | 'openai';\n baseUrl: string;\n authHeader?: string;\n envVar: string;\n models: string[];\n}\n\n/** 与 internal/llm/providers.go 内置 registry 对齐 */\nexport const PROVIDER_PRESETS: OcrProviderPreset[] = [\n {\n name: 'anthropic',\n displayName: 'Anthropic Claude API',\n protocol: 'anthropic',\n baseUrl: 'https://api.anthropic.com',\n authHeader: 'x-api-key',\n envVar: 'ANTHROPIC_API_KEY',\n models: ['claude-opus-4-8', 'claude-opus-4-7', 'claude-opus-4-6', 'claude-sonnet-4-6'],\n },\n {\n name: 'openai',\n displayName: 'OpenAI API',\n protocol: 'openai',\n baseUrl: 'https://api.openai.com/v1',\n envVar: 'OPENAI_API_KEY',\n models: ['gpt-5.5', 'gpt-5.4', 'gpt-5.4-mini'],\n },\n {\n name: 'dashscope',\n displayName: 'Alibaba DashScope API',\n protocol: 'openai',\n baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n envVar: 'DASHSCOPE_API_KEY',\n models: ['qwen3.7-max', 'qwen3.7-plus', 'qwen3.6-plus', 'qwen3.6-flash'],\n },\n {\n name: 'dashscope-tokenplan',\n displayName: 'Alibaba DashScope Token Plan API',\n protocol: 'openai',\n baseUrl: 'https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1',\n envVar: 'DASHSCOPE_TOKENPLAN_KEY',\n models: [\n 'qwen3.7-max', 'qwen3.7-plus', 'qwen3.6-plus', 'qwen3.6-flash',\n 'deepseek-v4-pro', 'deepseek-v4-flash', 'kimi-k2.6', 'kimi-k2.5',\n 'glm-5.2', 'glm-5.1', 'glm-5', 'MiniMax-M2.5',\n ],\n },\n {\n name: 'volcengine',\n displayName: 'Volcano Engine Ark API',\n protocol: 'openai',\n baseUrl: 'https://ark.cn-beijing.volces.com/api/v3',\n envVar: 'ARK_API_KEY',\n models: ['doubao-seed-2-0-lite-260428', 'doubao-seed-2-0-mini-260428', 'doubao-seed-2-0-pro-260215'],\n },\n {\n name: 'deepseek',\n displayName: 'DeepSeek API',\n protocol: 'openai',\n baseUrl: 'https://api.deepseek.com',\n envVar: 'DEEPSEEK_API_KEY',\n models: ['deepseek-v4-pro', 'deepseek-v4-flash'],\n },\n {\n name: 'tencent-tokenhub',\n displayName: 'Tencent TokenHub API',\n protocol: 'openai',\n baseUrl: 'https://tokenhub.tencentmaas.com/v1',\n envVar: 'TENCENT_TOKENHUB_API_KEY',\n models: ['hy3-preview'],\n },\n {\n name: 'hy-tokenplan',\n displayName: 'Tencent Hunyuan Token Plan API',\n protocol: 'openai',\n baseUrl: 'https://api.lkeap.cloud.tencent.com/plan/v3',\n envVar: 'TENCENT_HUNYUAN_TOKENPLAN_KEY',\n models: ['hy3-preview'],\n },\n {\n name: 'kimi',\n displayName: 'Kimi Moonshot API',\n protocol: 'openai',\n baseUrl: 'https://api.moonshot.cn/v1',\n envVar: 'MOONSHOT_API_KEY',\n models: ['kimi-k2.7-code', 'kimi-k2.6', 'kimi-k2.5'],\n },\n {\n name: 'z-ai',\n displayName: 'Z.AI API',\n protocol: 'openai',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4',\n envVar: 'Z_AI_API_KEY',\n models: ['glm-5.2', 'glm-5.1', 'glm-5-turbo', 'glm-4.7'],\n },\n {\n name: 'z-ai-coding',\n displayName: 'Z.AI Coding Plan API',\n protocol: 'openai',\n baseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4',\n envVar: 'Z_AI_CODING_API_KEY',\n models: ['glm-5.2', 'glm-5.1', 'glm-5-turbo', 'glm-4.7'],\n },\n {\n name: 'mimo',\n displayName: 'Xiaomi MiMo API',\n protocol: 'openai',\n baseUrl: 'https://api.xiaomimimo.com/v1',\n envVar: 'MIMO_API_KEY',\n models: ['mimo-v2.5-pro', 'mimo-v2.5', 'mimo-v2-pro', 'mimo-v2-omni', 'mimo-v2-flash'],\n },\n {\n name: 'minimax',\n displayName: 'MiniMax API',\n protocol: 'openai',\n baseUrl: 'https://api.minimaxi.com/v1',\n envVar: 'MINIMAX_API_KEY',\n models: ['MiniMax-M3', 'MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5', 'MiniMax-M2.5-highspeed'],\n },\n {\n name: 'baidu-qianfan',\n displayName: 'Baidu Qianfan API',\n protocol: 'openai',\n baseUrl: 'https://qianfan.baidubce.com/v2',\n envVar: 'QIANFAN_API_KEY',\n models: ['ernie-5.1', 'ernie-5.0', 'ernie-x1.1', 'ernie-x1-turbo-32k-preview', 'deepseek-v4-pro', 'deepseek-v4-flash'],\n },\n];\n\nconst presetMap = new Map(PROVIDER_PRESETS.map((p) => [p.name.toLowerCase(), p]));\n\nexport function lookupPreset(name: string): OcrProviderPreset | undefined {\n return presetMap.get(name.trim().toLowerCase());\n}\n\nexport function isPresetProvider(name: string): boolean {\n return presetMap.has(name.trim().toLowerCase());\n}\n\nexport function mergeModelLists(...lists: string[][]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of lists) {\n for (const raw of list) {\n const model = raw.trim();\n if (!model || seen.has(model)) continue;\n seen.add(model);\n out.push(model);\n }\n }\n return out;\n}\n"}}, "pages/src/content/docs/ru/configuration.md": {"0f3c920fc8ff091cbd1ad9e0632bf54bba56e46b": {"t": 1785809839.023949, "n": 7466, "h": "5211e19ced921ec0", "c": "---\ntitle: Конфигурация\nsidebar:\n order: 5\n---\n\nФайл конфигурации находится по пути `~/.opencodereview/config.json`. Изменить\nего можно тремя способами:\n\n- **Интерактивный TUI** — `ocr config provider` / `ocr config model` с пошаговыми меню.\n- **Командная строка** — `ocr config set <key> <value>`, удобно для скриптов и CI.\n- **Редактирование вручную (не рекомендуется)** — напрямую изменить JSON-файл (при следующей записи через `ocr config set` его форматирование изменится).\n\n## Настройка модели\n\n### Рекомендуемый способ: интерактивная настройка\n\n```bash\nocr config provider\n```\n\nКоманда позволяет выбрать встроенного или пользовательского провайдера,\nввести API-ключ и выбрать модель, сохраняет всё в файл конфигурации, а затем\nодин раз запускает `ocr llm test` для проверки эндпоинта. Чтобы позже сменить\nмодель:\n\n```bash\nocr config model\n```\n\n### Неинтерактивная настройка (CI / среды без TUI)\n\nЗапишите параметры в тот же файл конфигурации с помощью `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Встроенные провайдеры\n\nПеречисленные ниже провайдеры поставляются вместе с OCR; для них заранее\nзаданы базовый URL и протокол, поэтому после выбора достаточно указать\nAPI-ключ. Если `providers.<name>.api_key` не задан, OCR использует\nсоответствующую переменную окружения.\n\n| Имя | Протокол | Базовый URL | Переменная окружения для API-ключа |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Пользовательские провайдеры\n\nЛюбое имя провайдера, которого нет в таблице выше, считается\nпользовательским. Для него необходимо задать как минимум `url` и `protocol`\n(`protocol` может принимать значения `anthropic`, `openai` или\n`openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nИспользуйте `openai-responses`, если провайдеру или модели требуется OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nВ качестве `url` можно указать как базовый URL API, так и полный эндпоинт\n`/responses` — OCR нормализует оба варианта.\n\nЛокальная модель, запущенная через Ollama, — это обычный пользовательский\nпровайдер, указывающий на локальный OpenAI-совместимый эндпоинт:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama игнорирует API-ключ, однако для пользовательских провайдеров требуется\nнепустое значение `api_key` (для них нет резервного варианта с переменной\nокружения), поэтому укажите любое значение-заполнитель. Сама модель должна\nподдерживать встроенные вызовы инструментов — перед выбором модели прочитайте\nраздел [«Не удалось разобрать вызовы инструментов» (локальные модели / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nв FAQ.\n\n### Тайм-ауты\n\nДля каждого HTTP-запроса к LLM действует тайм-аут, по умолчанию **300 секунд**.\nМедленным локальным моделям (или большим файлам) может потребоваться больше\nвремени. Доступны три настройки с возрастающей областью действия:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — для отдельного провайдера, в секундах.\n- `llm.timeout_sec` — для устаревшего раздела `llm`, в секундах.\n- Переменная окружения `OCR_LLM_TIMEOUT` — целое число секунд; переопределяет\n значение из файла конфигурации для всех вариантов разрешения настроек.\n\nКлючи `timeout_sec` не поддерживаются командой `ocr config set` — измените\n`~/.opencodereview/config.json` напрямую:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Проверка подключения\n\n```bash\nocr llm test\n```\n\n### Использование существующих переменных окружения\n\nЕсли у вас уже настроены переменные Claude Code `ANTHROPIC_*` или собственные\nпеременные OCR `OCR_LLM_*`, OCR обнаружит их автоматически — файл конфигурации\nне нужен.\n\n### Использование CC-Switch\n\nЕсли вы используете [CC-Switch](https://github.com/farion1231/cc-switch) с\nвключённой [службой маршрутизации](https://www.ccswitch.io/en/docs?section=proxy&item=service),\nукажите локальный прокси в качестве `url` провайдера — дополнительная настройка\nне требуется:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\nВ `api_key` можно указать любое значение. `extra_body` (как и другие поля\nконкретного провайдера) продолжает применяться обычным образом.\n\n### Отправка полей, специфичных для поставщика\n\nНекоторым провайдерам требуются нестандартные поля запроса (например,\n`thinking` в стиле Bedrock). Используйте `extra_body` (его содержимое\nдобавляется к каждому запросу), чтобы отправлять их без изменения исходного\nкода:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Настройка языка ревью\n\nПараметр `language` определяет, на каком языке будут написаны комментарии\nревью; если он не задан, используется английский:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## См. также\n\n- [Быстрый старт](../quickstart/) — минимальная настройка и первое ревью.\n- [Справочник CLI](../cli-reference/) — все флаги, принимаемые командой ревью.\n"}, "e6895dd15481e2612bf65114fab728fabd32451e": {"t": 1785846922.8521082, "n": 7466, "h": "5211e19ced921ec0", "c": "---\ntitle: Конфигурация\nsidebar:\n order: 5\n---\n\nФайл конфигурации находится по пути `~/.opencodereview/config.json`. Изменить\nего можно тремя способами:\n\n- **Интерактивный TUI** — `ocr config provider` / `ocr config model` с пошаговыми меню.\n- **Командная строка** — `ocr config set <key> <value>`, удобно для скриптов и CI.\n- **Редактирование вручную (не рекомендуется)** — напрямую изменить JSON-файл (при следующей записи через `ocr config set` его форматирование изменится).\n\n## Настройка модели\n\n### Рекомендуемый способ: интерактивная настройка\n\n```bash\nocr config provider\n```\n\nКоманда позволяет выбрать встроенного или пользовательского провайдера,\nввести API-ключ и выбрать модель, сохраняет всё в файл конфигурации, а затем\nодин раз запускает `ocr llm test` для проверки эндпоинта. Чтобы позже сменить\nмодель:\n\n```bash\nocr config model\n```\n\n### Неинтерактивная настройка (CI / среды без TUI)\n\nЗапишите параметры в тот же файл конфигурации с помощью `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Встроенные провайдеры\n\nПеречисленные ниже провайдеры поставляются вместе с OCR; для них заранее\nзаданы базовый URL и протокол, поэтому после выбора достаточно указать\nAPI-ключ. Если `providers.<name>.api_key` не задан, OCR использует\nсоответствующую переменную окружения.\n\n| Имя | Протокол | Базовый URL | Переменная окружения для API-ключа |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Пользовательские провайдеры\n\nЛюбое имя провайдера, которого нет в таблице выше, считается\nпользовательским. Для него необходимо задать как минимум `url` и `protocol`\n(`protocol` может принимать значения `anthropic`, `openai` или\n`openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nИспользуйте `openai-responses`, если провайдеру или модели требуется OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nВ качестве `url` можно указать как базовый URL API, так и полный эндпоинт\n`/responses` — OCR нормализует оба варианта.\n\nЛокальная модель, запущенная через Ollama, — это обычный пользовательский\nпровайдер, указывающий на локальный OpenAI-совместимый эндпоинт:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama игнорирует API-ключ, однако для пользовательских провайдеров требуется\nнепустое значение `api_key` (для них нет резервного варианта с переменной\nокружения), поэтому укажите любое значение-заполнитель. Сама модель должна\nподдерживать встроенные вызовы инструментов — перед выбором модели прочитайте\nраздел [«Не удалось разобрать вызовы инструментов» (локальные модели / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nв FAQ.\n\n### Тайм-ауты\n\nДля каждого HTTP-запроса к LLM действует тайм-аут, по умолчанию **300 секунд**.\nМедленным локальным моделям (или большим файлам) может потребоваться больше\nвремени. Доступны три настройки с возрастающей областью действия:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — для отдельного провайдера, в секундах.\n- `llm.timeout_sec` — для устаревшего раздела `llm`, в секундах.\n- Переменная окружения `OCR_LLM_TIMEOUT` — целое число секунд; переопределяет\n значение из файла конфигурации для всех вариантов разрешения настроек.\n\nКлючи `timeout_sec` не поддерживаются командой `ocr config set` — измените\n`~/.opencodereview/config.json` напрямую:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Проверка подключения\n\n```bash\nocr llm test\n```\n\n### Использование существующих переменных окружения\n\nЕсли у вас уже настроены переменные Claude Code `ANTHROPIC_*` или собственные\nпеременные OCR `OCR_LLM_*`, OCR обнаружит их автоматически — файл конфигурации\nне нужен.\n\n### Использование CC-Switch\n\nЕсли вы используете [CC-Switch](https://github.com/farion1231/cc-switch) с\nвключённой [службой маршрутизации](https://www.ccswitch.io/en/docs?section=proxy&item=service),\nукажите локальный прокси в качестве `url` провайдера — дополнительная настройка\nне требуется:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\nВ `api_key` можно указать любое значение. `extra_body` (как и другие поля\nконкретного провайдера) продолжает применяться обычным образом.\n\n### Отправка полей, специфичных для поставщика\n\nНекоторым провайдерам требуются нестандартные поля запроса (например,\n`thinking` в стиле Bedrock). Используйте `extra_body` (его содержимое\nдобавляется к каждому запросу), чтобы отправлять их без изменения исходного\nкода:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Настройка языка ревью\n\nПараметр `language` определяет, на каком языке будут написаны комментарии\nревью; если он не задан, используется английский:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## См. также\n\n- [Быстрый старт](../quickstart/) — минимальная настройка и первое ревью.\n- [Справочник CLI](../cli-reference/) — все флаги, принимаемые командой ревью.\n"}, "e9d4db51ec1d06fef1123d5a7158a7b311043650": {"t": 1785846960.2779853, "n": 7466, "h": "5211e19ced921ec0", "c": "---\ntitle: Конфигурация\nsidebar:\n order: 5\n---\n\nФайл конфигурации находится по пути `~/.opencodereview/config.json`. Изменить\nего можно тремя способами:\n\n- **Интерактивный TUI** — `ocr config provider` / `ocr config model` с пошаговыми меню.\n- **Командная строка** — `ocr config set <key> <value>`, удобно для скриптов и CI.\n- **Редактирование вручную (не рекомендуется)** — напрямую изменить JSON-файл (при следующей записи через `ocr config set` его форматирование изменится).\n\n## Настройка модели\n\n### Рекомендуемый способ: интерактивная настройка\n\n```bash\nocr config provider\n```\n\nКоманда позволяет выбрать встроенного или пользовательского провайдера,\nввести API-ключ и выбрать модель, сохраняет всё в файл конфигурации, а затем\nодин раз запускает `ocr llm test` для проверки эндпоинта. Чтобы позже сменить\nмодель:\n\n```bash\nocr config model\n```\n\n### Неинтерактивная настройка (CI / среды без TUI)\n\nЗапишите параметры в тот же файл конфигурации с помощью `ocr config set`:\n\n```bash\nocr config set provider anthropic\nocr config set model claude-opus-4-6\nocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx\n```\n\n### Встроенные провайдеры\n\nПеречисленные ниже провайдеры поставляются вместе с OCR; для них заранее\nзаданы базовый URL и протокол, поэтому после выбора достаточно указать\nAPI-ключ. Если `providers.<name>.api_key` не задан, OCR использует\nсоответствующую переменную окружения.\n\n| Имя | Протокол | Базовый URL | Переменная окружения для API-ключа |\n|---|---|---|---|\n| `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` |\n| `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` |\n| `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` |\n| `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` |\n| `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` |\n| `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` |\n| `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` |\n| `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` |\n| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` |\n| `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` |\n| `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` |\n| `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |\n| `minimax` | openai | `https://api.minimaxi.com/v1` | `MINIMAX_API_KEY` |\n| `baidu-qianfan` | openai | `https://qianfan.baidubce.com/v2` | `QIANFAN_API_KEY` |\n\n### Пользовательские провайдеры\n\nЛюбое имя провайдера, которого нет в таблице выше, считается\nпользовательским. Для него необходимо задать как минимум `url` и `protocol`\n(`protocol` может принимать значения `anthropic`, `openai` или\n`openai-responses`):\n\n```bash\nocr config set provider my-gateway\nocr config set custom_providers.my-gateway.url https://gateway.internal.com/v1\nocr config set custom_providers.my-gateway.protocol openai\nocr config set custom_providers.my-gateway.model llama-3-70b\nocr config set custom_providers.my-gateway.api_key \"$MY_API_KEY\"\n```\n\nИспользуйте `openai-responses`, если провайдеру или модели требуется OpenAI\nResponses API (`/v1/responses`):\n\n```bash\nocr config set provider openai-responses-gateway\nocr config set custom_providers.openai-responses-gateway.url https://api.openai.com/v1\nocr config set custom_providers.openai-responses-gateway.protocol openai-responses\nocr config set custom_providers.openai-responses-gateway.model gpt-5\nocr config set custom_providers.openai-responses-gateway.api_key \"$OPENAI_API_KEY\"\n```\n\nВ качестве `url` можно указать как базовый URL API, так и полный эндпоинт\n`/responses` — OCR нормализует оба варианта.\n\nЛокальная модель, запущенная через Ollama, — это обычный пользовательский\nпровайдер, указывающий на локальный OpenAI-совместимый эндпоинт:\n\n```bash\nocr config set provider ollama\nocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1\nocr config set custom_providers.ollama.protocol openai\nocr config set custom_providers.ollama.model qwen3:32b\nocr config set custom_providers.ollama.api_key ollama\n```\n\nOllama игнорирует API-ключ, однако для пользовательских провайдеров требуется\nнепустое значение `api_key` (для них нет резервного варианта с переменной\nокружения), поэтому укажите любое значение-заполнитель. Сама модель должна\nподдерживать встроенные вызовы инструментов — перед выбором модели прочитайте\nраздел [«Не удалось разобрать вызовы инструментов» (локальные модели / Ollama)](../faq/#no-tool-calls-parsed-local-models-ollama)\nв FAQ.\n\n### Тайм-ауты\n\nДля каждого HTTP-запроса к LLM действует тайм-аут, по умолчанию **300 секунд**.\nМедленным локальным моделям (или большим файлам) может потребоваться больше\nвремени. Доступны три настройки с возрастающей областью действия:\n\n- `providers.<name>.timeout_sec` / `custom_providers.<name>.timeout_sec`\n — для отдельного провайдера, в секундах.\n- `llm.timeout_sec` — для устаревшего раздела `llm`, в секундах.\n- Переменная окружения `OCR_LLM_TIMEOUT` — целое число секунд; переопределяет\n значение из файла конфигурации для всех вариантов разрешения настроек.\n\nКлючи `timeout_sec` не поддерживаются командой `ocr config set` — измените\n`~/.opencodereview/config.json` напрямую:\n\n```json\n{\n \"custom_providers\": {\n \"ollama\": { \"url\": \"http://127.0.0.1:11434/v1\", \"protocol\": \"openai\", \"timeout_sec\": 900 }\n }\n}\n```\n\n### Проверка подключения\n\n```bash\nocr llm test\n```\n\n### Использование существующих переменных окружения\n\nЕсли у вас уже настроены переменные Claude Code `ANTHROPIC_*` или собственные\nпеременные OCR `OCR_LLM_*`, OCR обнаружит их автоматически — файл конфигурации\nне нужен.\n\n### Использование CC-Switch\n\nЕсли вы используете [CC-Switch](https://github.com/farion1231/cc-switch) с\nвключённой [службой маршрутизации](https://www.ccswitch.io/en/docs?section=proxy&item=service),\nукажите локальный прокси в качестве `url` провайдера — дополнительная настройка\nне требуется:\n\n```bash\n# Claude (Anthropic-compatible)\nocr config set providers.anthropic.url http://127.0.0.1:15721\n\n# Codex / OpenAI-compatible — set that provider's url key instead\nocr config set providers.<name>.url http://127.0.0.1:15721/v1\n```\n\nВ `api_key` можно указать любое значение. `extra_body` (как и другие поля\nконкретного провайдера) продолжает применяться обычным образом.\n\n### Отправка полей, специфичных для поставщика\n\nНекоторым провайдерам требуются нестандартные поля запроса (например,\n`thinking` в стиле Bedrock). Используйте `extra_body` (его содержимое\nдобавляется к каждому запросу), чтобы отправлять их без изменения исходного\nкода:\n\n```bash\nocr config set providers.anthropic.extra_body '{\"thinking\":{\"type\":\"disabled\"}}'\n```\n\n## Настройка языка ревью\n\nПараметр `language` определяет, на каком языке будут написаны комментарии\nревью; если он не задан, используется английский:\n\n```bash\nocr config set language 中文\nocr config set language English\n```\n\n## См. также\n\n- [Быстрый старт](../quickstart/) — минимальная настройка и первое ревью.\n- [Справочник CLI](../cli-reference/) — все флаги, принимаемые командой ревью.\n"}}}}