1 line
150 KiB
JSON
1 line
150 KiB
JSON
{"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"}}}} |