diff --git a/README.md b/README.md
index 30ac67d8f..ecb750442 100644
--- a/README.md
+++ b/README.md
@@ -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 |
| [Ollama](https://ollama.com/) | `ollama/` | Not needed | Local models, self-hosted |
| [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 |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | Required | Enterprise Azure deployment |
| [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.
-Local deployment (Ollama, vLLM, etc.)
+Local deployment (Ollama, vLLM, OVMS, etc.)
**Ollama:**
```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).
diff --git a/ROADMAP.md b/ROADMAP.md
index 8c5c0e252..4e34a62ab 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -43,7 +43,7 @@
* **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)*
- * **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.
diff --git a/cmd/picoclaw/internal/model/command.go b/cmd/picoclaw/internal/model/command.go
index c412993a0..4de76951b 100644
--- a/cmd/picoclaw/internal/model/command.go
+++ b/cmd/picoclaw/internal/model/command.go
@@ -30,11 +30,13 @@ Examples:
picoclaw model # Show current default model
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 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
-Note: 'local-model' is a special value for using a local VLLM server
-(running at localhost:8000 by default) which does not require an API key.`,
+Note: 'local-model' is a built-in entry for a local vLLM server (localhost:8000/v1).
+ 'local-ovms' is a built-in entry for a local OVMS server (localhost:8000/v3).
+ Neither requires an API key.`,
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
configPath := internal.GetConfigPath()
diff --git a/docs/guides/configuration.fr.md b/docs/guides/configuration.fr.md
index 786a0c28f..5923a82ed 100644
--- a/docs/guides/configuration.fr.md
+++ b/docs/guides/configuration.fr.md
@@ -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 :
-- **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`.
- **Anthropic** : Comportement natif de l'API Claude.
- **Codex/OAuth** : Route d'authentification OAuth/token OpenAI.
diff --git a/docs/guides/configuration.ja.md b/docs/guides/configuration.ja.md
index 0234edbd7..decd2f0c5 100644
--- a/docs/guides/configuration.ja.md
+++ b/docs/guides/configuration.ja.md
@@ -369,7 +369,7 @@ HEARTBEAT_OK を返信 ユーザーが直接結果を受信
PicoClaw はプロトコルファミリーで Provider をルーティングします:
-- **OpenAI 互換**:OpenRouter、Groq、Zhipu、vLLM スタイルのエンドポイントなど。
+- **OpenAI 互換**:OpenRouter、Groq、Zhipu、vLLM スタイルのエンドポイント、OVMSなど。
- **Gemini ネイティブ**:Google Gemini のネイティブ `models/*:generateContent` / `models/*:streamGenerateContent` エンドポイント。
- **Anthropic**:Claude ネイティブ API の動作。
- **Codex/OAuth**:OpenAI OAuth/トークン認証ルート。
diff --git a/docs/guides/configuration.md b/docs/guides/configuration.md
index 28fc7b775..5722feb8d 100644
--- a/docs/guides/configuration.md
+++ b/docs/guides/configuration.md
@@ -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) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **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) |
| **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 | — |
@@ -848,7 +849,7 @@ The old `providers` configuration is **deprecated** and has been removed in V2.
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.
- **Anthropic**: Claude-native API behavior.
- **Codex/OAuth**: OpenAI OAuth/token authentication route.
diff --git a/docs/guides/configuration.pt-br.md b/docs/guides/configuration.pt-br.md
index e5d904e29..6450d2298 100644
--- a/docs/guides/configuration.pt-br.md
+++ b/docs/guides/configuration.pt-br.md
@@ -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:
-- **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`.
- **Anthropic**: Comportamento nativo da API Claude.
- **Codex/OAuth**: Rota de autenticação OAuth/token OpenAI.
diff --git a/docs/guides/configuration.vi.md b/docs/guides/configuration.vi.md
index d905b6d2b..89d0bd34a 100644
--- a/docs/guides/configuration.vi.md
+++ b/docs/guides/configuration.vi.md
@@ -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:
-- **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` và `models/*:streamGenerateContent`.
- **Anthropic**: Hành vi API Claude gốc.
- **Codex/OAuth**: Tuyến xác thực OAuth/token OpenAI.
diff --git a/docs/guides/configuration.zh.md b/docs/guides/configuration.zh.md
index c41c3dae0..c0b185345 100644
--- a/docs/guides/configuration.zh.md
+++ b/docs/guides/configuration.zh.md
@@ -452,6 +452,7 @@ Agent 读取 HEARTBEAT.md
| **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [获取](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理 Key |
| **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) |
| **火山引擎 (豆包)** | `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 | — |
@@ -674,7 +675,7 @@ Agent 读取 HEARTBEAT.md
PicoClaw 按协议族路由提供商:
-- **OpenAI 兼容**:OpenRouter、Groq、智谱、vLLM 风格端点及大多数其他提供商。
+- **OpenAI 兼容**:OpenRouter、Groq、智谱、vLLM 风格端点、OVMS 及大多数其他提供商。
- **Gemini 原生**:Google Gemini 通过原生 `models/*:generateContent` 和 `models/*:streamGenerateContent` 端点接入。
- **Anthropic**:Claude 原生 API 行为。
- **Codex/OAuth**:OpenAI OAuth/Token 认证路由。
diff --git a/docs/guides/providers.fr.md b/docs/guides/providers.fr.md
index aff600351..3ff122a1f 100644
--- a/docs/guides/providers.fr.md
+++ b/docs/guides/providers.fr.md
@@ -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) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **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) |
| **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 | - |
@@ -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` | 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 |
| `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) |
@@ -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 :
-- 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 Anthropic : Comportement natif de l'API Claude.
- Chemin Codex/OAuth : Route d'authentification OAuth/token OpenAI.
diff --git a/docs/guides/providers.ja.md b/docs/guides/providers.ja.md
index fecc74519..1e6bbe346 100644
--- a/docs/guides/providers.ja.md
+++ b/docs/guides/providers.ja.md
@@ -56,6 +56,7 @@
| **OpenRouter** | `openrouter/` | `https://openrouter.ai/api/v1` | OpenAI | [キーを取得](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | LiteLLM プロキシキー |
| **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) |
| **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 | - |
@@ -106,7 +107,7 @@
|-----------|------|------|------|
| `model_name` | string | はい | agent 設定でこのモデルを参照するための一意の名前 |
| `model` | string | はい | ベンダー/モデル識別子(例:`openai/gpt-5.4`、`azure/gpt-5.4`、`anthropic/claude-sonnet-4.6`) |
-| `api_keys` | string[] | はい* | 認証キー。複数キーでリクエストごとのローテーションが可能。ローカル provider(Ollama、LM Studio、VLLM)には不要 |
+| `api_keys` | string[] | はい* | 認証キー。複数キーでリクエストごとのローテーションが可能。ローカル provider(Ollama、LM Studio、VLLM、OVMS)には不要 |
| `api_base` | string | いいえ | デフォルトの API エンドポイント URL を上書き |
| `proxy` | string | いいえ | このモデルエントリの HTTP プロキシ URL |
| `user_agent` | string | いいえ | カスタム `User-Agent` リクエストヘッダー(OpenAI 互換、Gemini、Anthropic、Azure provider で対応) |
@@ -310,7 +311,7 @@ PicoClaw はリクエスト送信前に外側の `litellm/` プレフィック
PicoClaw はプロトコルファミリーごとに Provider をルーティングします:
-- OpenAI 互換プロトコル:OpenRouter、OpenAI 互換ゲートウェイ、Groq、Zhipu、vLLM スタイルのエンドポイント。
+- OpenAI 互換プロトコル:OpenRouter、OpenAI 互換ゲートウェイ、Groq、Zhipu、vLLM スタイルのエンドポイント、OVMS。
- Gemini ネイティブプロトコル:Google Gemini のネイティブ `models/*:generateContent` / `models/*:streamGenerateContent` エンドポイント。
- Anthropic プロトコル:Claude ネイティブ API 動作。
- Codex/OAuth パス:OpenAI OAuth/Token 認証ルート。
diff --git a/docs/guides/providers.md b/docs/guides/providers.md
index 7b078373d..678fd32fb 100644
--- a/docs/guides/providers.md
+++ b/docs/guides/providers.md
@@ -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) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **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) |
| **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 | - |
@@ -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 |
| `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 |
-| `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 |
| `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) |
@@ -476,7 +477,7 @@ For detailed migration guide, see [migration/model-list-migration.md](../migrati
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.
- Anthropic protocol: Claude-native API behavior.
- Codex/OAuth path: OpenAI OAuth/token authentication route.
diff --git a/docs/guides/providers.pt-br.md b/docs/guides/providers.pt-br.md
index 0d45dc309..3294e0a9c 100644
--- a/docs/guides/providers.pt-br.md
+++ b/docs/guides/providers.pt-br.md
@@ -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) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **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) |
| **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 | - |
@@ -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` | 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 |
| `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) |
@@ -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:
-- 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 Anthropic: Comportamento nativo da API Claude.
- Caminho Codex/OAuth: Rota de autenticação OAuth/token da OpenAI.
diff --git a/docs/guides/providers.vi.md b/docs/guides/providers.vi.md
index c354461cf..2881b7b9a 100644
--- a/docs/guides/providers.vi.md
+++ b/docs/guides/providers.vi.md
@@ -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) |
| **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key |
| **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) |
| **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 | - |
@@ -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` | 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 |
| `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) |
@@ -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:
-- Giao thức tương thích OpenAI: OpenRouter, gateway tương thích OpenAI, Groq, Zhipu, và 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` và `models/*:streamGenerateContent`.
- 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.
diff --git a/docs/guides/providers.zh.md b/docs/guides/providers.zh.md
index 4bab65f6b..bfe5a595a 100644
--- a/docs/guides/providers.zh.md
+++ b/docs/guides/providers.zh.md
@@ -62,6 +62,7 @@
| **OpenRouter** | `openrouter` | `https://openrouter.ai/api/v1` | OpenAI | [获取密钥](https://openrouter.ai/keys) |
| **LiteLLM Proxy** | `litellm` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理密钥 |
| **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) |
| **火山引擎(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 | - |
@@ -118,7 +119,7 @@
| `model_name` | string | 是 | 在 agent 配置中引用此模型的唯一名称 |
| `provider` | string | 否 | 推荐的 provider 标识。设置后,PicoClaw 会将 `model` 原样发送给该 provider |
| `model` | string | 是 | 当设置 `provider` 时,这里填写 provider 原生模型 ID。若未设置 `provider`,仍兼容旧的 `provider/model` 写法 |
-| `api_keys` | string[] | 是* | 认证密钥。多个密钥可按请求轮换。本地 provider(Ollama、LM Studio、VLLM)不需要 |
+| `api_keys` | string[] | 是* | 认证密钥。多个密钥可按请求轮换。本地 provider(Ollama、LM Studio、VLLM、OVMS)不需要 |
| `api_base` | string | 否 | 覆盖默认的 API 端点 URL |
| `proxy` | string | 否 | 此模型条目的 HTTP 代理 URL |
| `user_agent` | string | 否 | 自定义 `User-Agent` 请求头(支持 OpenAI 兼容、Gemini、Anthropic 和 Azure provider) |
@@ -421,7 +422,7 @@ PicoClaw 按下面的规则解析 `provider` 和最终发给上游的模型 ID
PicoClaw 按协议族路由 Provider:
-- OpenAI 兼容协议:OpenRouter、OpenAI 兼容网关、Groq、智谱、vLLM 风格端点。
+- OpenAI 兼容协议:OpenRouter、OpenAI 兼容网关、Groq、智谱、vLLM 风格端点和 OVMS。
- Gemini 原生协议:Google Gemini 通过原生 `models/*:generateContent` 和 `models/*:streamGenerateContent` 端点接入。
- Anthropic 协议:Claude 原生 API 行为。
- Codex/OAuth 路径:OpenAI OAuth/Token 认证路由。
diff --git a/docs/project/README.fr.md b/docs/project/README.fr.md
index b02067d2a..444b18f40 100644
--- a/docs/project/README.fr.md
+++ b/docs/project/README.fr.md
@@ -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 |
| [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 |
+| [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 |
| [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 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-Déploiement local (Ollama, vLLM, etc.)
+Déploiement local (Ollama, vLLM, OVMS, etc.)
**Ollama :**
```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).
diff --git a/docs/project/README.id.md b/docs/project/README.id.md
index 49c64e74c..6a5246f48 100644
--- a/docs/project/README.id.md
+++ b/docs/project/README.id.md
@@ -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 |
| [Ollama](https://ollama.com/) | `ollama/` | Tidak perlu | Model lokal, self-hosted |
| [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 |
| [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 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-Deploy lokal (Ollama, vLLM, dll.)
+Deploy lokal (Ollama, vLLM, OVMS, dll.)
**Ollama:**
```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).
diff --git a/docs/project/README.it.md b/docs/project/README.it.md
index 0cf6cf8db..a21dc3524 100644
--- a/docs/project/README.it.md
+++ b/docs/project/README.it.md
@@ -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 |
| [Ollama](https://ollama.com/) | `ollama/` | Non necessaria | Modelli locali, self-hosted |
| [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 |
| [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 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-Deploy locale (Ollama, vLLM, ecc.)
+Deploy locale (Ollama, vLLM, OVMS, ecc.)
**Ollama:**
```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).
diff --git a/docs/project/README.ja.md b/docs/project/README.ja.md
index 6e3060688..8283698e2 100644
--- a/docs/project/README.ja.md
+++ b/docs/project/README.ja.md
@@ -399,13 +399,14 @@ PicoClaw は `model_list` 設定を通じて 30 以上の LLM Provider をサポ
| [Xiaomi MiMo](https://platform.xiaomimimo.com/) | `mimo/` | 必須 | MiMo モデル |
| [Ollama](https://ollama.com/) | `ollama/` | 不要 | ローカルモデル、セルフホスト |
| [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 のプロキシ |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | 必須 | エンタープライズ Azure デプロイ |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | デバイスコードログイン |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-ローカルデプロイ(Ollama、vLLM など)
+ローカルデプロイ(Ollama、vLLM、OVMS など)
**Ollama:**
```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) を参照してください。
diff --git a/docs/project/README.ms.md b/docs/project/README.ms.md
index 73c428f11..16ca486bf 100644
--- a/docs/project/README.ms.md
+++ b/docs/project/README.ms.md
@@ -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 |
| [Ollama](https://ollama.com/) | `ollama/` | Tidak perlu | Model tempatan, self-hosted |
| [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 |
| [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 |
@@ -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.
-Deployment tempatan (Ollama, vLLM, dll.)
+Deployment tempatan (Ollama, vLLM, OVMS, dll.)
**Ollama:**
```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).
diff --git a/docs/project/README.pt-br.md b/docs/project/README.pt-br.md
index 74cb967de..c81100a98 100644
--- a/docs/project/README.pt-br.md
+++ b/docs/project/README.pt-br.md
@@ -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 |
| [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 |
+| [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 |
| [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 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-Implantação local (Ollama, vLLM, etc.)
+Implantação local (Ollama, vLLM, OVMS, etc.)
**Ollama:**
```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).
diff --git a/docs/project/README.vi.md b/docs/project/README.vi.md
index 743069021..1bdfd3207 100644
--- a/docs/project/README.vi.md
+++ b/docs/project/README.vi.md
@@ -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 |
| [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 |
+| [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 |
| [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 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-Triển khai cục bộ (Ollama, vLLM, v.v.)
+Triển khai cục bộ (Ollama, vLLM, OVMS, v.v.)
**Ollama:**
```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).
diff --git a/docs/project/README.zh.md b/docs/project/README.zh.md
index 253bb84ed..88c134a29 100644
--- a/docs/project/README.zh.md
+++ b/docs/project/README.zh.md
@@ -399,13 +399,14 @@ PicoClaw 通过 `model_list` 配置支持 30+ LLM Provider,使用 `协议/模
| [小米 MiMo](https://platform.xiaomimimo.com/) | `mimo/` | 必填 | MiMo 系列模型 |
| [Ollama](https://ollama.com/) | `ollama/` | 无需 | 本地模型,自托管 |
| [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 代理 |
| [Azure OpenAI](https://portal.azure.com/) | `azure/` | 必填 | 企业级 Azure 部署 |
| [GitHub Copilot](https://github.com/features/copilot) | `github-copilot/` | OAuth | 设备码登录 |
| [Antigravity](https://console.cloud.google.com/) | `antigravity/` | OAuth | Google Cloud AI |
-本地部署(Ollama、vLLM 等)
+本地部署(Ollama、vLLM、OVMS 等)
**Ollama:**
```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)。
diff --git a/pkg/audio/asr/asr.go b/pkg/audio/asr/asr.go
index 1482f40bb..ae0a94c37 100644
--- a/pkg/audio/asr/asr.go
+++ b/pkg/audio/asr/asr.go
@@ -26,7 +26,7 @@ func supportsAudioTranscription(modelCfg *config.ModelConfig) bool {
case "openai", "azure", "azure-openai",
"litellm", "openrouter", "groq", "zhipu", "gemini", "nvidia",
"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",
"coding-plan", "alibaba-coding", "qwen-coding", "zai":
// 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 {
case "openai", "litellm", "openrouter", "groq", "zhipu", "gemini", "nvidia",
"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",
"coding-plan", "alibaba-coding", "qwen-coding", "zai", "mimo":
return true
diff --git a/pkg/audio/asr/asr_test.go b/pkg/audio/asr/asr_test.go
index 0970d69f4..42e150e4e 100644
--- a/pkg/audio/asr/asr_test.go
+++ b/pkg/audio/asr/asr_test.go
@@ -206,6 +206,35 @@ func TestDetectTranscriber(t *testing.T) {
},
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 {
diff --git a/pkg/config/defaults.go b/pkg/config/defaults.go
index 8e2494ae5..ac4161a07 100644
--- a/pkg/config/defaults.go
+++ b/pkg/config/defaults.go
@@ -273,6 +273,14 @@ func DefaultConfig() *Config {
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
{
ModelName: "lmstudio-local",
diff --git a/pkg/providers/factory_provider.go b/pkg/providers/factory_provider.go
index a59e2de25..ddb755bef 100644
--- a/pkg/providers/factory_provider.go
+++ b/pkg/providers/factory_provider.go
@@ -54,6 +54,7 @@ var protocolMetaByName = map[string]protocolMeta{
"alibaba-coding-anthropic": {defaultAPIBase: "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic"},
"zai": {defaultAPIBase: "https://api.z.ai/api/coding/paas/v4"},
"vllm": {defaultAPIBase: "http://localhost:8000/v1", emptyAPIKeyAllowed: true},
+ "ovms": {defaultAPIBase: "http://localhost:8000/v3", emptyAPIKeyAllowed: true},
"mistral": {defaultAPIBase: "https://api.mistral.ai/v1"},
"avian": {defaultAPIBase: "https://api.avian.io/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",
"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",
"coding-plan", "alibaba-coding", "qwen-coding", "zai", "mimo":
// All other OpenAI-compatible HTTP providers
diff --git a/pkg/providers/factory_provider_test.go b/pkg/providers/factory_provider_test.go
index 3d3c30ce0..72632e37f 100644
--- a/pkg/providers/factory_provider_test.go
+++ b/pkg/providers/factory_provider_test.go
@@ -199,6 +199,7 @@ func TestCreateProviderFromConfig_DefaultAPIBase(t *testing.T) {
{"vivgrid", "vivgrid"},
{"qwen", "qwen"},
{"vllm", "vllm"},
+ {"ovms", "ovms"},
{"deepseek", "deepseek"},
{"ollama", "ollama"},
{"lmstudio", "lmstudio"},
@@ -316,6 +317,20 @@ func TestCreateProviderFromConfig_LocalProviders(t *testing.T) {
apiKey: "",
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 {
diff --git a/web/README.md b/web/README.md
index 2a57524e0..b584794ca 100644
--- a/web/README.md
+++ b/web/README.md
@@ -341,7 +341,7 @@ Check these in the dashboard:
- a default model is selected
- 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`
diff --git a/web/backend/api/model_status.go b/web/backend/api/model_status.go
index d262cf124..da8110466 100644
--- a/web/backend/api/model_status.go
+++ b/web/backend/api/model_status.go
@@ -176,7 +176,7 @@ func runLocalModelProbe(m *config.ModelConfig) bool {
switch protocol {
case "ollama":
return probeOllamaModelFunc(apiBase, modelID)
- case "vllm", "lmstudio":
+ case "vllm", "ovms", "lmstudio":
return probeOpenAICompatibleModelFunc(apiBase, modelID, m.APIKey())
case "github-copilot", "copilot":
return probeTCPServiceFunc(apiBase)
diff --git a/web/backend/api/model_status_test.go b/web/backend/api/model_status_test.go
index d5463a856..2c1056657 100644
--- a/web/backend/api/model_status_test.go
+++ b/web/backend/api/model_status_test.go
@@ -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) {
base := &config.ModelConfig{
ModelName: "local-vllm",
diff --git a/web/frontend/src/components/models/models-page.tsx b/web/frontend/src/components/models/models-page.tsx
index 152c47585..df1655320 100644
--- a/web/frontend/src/components/models/models-page.tsx
+++ b/web/frontend/src/components/models/models-page.tsx
@@ -42,9 +42,10 @@ const PROVIDER_PRIORITY: Record = {
azure: 23,
ollama: 24,
vllm: 25,
- lmstudio: 26,
- zai: 27,
- mimo: 28,
+ ovms: 26,
+ lmstudio: 27,
+ zai: 28,
+ mimo: 29,
}
interface ProviderGroup {
diff --git a/web/frontend/src/components/models/provider-icon.tsx b/web/frontend/src/components/models/provider-icon.tsx
index 8d1cfe2c9..1e5250855 100644
--- a/web/frontend/src/components/models/provider-icon.tsx
+++ b/web/frontend/src/components/models/provider-icon.tsx
@@ -41,6 +41,7 @@ const PROVIDER_DOMAINS: Record = {
mistral: "mistral.ai",
avian: "avian.io",
vllm: "vllm.ai",
+ ovms: "docs.openvino.ai",
zhipu: "zhipuai.cn",
zai: "z.ai",
mimo: "xiaomi.com",
diff --git a/web/frontend/src/components/models/provider-label.ts b/web/frontend/src/components/models/provider-label.ts
index 123640fe5..d72eebfc0 100644
--- a/web/frontend/src/components/models/provider-label.ts
+++ b/web/frontend/src/components/models/provider-label.ts
@@ -20,6 +20,7 @@ const PROVIDER_LABELS: Record = {
mistral: "Mistral AI",
avian: "Avian",
vllm: "VLLM (local)",
+ ovms: "OVMS (local)",
zhipu: "Zhipu AI (智谱)",
zai: "Z.ai",
mimo: "Xiaomi MiMo",