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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- **fix(dashboard):** model import no longer reports "All models already imported" as a success when provider discovery fell back to the local catalog; the dialog now shows a distinct warning phase with the fallback message when `importWarning` is present and no new models were found ([#15169](https://github.com/diegosouzapw/OmniRoute/pull/15169), fixes [#15069](https://github.com/diegosouzapw/OmniRoute/issues/15069)) — thanks @shipsfromrio
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ export default function ImportProgressModal({
title={t("importingModelsTitle")}
size="md"
closeOnOverlay={false}
showCloseButton={importProgress.phase === "done" || importProgress.phase === "error"}
showCloseButton={
importProgress.phase === "done" ||
importProgress.phase === "error" ||
importProgress.phase === "warning"
}
>
<div className="flex flex-col gap-4">
{/* Status text */}
Expand All @@ -51,6 +55,9 @@ export default function ImportProgressModal({
{importProgress.phase === "done" && (
<span className="material-symbols-outlined text-green-500">check_circle</span>
)}
{importProgress.phase === "warning" && (
<span className="material-symbols-outlined text-orange-500">warning</span>
)}
{importProgress.phase === "error" && (
<span className="material-symbols-outlined text-red-500">error</span>
)}
Expand Down Expand Up @@ -126,7 +133,7 @@ export default function ImportProgressModal({
)}

{/* Close button */}
{importProgress.phase === "done" && (
{(importProgress.phase === "done" || importProgress.phase === "warning") && (
<div className="flex justify-center">
<button
onClick={onClose}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,11 @@ export default function ProviderModalsPanel({
importProgress={importProgress}
isOpen={showImportModal}
onClose={() => {
if (importProgress.phase === "done" || importProgress.phase === "error") {
if (
importProgress.phase === "done" ||
importProgress.phase === "error" ||
importProgress.phase === "warning"
) {
setShowImportModal(false);
}
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@ export function extractImportWarning(data: unknown): string | null {
return null;
}

/**
* #15069 — pure phase resolver for the zero-new-models branch in handleImportModels.
*
* When all fetched models are already registered, what the user sees depends on whether
* the fetch came from the live upstream API or fell back to the local catalog:
*
* - `importWarning` present → local-catalog fallback → phase "warning" (the remote API was
* unreachable; a success indicator would be misleading).
* - `importWarning` absent → remote catalog actually fetched → phase "done" (genuine success).
*
* Extracted as a pure function so unit tests can cover this branch without a React renderer.
*/
export function resolveNoNewModelsPhase(importWarning: string | null): "warning" | "done" {
return importWarning ? "warning" : "done";
}

/**
* B-03 (#15159): decide what the Import button should SAY, given the raw
* `/api/providers/[id]/models?refresh=true` payload.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import React, { useState } from "react";
import { extractApiErrorMessage } from "@/shared/http/apiErrorMessage";
import { providerText, type ProviderMessageTranslator } from "../providerPageHelpers";
import { classifyModelImport } from "./modelImportWarning";
import { classifyModelImport, resolveNoNewModelsPhase } from "./modelImportWarning";

interface NotifyStore {
success: (message: string, title?: string) => number;
Expand All @@ -30,7 +30,7 @@ interface NotifyStore {
export interface ImportProgress {
current: number;
total: number;
phase: "idle" | "fetching" | "importing" | "done" | "error";
phase: "idle" | "fetching" | "importing" | "done" | "warning" | "error";
status: string;
logs: string[];
error: string;
Expand Down Expand Up @@ -186,9 +186,14 @@ export function useModelImportHandlers({
const newModels = classification.newModels;

if (classification.outcome === "nothing-new") {
// #15069: a degraded (local-catalog fallback) result is a terminal "warning", not a
// success — the live provider API was never actually consulted.
const noNewModelsPhase = resolveNoNewModelsPhase(
classification.degraded ? importWarning : null
);
setImportProgress((prev) => ({
...prev,
phase: "done",
phase: noNewModelsPhase,
status:
classification.degraded && importWarning
? importWarning
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/am.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} ሞዴሎች ገብተዋል",
"allModelsAlreadyImported": "ሁሉም ሞዴሎች አስቀድመው ገብተዋል",
"noNewModelsToImport": "የሚገቡ አዲስ ሞዴሎች የሉም — ሁሉም ሞዴሎች አስቀድመው በመዝገቡ ወይም በብጁ ሞዴሎች ዝርዝር ውስጥ ይገኛሉ",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "{count} ነባር ሞዴሎችን በመዝለል ላይ",
"autoSync": "ራስ-ሰር ማመሳሰል",
"autoSyncShort": "አመሳስል",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "تم استيراد {count} نموذج",
"allModelsAlreadyImported": "جميع النماذج مستوردة بالفعل",
"noNewModelsToImport": "لا توجد نماذج جديدة لاستيرادها — جميعها موجودة في السجل أو قائمة النماذج المخصصة",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "تخطي {count} نموذج موجود",
"autoSync": "المزامنة التلقائية",
"autoSyncShort": "المزامنة",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/az.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} model idxal edildi",
"allModelsAlreadyImported": "Bütün modellər artıq idxal edilib",
"noNewModelsToImport": "İdxal ediləcək yeni model yoxdur — bütün modellər artıq reyestrdə və ya fərdi modellər siyahısındadır",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Mövcud olan {count} model buraxılır",
"autoSync": "Avtomatik sinxronizasiya",
"autoSyncShort": "Sinxronizasiya et",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/bg.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Импортирани модели: {count}",
"allModelsAlreadyImported": "Всички модели вече са импортирани",
"noNewModelsToImport": "Няма нови модели за импортиране — всички модели вече са в регистъра или списъка с персонализирани модели",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Пропускане на {count} съществуващи модела",
"autoSync": "Автоматично синхронизиране",
"autoSyncShort": "Синхронизиране",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/bn.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count}টি মডেল ইম্পোর্ট করা হয়েছে",
"allModelsAlreadyImported": "সব মডেল ইতিমধ্যেই ইম্পোর্ট করা হয়েছে",
"noNewModelsToImport": "ইম্পোর্ট করার মতো কোনো নতুন মডেল নেই — সব মডেল ইতিমধ্যেই registry বা custom models তালিকায় রয়েছে",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "বিদ্যমান {count}টি মডেল এড়িয়ে যাওয়া হচ্ছে",
"autoSync": "স্বয়ংক্রিয় সিঙ্ক",
"autoSyncShort": "সিঙ্ক",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/bs.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Uvezeno {count} modela",
"allModelsAlreadyImported": "Svi modeli su već uvezeni",
"noNewModelsToImport": "Nema novih modela za uvoz — svi modeli su već u registru ili listi prilagođenih modela",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Preskaču se {count} postojećih modela",
"autoSync": "Auto-sinkronizacija",
"autoSyncShort": "Sinkronizuj",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} modelů importováno",
"allModelsAlreadyImported": "Všechny modely jsou již importovány",
"noNewModelsToImport": "Žádné nové modely k importu — všechny modely jsou již v registru nebo v seznamu vlastních modelů",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Přeskakování {count} existujících modelů",
"autoSync": "Automatická synchronizace",
"autoSyncShort": "Synchronizace",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} modeller importeret",
"allModelsAlreadyImported": "Alle modeller er allerede importeret",
"noNewModelsToImport": "Ingen nye modeller at importere — alle modeller findes allerede i registreret eller brugerdefineret liste",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Springer {count} eksisterende modeller over",
"autoSync": "Auto-synkronisering",
"autoSyncShort": "Synkronisering",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} Modelle importiert",
"allModelsAlreadyImported": "Alle Modelle sind bereits importiert",
"noNewModelsToImport": "Keine neuen Modelle zum Importieren — alle Modelle sind bereits in der Registry oder der Liste benutzerdefinierter Modelle",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Überspringe {count} vorhandene Modelle",
"autoSync": "Automatische Synchronisierung",
"autoSyncShort": "Synchronisieren",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Έγινε εισαγωγή {count} μοντέλων",
"allModelsAlreadyImported": "Όλα τα μοντέλα έχουν ήδη εισαχθεί",
"noNewModelsToImport": "Δεν υπάρχουν νέα μοντέλα για εισαγωγή — όλα τα μοντέλα βρίσκονται ήδη στο μητρώο ή στη λίστα προσαρμοσμένων μοντέλων",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Παράλειψη {count} υφιστάμενων μοντέλων",
"autoSync": "Αυτόματος Συγχρονισμός",
"autoSyncShort": "Συγχρονισμός",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} models imported",
"allModelsAlreadyImported": "All models already imported",
"noNewModelsToImport": "No new models to import — all models are already in the registry or custom models list",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Skipping {count} existing models",
"autoSync": "Auto-Sync",
"autoSyncShort": "Sync",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Se importaron {count} modelos",
"allModelsAlreadyImported": "Todos los modelos ya están importados",
"noNewModelsToImport": "No hay modelos nuevos para importar — todos los modelos ya están en el registro o en la lista de modelos personalizados",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Omitiendo {count} modelos existentes",
"autoSync": "Sincronización automática",
"autoSyncShort": "Sincronizar",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/et.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Imporditud {count} mudelit",
"allModelsAlreadyImported": "Kõik mudelid on juba imporditud",
"noNewModelsToImport": "Uusi imporditavaid mudeleid pole — kõik mudelid on juba registris või kohandatud mudelite loendis",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Jäetakse vahele {count} olemasolevat mudelit",
"autoSync": "Automaatne sünkroonimine",
"autoSyncShort": "Sünkrooni",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} مدل وارد شد",
"allModelsAlreadyImported": "همه مدلها قبلاً وارد شدهاند",
"noNewModelsToImport": "مدل جدیدی برای وارد کردن وجود ندارد — همه مدلها از قبل در رجیستری یا فهرست مدلهای سفارشی هستند",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "از {count} مدل موجود صرفنظر میشود",
"autoSync": "همگامسازی خودکار",
"autoSyncShort": "همگامسازی",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Tuotiin {count} mallia",
"allModelsAlreadyImported": "Kaikki mallit on jo tuotu",
"noNewModelsToImport": "Ei uusia malleja tuotavaksi — kaikki mallit ovat jo rekisterissä tai mukautetulla mallilistalla",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Ohitetaan {count} olemassa olevaa mallia",
"autoSync": "Automaattinen synkronointi",
"autoSyncShort": "Synkronointi",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} modèles importés",
"allModelsAlreadyImported": "Tous les modèles sont déjà importés",
"noNewModelsToImport": "Aucun nouveau modèle à importer — tous les modèles sont déjà dans le registre ou la liste de modèles personnalisés",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Ignorance de {count} modèles existants",
"autoSync": "Synchronisation automatique",
"autoSyncShort": "Synchroniser",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/ga.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Iompórtáladh {count} múnla",
"allModelsAlreadyImported": "Tá na múnlaí go léir iompórtáilte cheana",
"noNewModelsToImport": "Níl aon mhúnla nua le hiompórtáil — tá na múnlaí go léir sa chlárlann nó ar liosta na múnlaí saincheaptha",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Ag scipeáil {count} múnla atá ann cheana",
"autoSync": "Sioncronú Uathoibríoch",
"autoSyncShort": "Sioncronaigh",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/gu.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} મોડલ આયાત કર્યાં",
"allModelsAlreadyImported": "બધાં મોડલ પહેલેથી આયાત થયેલાં છે",
"noNewModelsToImport": "આયાત કરવા માટે કોઈ નવાં મોડલ નથી — બધાં મોડલ પહેલેથી રજિસ્ટ્રી અથવા કસ્ટમ મોડલની સૂચિમાં છે",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "હાલનાં {count} મોડલ છોડી રહ્યાં છીએ",
"autoSync": "ઑટો-સિંક",
"autoSyncShort": "સિંક કરો",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/ha.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "An shigo da samfura {count}",
"allModelsAlreadyImported": "An riga an shigo da duk samfuran",
"noNewModelsToImport": "Babu sababbin samfuran da za a shigo da su — duk samfuran suna cikin kundin rajista ko jerin samfuran al'ada",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Ana tsallake samfura {count} da suke akwai",
"autoSync": "Daidaitawa ta Atomatik",
"autoSyncShort": "Daidaita",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/he.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "יובאו {count} מודלים",
"allModelsAlreadyImported": "כל הדגמים כבר מיובאים",
"noNewModelsToImport": "אין דגמים חדשים לייבוא — כל הדגמים כבר קיימים ברישום או ברשימת הדגמים המותאמים",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "מדלג על {count} דגמים קיימים",
"autoSync": "סנכרון אוטומטי",
"autoSyncShort": "סנכרון",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} मॉडल आयात किए गए",
"allModelsAlreadyImported": "सभी मॉडल पहले से ही आयातित हैं",
"noNewModelsToImport": "आयात करने के लिए कोई नए मॉडल नहीं — सभी मॉडल पहले से ही रजिस्ट्री या कस्टम मॉडल सूची में हैं",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "{count} मौजूदा मॉडल छोड़े जा रहे हैं",
"autoSync": "स्वतः-सिंक",
"autoSyncShort": "सिंक करें",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/hr.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} modela uvezeno",
"allModelsAlreadyImported": "Svi modeli su već uvezeni",
"noNewModelsToImport": "Nema novih modela za uvoz — svi modeli su već u registru ili popisu prilagođenih modela",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Preskače se {count} postojećih modela",
"autoSync": "Automatska sinkronizacija",
"autoSyncShort": "Sinkroniziraj",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} modell importálva",
"allModelsAlreadyImported": "Minden modell már importálva van",
"noNewModelsToImport": "Nincs új modell az importáláshoz — minden modell már a nyilvántartásban vagy az egyéni modellek listájában van",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "{count} meglévő modell kihagyása",
"autoSync": "Automatikus szinkronizálás",
"autoSyncShort": "Szinkronizálás",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/hy.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "Ներմուծվել է {count} մոդել",
"allModelsAlreadyImported": "Բոլոր մոդելներն արդեն ներմուծված են",
"noNewModelsToImport": "Ներմուծման համար նոր մոդելներ չկան. բոլոր մոդելներն արդեն գրանցամատյանում կամ հատուկ մոդելների ցանկում են",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Բաց է թողնվում առկա {count} մոդել",
"autoSync": "Ավտոմատ համաժամացում",
"autoSyncShort": "Համաժամացնել",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -5361,6 +5361,7 @@
"modelsImported": "{count} model diimpor",
"allModelsAlreadyImported": "Semua model sudah diimpor",
"noNewModelsToImport": "Tidak ada model baru untuk diimpor — semua model sudah ada di registri atau daftar model kustom",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"skippingExistingModels": "Melewatkan {count} model yang sudah ada",
"autoSync": "Sinkronisasi Otomatis",
"autoSyncShort": "Sinkronkan",
Expand Down
Loading
Loading