- whisper.ts: add getModelStatus(); fix submitJob() to retry on 503 using
Retry-After header instead of throwing; optional onModelWaiting callback
lets the pipeline surface model state to the UI during the wait
- pipeline.ts: pass onModelWaiting callback → emits model_warming SSE event
so the job detail page can show 'Warming up model…' while waiting
- types.ts: add ModelStateTag union and ModelStatus interface
- api/model/status: GET route proxies whisper /model/status (falls back to
{state:'unloaded'} if whisper unreachable)
- api/model/events: GET route relays whisper SSE stream to the browser;
AbortController tied to request.signal cleans up on disconnect
- layout.svelte: status pill is now live — initial fetch + EventSource on
/api/model/events; dot colour + label reflect real model state with a
pulsing animation while loading or waiting_for_gpu
- jobs/[id]/+page.svelte: handle model_warming event type → show a yellow
'Warming up model…' sub-label with spinner inside the progress card
- whisper.test.ts: update submitJob mocks to status:202 to match real API
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
15 lines
377 B
TypeScript
15 lines
377 B
TypeScript
import { getModelStatus } from '$lib/server/whisper.js';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const status = await getModelStatus();
|
|
return new Response(JSON.stringify(status), {
|
|
headers: { 'Content-Type': 'application/json' }
|
|
});
|
|
} catch {
|
|
return new Response(JSON.stringify({ state: 'unloaded' }), {
|
|
headers: { 'Content-Type': 'application/json' }
|
|
});
|
|
}
|
|
}
|