import { BaseExtension, ExtensionTypeEnum } from '../extension' export type SearchMode = 'auto' | 'ann' | 'linear' export interface VectorDBStatus { ann_available: boolean } export interface VectorChunkInput { id?: string text: string embedding: number[] metadata?: Record } export interface VectorSearchResult { id: string text: string score?: number file_id: string chunk_file_order: number } export interface AttachmentFileInfo { id: string name?: string path?: string type?: string size?: number chunk_count: number } /** * Vector DB extension base: abstraction over local vector storage and search. */ export abstract class VectorDBExtension extends BaseExtension { type(): ExtensionTypeEnum | undefined { return ExtensionTypeEnum.VectorDB } abstract getStatus(): Promise abstract createCollection(name: string, dimension: number): Promise abstract insertChunks(collection: string, chunks: VectorChunkInput[]): Promise abstract searchCollection( collection: string, query_embedding: number[], limit: number, threshold: number, mode?: SearchMode, fileIds?: string[] ): Promise abstract deleteChunks(collection: string, ids: string[]): Promise abstract deleteCollection(collection: string): Promise abstract chunkText(text: string, chunkSize: number, chunkOverlap: number): Promise abstract listAttachments(collection: string, limit?: number): Promise abstract getChunks( collection: string, fileId: string, startOrder: number, endOrder: number ): Promise }