import type { AIResult } from './types'; /** * Generate embeddings for text input. */ // eslint-disable-next-line pickier/no-unused-vars export declare function createEmbedding(input: string, options?: EmbeddingOptions): Promise; // eslint-disable-next-line pickier/no-unused-vars export declare function createEmbedding(input: string[], options?: EmbeddingOptions): Promise; /** * Calculate cosine similarity between two vectors. */ export declare function cosineSimilarity(a: number[], b: number[]): number; /** * Calculate dot product similarity between two vectors. */ export declare function dotProduct(a: number[], b: number[]): number; /** * Calculate Euclidean distance between two vectors. */ export declare function euclideanDistance(a: number[], b: number[]): number; /** * Perform RAG: search for relevant documents and use them as context for generation. */ export declare function rag(query: string, index: VectorIndex, options?: RAGOptions): Promise; /** * Split text into overlapping chunks for embedding. */ export declare function chunkText(text: string, options?: ChunkOptions): string[]; /** * Create a searchable index from a long text by chunking and embedding. */ export declare function indexText(text: string, options?: ChunkOptions & EmbeddingOptions & { idPrefix?: string }): Promise; // ============================================================================ // Exports // ============================================================================ export declare const search: { createEmbedding: typeof createEmbedding; cosineSimilarity: typeof cosineSimilarity; dotProduct: typeof dotProduct; euclideanDistance: typeof euclideanDistance; VectorIndex: typeof VectorIndex; rag: typeof rag; chunkText: typeof chunkText; indexText: typeof indexText }; // ============================================================================ // Types // ============================================================================ export declare interface EmbeddingOptions { provider?: 'openai' | 'ollama' model?: string } export declare interface SearchDocument { id: string content: string metadata?: Record } export declare interface IndexedDocument extends SearchDocument { embedding: number[] } export declare interface SearchResult { document: SearchDocument score: number rank: number } export declare interface RAGOptions { provider?: 'anthropic' | 'openai' | 'ollama' embeddingProvider?: 'openai' | 'ollama' embeddingModel?: string model?: string maxTokens?: number temperature?: number topK?: number systemPrompt?: string } export declare interface RAGResult extends AIResult { sources: SearchResult[] } // ============================================================================ // Text Chunking Utilities // ============================================================================ export declare interface ChunkOptions { chunkSize?: number chunkOverlap?: number separator?: string } /** * Simple in-memory vector search index. * For production, use a dedicated vector database. */ export declare class VectorIndex { constructor(options?: EmbeddingOptions); add(documents: SearchDocument[]): Promise; addWithEmbedding(document: SearchDocument, embedding: number[]): void; search(query: string, topK?: number): Promise; searchByVector(queryEmbedding: number[], topK?: number): SearchResult[]; remove(id: string): boolean; clear(): void; get size(): number; get ids(): string[]; }