This commit is contained in:
John Feng 2026-05-05 04:39:45 +00:00 committed by GitHub
commit d056cad375
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 281 additions and 39 deletions

View file

@ -404,6 +404,7 @@ PicoClaw supports 30+ LLM providers through the `model_list` configuration. Use
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Required | MiMo models | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Required | MiMo models |
| [Ollama](https://ollama.com/) | `ollama/` | Not needed | Local models, self-hosted | | [Ollama](https://ollama.com/) | `ollama/` | Not needed | Local models, self-hosted |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Not needed | Local deployment, OpenAI-compatible | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Not needed | Local deployment, OpenAI-compatible |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Not needed | Intel OpenVINO Model Server, OpenAI-compatible |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Varies | Proxy for 100+ providers | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Varies | Proxy for 100+ providers |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Required | Enterprise Azure deployment | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Required | Enterprise Azure deployment |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Device code login | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Device code login |
@ -413,7 +414,7 @@ PicoClaw supports 30+ LLM providers through the `model_list` configuration. Use
> \* AWS Bedrock requires build tag: `go build -tags bedrock`. Set `api_base` to a region name (e.g., `us-east-1`) for automatic endpoint resolution across all AWS partitions (aws, aws-cn, aws-us-gov). When using a full endpoint URL instead, you must also configure `AWS_REGION` via environment variable or AWS config/profile. > \* AWS Bedrock requires build tag: `go build -tags bedrock`. Set `api_base` to a region name (e.g., `us-east-1`) for automatic endpoint resolution across all AWS partitions (aws, aws-cn, aws-us-gov). When using a full endpoint URL instead, you must also configure `AWS_REGION` via environment variable or AWS config/profile.
<details> <details>
<summary><b>Local deployment (Ollama, vLLM, etc.)</b></summary> <summary><b>Local deployment (Ollama, vLLM, OVMS, etc.)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -441,6 +442,19 @@ PicoClaw supports 30+ LLM providers through the `model_list` configuration. Use
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
For full provider configuration details, see [Providers & Models](docs/guides/providers.md). For full provider configuration details, see [Providers & Models](docs/guides/providers.md).
</details> </details>

View file

@ -43,7 +43,7 @@
* **Provider** * **Provider**
* [**Architecture Upgrade**](https://github.com/sipeed/picoclaw/issues/283): Refactor from "Vendor-based" to "Protocol-based" classification (e.g., OpenAI-compatible, Ollama-compatible). *(Status: In progress by @Daming, ETA 5 days)* * [**Architecture Upgrade**](https://github.com/sipeed/picoclaw/issues/283): Refactor from "Vendor-based" to "Protocol-based" classification (e.g., OpenAI-compatible, Ollama-compatible). *(Status: In progress by @Daming, ETA 5 days)*
* **Local Models**: Deep integration with **Ollama**, **vLLM**, **LM Studio**, and **Mistral** (local inference). * **Local Models**: Deep integration with **Ollama**, **vLLM**, **OVMS**, **LM Studio**, and **Mistral** (local inference).
* **Online Models**: Continued support for frontier closed-source models. * **Online Models**: Continued support for frontier closed-source models.

View file

@ -30,11 +30,13 @@ Examples:
picoclaw model # Show current default model picoclaw model # Show current default model
picoclaw model gpt-5.2 # Set gpt-5.2 as default picoclaw model gpt-5.2 # Set gpt-5.2 as default
picoclaw model claude-sonnet-4.6 # Set claude-sonnet-4.6 as default picoclaw model claude-sonnet-4.6 # Set claude-sonnet-4.6 as default
picoclaw model local-model # Set local VLLM server as default picoclaw model local-model # Set local vLLM server as default
picoclaw model local-ovms # Set local OVMS server as default
picoclaw model add -b URL -k KEY # Add a model from a custom endpoint picoclaw model add -b URL -k KEY # Add a model from a custom endpoint
Note: 'local-model' is a special value for using a local VLLM server Note: 'local-model' is a built-in entry for a local vLLM server (localhost:8000/v1).
(running at localhost:8000 by default) which does not require an API key.`, 'local-ovms' is a built-in entry for a local OVMS server (localhost:8000/v3).
Neither requires an API key.`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
configPath := internal.GetConfigPath() configPath := internal.GetConfigPath()

View file

@ -368,7 +368,7 @@ L'ancienne configuration `providers` est **dépréciée** et a été supprimée
PicoClaw route les providers par famille de protocole : PicoClaw route les providers par famille de protocole :
- **Compatible OpenAI** : OpenRouter, Groq, Zhipu, endpoints vLLM et la plupart des autres. - **Compatible OpenAI** : OpenRouter, Groq, Zhipu, endpoints vLLM, OVMS et la plupart des autres.
- **Gemini natif** : Google Gemini via les endpoints natifs `models/*:generateContent` et `models/*:streamGenerateContent`. - **Gemini natif** : Google Gemini via les endpoints natifs `models/*:generateContent` et `models/*:streamGenerateContent`.
- **Anthropic** : Comportement natif de l'API Claude. - **Anthropic** : Comportement natif de l'API Claude.
- **Codex/OAuth** : Route d'authentification OAuth/token OpenAI. - **Codex/OAuth** : Route d'authentification OAuth/token OpenAI.

View file

@ -369,7 +369,7 @@ HEARTBEAT_OK を返信 ユーザーが直接結果を受信
PicoClaw はプロトコルファミリーで Provider をルーティングします: PicoClaw はプロトコルファミリーで Provider をルーティングします:
- **OpenAI 互換**OpenRouter、Groq、Zhipu、vLLM スタイルのエンドポイントなど。 - **OpenAI 互換**OpenRouter、Groq、Zhipu、vLLM スタイルのエンドポイント、OVMSなど。
- **Gemini ネイティブ**Google Gemini のネイティブ `models/*:generateContent` / `models/*:streamGenerateContent` エンドポイント。 - **Gemini ネイティブ**Google Gemini のネイティブ `models/*:generateContent` / `models/*:streamGenerateContent` エンドポイント。
- **Anthropic**Claude ネイティブ API の動作。 - **Anthropic**Claude ネイティブ API の動作。
- **Codex/OAuth**OpenAI OAuth/トークン認証ルート。 - **Codex/OAuth**OpenAI OAuth/トークン認証ルート。

View file

@ -592,6 +592,7 @@ For complete documentation, see [`../security/security_configuration.md`](../sec
| **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | Local | | **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | Local |
| **OVMS** | `ovms` | `http://localhost:8000/v3` | OpenAI | Local (no key needed) |
| **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | | **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) |
| **VolcEngine (Doubao)** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **VolcEngine (Doubao)** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | — | | **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | — |
@ -848,7 +849,7 @@ The old `providers` configuration is **deprecated** and has been removed in V2.
PicoClaw routes providers by protocol family: PicoClaw routes providers by protocol family:
- **OpenAI-compatible**: OpenRouter, Groq, Zhipu, vLLM-style endpoints, and most others. - **OpenAI-compatible**: OpenRouter, Groq, Zhipu, vLLM-style endpoints, OVMS, and most others.
- **Gemini native**: Google Gemini via the native `models/*:generateContent` and `models/*:streamGenerateContent` endpoints. - **Gemini native**: Google Gemini via the native `models/*:generateContent` and `models/*:streamGenerateContent` endpoints.
- **Anthropic**: Claude-native API behavior. - **Anthropic**: Claude-native API behavior.
- **Codex/OAuth**: OpenAI OAuth/token authentication route. - **Codex/OAuth**: OpenAI OAuth/token authentication route.

View file

@ -369,7 +369,7 @@ A configuração antiga `providers` está **depreciada** e foi removida no V2. C
PicoClaw roteia providers por família de protocolo: PicoClaw roteia providers por família de protocolo:
- **Compatível com OpenAI**: OpenRouter, Groq, Zhipu, endpoints vLLM e a maioria dos outros. - **Compatível com OpenAI**: OpenRouter, Groq, Zhipu, endpoints vLLM, OVMS e a maioria dos outros.
- **Gemini nativo**: Google Gemini via endpoints nativos `models/*:generateContent` e `models/*:streamGenerateContent`. - **Gemini nativo**: Google Gemini via endpoints nativos `models/*:generateContent` e `models/*:streamGenerateContent`.
- **Anthropic**: Comportamento nativo da API Claude. - **Anthropic**: Comportamento nativo da API Claude.
- **Codex/OAuth**: Rota de autenticação OAuth/token OpenAI. - **Codex/OAuth**: Rota de autenticação OAuth/token OpenAI.

View file

@ -369,7 +369,7 @@ Cấu hình `providers` cũ đã **bị deprecated** và đã được loại b
PicoClaw định tuyến provider theo họ giao thức: PicoClaw định tuyến provider theo họ giao thức:
- **Tương thích OpenAI**: OpenRouter, Groq, Zhipu, endpoint kiểu vLLM và hầu hết các provider khác. - **Tương thích OpenAI**: OpenRouter, Groq, Zhipu, endpoint kiểu vLLM, OVMS và hầu hết các provider khác.
- **Gemini native**: Google Gemini qua các endpoint native `models/*:generateContent``models/*:streamGenerateContent`. - **Gemini native**: Google Gemini qua các endpoint native `models/*:generateContent``models/*:streamGenerateContent`.
- **Anthropic**: Hành vi API Claude gốc. - **Anthropic**: Hành vi API Claude gốc.
- **Codex/OAuth**: Tuyến xác thực OAuth/token OpenAI. - **Codex/OAuth**: Tuyến xác thực OAuth/token OpenAI.

View file

@ -452,6 +452,7 @@ Agent 读取 HEARTBEAT.md
| **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [获取](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [获取](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理 Key | | **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理 Key |
| **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | 本地 | | **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | 本地 |
| **OVMS** | `ovms` | `http://localhost:8000/v3` | OpenAI | 本地(无需密钥) |
| **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [获取](https://cerebras.ai) | | **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [获取](https://cerebras.ai) |
| **火山引擎 (豆包)** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [获取](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **火山引擎 (豆包)** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [获取](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | — | | **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | — |
@ -674,7 +675,7 @@ Agent 读取 HEARTBEAT.md
PicoClaw 按协议族路由提供商: PicoClaw 按协议族路由提供商:
- **OpenAI 兼容**OpenRouter、Groq、智谱、vLLM 风格端点及大多数其他提供商。 - **OpenAI 兼容**OpenRouter、Groq、智谱、vLLM 风格端点、OVMS 及大多数其他提供商。
- **Gemini 原生**Google Gemini 通过原生 `models/*:generateContent``models/*:streamGenerateContent` 端点接入。 - **Gemini 原生**Google Gemini 通过原生 `models/*:generateContent``models/*:streamGenerateContent` 端点接入。
- **Anthropic**Claude 原生 API 行为。 - **Anthropic**Claude 原生 API 行为。
- **Codex/OAuth**OpenAI OAuth/Token 认证路由。 - **Codex/OAuth**OpenAI OAuth/Token 认证路由。

View file

@ -55,6 +55,7 @@ Cette conception permet également le **support multi-agents** avec une sélecti
| **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local |
| **OVMS** | `ovms/` | `http://localhost:8000/v3` | OpenAI | Local (no key needed) |
| **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) |
| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - |
@ -105,7 +106,7 @@ Cette conception permet également le **support multi-agents** avec une sélecti
|-------|------|--------|-------------| |-------|------|--------|-------------|
| `model_name` | string | Oui | Nom unique pour référencer ce modèle dans la config agent | | `model_name` | string | Oui | Nom unique pour référencer ce modèle dans la config agent |
| `model` | string | Oui | Identifiant fournisseur/modèle (ex : `openai/gpt-5.4`, `azure/gpt-5.4`, `anthropic/claude-sonnet-4.6`) | | `model` | string | Oui | Identifiant fournisseur/modèle (ex : `openai/gpt-5.4`, `azure/gpt-5.4`, `anthropic/claude-sonnet-4.6`) |
| `api_keys` | string[] | Oui* | Clé(s) API pour l'authentification. Plusieurs clés permettent la rotation par requête. Non requis pour les fournisseurs locaux (Ollama, LM Studio, VLLM) | | `api_keys` | string[] | Oui* | Clé(s) API pour l'authentification. Plusieurs clés permettent la rotation par requête. Non requis pour les fournisseurs locaux (Ollama, LM Studio, VLLM, OVMS) |
| `api_base` | string | Non | Remplace l'URL de base API par défaut | | `api_base` | string | Non | Remplace l'URL de base API par défaut |
| `proxy` | string | Non | URL du proxy HTTP pour cette entrée de modèle | | `proxy` | string | Non | URL du proxy HTTP pour cette entrée de modèle |
| `user_agent` | string | Non | En-tête `User-Agent` personnalisé pour les requêtes API (supporté par les providers compatibles OpenAI, Gemini, Anthropic et Azure) | | `user_agent` | string | Non | En-tête `User-Agent` personnalisé pour les requêtes API (supporté par les providers compatibles OpenAI, Gemini, Anthropic et Azure) |
@ -298,7 +299,7 @@ Pour un guide de migration détaillé, voir [migration/model-list-migration.md](
PicoClaw route les fournisseurs par famille de protocoles : PicoClaw route les fournisseurs par famille de protocoles :
- Protocole compatible OpenAI : OpenRouter, passerelles compatibles OpenAI, Groq, Zhipu et endpoints de type vLLM. - Protocole compatible OpenAI : OpenRouter, passerelles compatibles OpenAI, Groq, Zhipu et endpoints de type vLLM et OVMS.
- Protocole Gemini natif : Google Gemini via les endpoints natifs `models/*:generateContent` et `models/*:streamGenerateContent`. - Protocole Gemini natif : Google Gemini via les endpoints natifs `models/*:generateContent` et `models/*:streamGenerateContent`.
- Protocole Anthropic : Comportement natif de l'API Claude. - Protocole Anthropic : Comportement natif de l'API Claude.
- Chemin Codex/OAuth : Route d'authentification OAuth/token OpenAI. - Chemin Codex/OAuth : Route d'authentification OAuth/token OpenAI.

View file

@ -56,6 +56,7 @@
| **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [キーを取得](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [キーを取得](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | LiteLLM プロキシキー | | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | LiteLLM プロキシキー |
| **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | ローカル | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | ローカル |
| **OVMS** | `ovms/` | `http://localhost:8000/v3` | OpenAI | ローカル(キー不要) |
| **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [キーを取得](https://cerebras.ai) | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [キーを取得](https://cerebras.ai) |
| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [キーを取得](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [キーを取得](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - |
@ -106,7 +107,7 @@
|-----------|------|------|------| |-----------|------|------|------|
| `model_name` | string | はい | agent 設定でこのモデルを参照するための一意の名前 | | `model_name` | string | はい | agent 設定でこのモデルを参照するための一意の名前 |
| `model` | string | はい | ベンダー/モデル識別子(例:`openai/gpt-5.4``azure/gpt-5.4``anthropic/claude-sonnet-4.6` | | `model` | string | はい | ベンダー/モデル識別子(例:`openai/gpt-5.4``azure/gpt-5.4``anthropic/claude-sonnet-4.6` |
| `api_keys` | string[] | はい* | 認証キー。複数キーでリクエストごとのローテーションが可能。ローカル providerOllama、LM Studio、VLLMには不要 | | `api_keys` | string[] | はい* | 認証キー。複数キーでリクエストごとのローテーションが可能。ローカル providerOllama、LM Studio、VLLM、OVMS)には不要 |
| `api_base` | string | いいえ | デフォルトの API エンドポイント URL を上書き | | `api_base` | string | いいえ | デフォルトの API エンドポイント URL を上書き |
| `proxy` | string | いいえ | このモデルエントリの HTTP プロキシ URL | | `proxy` | string | いいえ | このモデルエントリの HTTP プロキシ URL |
| `user_agent` | string | いいえ | カスタム `User-Agent` リクエストヘッダーOpenAI 互換、Gemini、Anthropic、Azure provider で対応) | | `user_agent` | string | いいえ | カスタム `User-Agent` リクエストヘッダーOpenAI 互換、Gemini、Anthropic、Azure provider で対応) |
@ -310,7 +311,7 @@ PicoClaw はリクエスト送信前に外側の `litellm/` プレフィック
PicoClaw はプロトコルファミリーごとに Provider をルーティングします: PicoClaw はプロトコルファミリーごとに Provider をルーティングします:
- OpenAI 互換プロトコルOpenRouter、OpenAI 互換ゲートウェイ、Groq、Zhipu、vLLM スタイルのエンドポイント。 - OpenAI 互換プロトコルOpenRouter、OpenAI 互換ゲートウェイ、Groq、Zhipu、vLLM スタイルのエンドポイント、OVMS
- Gemini ネイティブプロトコルGoogle Gemini のネイティブ `models/*:generateContent` / `models/*:streamGenerateContent` エンドポイント。 - Gemini ネイティブプロトコルGoogle Gemini のネイティブ `models/*:generateContent` / `models/*:streamGenerateContent` エンドポイント。
- Anthropic プロトコルClaude ネイティブ API 動作。 - Anthropic プロトコルClaude ネイティブ API 動作。
- Codex/OAuth パスOpenAI OAuth/Token 認証ルート。 - Codex/OAuth パスOpenAI OAuth/Token 認証ルート。

View file

@ -64,6 +64,7 @@ This design also enables **multi-agent support** with flexible provider selectio
| **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | Local | | **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | Local |
| **OVMS** | `ovms` | `http://localhost:8000/v3` | OpenAI | Local (no key needed) |
| **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | | **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) |
| **VolcEngine (Doubao)** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **VolcEngine (Doubao)** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - |
@ -121,7 +122,7 @@ This design also enables **multi-agent support** with flexible provider selectio
| `model_name` | string | Yes | Unique name used to reference this model in agent config | | `model_name` | string | Yes | Unique name used to reference this model in agent config |
| `provider` | string | No | Preferred provider identifier. When present, PicoClaw sends `model` unchanged to that provider | | `provider` | string | No | Preferred provider identifier. When present, PicoClaw sends `model` unchanged to that provider |
| `model` | string | Yes | Native model ID when `provider` is set. If `provider` is omitted, the legacy `provider/model` form is still supported | | `model` | string | Yes | Native model ID when `provider` is set. If `provider` is omitted, the legacy `provider/model` form is still supported |
| `api_keys` | string[] | Yes* | API key(s) for authentication. Multiple keys enable per-request rotation. Not required for local providers (Ollama, LM Studio, VLLM) | | `api_keys` | string[] | Yes* | API key(s) for authentication. Multiple keys enable per-request rotation. Not required for local providers (Ollama, LM Studio, VLLM, OVMS) |
| `api_base` | string | No | Override the default API endpoint URL | | `api_base` | string | No | Override the default API endpoint URL |
| `proxy` | string | No | HTTP proxy URL for this model entry | | `proxy` | string | No | HTTP proxy URL for this model entry |
| `user_agent` | string | No | Custom `User-Agent` header sent with API requests (supported by OpenAI-compatible, Gemini, Anthropic, and Azure providers) | | `user_agent` | string | No | Custom `User-Agent` header sent with API requests (supported by OpenAI-compatible, Gemini, Anthropic, and Azure providers) |
@ -476,7 +477,7 @@ For detailed migration guide, see [migration/model-list-migration.md](../migrati
PicoClaw routes providers by protocol family: PicoClaw routes providers by protocol family:
- OpenAI-compatible protocol: OpenRouter, OpenAI-compatible gateways, Groq, Zhipu, and vLLM-style endpoints. - OpenAI-compatible protocol: OpenRouter, OpenAI-compatible gateways, Groq, Zhipu, OVMS, and vLLM-style endpoints.
- Gemini native protocol: Google Gemini via the native `models/*:generateContent` and `models/*:streamGenerateContent` endpoints. - Gemini native protocol: Google Gemini via the native `models/*:generateContent` and `models/*:streamGenerateContent` endpoints.
- Anthropic protocol: Claude-native API behavior. - Anthropic protocol: Claude-native API behavior.
- Codex/OAuth path: OpenAI OAuth/token authentication route. - Codex/OAuth path: OpenAI OAuth/token authentication route.

View file

@ -55,6 +55,7 @@ Este design também permite **suporte multi-agente** com seleção flexível de
| **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local |
| **OVMS** | `ovms/` | `http://localhost:8000/v3` | OpenAI | Local |
| **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) |
| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - |
@ -105,7 +106,7 @@ Este design também permite **suporte multi-agente** com seleção flexível de
|-------|------|-------------|-----------| |-------|------|-------------|-----------|
| `model_name` | string | Sim | Nome único para referenciar este modelo na config do agent | | `model_name` | string | Sim | Nome único para referenciar este modelo na config do agent |
| `model` | string | Sim | Identificador fornecedor/modelo (ex: `openai/gpt-5.4`, `azure/gpt-5.4`, `anthropic/claude-sonnet-4.6`) | | `model` | string | Sim | Identificador fornecedor/modelo (ex: `openai/gpt-5.4`, `azure/gpt-5.4`, `anthropic/claude-sonnet-4.6`) |
| `api_keys` | string[] | Sim* | Chave(s) API para autenticação. Múltiplas chaves permitem rotação por requisição. Não necessário para providers locais (Ollama, LM Studio, VLLM) | | `api_keys` | string[] | Sim* | Chave(s) API para autenticação. Múltiplas chaves permitem rotação por requisição. Não necessário para providers locais (Ollama, LM Studio, VLLM, OVMS) |
| `api_base` | string | Não | Substitui a URL base da API padrão | | `api_base` | string | Não | Substitui a URL base da API padrão |
| `proxy` | string | Não | URL do proxy HTTP para esta entrada de modelo | | `proxy` | string | Não | URL do proxy HTTP para esta entrada de modelo |
| `user_agent` | string | Não | Cabeçalho `User-Agent` personalizado enviado com requisições API (suportado por providers OpenAI-compatible, Gemini, Anthropic e Azure) | | `user_agent` | string | Não | Cabeçalho `User-Agent` personalizado enviado com requisições API (suportado por providers OpenAI-compatible, Gemini, Anthropic e Azure) |
@ -298,7 +299,7 @@ Para guia de migração detalhado, veja [migration/model-list-migration.md](../m
O PicoClaw roteia provedores por família de protocolo: O PicoClaw roteia provedores por família de protocolo:
- Protocolo compatível com OpenAI: OpenRouter, gateways compatíveis com OpenAI, Groq, Zhipu e endpoints estilo vLLM. - Protocolo compatível com OpenAI: OpenRouter, gateways compatíveis com OpenAI, Groq, Zhipu, endpoints estilo vLLM e OVMS.
- Protocolo Gemini nativo: Google Gemini via endpoints nativos `models/*:generateContent` e `models/*:streamGenerateContent`. - Protocolo Gemini nativo: Google Gemini via endpoints nativos `models/*:generateContent` e `models/*:streamGenerateContent`.
- Protocolo Anthropic: Comportamento nativo da API Claude. - Protocolo Anthropic: Comportamento nativo da API Claude.
- Caminho Codex/OAuth: Rota de autenticação OAuth/token da OpenAI. - Caminho Codex/OAuth: Rota de autenticação OAuth/token da OpenAI.

View file

@ -55,6 +55,7 @@ Thiết kế này cũng cho phép **hỗ trợ đa agent** với lựa chọn pr
| **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [Get Key](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local |
| **OVMS** | `ovms/` | `http://localhost:8000/v3` | OpenAI | Local |
| **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) |
| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - |
@ -105,7 +106,7 @@ Thiết kế này cũng cho phép **hỗ trợ đa agent** với lựa chọn pr
|--------|------|----------|------| |--------|------|----------|------|
| `model_name` | string | Có | Tên duy nhất để tham chiếu model này trong cấu hình agent | | `model_name` | string | Có | Tên duy nhất để tham chiếu model này trong cấu hình agent |
| `model` | string | Có | Định danh nhà cung cấp/model (ví dụ: `openai/gpt-5.4`, `azure/gpt-5.4`, `anthropic/claude-sonnet-4.6`) | | `model` | string | Có | Định danh nhà cung cấp/model (ví dụ: `openai/gpt-5.4`, `azure/gpt-5.4`, `anthropic/claude-sonnet-4.6`) |
| `api_keys` | string[] | Có* | Khóa API xác thực. Nhiều khóa cho phép xoay vòng theo yêu cầu. Không cần thiết cho provider nội bộ (Ollama, LM Studio, VLLM) | | `api_keys` | string[] | Có* | Khóa API xác thực. Nhiều khóa cho phép xoay vòng theo yêu cầu. Không cần thiết cho provider nội bộ (Ollama, LM Studio, VLLM, OVMS) |
| `api_base` | string | Không | Ghi đè URL endpoint API mặc định | | `api_base` | string | Không | Ghi đè URL endpoint API mặc định |
| `proxy` | string | Không | URL proxy HTTP cho entry model này | | `proxy` | string | Không | URL proxy HTTP cho entry model này |
| `user_agent` | string | Không | Header `User-Agent` tùy chỉnh gửi với yêu cầu API (được hỗ trợ bởi provider OpenAI-compatible, Gemini, Anthropic và Azure) | | `user_agent` | string | Không | Header `User-Agent` tùy chỉnh gửi với yêu cầu API (được hỗ trợ bởi provider OpenAI-compatible, Gemini, Anthropic và Azure) |
@ -298,7 +299,7 @@ Cấu hình `providers` cũ đã **bị deprecated** và đã được loại b
PicoClaw định tuyến provider theo họ giao thức: PicoClaw định tuyến provider theo họ giao thức:
- Giao thức tương thích OpenAI: OpenRouter, gateway tương thích OpenAI, Groq, Zhipu, endpoint kiểu vLLM. - Giao thức tương thích OpenAI: OpenRouter, gateway tương thích OpenAI, Groq, Zhipu, endpoint kiểu vLLM và OVMS.
- Giao thức Gemini native: Google Gemini qua các endpoint native `models/*:generateContent``models/*:streamGenerateContent`. - Giao thức Gemini native: Google Gemini qua các endpoint native `models/*:generateContent``models/*:streamGenerateContent`.
- Giao thức Anthropic: Hành vi API native của Claude. - Giao thức Anthropic: Hành vi API native của Claude.
- Đường dẫn Codex/OAuth: Tuyến xác thực OAuth/token của OpenAI. - Đường dẫn Codex/OAuth: Tuyến xác thực OAuth/token của OpenAI.

View file

@ -62,6 +62,7 @@
| **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [获取密钥](https://openrouter.ai/keys) | | **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [获取密钥](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理密钥 | | **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理密钥 |
| **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | 本地 | | **VLLM** | `vllm` | `http://localhost:8000/v1` | OpenAI | 本地 |
| **OVMS** | `ovms` | `http://localhost:8000/v3` | OpenAI | 本地(无需密钥) |
| **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [获取密钥](https://cerebras.ai) | | **Cerebras** | `cerebras` | `https://api.cerebras.ai/v1` | OpenAI | [获取密钥](https://cerebras.ai) |
| **火山引擎Doubao** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [获取密钥](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | | **火山引擎Doubao** | `volcengine` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [获取密钥](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) |
| **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **神算云** | `shengsuanyun` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - |
@ -118,7 +119,7 @@
| `model_name` | string | 是 | 在 agent 配置中引用此模型的唯一名称 | | `model_name` | string | 是 | 在 agent 配置中引用此模型的唯一名称 |
| `provider` | string | 否 | 推荐的 provider 标识。设置后PicoClaw 会将 `model` 原样发送给该 provider | | `provider` | string | 否 | 推荐的 provider 标识。设置后PicoClaw 会将 `model` 原样发送给该 provider |
| `model` | string | 是 | 当设置 `provider` 时,这里填写 provider 原生模型 ID。若未设置 `provider`,仍兼容旧的 `provider/model` 写法 | | `model` | string | 是 | 当设置 `provider` 时,这里填写 provider 原生模型 ID。若未设置 `provider`,仍兼容旧的 `provider/model` 写法 |
| `api_keys` | string[] | 是* | 认证密钥。多个密钥可按请求轮换。本地 providerOllama、LM Studio、VLLM不需要 | | `api_keys` | string[] | 是* | 认证密钥。多个密钥可按请求轮换。本地 providerOllama、LM Studio、VLLM、OVMS)不需要 |
| `api_base` | string | 否 | 覆盖默认的 API 端点 URL | | `api_base` | string | 否 | 覆盖默认的 API 端点 URL |
| `proxy` | string | 否 | 此模型条目的 HTTP 代理 URL | | `proxy` | string | 否 | 此模型条目的 HTTP 代理 URL |
| `user_agent` | string | 否 | 自定义 `User-Agent` 请求头(支持 OpenAI 兼容、Gemini、Anthropic 和 Azure provider | | `user_agent` | string | 否 | 自定义 `User-Agent` 请求头(支持 OpenAI 兼容、Gemini、Anthropic 和 Azure provider |
@ -421,7 +422,7 @@ PicoClaw 按下面的规则解析 `provider` 和最终发给上游的模型 ID
PicoClaw 按协议族路由 Provider PicoClaw 按协议族路由 Provider
- OpenAI 兼容协议OpenRouter、OpenAI 兼容网关、Groq、智谱、vLLM 风格端点。 - OpenAI 兼容协议OpenRouter、OpenAI 兼容网关、Groq、智谱、vLLM 风格端点和 OVMS
- Gemini 原生协议Google Gemini 通过原生 `models/*:generateContent``models/*:streamGenerateContent` 端点接入。 - Gemini 原生协议Google Gemini 通过原生 `models/*:generateContent``models/*:streamGenerateContent` 端点接入。
- Anthropic 协议Claude 原生 API 行为。 - Anthropic 协议Claude 原生 API 行为。
- Codex/OAuth 路径OpenAI OAuth/Token 认证路由。 - Codex/OAuth 路径OpenAI OAuth/Token 认证路由。

View file

@ -403,13 +403,14 @@ PicoClaw supporte plus de 30 providers LLM via la configuration `model_list`. Ut
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Requise | Modèles MiMo | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Requise | Modèles MiMo |
| [Ollama](https://ollama.com/) | `ollama/` | Non requise | Modèles locaux, auto-hébergé | | [Ollama](https://ollama.com/) | `ollama/` | Non requise | Modèles locaux, auto-hébergé |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Non requise | Déploiement local, compatible OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Non requise | Déploiement local, compatible OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Non requise | Intel OpenVINO Model Server, compatible OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Variable | Proxy pour 100+ providers | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Variable | Proxy pour 100+ providers |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Requise | Déploiement Azure entreprise | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Requise | Déploiement Azure entreprise |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Connexion par code appareil | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Connexion par code appareil |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>Déploiement local (Ollama, vLLM, etc.)</b></summary> <summary><b>Déploiement local (Ollama, vLLM, OVMS, etc.)</b></summary>
**Ollama :** **Ollama :**
```json ```json
@ -437,6 +438,19 @@ PicoClaw supporte plus de 30 providers LLM via la configuration `model_list`. Ut
} }
``` ```
**OVMS (OpenVINO Model Server) :**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Pour les détails complets de configuration des providers, voir [Providers & Models](../guides/providers.fr.md). Pour les détails complets de configuration des providers, voir [Providers & Models](../guides/providers.fr.md).
</details> </details>

View file

@ -398,13 +398,14 @@ PicoClaw mendukung 30+ provider LLM melalui konfigurasi `model_list`. Gunakan fo
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Diperlukan | Model MiMo | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Diperlukan | Model MiMo |
| [Ollama](https://ollama.com/) | `ollama/` | Tidak perlu | Model lokal, self-hosted | | [Ollama](https://ollama.com/) | `ollama/` | Tidak perlu | Model lokal, self-hosted |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Tidak perlu | Deploy lokal, kompatibel OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Tidak perlu | Deploy lokal, kompatibel OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Tidak perlu | Intel OpenVINO Model Server, kompatibel OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Bervariasi | Proxy untuk 100+ provider | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Bervariasi | Proxy untuk 100+ provider |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Diperlukan | Deploy Azure enterprise | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Diperlukan | Deploy Azure enterprise |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Login dengan device code | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Login dengan device code |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>Deploy lokal (Ollama, vLLM, dll.)</b></summary> <summary><b>Deploy lokal (Ollama, vLLM, OVMS, dll.)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -432,6 +433,19 @@ PicoClaw mendukung 30+ provider LLM melalui konfigurasi `model_list`. Gunakan fo
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Untuk detail konfigurasi provider lengkap, lihat [Providers & Models](../guides/providers.md). Untuk detail konfigurasi provider lengkap, lihat [Providers & Models](../guides/providers.md).
</details> </details>

View file

@ -398,13 +398,14 @@ PicoClaw supporta 30+ provider LLM tramite la configurazione `model_list`. Usa i
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Richiesta | Modelli MiMo | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Richiesta | Modelli MiMo |
| [Ollama](https://ollama.com/) | `ollama/` | Non necessaria | Modelli locali, self-hosted | | [Ollama](https://ollama.com/) | `ollama/` | Non necessaria | Modelli locali, self-hosted |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Non necessaria | Deploy locale, compatibile OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Non necessaria | Deploy locale, compatibile OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Non necessaria | Intel OpenVINO Model Server, compatibile OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Variabile | Proxy per 100+ provider | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Variabile | Proxy per 100+ provider |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Richiesta | Deploy Azure enterprise | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Richiesta | Deploy Azure enterprise |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Login con device code | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Login con device code |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>Deploy locale (Ollama, vLLM, ecc.)</b></summary> <summary><b>Deploy locale (Ollama, vLLM, OVMS, ecc.)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -432,6 +433,19 @@ PicoClaw supporta 30+ provider LLM tramite la configurazione `model_list`. Usa i
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Per i dettagli completi sulla configurazione dei provider, vedi [Provider & Modelli](../guides/providers.md). Per i dettagli completi sulla configurazione dei provider, vedi [Provider & Modelli](../guides/providers.md).
</details> </details>

View file

@ -399,13 +399,14 @@ PicoClaw は `model_list` 設定を通じて 30 以上の LLM Provider をサポ
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | 必須 | MiMo モデル | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | 必須 | MiMo モデル |
| [Ollama](https://ollama.com/) | `ollama/` | 不要 | ローカルモデル、セルフホスト | | [Ollama](https://ollama.com/) | `ollama/` | 不要 | ローカルモデル、セルフホスト |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | 不要 | ローカルデプロイ、OpenAI 互換 | | [vLLM](https://docs.vllm.ai/) | `vllm/` | 不要 | ローカルデプロイ、OpenAI 互換 |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | 不要 | Intel OpenVINO Model Server、OpenAI 互換 |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | 場合による | 100 以上の Provider のプロキシ | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | 場合による | 100 以上の Provider のプロキシ |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | 必須 | エンタープライズ Azure デプロイ | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | 必須 | エンタープライズ Azure デプロイ |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | デバイスコードログイン | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | デバイスコードログイン |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>ローカルデプロイOllama、vLLM など)</b></summary> <summary><b>ローカルデプロイOllama、vLLM、OVMS など)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -433,6 +434,19 @@ PicoClaw は `model_list` 設定を通じて 30 以上の LLM Provider をサポ
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Provider の完全な設定詳細は [Provider とモデル](../guides/providers.ja.md) を参照してください。 Provider の完全な設定詳細は [Provider とモデル](../guides/providers.ja.md) を参照してください。
</details> </details>

View file

@ -394,6 +394,7 @@ PicoClaw menyokong 30+ penyedia LLM melalui konfigurasi `model_list`. Gunakan fo
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Diperlukan | Model MiMo | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Diperlukan | Model MiMo |
| [Ollama](https://ollama.com/) | `ollama/` | Tidak perlu | Model tempatan, self-hosted | | [Ollama](https://ollama.com/) | `ollama/` | Tidak perlu | Model tempatan, self-hosted |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Tidak perlu | Deployment tempatan, serasi OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Tidak perlu | Deployment tempatan, serasi OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Tidak perlu | Intel OpenVINO Model Server, serasi OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Berbeza | Proksi untuk 100+ penyedia | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Berbeza | Proksi untuk 100+ penyedia |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Diperlukan | Deployment Azure perusahaan | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Diperlukan | Deployment Azure perusahaan |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Log masuk kod peranti | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Log masuk kod peranti |
@ -403,7 +404,7 @@ PicoClaw menyokong 30+ penyedia LLM melalui konfigurasi `model_list`. Gunakan fo
> \* AWS Bedrock memerlukan tag binaan: `go build -tags bedrock`. Tetapkan `api_base` kepada nama rantau (cth. `us-east-1`) untuk resolusi endpoint automatik merentasi semua partition AWS. Apabila menggunakan URL endpoint penuh, anda juga perlu mengkonfigurasi `AWS_REGION` melalui pemboleh ubah persekitaran. > \* AWS Bedrock memerlukan tag binaan: `go build -tags bedrock`. Tetapkan `api_base` kepada nama rantau (cth. `us-east-1`) untuk resolusi endpoint automatik merentasi semua partition AWS. Apabila menggunakan URL endpoint penuh, anda juga perlu mengkonfigurasi `AWS_REGION` melalui pemboleh ubah persekitaran.
<details> <details>
<summary><b>Deployment tempatan (Ollama, vLLM, dll.)</b></summary> <summary><b>Deployment tempatan (Ollama, vLLM, OVMS, dll.)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -431,6 +432,19 @@ PicoClaw menyokong 30+ penyedia LLM melalui konfigurasi `model_list`. Gunakan fo
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Untuk butiran konfigurasi penyedia penuh, lihat [Penyedia & Model](../guides/providers.md). Untuk butiran konfigurasi penyedia penuh, lihat [Penyedia & Model](../guides/providers.md).
</details> </details>

View file

@ -399,13 +399,14 @@ O PicoClaw suporta mais de 30 providers de LLM através da configuração `model
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Obrigatória | Modelos MiMo | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Obrigatória | Modelos MiMo |
| [Ollama](https://ollama.com/) | `ollama/` | Não necessária | Modelos locais, self-hosted | | [Ollama](https://ollama.com/) | `ollama/` | Não necessária | Modelos locais, self-hosted |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Não necessária | Implantação local, compatível com OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Não necessária | Implantação local, compatível com OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Não necessária | Intel OpenVINO Model Server, compatível com OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Varia | Proxy para 100+ providers | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Varia | Proxy para 100+ providers |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Obrigatória | Implantação Azure Enterprise | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Obrigatória | Implantação Azure Enterprise |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Login por código de dispositivo | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Login por código de dispositivo |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>Implantação local (Ollama, vLLM, etc.)</b></summary> <summary><b>Implantação local (Ollama, vLLM, OVMS, etc.)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -433,6 +434,19 @@ O PicoClaw suporta mais de 30 providers de LLM através da configuração `model
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Para detalhes completos de configuração de providers, veja [Providers & Models](../guides/providers.pt-br.md). Para detalhes completos de configuração de providers, veja [Providers & Models](../guides/providers.pt-br.md).
</details> </details>

View file

@ -399,13 +399,14 @@ PicoClaw hỗ trợ 30+ Provider LLM thông qua cấu hình `model_list`. Sử d
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Bắt buộc | Mô hình MiMo | | [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | Bắt buộc | Mô hình MiMo |
| [Ollama](https://ollama.com/) | `ollama/` | Không cần | Mô hình cục bộ, tự lưu trữ | | [Ollama](https://ollama.com/) | `ollama/` | Không cần | Mô hình cục bộ, tự lưu trữ |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | Không cần | Triển khai cục bộ, tương thích OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | Không cần | Triển khai cục bộ, tương thích OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | Không cần | Intel OpenVINO Model Server, tương thích OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Tùy | Proxy cho 100+ provider | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | Tùy | Proxy cho 100+ provider |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Bắt buộc | Triển khai Azure doanh nghiệp | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | Bắt buộc | Triển khai Azure doanh nghiệp |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Đăng nhập bằng device code | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | Đăng nhập bằng device code |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>Triển khai cục bộ (Ollama, vLLM, v.v.)</b></summary> <summary><b>Triển khai cục bộ (Ollama, vLLM, OVMS, v.v.)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -433,6 +434,19 @@ PicoClaw hỗ trợ 30+ Provider LLM thông qua cấu hình `model_list`. Sử d
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
Để biết chi tiết cấu hình provider đầy đủ, xem [Providers & Models](../guides/providers.vi.md). Để biết chi tiết cấu hình provider đầy đủ, xem [Providers & Models](../guides/providers.vi.md).
</details> </details>

View file

@ -399,13 +399,14 @@ PicoClaw 通过 `model_list` 配置支持 30+ LLM Provider使用 `协议/模
| [小米 MiMo](https://platform.xiaomimimo.com/) | `mimo/` | 必填 | MiMo 系列模型 | | [小米 MiMo](https://platform.xiaomimimo.com/) | `mimo/` | 必填 | MiMo 系列模型 |
| [Ollama](https://ollama.com/) | `ollama/` | 无需 | 本地模型,自托管 | | [Ollama](https://ollama.com/) | `ollama/` | 无需 | 本地模型,自托管 |
| [vLLM](https://docs.vllm.ai/) | `vllm/` | 无需 | 本地部署,兼容 OpenAI | | [vLLM](https://docs.vllm.ai/) | `vllm/` | 无需 | 本地部署,兼容 OpenAI |
| [OVMS](https://docs.openvino.ai/2026/model-server/ovms_docs_llm_quickstart.html) | `ovms/` | 无需 | Intel OpenVINO Model Server兼容 OpenAI |
| [LiteLLM](https://docs.litellm.ai/) | `litellm/` | 视情况 | 100+ Provider 代理 | | [LiteLLM](https://docs.litellm.ai/) | `litellm/` | 视情况 | 100+ Provider 代理 |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | 必填 | 企业级 Azure 部署 | | [Azure OpenAI](https://portal.azure.com/) | `azure/` | 必填 | 企业级 Azure 部署 |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | 设备码登录 | | [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | 设备码登录 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI | | [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
<details> <details>
<summary><b>本地部署Ollama、vLLM 等)</b></summary> <summary><b>本地部署Ollama、vLLM、OVMS 等)</b></summary>
**Ollama:** **Ollama:**
```json ```json
@ -433,6 +434,19 @@ PicoClaw 通过 `model_list` 配置支持 30+ LLM Provider使用 `协议/模
} }
``` ```
**OVMS (OpenVINO Model Server):**
```json
{
"model_list": [
{
"model_name": "local-ovms",
"model": "ovms/your-model",
"api_base": "http://localhost:8000/v3"
}
]
}
```
完整 Provider 配置详情请参阅 [Providers & Models](../guides/providers.zh.md)。 完整 Provider 配置详情请参阅 [Providers & Models](../guides/providers.zh.md)。
</details> </details>

View file

@ -26,7 +26,7 @@ func supportsAudioTranscription(modelCfg *config.ModelConfig) bool {
case "openai", "azure", "azure-openai", case "openai", "azure", "azure-openai",
"litellm", "openrouter", "groq", "zhipu", "gemini", "nvidia", "litellm", "openrouter", "groq", "zhipu", "gemini", "nvidia",
"ollama", "moonshot", "shengsuanyun", "deepseek", "cerebras", "ollama", "moonshot", "shengsuanyun", "deepseek", "cerebras",
"vivgrid", "volcengine", "vllm", "qwen", "qwen-portal", "qwen-intl", "qwen-international", "dashscope-intl", "vivgrid", "volcengine", "vllm", "ovms", "qwen", "qwen-portal", "qwen-intl", "qwen-international", "dashscope-intl",
"qwen-us", "dashscope-us", "mistral", "avian", "minimax", "longcat", "modelscope", "novita", "qwen-us", "dashscope-us", "mistral", "avian", "minimax", "longcat", "modelscope", "novita",
"coding-plan", "alibaba-coding", "qwen-coding", "zai": "coding-plan", "alibaba-coding", "qwen-coding", "zai":
// These protocols all go through the OpenAI-compatible or Azure provider path in // These protocols all go through the OpenAI-compatible or Azure provider path in
@ -47,7 +47,7 @@ func supportsWhisperTranscription(modelCfg *config.ModelConfig) bool {
switch protocol { switch protocol {
case "openai", "litellm", "openrouter", "groq", "zhipu", "gemini", "nvidia", case "openai", "litellm", "openrouter", "groq", "zhipu", "gemini", "nvidia",
"ollama", "moonshot", "shengsuanyun", "deepseek", "cerebras", "ollama", "moonshot", "shengsuanyun", "deepseek", "cerebras",
"vivgrid", "volcengine", "vllm", "qwen", "qwen-portal", "qwen-intl", "qwen-international", "dashscope-intl", "vivgrid", "volcengine", "vllm", "ovms", "qwen", "qwen-portal", "qwen-intl", "qwen-international", "dashscope-intl",
"qwen-us", "dashscope-us", "mistral", "avian", "minimax", "longcat", "modelscope", "novita", "qwen-us", "dashscope-us", "mistral", "avian", "minimax", "longcat", "modelscope", "novita",
"coding-plan", "alibaba-coding", "qwen-coding", "zai", "mimo": "coding-plan", "alibaba-coding", "qwen-coding", "zai", "mimo":
return true return true

View file

@ -206,6 +206,35 @@ func TestDetectTranscriber(t *testing.T) {
}, },
wantName: "audio-model", wantName: "audio-model",
}, },
{
name: "ovms voice model name selects audio model transcriber",
cfg: &config.Config{
Voice: config.VoiceConfig{ModelName: "local-ovms"},
ModelList: []*config.ModelConfig{
{
ModelName: "local-ovms",
Model: "ovms/custom-model",
APIBase: "http://localhost:8000/v3",
},
},
},
wantName: "audio-model",
},
{
name: "ovms voice model name with whisper model selects whisper transcriber",
cfg: &config.Config{
Voice: config.VoiceConfig{ModelName: "local-ovms"},
ModelList: []*config.ModelConfig{
{
ModelName: "local-ovms",
Model: "ovms/whisper-large-v3",
APIBase: "http://localhost:8000/v3",
APIKeys: config.SimpleSecureStrings("sk-ovms-test"),
},
},
},
wantName: "whisper",
},
} }
for _, tc := range tests { for _, tc := range tests {

View file

@ -273,6 +273,14 @@ func DefaultConfig() *Config {
APIBase: "http://localhost:8000/v1", APIBase: "http://localhost:8000/v1",
}, },
// OVMS (local) - http://localhost:8000
{
ModelName: "local-ovms",
Provider: "ovms",
Model: "custom-model",
APIBase: "http://localhost:8000/v3",
},
// LM Studio (local) - http://localhost:1234 // LM Studio (local) - http://localhost:1234
{ {
ModelName: "lmstudio-local", ModelName: "lmstudio-local",

View file

@ -54,6 +54,7 @@ var protocolMetaByName = map[string]protocolMeta{
"alibaba-coding-anthropic": {defaultAPIBase: "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic"}, "alibaba-coding-anthropic": {defaultAPIBase: "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic"},
"zai": {defaultAPIBase: "https://api.z.ai/api/coding/paas/v4"}, "zai": {defaultAPIBase: "https://api.z.ai/api/coding/paas/v4"},
"vllm": {defaultAPIBase: "http://localhost:8000/v1", emptyAPIKeyAllowed: true}, "vllm": {defaultAPIBase: "http://localhost:8000/v1", emptyAPIKeyAllowed: true},
"ovms": {defaultAPIBase: "http://localhost:8000/v3", emptyAPIKeyAllowed: true},
"mistral": {defaultAPIBase: "https://api.mistral.ai/v1"}, "mistral": {defaultAPIBase: "https://api.mistral.ai/v1"},
"avian": {defaultAPIBase: "https://api.avian.io/v1"}, "avian": {defaultAPIBase: "https://api.avian.io/v1"},
"minimax": {defaultAPIBase: "https://api.minimaxi.com/v1"}, "minimax": {defaultAPIBase: "https://api.minimaxi.com/v1"},
@ -248,7 +249,7 @@ func CreateProviderFromConfig(cfg *config.ModelConfig) (LLMProvider, string, err
case "litellm", "lmstudio", "openrouter", "groq", "zhipu", "nvidia", "venice", case "litellm", "lmstudio", "openrouter", "groq", "zhipu", "nvidia", "venice",
"ollama", "moonshot", "shengsuanyun", "deepseek", "cerebras", "ollama", "moonshot", "shengsuanyun", "deepseek", "cerebras",
"vivgrid", "volcengine", "vllm", "qwen", "qwen-portal", "qwen-intl", "qwen-international", "dashscope-intl", "vivgrid", "volcengine", "vllm", "ovms", "qwen", "qwen-portal", "qwen-intl", "qwen-international", "dashscope-intl",
"qwen-us", "dashscope-us", "mistral", "avian", "longcat", "modelscope", "novita", "qwen-us", "dashscope-us", "mistral", "avian", "longcat", "modelscope", "novita",
"coding-plan", "alibaba-coding", "qwen-coding", "zai", "mimo": "coding-plan", "alibaba-coding", "qwen-coding", "zai", "mimo":
// All other OpenAI-compatible HTTP providers // All other OpenAI-compatible HTTP providers

View file

@ -199,6 +199,7 @@ func TestCreateProviderFromConfig_DefaultAPIBase(t *testing.T) {
{"vivgrid", "vivgrid"}, {"vivgrid", "vivgrid"},
{"qwen", "qwen"}, {"qwen", "qwen"},
{"vllm", "vllm"}, {"vllm", "vllm"},
{"ovms", "ovms"},
{"deepseek", "deepseek"}, {"deepseek", "deepseek"},
{"ollama", "ollama"}, {"ollama", "ollama"},
{"lmstudio", "lmstudio"}, {"lmstudio", "lmstudio"},
@ -316,6 +317,20 @@ func TestCreateProviderFromConfig_LocalProviders(t *testing.T) {
apiKey: "", apiKey: "",
wantModelID: "Qwen/Qwen3-8B", wantModelID: "Qwen/Qwen3-8B",
}, },
{
name: "OVMS with API key",
modelName: "test-ovms",
model: "ovms/llama3",
apiKey: "test-key",
wantModelID: "llama3",
},
{
name: "OVMS without API key",
modelName: "test-ovms",
model: "ovms/llama3",
apiKey: "",
wantModelID: "llama3",
},
} }
for _, tt := range tests { for _, tt := range tests {

View file

@ -341,7 +341,7 @@ Check these in the dashboard:
- a default model is selected - a default model is selected
- the model has credentials or OAuth state - the model has credentials or OAuth state
- local models such as Ollama or vLLM are reachable - local models such as Ollama, vLLM, or OVMS are reachable
### The launcher cannot find `picoclaw` ### The launcher cannot find `picoclaw`

View file

@ -176,7 +176,7 @@ func runLocalModelProbe(m *config.ModelConfig) bool {
switch protocol { switch protocol {
case "ollama": case "ollama":
return probeOllamaModelFunc(apiBase, modelID) return probeOllamaModelFunc(apiBase, modelID)
case "vllm", "lmstudio": case "vllm", "ovms", "lmstudio":
return probeOpenAICompatibleModelFunc(apiBase, modelID, m.APIKey()) return probeOpenAICompatibleModelFunc(apiBase, modelID, m.APIKey())
case "github-copilot", "copilot": case "github-copilot", "copilot":
return probeTCPServiceFunc(apiBase) return probeTCPServiceFunc(apiBase)

View file

@ -89,6 +89,56 @@ func TestProbeLocalModelAvailability_LMStudioUsesOpenAICompatibleProbe(t *testin
} }
} }
func TestRequiresRuntimeProbe_OVMS(t *testing.T) {
if !requiresRuntimeProbe(&config.ModelConfig{
Model: "ovms/llama3",
}) {
t.Fatal("requiresRuntimeProbe(ovms with default base) = false, want true")
}
if requiresRuntimeProbe(&config.ModelConfig{
Model: "ovms/llama3",
APIBase: "https://api.example.com/v3",
}) {
t.Fatal("requiresRuntimeProbe(ovms with remote base) = true, want false")
}
}
func TestModelProbeAPIBase_OVMSDefault(t *testing.T) {
got := modelProbeAPIBase(&config.ModelConfig{Model: "ovms/llama3"})
if got != "http://localhost:8000/v3" {
t.Fatalf("modelProbeAPIBase(ovms) = %q, want %q", got, "http://localhost:8000/v3")
}
}
func TestProbeLocalModelAvailability_OVMSUsesOpenAICompatibleProbe(t *testing.T) {
originalProbe := probeOpenAICompatibleModelFunc
defer func() { probeOpenAICompatibleModelFunc = originalProbe }()
called := false
probeOpenAICompatibleModelFunc = func(apiBase, modelID, apiKey string) bool {
called = true
if apiBase != "http://localhost:8000/v3" {
t.Fatalf("apiBase = %q, want %q", apiBase, "http://localhost:8000/v3")
}
if modelID != "llama3" {
t.Fatalf("modelID = %q, want %q", modelID, "llama3")
}
if apiKey != "" {
t.Fatalf("apiKey = %q, want empty", apiKey)
}
return true
}
model := &config.ModelConfig{Model: "ovms/llama3"}
if !probeLocalModelAvailability(model) {
t.Fatal("probeLocalModelAvailability(ovms) = false, want true")
}
if !called {
t.Fatal("probeOpenAICompatibleModelFunc was not called for ovms")
}
}
func TestModelProbeCacheKey_DifferentAPIKeysProduceDifferentKeys(t *testing.T) { func TestModelProbeCacheKey_DifferentAPIKeysProduceDifferentKeys(t *testing.T) {
base := &config.ModelConfig{ base := &config.ModelConfig{
ModelName: "local-vllm", ModelName: "local-vllm",

View file

@ -42,9 +42,10 @@ const PROVIDER_PRIORITY: Record<string, number> = {
azure: 23, azure: 23,
ollama: 24, ollama: 24,
vllm: 25, vllm: 25,
lmstudio: 26, ovms: 26,
zai: 27, lmstudio: 27,
mimo: 28, zai: 28,
mimo: 29,
} }
interface ProviderGroup { interface ProviderGroup {

View file

@ -41,6 +41,7 @@ const PROVIDER_DOMAINS: Record<string, string> = {
mistral: "mistral.ai", mistral: "mistral.ai",
avian: "avian.io", avian: "avian.io",
vllm: "vllm.ai", vllm: "vllm.ai",
ovms: "docs.openvino.ai",
zhipu: "zhipuai.cn", zhipu: "zhipuai.cn",
zai: "z.ai", zai: "z.ai",
mimo: "xiaomi.com", mimo: "xiaomi.com",

View file

@ -20,6 +20,7 @@ const PROVIDER_LABELS: Record<string, string> = {
mistral: "Mistral AI", mistral: "Mistral AI",
avian: "Avian", avian: "Avian",
vllm: "VLLM (local)", vllm: "VLLM (local)",
ovms: "OVMS (local)",
zhipu: "Zhipu AI (智谱)", zhipu: "Zhipu AI (智谱)",
zai: "Z.ai", zai: "Z.ai",
mimo: "Xiaomi MiMo", mimo: "Xiaomi MiMo",