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[];
};