import type { EmbeddingModel } from "ai"; // Re-export the non-generic EmbeddingModel for convenience export type { EmbeddingModel } from "ai"; // --------------------------------------------------------------------------- // Document // --------------------------------------------------------------------------- export type DocumentFormat = "text" | "markdown" | "html" | "json"; export type Document = { id: string; content: string; metadata?: Record; format?: DocumentFormat; }; // --------------------------------------------------------------------------- // Chunk // --------------------------------------------------------------------------- export type Chunk = { id: string; documentId: string; content: string; index: number; metadata?: Record; }; // --------------------------------------------------------------------------- // Chunking // --------------------------------------------------------------------------- export type ChunkStrategy = | "recursive" | "character" | "sentence" | "markdown" | "token"; export type ChunkOptions = { strategy: ChunkStrategy; size?: number; overlap?: number; separator?: string; }; // --------------------------------------------------------------------------- // Embedded chunk // --------------------------------------------------------------------------- export type EmbeddedChunk = Chunk & { embedding: number[]; }; // --------------------------------------------------------------------------- // Retrieval // --------------------------------------------------------------------------- export type RetrievalResult = { chunk: Chunk; score: number; metadata?: Record; }; // --------------------------------------------------------------------------- // Vector store // --------------------------------------------------------------------------- export type VectorQueryOptions = { topK?: number; namespace?: string; filter?: Record; }; export interface VectorStore { upsert(chunks: EmbeddedChunk[], namespace?: string): Promise; query( embedding: number[], options?: VectorQueryOptions, ): Promise; delete(ids: string[]): Promise; count(namespace?: string): Promise; } // --------------------------------------------------------------------------- // Pipeline config // --------------------------------------------------------------------------- export type RagPipelineConfig = { vectorStore: VectorStore; embeddingModel: EmbeddingModel; chunkOptions?: ChunkOptions; topK?: number; namespace?: string; }; export type RagPipeline = { ingest(documents: Document[]): Promise; ingestFile(path: string): Promise; retrieve(query: string, opts?: { topK?: number }): Promise; };