export type ModelId = string; const modelIdPattern = /^[a-z0-9][a-z0-9._-]{0,127}$/; export function isModelId(value: unknown): value is ModelId { return typeof value === "string" && modelIdPattern.test(value); } export type MessageRole = "user" | "assistant"; export type MessageStatus = "streaming" | "complete" | "error" | "stopped"; export type Attachment = { id: string; name: string; contentType: string; size: number; }; export type ChatMessage = { id: string; role: MessageRole; content: string; createdAt: string; status: MessageStatus; attachments?: Attachment[]; }; export type Conversation = { id: string; title: string; modelId: ModelId; updatedAt: string; messages: ChatMessage[]; }; export type GatewayContentPart = | { type: "text"; text: string } | { type: "file"; file: { file_id: string } }; export type GatewayMessage = { role: MessageRole; content: string | GatewayContentPart[]; }; export type ChatRequest = { model: ModelId; messages: GatewayMessage[]; };