Handle no-model 503 as online

This commit is contained in:
Marko Djordjevic 2026-02-18 23:34:00 +01:00
parent 07064fbf40
commit 508d267078
2 changed files with 39 additions and 7 deletions

View file

@ -455,19 +455,46 @@ export default function Home() {
const fetchModelInfo = useCallback(async () => {
try {
const response = await fetch('/api/model/info');
if (!response.ok) {
setIsModelOnline(false);
throw new Error('Model info unavailable');
let data: any = null;
try {
data = await response.json();
} catch {
data = null;
}
const data: ModelInfoResponse = await response.json();
if (!response.ok) {
const message = data?.error || data?.detail || 'Model info unavailable';
// Treat "no model" as online-but-unloaded so the selector still works.
if (response.status === 503 && /no model/i.test(message)) {
setIsModelOnline(true);
setPredictionState((prev) => ({
...prev,
modelInfo: null,
selectedLabels: new Set(),
error: null,
}));
return null;
}
setIsModelOnline(false);
setPredictionState((prev) => ({
...prev,
modelInfo: null,
error: message,
}));
return null;
}
const modelInfo: ModelInfoResponse = data;
setIsModelOnline(true);
setPredictionState((prev) => ({
...prev,
modelInfo: data,
selectedLabels: new Set(data.labels),
modelInfo,
selectedLabels: new Set(modelInfo.labels),
error: null,
}));
return data;
return modelInfo;
} catch (error) {
console.error('Failed to fetch model info:', error);
setIsModelOnline(false);

View file

@ -116,6 +116,11 @@ export default function PredictionPanel({
)}
</div>
)}
{!modelInfo && (
<p className="text-[10px] text-muted-foreground">
No model loaded. Select a model to enable predictions.
</p>
)}
{/* Action Buttons */}
<div className="flex gap-1">