export interface DetectionBox { xmin: number; ymin: number; xmax: number; ymax: number; } export interface DetectionResultJson { label: string; score: number; box: DetectionBox; } export interface HostRecord { id: string; model: string; registeredAt: number; lastHeartbeat: number; stream?: HostStream; } export interface HostStream { write: (event: string, data: unknown) => void; close: () => void; } export type TaskStatus = 'pending' | 'processing' | 'done' | 'error'; export type ClusterTaskKind = 'detect' | 'describe'; export interface DetectionTask { id: string; hostId: string; kind: ClusterTaskKind; status: TaskStatus; imageBase64: string; mimeType: string; threshold?: number; instruction?: string; maxNewTokens?: number; results?: DetectionResultJson[]; description?: string; error?: string; createdAt: number; startedAt?: number; completedAt?: number; } export interface DetectRequestBody { host: string; threshold?: number; image_url?: string; image_base64?: string; image_type?: string; } export interface DescribeRequestBody { host: string; instruction?: string; max_new_tokens?: number; image_url?: string; image_base64?: string; image_type?: string; } export interface RegisterHostBody { id: string; model?: string; } export type {CompleteTaskBody} from '../shared/completeTask.js';