aegida-console / lib / chat / types.ts
types.ts
Raw
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[];
};