Add whisper docker dependency status to gateway dashboard

This commit is contained in:
William Valentin
2026-02-22 19:20:09 -08:00
parent d4a13e3c71
commit 8fcbb5f521
11 changed files with 559 additions and 24 deletions
+31
View File
@@ -11,6 +11,7 @@ import { createCanvasHandlers } from './canvas.js';
import { createConfigHandlers, redactConfig } from './config.js';
import { createPairingHandlers } from './pairing.js';
import type { LocalBackendStatus, LocalBackendControlResult } from './localBackends.js';
import type { DockerDependencyStatus } from './dockerDependencies.js';
import { PairingManager } from '../../channels/pairing.js';
import { LaneQueue } from '../lane-queue.js';
import { CanvasStore } from '../canvas-store.js';
@@ -283,6 +284,36 @@ describe('system handlers', () => {
expect(getPath(result.result, 'updatedModels')).toEqual(['llama3.2', 'nomic-embed-text']);
});
it('system.dockerDependencies returns empty list when callback is not provided', async () => {
const req: GatewayRequest = { id: 42, method: 'system.dockerDependencies' };
const result = await handlers['system.dockerDependencies'](req) as GatewayResponse;
expect(getPath(result.result, 'dependencies')).toEqual([]);
});
it('system.dockerDependencies returns dependency statuses from callback', async () => {
const getDockerDependencies = vi.fn(async (): Promise<DockerDependencyStatus[]> => ([
{
id: 'whisper',
name: 'Whisper (whisper.cpp)',
service: 'whisper-server',
configured: true,
state: 'running',
health: 'healthy',
statusText: 'Up 10 minutes (healthy)',
containerName: 'flynn-whisper-server-1',
},
]));
const handlers = createSystemHandlers({
...deps,
getDockerDependencies,
});
const req: GatewayRequest = { id: 43, method: 'system.dockerDependencies' };
const result = await handlers['system.dockerDependencies'](req) as GatewayResponse;
expect(getDockerDependencies).toHaveBeenCalledTimes(1);
expect(getPath(result.result, 'dependencies', '0', 'id')).toBe('whisper');
expect(getPath(result.result, 'dependencies', '0', 'state')).toBe('running');
});
it('system.presence returns empty result when getPresence is not provided', async () => {
const req: GatewayRequest = { id: 4, method: 'system.presence' };
const result = await handlers['system.presence'](req) as GatewayResponse;