/** Models a browser host can expose to the cluster. Add entries as new workers are wired up. */ export interface ClusterModelDefinition { id: string; label: string; description: string; /** When false, the host UI shows the option but cannot start hosting yet. */ implemented: boolean; } export const CLUSTER_MODELS: readonly ClusterModelDefinition[] = [ { id: 'rfdetr-medium', label: 'Object detection', description: 'RF-DETR Medium (COCO) on WebGPU', implemented: true, }, { id: 'smolvlm-500m', label: 'Video description', description: 'SmolVLM-500M-Instruct vision-language model on WebGPU', implemented: true, }, ] as const; export const OBJECT_DETECTION_MODEL_ID = 'rfdetr-medium'; export const VIDEO_DESCRIPTION_MODEL_ID = 'smolvlm-500m'; export const DEFAULT_CLUSTER_MODEL_ID = CLUSTER_MODELS[0].id; export function getClusterModel(id: string): ClusterModelDefinition | undefined { return CLUSTER_MODELS.find((model) => model.id === id); } export function isValidClusterModelId(id: string): boolean { return CLUSTER_MODELS.some((model) => model.id === id); } export function isImplementedClusterModel(id: string): boolean { const model = getClusterModel(id); return Boolean(model?.implemented); }