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
24 changes: 24 additions & 0 deletions docs-site/src/content/docs/reference/management-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,30 @@ can still fail when a recorded session has no surviving rollout file.
| `PUT, DELETE /api/custom-models/{id}` | Edit or delete one custom model | 400 invalid id/fields; 404 not found; 409 duplicate model |
| `GET, PUT /api/selected-models` | Read provider allowlists and availability, or replace one allowlist | 400 missing provider/body; 404 unknown provider; PUT 409 `initial_model_selection_pending` |
| `GET, PUT /api/model-presets` | Read preset summaries or choose preset/all/custom mode | 400 invalid mode or unsupported preset; 404 unknown provider; PUT 409 `initial_model_selection_pending` |
| `PUT /api/model-settings` | Edit one routed model's capability axes in place | 400 missing provider/modelId, unknown or native/combo provider, malformed field, or an invalid default effort for the resulting ladder |

`PUT /api/model-settings` takes `{ provider, modelId }` plus any of `contextWindow`,
`inputModalities`, `reasoningEfforts`, and `defaultReasoningEffort`. It writes the
provider-level per-model maps the runtime already reads (`modelContextWindows`,
`modelCapabilities.<modelId>.inputModalities`, `modelReasoningEfforts`,
`modelDefaultReasoningEfforts`), so an edited row keeps its discovery provenance instead of
being replaced by a custom model. `inputModalities` accepts `text`, `image`, and `audio`;
`reasoningEfforts` must be a subset of the efforts the runtime knows.

Every field is optional, and `null` **clears** the declaration rather than writing a default,
which hands the fact back to the registry, the catalog, and the provider. An empty
`inputModalities` array also clears, while an empty `reasoningEfforts` array is stored as an
explicit "this model has no reasoning rungs" override — it does not clear.
An emptied per-model map is removed instead of left as `{}`. A request that changes nothing
answers `changed: false` with the stored state, which is how an editor distinguishes "no
override to restore" from "restored one". A request that does change something persists the
config, drops that provider's cached `/models` result, and reports `catalogRefresh` — the gather
bakes resolved hints into the rows it caches, and a cache hit may only lower a configured window,
so a raised or cleared override would otherwise read back the previous answer for the whole TTL.
Only routed providers are addressable: `openai` is the
native passthrough lane and `combo` is a synthetic row, so neither is a provider whose per-model
maps these facts come from. Display name is not part of this route; use
`PUT /api/providers/{provider}/model-display-names`.

A manual model replaces the Models dashboard row with the same provider and model ID.
For OpenAI, the manual row keeps `openai/<model>` and supports the same visibility controls
Expand Down
395 changes: 395 additions & 0 deletions gui/src/components/ModelSettingsDialog.tsx

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions gui/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,18 @@ export const de: Record<TKey, string> = {
"models.customAdd": "Benutzerdefiniertes Modell hinzufügen",
"models.customAddTitle": "Benutzerdefiniertes Modell hinzufügen — {provider}",
"models.customEditTitle": "Benutzerdefiniertes Modell bearbeiten — {provider}",
"models.settingsTitle": "Modell bearbeiten — {model}",
"models.settingsSaved": "Modelleinstellungen für {model} gespeichert",
"models.settingsSaveFailed": "Die Modelleinstellungen konnten nicht gespeichert werden.",
"models.settingsRefreshFailed": "Gespeichert, aber die Modellliste wurde nicht neu geladen. Öffne die Zeile erneut, um die gespeicherten Werte zu sehen.",
"models.settingsDefaultEffort": "Standardstufe",
"models.settingsModalitiesInherit": "Nicht überschrieben — folgt derzeit der Upstream-Deklaration: {modalities}",
"models.settingsModalitiesUnknown": "nicht deklariert",
"models.settingsRestore": "Zurücksetzen",
"models.settingsRestoreHint": "Alle Überschreibungen dieses Modells entfernen und wieder die berechneten Werte verwenden.",
"models.settingsRestoreConfirm": "{model} auf die berechneten Werte zurücksetzen? Damit werden Kontextfenster, Modalität und Reasoning-Überschreibungen entfernt.",
"models.settingsRestored": "{model} auf die berechneten Werte zurückgesetzt",
"models.settingsNothingToRestore": "{model} hat keine Überschreibungen — entspricht bereits den berechneten Werten",
"models.customAdded": "Benutzerdefiniertes Modell hinzugefügt",
"models.customUpdated": "Benutzerdefiniertes Modell aktualisiert",
"models.customDeleted": "Benutzerdefiniertes Modell gelöscht",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,18 @@ export const en = {
"models.customAdd": "Add custom model",
"models.customAddTitle": "Add custom model — {provider}",
"models.customEditTitle": "Edit custom model — {provider}",
"models.settingsTitle": "Edit model — {model}",
"models.settingsSaved": "Model settings saved for {model}",
"models.settingsSaveFailed": "Could not save the model settings.",
"models.settingsRefreshFailed": "Saved, but the model list did not reload. Reopen the row to see the stored values.",
"models.settingsDefaultEffort": "Default level",
"models.settingsModalitiesInherit": "Not overridden — currently following the upstream declaration: {modalities}",
"models.settingsModalitiesUnknown": "not declared",
"models.settingsRestore": "Restore",
"models.settingsRestoreHint": "Clear every override on this model and fall back to the computed values.",
"models.settingsRestoreConfirm": "Restore {model} to the computed values? This clears its context window, modality and reasoning overrides.",
"models.settingsRestored": "{model} restored to the computed values",
"models.settingsNothingToRestore": "{model} carries no overrides; already the computed values",
"pws.manageModelVisibility": "Manage visibility in Models",
"pws.modelOwnershipLoading": "Checking model definitions…",
"pws.modelOwnershipFailed": "Model definitions could not be loaded. Retry before making changes.",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -737,6 +737,18 @@ export const fr: Record<TKey, string> = {
"models.customAdd": "Ajouter un modèle personnalisé",
"models.customAddTitle": "Ajouter un modèle personnalisé — {provider}",
"models.customEditTitle": "Modifier le modèle personnalisé — {provider}",
"models.settingsTitle": "Modifier le modèle — {model}",
"models.settingsSaved": "Paramètres du modèle enregistrés pour {model}",
"models.settingsSaveFailed": "Impossible d'enregistrer les paramètres du modèle.",
"models.settingsRefreshFailed": "Enregistré, mais la liste des modèles n'a pas été rechargée. Rouvrez la ligne pour voir les valeurs stockées.",
"models.settingsDefaultEffort": "Niveau par défaut",
"models.settingsModalitiesInherit": "Non remplacé — suit actuellement la déclaration amont : {modalities}",
"models.settingsModalitiesUnknown": "non déclaré",
"models.settingsRestore": "Réinitialiser",
"models.settingsRestoreHint": "Supprimer toutes les substitutions de ce modèle et revenir aux valeurs calculées.",
"models.settingsRestoreConfirm": "Réinitialiser {model} aux valeurs calculées ? Cela supprime ses substitutions de fenêtre de contexte, de modalité et de raisonnement.",
"models.settingsRestored": "{model} réinitialisé aux valeurs calculées",
"models.settingsNothingToRestore": "{model} n'a aucune substitution — déjà les valeurs calculées",
"models.customAdded": "Modèle personnalisé ajouté",
"models.customUpdated": "Modèle personnalisé mis à jour",
"models.customDeleted": "Modèle personnalisé supprimé",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3018,6 +3018,18 @@ export const ja: Record<TKey, string> = {
"models.customAdd": "Add custom model",
"models.customAddTitle": "Add custom model — {provider}",
"models.customEditTitle": "Edit custom model — {provider}",
"models.settingsTitle": "モデルを編集 — {model}",
"models.settingsSaved": "{model} のモデル設定を保存しました",
"models.settingsSaveFailed": "モデル設定を保存できませんでした。",
"models.settingsRefreshFailed": "保存しましたが、モデル一覧を再読み込みできませんでした。行を開き直して保存済みの値を確認してください。",
"models.settingsDefaultEffort": "既定レベル",
"models.settingsModalitiesInherit": "未上書き — 現在は上流の宣言に従います: {modalities}",
"models.settingsModalitiesUnknown": "未宣言",
"models.settingsRestore": "リセット",
"models.settingsRestoreHint": "このモデルの上書きをすべて削除し、計算値に戻します。",
"models.settingsRestoreConfirm": "{model} を計算値に戻しますか?コンテキストウィンドウ、モダリティ、推論の上書きが削除されます。",
"models.settingsRestored": "{model} を計算値に戻しました",
"models.settingsNothingToRestore": "{model} に上書きはありません — すでに計算値です",
"models.customAdded": "Custom model added",
"models.customUpdated": "Custom model updated",
"models.customDeleted": "Custom model deleted",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,18 @@ export const ko: Record<TKey, string> = {
"models.customAdd": "커스텀 모델 추가",
"models.customAddTitle": "커스텀 모델 추가 — {provider}",
"models.customEditTitle": "커스텀 모델 편집 — {provider}",
"models.settingsTitle": "모델 편집 — {model}",
"models.settingsSaved": "{model} 모델 설정을 저장했습니다",
"models.settingsSaveFailed": "모델 설정을 저장하지 못했습니다.",
"models.settingsRefreshFailed": "저장했지만 모델 목록을 다시 불러오지 못했습니다. 행을 다시 열어 저장된 값을 확인하세요.",
"models.settingsDefaultEffort": "기본 수준",
"models.settingsModalitiesInherit": "재정의되지 않음 — 현재 업스트림 선언을 따릅니다: {modalities}",
"models.settingsModalitiesUnknown": "선언되지 않음",
"models.settingsRestore": "초기화",
"models.settingsRestoreHint": "이 모델의 모든 재정의를 지우고 계산된 값으로 되돌립니다.",
"models.settingsRestoreConfirm": "{model}을(를) 계산된 값으로 초기화할까요? 컨텍스트 창, 모달리티, 추론 재정의가 삭제됩니다.",
"models.settingsRestored": "{model}을(를) 계산된 값으로 초기화했습니다",
"models.settingsNothingToRestore": "{model}에는 재정의가 없습니다 — 이미 계산된 값입니다",
"models.customAdded": "커스텀 모델 추가됨",
"models.customUpdated": "커스텀 모델 수정됨",
"models.customDeleted": "커스텀 모델 삭제됨",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,18 @@ export const ru: Record<TKey, string> = {
"models.customAdd": "Добавить пользовательскую модель",
"models.customAddTitle": "Добавить пользовательскую модель — {provider}",
"models.customEditTitle": "Изменить пользовательскую модель — {provider}",
"models.settingsTitle": "Изменить модель — {model}",
"models.settingsSaved": "Настройки модели {model} сохранены",
"models.settingsSaveFailed": "Не удалось сохранить настройки модели.",
"models.settingsRefreshFailed": "Сохранено, но список моделей не перезагрузился. Откройте строку снова, чтобы увидеть сохранённые значения.",
"models.settingsDefaultEffort": "Уровень по умолчанию",
"models.settingsModalitiesInherit": "Не переопределено — сейчас используется объявление провайдера: {modalities}",
"models.settingsModalitiesUnknown": "не объявлено",
"models.settingsRestore": "Сбросить",
"models.settingsRestoreHint": "Удалить все переопределения этой модели и вернуться к вычисленным значениям.",
"models.settingsRestoreConfirm": "Сбросить {model} к вычисленным значениям? Это удалит переопределения окна контекста, модальности и рассуждений.",
"models.settingsRestored": "{model} сброшена к вычисленным значениям",
"models.settingsNothingToRestore": "У {model} нет переопределений — уже вычисленные значения",
"models.customAdded": "Пользовательская модель добавлена",
"models.customUpdated": "Пользовательская модель обновлена",
"models.customDeleted": "Пользовательская модель удалена",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -739,6 +739,18 @@ export const tr: Record<TKey, string> = {
"models.customAdd": "Özel model ekle",
"models.customAddTitle": "Özel model ekle — {provider}",
"models.customEditTitle": "Özel modeli düzenle — {provider}",
"models.settingsTitle": "Modeli düzenle — {model}",
"models.settingsSaved": "{model} için model ayarları kaydedildi",
"models.settingsSaveFailed": "Model ayarları kaydedilemedi.",
"models.settingsRefreshFailed": "Kaydedildi, ancak model listesi yenilenemedi. Saklanan değerleri görmek için satırı yeniden açın.",
"models.settingsDefaultEffort": "Varsayılan düzey",
"models.settingsModalitiesInherit": "Geçersiz kılınmadı — şu anda üst kaynak bildirimine uyuluyor: {modalities}",
"models.settingsModalitiesUnknown": "bildirilmemiş",
"models.settingsRestore": "Sıfırla",
"models.settingsRestoreHint": "Bu modeldeki tüm geçersiz kılmaları kaldır ve hesaplanan değerlere dön.",
"models.settingsRestoreConfirm": "{model} hesaplanan değerlere sıfırlansın mı? Bağlam penceresi, modalite ve akıl yürütme geçersiz kılmaları silinir.",
"models.settingsRestored": "{model} hesaplanan değerlere sıfırlandı",
"models.settingsNothingToRestore": "{model} için geçersiz kılma yok — zaten hesaplanan değerler",
"models.customAdded": "Özel model eklendi",
"models.customUpdated": "Özel model güncellendi",
"models.customDeleted": "Özel model silindi",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/vi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -737,6 +737,18 @@ export const vi: Record<TKey, string> = {
"models.customAdd": "Thêm model tuỳ chỉnh",
"models.customAddTitle": "Thêm model tuỳ chỉnh — {provider}",
"models.customEditTitle": "Chỉnh sửa model tuỳ chỉnh — {provider}",
"models.settingsTitle": "Chỉnh sửa model — {model}",
"models.settingsSaved": "Đã lưu cài đặt model cho {model}",
"models.settingsSaveFailed": "Không lưu được cài đặt model.",
"models.settingsRefreshFailed": "Đã lưu, nhưng danh sách model không tải lại được. Mở lại dòng để xem giá trị đã lưu.",
"models.settingsDefaultEffort": "Mức mặc định",
"models.settingsModalitiesInherit": "Chưa ghi đè — hiện theo khai báo từ nhà cung cấp: {modalities}",
"models.settingsModalitiesUnknown": "chưa khai báo",
"models.settingsRestore": "Khôi phục",
"models.settingsRestoreHint": "Xoá mọi ghi đè trên model này và quay về giá trị do chương trình tính.",
"models.settingsRestoreConfirm": "Khôi phục {model} về giá trị do chương trình tính? Thao tác này xoá ghi đè về cửa sổ ngữ cảnh, modality và suy luận.",
"models.settingsRestored": "Đã khôi phục {model} về giá trị do chương trình tính",
"models.settingsNothingToRestore": "{model} không có ghi đè — đã là giá trị do chương trình tính",
"pws.manageModelVisibility": "Quản lý hiển thị trong Models",
"pws.modelOwnershipLoading": "Đang kiểm tra định nghĩa model…",
"pws.modelOwnershipFailed": "Không thể tải định nghĩa model. Hãy thử lại trước khi thay đổi.",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,18 @@ export const zhTW: Record<TKey, string> = {
"models.customAdd": "新增自訂模型",
"models.customAddTitle": "新增自訂模型 — {provider}",
"models.customEditTitle": "編輯自訂模型 — {provider}",
"models.settingsTitle": "編輯模型 — {model}",
"models.settingsSaved": "已儲存 {model} 的模型設定",
"models.settingsSaveFailed": "無法儲存模型設定。",
"models.settingsRefreshFailed": "已儲存,但模型清單未能重新載入。重新開啟該列即可看到已存的值。",
"models.settingsDefaultEffort": "預設檔位",
"models.settingsModalitiesInherit": "未覆蓋 — 目前依上游宣告:{modalities}",
"models.settingsModalitiesUnknown": "未宣告",
"models.settingsRestore": "還原",
"models.settingsRestoreHint": "清除這個模型上的全部覆蓋,回到程式計算值。",
"models.settingsRestoreConfirm": "把 {model} 還原為程式計算值?這會清除它的上下文視窗、輸入模態與推理覆蓋。",
"models.settingsRestored": "{model} 已還原為程式計算值",
"models.settingsNothingToRestore": "{model} 沒有覆蓋,已經是程式計算值",
"models.customAdded": "已新增自訂模型",
"models.customUpdated": "已更新自訂模型",
"models.customDeleted": "已刪除自訂模型",
Expand Down
12 changes: 12 additions & 0 deletions gui/src/i18n/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,18 @@ export const zh: Record<TKey, string> = {
"models.customAdd": "添加自定义模型",
"models.customAddTitle": "添加自定义模型 — {provider}",
"models.customEditTitle": "编辑自定义模型 — {provider}",
"models.settingsTitle": "编辑模型 — {model}",
"models.settingsSaved": "已保存 {model} 的模型设置",
"models.settingsSaveFailed": "无法保存模型设置。",
"models.settingsRefreshFailed": "已保存,但模型列表未能重新加载。重新打开该行即可看到已存的值。",
"models.settingsDefaultEffort": "默认档位",
"models.settingsModalitiesInherit": "未覆盖 — 当前按上游声明:{modalities}",
"models.settingsModalitiesUnknown": "未声明",
"models.settingsRestore": "恢复",
"models.settingsRestoreHint": "清除这个模型上的全部覆盖,回到程序计算值。",
"models.settingsRestoreConfirm": "把 {model} 恢复为程序计算值?这会清除它的上下文窗口、输入模态与推理覆盖。",
"models.settingsRestored": "{model} 已恢复为程序计算值",
"models.settingsNothingToRestore": "{model} 没有覆盖,已经是程序计算值",
"models.customAdded": "已添加自定义模型",
"models.customUpdated": "已更新自定义模型",
"models.customDeleted": "已删除自定义模型",
Expand Down
Loading
Loading