Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions docs-site/src/content/docs/fr/guides/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -574,15 +574,24 @@ connexion par clé.

### Ollama Cloud

Ollama Cloud est une version hébergée — et non locale — d'Ollama, compatible avec OpenAI à l'adresse
`https://ollama.com/v1` et accessible avec une clé créée sur
[ollama.com/settings/keys](https://ollama.com/settings/keys). opencodex classe les modèles cloud selon leurs
Ollama Cloud est une version hébergée — et non locale — d'Ollama, à configurer à l'adresse
`https://ollama.com/v1` avec une clé créée sur
[ollama.com/settings/keys](https://ollama.com/settings/keys). opencodex l'atteint via l'API REST
native d'Ollama (`POST /api/chat`) plutôt que via la surface compatible OpenAI, et découvre la
liste des modèles auprès du fournisseur : les nouveaux modèles Ollama Cloud apparaissent sans
modifier la configuration. opencodex classe les modèles cloud selon leurs
capacités visuelles, afin que le [service auxiliaire de vision](/fr/guides/sidecars/) n'intervienne que pour les modèles
exclusivement textuels. Ces derniers, par exemple `glm-5.2`, `deepseek-v4-pro`, `gpt-oss`, `qwen3-coder`,
`minimax-m2.x` et `nemotron-3-*`, figurent dans `noVisionModels` ; les modèles à vision native, comme
`kimi-k2.6`, `minimax-m3`, `gemma4`, `qwen3.5` et `gemini-3-flash-preview`, n'y figurent pas. La correspondance
tolère les balises `:size` d'Ollama : `gpt-oss` couvre donc `gpt-oss:120b` et `gpt-oss:20b`.

Ollama documente actuellement la sortie structurée comme non prise en charge sur Ollama Cloud.
Pour `ollama-cloud` canonique, opencodex refuse donc les requêtes à sortie structurée
(`text.format`) avec une erreur explicite plutôt que de renvoyer silencieusement une prose libre ;
les points de terminaison locaux et personnalisés `ollama-native` conservent le comportement
natif `format` d'Ollama.

## 4. Fournisseurs locaux

Faites pointer opencodex vers un serveur local compatible OpenAI, généralement avec une clé vide :
Expand Down
1 change: 0 additions & 1 deletion docs-site/src/content/docs/fr/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ Un modèle est marqué en texte uniquement par fournisseur :
{
"providers": {
"ollama-cloud": {
"adapter": "openai-chat",
"baseUrl": "https://ollama.com/v1",
"noVisionModels": ["glm-5.2", "gpt-oss", "qwen3-coder", "deepseek-v4-pro"]
}
Expand Down
46 changes: 45 additions & 1 deletion docs-site/src/content/docs/fr/reference/adapters.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ interface ProviderAdapter {

## `openai-chat`

**Cibles :** l’API **Chat Completions** d’OpenAI (`POST {baseUrl}/chat/completions` ; un suffixe `/chat/completions` ou `/` est d’abord retiré de `baseUrl`) et tous les fournisseurs compatibles — xAI, Kimi, DeepSeek, GLM, Groq, OpenRouter, Ollama (local et cloud), entre autres.
**Cibles :** l’API **Chat Completions** d’OpenAI (`POST {baseUrl}/chat/completions` ; un suffixe `/chat/completions` ou `/` est d’abord retiré de `baseUrl`) et tous les fournisseurs compatibles — xAI, Kimi, DeepSeek, GLM, Groq, OpenRouter, Ollama (local), entre autres.
**Authentification :** `key` (Bearer).

- Convertit les messages internes en rôles OpenAI ; mappe les outils vers `{type:"function", function:{…}}` et `tool_choice` (`auto`/`none`/`required` ou une fonction nommée).
Expand All @@ -32,6 +32,50 @@ interface ProviderAdapter {
- Diffuse `delta.content` (texte), `delta.reasoning_content` (raisonnement) et `delta.tool_calls[]`, et recueille `usage`.
- ClinePass utilise le format de passerelle vérifié en conditions réelles `reasoning: { enabled: true, effort }` (ou `{ enabled: false }` lorsque le raisonnement est désactivé). Sa documentation publique d’API ne précise pas encore cette forme de requête. L’adaptateur préserve les niveaux `low`, `medium`, `high`, `xhigh` et `max` demandés, accepte les deltas de raisonnement provenant de `delta.reasoning_content` ou de `delta.reasoning`, demande les données d’utilisation en flux avec `stream_options.include_usage` et lit ces données dans les enveloppes de réponse hors flux.

## `ollama-native`

**Cibles :** l’**API Chat** native d’Ollama (`POST /api/chat`) plutôt que sa surface compatible
OpenAI. Le fournisseur intégré `ollama-cloud` est sélectionné sur cet adaptateur par le registre ;
il peut aussi être configuré sur un fournisseur Ollama personnalisé ou auto-hébergé distinct avec
`adapter: "ollama-native"`.
**Authentification :** `key` (Bearer) pour les cibles cloud/personnalisées ; aucun identifiant
n’est envoyé aux cibles de boucle locale ou en `authMode: "local"`.

- **La sélection par le registre est déterminante.** La ligne intégrée `ollama-cloud` conserve
l’URL de base `https://ollama.com/v1` pour la découverte en direct via `/v1/models`, tandis que
l’inférence est normalisée vers `POST https://ollama.com/api/chat`. Un champ `adapter` configuré
est écarté pour cette ligne de fournisseur. L’Ollama local intégré reste sur `openai-chat` ;
choisir `ollama-native` pour un point de terminaison local ou auto-hébergé est une décision
explicite de configuration de fournisseur, détectée par hôte afin qu’une destination non-Ollama
ne soit jamais réécrite silencieusement.
- **Métadonnées des modèles :** `/v1/models` ne porte aucune métadonnée par modèle ; pour Ollama
Cloud canonique, le fournisseur enrichit chaque identifiant découvert via un `POST /api/show`
*borné* (256 KiB par réponse, 8 s par requête, concurrence 4, 48 requêtes, échéance de 12 s pour
toute la phase) afin d’obtenir la véritable fenêtre de contexte et la capacité de vision. La
requête show est de même origine et ne suit jamais une redirection ; un échec dégrade ce seul
modèle sans jamais faire échouer la découverte.
- **Diffusion :** le NDJSON natif d’Ollama. Les deltas de texte et de `message.thinking` sont
transmis dès leur arrivée ; un tour ne se termine que sur un enregistrement terminal
`done: true`, et un `done: false` bufferisé ou un terminal manquant supprime entièrement le
texte partiel et les appels d’outils.
- **Raisonnement :** cartographie le champ natif `think` d’Ollama (`low`/`medium`/`high`/`max`,
plus les booléens), limité à l’échelle annoncée du modèle, et respecte la sémantique de la
sentinelle `__omit__` configurée en amont.
- **Images :** envoyées nativement dans le tableau `images` du message lorsque le modèle prend en
charge la vision ; la vidéo est refusée plutôt que mal envoyée, et les URL d’images distantes ne
sont pas récupérées.
- **Outils :** déclarés dans la forme native d’Ollama ; les appels d’outils diffusés sont des
enregistrements entiers avec des `arguments` objet, et le rejeu des résultats d’outils est
apparié strictement par identifiant d’appel et nom d’outil. `tool_choice: "none"` et `auto`
se comportent normalement ; **`required` ou un choix nommé exact échoue fermement**, car
`/api/chat` d’Ollama n’a aucun champ `tool_choice` pour l’imposer.
- **La sortie structurée est refusée sur Ollama Cloud canonique.** Ollama documente actuellement
la sortie structurée comme non prise en charge sur son Cloud, et Cloud n’applique pas le champ
`format` ; OpenCodex fait donc échouer cette requête plutôt que de renvoyer une prose libre en
réponse à une demande structurée par schéma. Les points de terminaison `ollama-native` locaux et
personnalisés conservent le mappage natif `format` d’Ollama (`json_object` → `"json"`,
`json_schema` → l’objet de schéma).

## `openai-responses`

**Cibles :** l’API **Responses** d’OpenAI. **`passthrough: true`** — transmet tel quel le corps brut de la requête et renvoie le flux de réponse **sans traduction**.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ sauvegarde dont le contenu diffère, puis réécrit en identifiants sans préfix

| Champ | Type | Signification |
| --- | --- | --- |
| `adapter` | `string` | L'un des `openai-chat`, `openai-responses`, `anthropic`, `google`, `kiro`, `cursor`, `azure-openai` (ou alias `azure`). |
| `adapter` | `string` | L'un des `openai-chat`, `openai-responses`, `anthropic`, `google`, `kiro`, `cursor`, `ollama-native`, `azure-openai` (ou alias `azure`). |
| `baseUrl` | `string` | URL de base de l'API en amont. La plupart des points de terminaison fixes intégrés ignorent une valeur incompatible ; les préréglages de clés protégés contre les collisions préservent une ancienne destination personnalisée portant le même nom. |
| `requestPacing?` | `{ enabled, requestsPerMinute?, minIntervalMs?, models? }` | Cadencement facultatif du démarrage des requêtes sortantes côté client, distinct de l’utilisation, de la facturation et des indicateurs de limitation en amont. Le nombre de requêtes par minute est converti en intervalle régulier ; `minIntervalMs` peut imposer un intervalle plus long. Les limites du fournisseur s’appliquent à tous ses modèles, tandis que les entrées `models` ciblent les identifiants exacts des modèles en amont, par exemple `nvidia/llama-3.1-nemotron-ultra-253b-v1`, et ne peuvent qu’ajouter du délai. L’attente dans la file ne consomme pas le délai d’expiration des en-têtes de réponse en amont. Les requêtes HTTP, Responses WebSocket et les distributions explicites `fetchResponse`/`runTurn` des adaptateurs sont couvertes. |
| `responsesPath?` | `string` | Chemin de ressource relatif pour les requêtes d'authentification par clé `openai-responses`. Il doit commencer par `/` et ne contenir aucun schéma, requête ou fragment. |
Expand Down Expand Up @@ -419,7 +419,6 @@ avec un contexte de `922000` et une entrée maximale de `922000` ; OpenRouter i
"defaultModel": "claude-sonnet-4-6"
},
"ollama-cloud": {
"adapter": "openai-chat",
"baseUrl": "https://ollama.com/v1",
"apiKey": "${OLLAMA_API_KEY}",
"defaultModel": "glm-5.2",
Expand Down
12 changes: 10 additions & 2 deletions docs-site/src/content/docs/guides/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -602,14 +602,22 @@ Cursor is still not shown in key-login lists.

### Ollama Cloud

Ollama Cloud is a hosted (not local) Ollama, OpenAI-compatible at `https://ollama.com/v1` with a key
from [ollama.com/settings/keys](https://ollama.com/settings/keys). opencodex classifies its cloud
Ollama Cloud is a hosted (not local) Ollama. Configure it at `https://ollama.com/v1` with a key
from [ollama.com/settings/keys](https://ollama.com/settings/keys). opencodex reaches it over
Ollama's own REST API (`POST /api/chat`) rather than the OpenAI-compatible surface, and discovers
the live model roster from the provider, so new Ollama Cloud models appear without a config
change. opencodex classifies its cloud
lineup by vision capability so the [vision sidecar](/guides/sidecars/) only kicks in for
text-only models. Text-only models (e.g. `glm-5.2`, `deepseek-v4-pro`, `gpt-oss`, `qwen3-coder`,
`minimax-m2.x`, `nemotron-3-*`) are listed in `noVisionModels`; vision-native models (e.g.
`kimi-k2.6`, `minimax-m3`, `gemma4`, `qwen3.5`, `gemini-3-flash-preview`) are not. Matching is
tolerant of Ollama's `:size` tags, so `gpt-oss` covers `gpt-oss:120b` and `gpt-oss:20b`.

Ollama currently documents structured outputs as unsupported on Ollama Cloud. For canonical
`ollama-cloud`, opencodex therefore refuses structured-output requests (`text.format`) with a clear
error instead of silently returning unconstrained prose; local and custom `ollama-native`
endpoints keep Ollama's native `format` behavior.

## 4. Local providers

Point opencodex at a local OpenAI-compatible server — usually with a blank key:
Expand Down
1 change: 0 additions & 1 deletion docs-site/src/content/docs/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,6 @@ A model is marked text-only per provider:
{
"providers": {
"ollama-cloud": {
"adapter": "openai-chat",
"baseUrl": "https://ollama.com/v1",
"noVisionModels": ["glm-5.2", "gpt-oss", "qwen3-coder", "deepseek-v4-pro"]
}
Expand Down
11 changes: 9 additions & 2 deletions docs-site/src/content/docs/ja/guides/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -412,14 +412,21 @@ MCP、画面録画、computer-use はエグゼキューターフックで開か

### Ollama Cloud

Ollama Cloud はホステッド型(ローカルではない)Ollama で、`https://ollama.com/v1` で OpenAI 互換、キーは
[ollama.com/settings/keys](https://ollama.com/settings/keys) で発行されます。opencodex はクラウド
Ollama Cloud はホステッド型(ローカルではない)Ollama です。`https://ollama.com/v1` を設定し、キーは
[ollama.com/settings/keys](https://ollama.com/settings/keys) で発行します。opencodex は OpenAI 互換
サーフェスではなく Ollama 自身の REST API(`POST /api/chat`)で接続し、モデル一覧はプロバイダーから
動的に取得するため、新しい Ollama Cloud モデルは設定変更なしで現れます。opencodex はクラウド
ラインナップをビジョン機能で分類し、[ビジョンサイドカー](/ja/guides/sidecars/)がテキスト専用モデルにのみ
動作するようにします。テキスト専用モデル(例: `glm-5.2`、`deepseek-v4-pro`、`gpt-oss`、`qwen3-coder`、
`minimax-m2.x`、`nemotron-3-*`)は `noVisionModels` に列挙され、ビジョンネイティブモデル(例:
`kimi-k2.6`、`minimax-m3`、`gemma4`、`qwen3.5`、`gemini-3-flash-preview`)は含まれません。マッチングは
Ollama の `:size` タグに寛容なので `gpt-oss` は `gpt-oss:120b` と `gpt-oss:20b` の両方を含みます。

Ollama は現在、構造化出力は Ollama Cloud では未対応であるとドキュメントしています。正規の
`ollama-cloud` に対する構造化出力リクエスト(`text.format`)は、自由文を黙って返す代わりに
opencodex が明示的なエラーで拒否します。ローカル / カスタムの `ollama-native` エンドポイントは
Ollama ネイティブの `format` 動作を保持します。

## 4. ローカルプロバイダー

opencodex をローカルの OpenAI 互換サーバーに向けてください — 通常は空キーで使います:
Expand Down
1 change: 0 additions & 1 deletion docs-site/src/content/docs/ja/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ OpenAI 実行経路、ダッシュボード、管理 API は `gpt-5.4-mini` を
{
"providers": {
"ollama-cloud": {
"adapter": "openai-chat",
"baseUrl": "https://ollama.com/v1",
"noVisionModels": ["glm-5.2", "gpt-oss", "qwen3-coder", "deepseek-v4-pro"]
}
Expand Down
40 changes: 39 additions & 1 deletion docs-site/src/content/docs/ja/reference/adapters.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ interface ProviderAdapter {
## `openai-chat`

**対象:** OpenAI **Chat Completions**(`POST {baseUrl}/chat/completions`)および互換プロバイダー
— xAI、Kimi、DeepSeek、GLM、Groq、OpenRouter、Ollama(ローカルとクラウド)など。
— xAI、Kimi、DeepSeek、GLM、Groq、OpenRouter、Ollama(ローカル)など。
**認証:** `key`(Bearer)。

- 内部メッセージを OpenAI role に変換し、ツールは `{type:"function", function:{…}}` と
Expand All @@ -41,6 +41,44 @@ interface ProviderAdapter {
`xhigh`、`max` tier をそのまま保持し、`delta.reasoning_content` または `delta.reasoning` を
reasoning delta として扱い、`stream_options.include_usage` でストリーム usage を要求し、非ストリームのレスポンス envelope からも usage を読み取ります。

## `ollama-native`

**対象:** OpenAI 互換サーフェスではなく、Ollama 自身の **Chat API**(`POST /api/chat`)。
組み込みの `ollama-cloud` プロバイダーはこの adapter にレジストリで選択され、別名のカスタム /
セルフホスト Ollama プロバイダーに `adapter: "ollama-native"` を設定して使うこともできます。
**認証:** cloud / カスタム宛先は `key`(Bearer)。loopback または `authMode: "local"`
の宛先には資格情報を送りません。

- **レジストリ選択が実質的に効きます。** 組み込みの `ollama-cloud` 行は `/v1/models` による
ライブ探索のため `https://ollama.com/v1` を維持しつつ、推論は
`POST https://ollama.com/api/chat` に正規化されます。このプロバイダー行では設定した
`adapter` は破棄されます。通常の組み込みローカル Ollama は `openai-chat` のままです。
ローカル / セルフホスト宛先に `ollama-native` を選ぶのは、プロバイダー設定での明示的な判断
であり、ホストで判定されるため非 Ollama 宛先が黙って書き換えられることはありません。
- **モデルメタデータ:** `/v1/models` にはモデルごとのメタデータがないため、正規の Ollama
Cloud では *上限付き* の `POST /api/show`(応答 256 KiB、1 要求 8 秒、並列 4、48 要求、
フェーズ全体に 12 秒の締切)で発見された各 id を補完し、実際の context window と vision
対応を取得します。show 要求は同一オリジンでリダイレクトを追わず、失敗してもその 1 モデル
だけが劣化し、発見自体は失敗しません。
- **ストリーミング:** Ollama ネイティブの NDJSON。テキストと `message.thinking` の delta を
到着順に転送し、`done: true` の終端レコードでのみターンを完了します。buffer された
`done: false` や終端の欠落では部分的なテキストも tool call も一切出力しません。
- **Reasoning:** Ollama ネイティブの `think` フィールド(`low` / `medium` / `high` / `max` と
boolean)に対応し、モデルの公開 ladder へクランプし、上流で設定された `__omit__` sentinel の
意味論に従います。
- **画像:** vision 対応モデルではメッセージの `images` 配列でネイティブ送信します。video は
誤送信ではなく拒否され、リモート画像 URL の取得は行いません。
- **ツール:** Ollama のネイティブ形状で宣言し、ストリームされる tool call は `arguments` が
オブジェクトの whole-call レコード、tool result のリプレイは call id と tool 名で厳密に対応
付けられます。`tool_choice: "none"` と `auto` は通常どおりです。**`required` や名前指定は
fail closed** です。Ollama の `/api/chat` にはそれを強制できる `tool_choice` フィールドが
ありません。
- **構造化出力は正規の Ollama Cloud では拒否されます。** Ollama は Cloud で構造化出力が未対応
であると現在ドキュメントしており、Cloud は `format` フィールドを強制しません。そのため
OpenCodex は、schema 指定の要求に対して自由文を返すのではなく、要求を閉じて失敗させます。
ローカル / カスタムの `ollama-native` エンドポイントは Ollama ネイティブの `format` マッピング
(`json_object` → `"json"`、`json_schema` → schema オブジェクトそのもの)を保持します。

## `openai-responses`

**対象:** OpenAI **Responses API**。**`passthrough: true`** — 通常は元のリクエストとレスポンスをそのまま渡し、ルーティング先ゲートウェイに必要な限定的な互換変換だけを適用します。
Expand Down
Loading
Loading