Skip to content
Closed
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
12 changes: 12 additions & 0 deletions docs-site/src/content/docs/fr/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,18 @@ utilisent le modèle de repli `gpt-5.6-luna`. Au démarrage, une ancienne valeur
est toujours migrée vers `gpt-5.6-luna` ; cette migration s'applique à une valeur stockée, et non à l'absence du
champ du modèle.

Sur OpenCode Go, `deepseek-v4.1-flash` accepte les entrées `image_url` sur la passerelle Zen Go et déclare
désormais les modalités natives `text` et `image` : les nouvelles lignes `opencode-go` lui envoient donc les
images directement au lieu de passer par ce sidecar. Son jumeau `deepseek-v4-flash` sur la même passerelle
répond toujours HTTP 400 « Model only supports text input » et reste couvert par le sidecar ; les paliers
`opencode-zen` et `opencode-free` conservent leur classification existante. Les métadonnées du registre ne
remplissent que les valeurs manquantes : une ligne `opencode-go` enregistrée avant cette correction garde ses
surcharges enregistrées et continue de router `deepseek-v4.1-flash` via ce sidecar. Pour activer la vision
native sur une telle ligne, retirez `deepseek-v4.1-flash` de la liste `noVisionModels` du fournisseur et
supprimez son entrée `modelInputModalities` `["text"]` enregistrée dans `~/.opencodex/config.json` — ou
supprimez puis recréez le preset. `ocx provider edit opencode-go --model deepseek-v4.1-flash --text-only`
restaure la restriction via `modelCapabilities`, qui l'emporte sur toutes les déclarations ci-dessus.

- Les images peuvent provenir de messages utilisateur, développeur et de résultats d’outils, y compris de `view_image` dans Codex.
- Sur le chemin OpenAI (ChatGPT-login passthrough), chaque image est envoyée au modèle de vision configuré
au point de terminaison Responses avec la valeur `reasoning.effort` sélectionnée (`low` par défaut) ; sa
Expand Down
12 changes: 12 additions & 0 deletions docs-site/src/content/docs/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,18 @@ not use this sidecar by default. Explicit `noVisionModels` or text-only declarat
authoritative. First-party `deepseek-chat`, `deepseek-reasoner`, and `deepseek-v4-flash` remain
sidecar-backed by default; Zen routes are unchanged and were not probed in this update.

OpenCode Go's `deepseek-v4.1-flash` accepts `image_url` input on the Zen Go gateway and now
declares native `text` and `image` modalities, so new `opencode-go` rows send it images directly
instead of through this sidecar. Its sibling `deepseek-v4-flash` on the same gateway still answers
HTTP 400 "Model only supports text input" and stays sidecar-backed, and the `opencode-zen` /
`opencode-free` tiers keep their existing classification. Registry metadata only fills missing
values, so an `opencode-go` provider row saved before this correction keeps its saved overrides and
continues routing `deepseek-v4.1-flash` through this sidecar. To opt into native vision on such a
row, remove `deepseek-v4.1-flash` from the provider's `noVisionModels` list and delete its saved
`modelInputModalities` `["text"]` entry in `~/.opencodex/config.json`, or delete and re-add the
preset. `ocx provider edit opencode-go --model deepseek-v4.1-flash --text-only` restores the
restriction through `modelCapabilities`, which outranks every declaration above.

- Images can come from user, developer, and tool-result messages, including Codex's `view_image`.
- On the OpenAI path (ChatGPT-login passthrough), each image is sent to the configured vision model
over the Responses endpoint with the selected `reasoning.effort` (`low` by default), and its
Expand Down
12 changes: 12 additions & 0 deletions docs-site/src/content/docs/ja/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,18 @@ OpenAI 実行経路、ダッシュボード、管理 API は `gpt-5.6-luna` を
明示的に保存された旧 `gpt-5.4-mini` 値を引き続き `gpt-5.6-luna` にマイグレーションしますが、この
マイグレーションは保存済みの値だけが対象で、モデルフィールドがない場合には適用されません。

OpenCode Go の `deepseek-v4.1-flash` は Zen Go ゲートウェイで `image_url` 入力を受け付け、ネイティブな
`text` と `image` モダリティを宣言するようになったため、新しい `opencode-go` 行はこの sidecar を
経由せず画像を直接送信します。同じゲートウェイの兄弟モデル `deepseek-v4-flash` は引き続き HTTP 400
「Model only supports text input」を返し sidecar 経由のままで、`opencode-zen` と `opencode-free`
ティアは既存の分類を維持します。レジストリのメタデータは欠損値だけを補完するため、この修正以前に
保存された `opencode-go` プロバイダー行は保存済みのオーバーライドを保持し、`deepseek-v4.1-flash`
をこの sidecar 経由でルーティングし続けます。そのような行でネイティブ vision を有効にするには、
`~/.opencodex/config.json` でプロバイダーの `noVisionModels` リストから `deepseek-v4.1-flash` を
削除し、保存済みの `modelInputModalities` `["text"]` エントリを消去するか、プリセットを削除して
追加し直してください。`ocx provider edit opencode-go --model deepseek-v4.1-flash --text-only` は
`modelCapabilities` を通じて制限を復元し、これは上記のすべての宣言に優先します。

- 画像はユーザー、developer、ツール結果メッセージから来ます。Codex の `view_image` 結果も
含まれます。
- OpenAI パス(ChatGPT ログインパススルー)では、各画像は選択した `reasoning.effort`(デフォルト
Expand Down
12 changes: 12 additions & 0 deletions docs-site/src/content/docs/ko/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,18 @@ OpenAI 실행 경로, Dashboard, 관리 API는 `gpt-5.6-luna`를 폴백으로
저장된 기존 `gpt-5.4-mini` 값은 계속 `gpt-5.6-luna`로 마이그레이션되지만, 이 마이그레이션은 저장된
값에만 적용되고 모델 필드가 없는 경우에는 적용되지 않습니다.

OpenCode Go의 `deepseek-v4.1-flash`는 Zen Go 게이트웨이에서 `image_url` 입력을 받아들이고 이제
네이티브 `text`와 `image` 모달리티를 선언하므로, 새 `opencode-go` 행은 이 sidecar를 거치지 않고
이미지를 직접 보냅니다. 같은 게이트웨이의 형제 모델 `deepseek-v4-flash`는 여전히 HTTP 400 "Model only
supports text input"을 반환하며 sidecar 지원 상태를 유지하고, `opencode-zen`과 `opencode-free` 티어는
기존 분류를 유지합니다. 레지스트리 메타데이터는 비어 있는 값만 채우므로, 이 수정 이전에 저장된
`opencode-go` provider 행은 저장된 오버라이드를 그대로 유지한 채 `deepseek-v4.1-flash`를 계속 이
sidecar로 라우팅합니다. 이러한 행에서 네이티브 vision을 사용하려면 `~/.opencodex/config.json`에서
해당 provider의 `noVisionModels` 목록에서 `deepseek-v4.1-flash`를 제거하고 저장된
`modelInputModalities` `["text"]` 항목을 삭제하거나, 프리셋을 삭제한 후 다시 추가하세요. `ocx
provider edit opencode-go --model deepseek-v4.1-flash --text-only`는 위의 모든 선언보다 우선하는
`modelCapabilities`를 통해 제한을 복원합니다.

- 이미지는 사용자, developer, 도구 결과 메시지에서 올 수 있습니다. Codex의 `view_image` 결과도
포함됩니다.
- OpenAI 경로(ChatGPT 로그인 패스스루)에서는 각 이미지가 선택한 `reasoning.effort`(기본값
Expand Down
13 changes: 13 additions & 0 deletions docs-site/src/content/docs/ru/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,19 @@ opencodex описывает каждое изображение **до** осн
`gpt-5.4-mini` по-прежнему мигрирует на `gpt-5.6-luna`; миграция применяется только к сохранённому
значению, а не к отсутствующему полю модели.

`deepseek-v4.1-flash` на OpenCode Go принимает части `image_url` на шлюзе Zen Go и теперь объявляет
нативные модальности `text` и `image`, поэтому новые строки `opencode-go` отправляют ему изображения
напрямую, минуя этот сайдкар. Родственная `deepseek-v4-flash` на том же шлюзе по-прежнему отвечает
HTTP 400 «Model only supports text input» и остаётся на сайдкаре, а уровни `opencode-zen` и
`opencode-free` сохраняют прежнюю классификацию. Метаданные реестра заполняют только отсутствующие
значения, поэтому строка `opencode-go`, сохранённая до этого исправления, хранит свои сохранённые
переопределения и продолжает маршрутизировать `deepseek-v4.1-flash` через этот сайдкар. Чтобы включить
нативное vision на такой строке, удалите `deepseek-v4.1-flash` из списка `noVisionModels` провайдера и
уберите его сохранённую запись `modelInputModalities` `["text"]` в `~/.opencodex/config.json` — или
удалите и заново добавьте пресет. `ocx provider edit opencode-go --model deepseek-v4.1-flash
--text-only` восстанавливает ограничение через `modelCapabilities`, которое имеет приоритет над всеми
перечисленными выше объявлениями.

- Изображения могут приходить из сообщений пользователя, разработчика и результатов инструментов,
включая `view_image` из Codex.
- На пути OpenAI (passthrough с логином ChatGPT) каждое изображение отправляется в настроенную
Expand Down
14 changes: 14 additions & 0 deletions docs-site/src/content/docs/tr/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,20 @@ geri dönüşünü kullanır. Başlangıç hala açıkça kalıcı hale getirilm
`gpt-5.4-mini` değerini `gpt-5.6-luna`'ya geçirir; bu geçiş, bulunmayan bir
model alanına değil, saklanan bir değere uygulanır.

OpenCode Go'nun `deepseek-v4.1-flash` modeli Zen Go ağ geçidinde `image_url` parçalarını kabul eder ve
artık yerel `text` ile `image` modalitelerini bildirir; bu nedenle yeni `opencode-go` satırları
görselleri bu sidecar yerine doğrudan ona gönderir. Aynı ağ geçidindeki kardeş model
`deepseek-v4-flash` hâlâ HTTP 400 "Model only supports text input" yanıtı verir ve sidecar destekli
kalır; `opencode-zen` ve `opencode-free` katmanları ise mevcut sınıflandırmalarını korur. Kayıt defteri
meta verileri yalnızca eksik değerleri doldurur; bu nedenle bu düzeltmeden önce kaydedilmiş bir
`opencode-go` satırı, kayıtlı geçersiz kılmalarını korur ve `deepseek-v4.1-flash`'i bu sidecar
üzerinden yönlendirmeye devam eder. Böyle bir satırda yerel vision'ı etkinleştirmek için
`deepseek-v4.1-flash`'i sağlayıcının `noVisionModels` listesinden kaldırın ve
`~/.opencodex/config.json` içindeki kayıtlı `modelInputModalities` `["text"]` girdisini silin — ya da
ön ayarı silip yeniden ekleyin. `ocx provider edit opencode-go --model deepseek-v4.1-flash
--text-only`, kısıtlamayı yukarıdaki tüm bildirimlerin önüne geçen `modelCapabilities` üzerinden geri
yükler.

- Görseller, Codex'in `view_image`'ı da dahil olmak üzere kullanıcı, geliştirici
ve araç sonucu mesajlarından gelebilir.
- OpenAI yolunda (ChatGPT girişi doğrudan geçişi), her görsel seçilen
Expand Down
10 changes: 10 additions & 0 deletions docs-site/src/content/docs/zh-cn/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ OAuth 账户时使用 `anthropic`,否则使用 `openai`。显式选择 `anthro
Dashboard 和管理 API 都使用 `gpt-5.6-luna` 作为回退。启动时仍会把明确保存的旧
`gpt-5.4-mini` 值迁移到 `gpt-5.6-luna`;该迁移只作用于已保存值,不适用于缺失的 model 字段。

OpenCode Go 的 `deepseek-v4.1-flash` 在 Zen Go 网关上接受 `image_url` 输入,现已声明原生 `text` 与
`image` 模态,因此新的 `opencode-go` 行会直接向它发送图像,而不是经过此 sidecar。同一网关上的兄弟
模型 `deepseek-v4-flash` 仍返回 HTTP 400 "Model only supports text input",继续由 sidecar 支持;
`opencode-zen` 与 `opencode-free` 档位保持既有分类。registry 元数据只填补缺失值,因此在此修正之前
保存的 `opencode-go` provider 行会保留其已保存的 override,并继续把 `deepseek-v4.1-flash` 路由到此
sidecar。要在这类行上启用原生视觉,请从该 provider 的 `noVisionModels` 列表中移除
`deepseek-v4.1-flash`,并删除 `~/.opencodex/config.json` 中其已保存的 `modelInputModalities`
`["text"]` 条目,或者删除并重新添加该 preset。`ocx provider edit opencode-go --model
deepseek-v4.1-flash --text-only` 会通过 `modelCapabilities` 恢复该限制,其优先级高于上述所有声明。

- 图像可以来自 user、developer 和 tool-result message,也包括 Codex 的 `view_image` 结果。
- OpenAI 路径(ChatGPT 登录透传)会通过 Responses 端点把每张图像发送给配置的视觉模型,并携带所选
的 `reasoning.effort`(默认为 `low`),描述结果就地替换图像部分。Anthropic 路径走 Messages
Expand Down
10 changes: 10 additions & 0 deletions docs-site/src/content/docs/zh-tw/guides/sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ OAuth 帳號時使用 `anthropic`,否則使用 `openai`。明確選擇 `anthro
`gpt-5.6-luna`,啟動時也會把明確儲存的舊 `gpt-5.4-mini` 值遷移到 Luna。只有在
`visionSidecar.model` 欄位不存在或為空字串時,vision 執行路徑才會使用程式碼中的 `gpt-5.6-luna` 回退值。

OpenCode Go 的 `deepseek-v4.1-flash` 在 Zen Go 閘道上接受 `image_url` 輸入,現已宣告原生 `text` 與
`image` 模態,因此新的 `opencode-go` 列會直接向它傳送圖像,而不是經過此 sidecar。同一閘道上的兄弟
模型 `deepseek-v4-flash` 仍回應 HTTP 400 "Model only supports text input",繼續由 sidecar 支援;
`opencode-zen` 與 `opencode-free` 層級維持既有分類。registry 元資料只填補缺失值,因此在此修正之前
儲存的 `opencode-go` provider 列會保留其已儲存的 override,並繼續把 `deepseek-v4.1-flash` 路由到此
sidecar。要在這類列上啟用原生視覺,請從該 provider 的 `noVisionModels` 清單中移除
`deepseek-v4.1-flash`,並刪除 `~/.opencodex/config.json` 中其已儲存的 `modelInputModalities`
`["text"]` 條目,或刪除並重新加入該 preset。`ocx provider edit opencode-go --model
deepseek-v4.1-flash --text-only` 會透過 `modelCapabilities` 還原該限制,其優先序高於上述所有宣告。

- 圖像可以來自 user、developer 和 tool-result message,也包括 Codex 的 `view_image` 結果。
- 每張圖像會以 `reasoning.effort: "low"` 傳送給設定的原生 vision 模型,描述結果會就地替換
圖像部分。
Expand Down
12 changes: 5 additions & 7 deletions src/providers/model-rename-startup.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
import { mutatePersistedConfig } from "../config";
import { projectModelRenames } from "./model-rename-migration";
import { projectStaleContextWindows } from "./stale-context-window-migration";
import { projectStaleVisionClassifications } from "./stale-vision-classification-migration";
import { projectDevinCliAuthMode } from "./devin-cli-authmode-migration";
import type { OcxConfig } from "../types";

/**
* The startup projection: registry model renames, then the context-window and
* vision-classification repairs. All three fix a saved row the registry can no longer reach on its own —
* The startup projection: registry model renames, then context-window and auth-mode repairs.
* These fix a saved row the registry can no longer reach on its own —
* `enrichProviderFromRegistry` backfills a missing field and never rewrites a
* present one — so they share this pass rather than adding a second boot step
* with its own persistence, adopt, and failure handling.
*/
export function projectStartupConfigRepairs(config: OcxConfig): ReturnType<typeof projectModelRenames> {
const renames = projectModelRenames(config);
const windows = projectStaleContextWindows(renames.config);
const vision = projectStaleVisionClassifications(windows.config);
const devinCli = projectDevinCliAuthMode(vision.config);
const devinCli = projectDevinCliAuthMode(windows.config);
return {
config: devinCli.config,
changed: renames.changed || windows.changed || vision.changed || devinCli.changed,
warnings: [...renames.warnings, ...windows.warnings, ...vision.warnings, ...devinCli.warnings],
changed: renames.changed || windows.changed || devinCli.changed,
warnings: [...renames.warnings, ...windows.warnings, ...devinCli.warnings],
};
}

Expand Down
10 changes: 3 additions & 7 deletions src/providers/registry/entries-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -718,12 +718,9 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
// HTTP 400 "Model only supports text input", which is what keeps the two
// distinct here rather than collapsing them.
//
// The declaration is what reaches an EXISTING install: derive.ts fills
// noVisionModels all-or-nothing, so a config persisted while the stale list
// was current keeps it forever, and modelInputModalities is filled per-key
// BENEATH the saved value. Both halves are repaired by
// stale-vision-classification-migration.ts; correcting the registry alone
// would fix new installs and leave existing ones stripping images.
// derive.ts fills missing registry metadata but does not replace saved values.
// That makes this declaration the default for new rows while preserving an
// existing install's operator-editable image-routing restrictions.
"deepseek-v4.1-flash": ["text", "image"],
// Muse Spark Contributor is natively multimodal on Zen Go: it accepts input_image
// parts over /responses (probed 2026-08-26). Without this declaration the catalog
Expand Down Expand Up @@ -1258,4 +1255,3 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
note: "Serverless Inference subscription API. Live discovery exposes only kimi-k2-instruct because Vultr documents it as the sole tool-calling model.",
},
];

Loading
Loading