UNPKG

@claude-flow/embeddings

Version:

V3 Embedding Service - OpenAI, Transformers.js, Agentic-Flow (ONNX), Mock providers with hyperbolic embeddings, normalization, and chunking

165 lines • 6.38 kB
/** * V3 Embedding Service Implementation * * Production embedding service aligned with agentic-flow@alpha: * - OpenAI provider (text-embedding-3-small/large) * - Transformers.js provider (local ONNX models) * - Mock provider (development/testing) * * Performance Targets: * - Single embedding: <100ms (API), <50ms (local) * - Batch embedding: <500ms for 10 items * - Cache hit: <1ms */ import { BaseEmbeddingService, LRUCache } from './embedding-service-base.js'; import type { EmbeddingProvider, EmbeddingConfig, OpenAIEmbeddingConfig, TransformersEmbeddingConfig, MockEmbeddingConfig, AgenticFlowEmbeddingConfig, EmbeddingResult, BatchEmbeddingResult, IEmbeddingService, SimilarityMetric, SimilarityResult } from './types.js'; export { LRUCache, BaseEmbeddingService }; export declare class OpenAIEmbeddingService extends BaseEmbeddingService { readonly provider: EmbeddingProvider; private readonly apiKey; private readonly model; private readonly baseURL; private readonly timeout; private readonly maxRetries; constructor(config: OpenAIEmbeddingConfig); embed(text: string): Promise<EmbeddingResult>; embedBatch(texts: string[]): Promise<BatchEmbeddingResult>; private callOpenAI; } /** * @deprecated since `@claude-flow/embeddings@3.0.0-alpha.22` (ADR-121 * Phase 4). Use `provider: 'ruvector-onnx'` instead — it's 34× smaller * to install (7.13 MB vs 247.20 MB), runs WASM+SIMD ONNX, and is * portable to Node/browsers/Workers/Deno. The underlying * `@xenova/transformers` package was retired upstream and renamed to * `@huggingface/transformers@4.x`; carrying it in the runtime tree of * every embedding install is a growing liability. * * Scheduled for removal in 4.0. See ADR-121 for the migration path. */ export declare class TransformersEmbeddingService extends BaseEmbeddingService { readonly provider: EmbeddingProvider; private pipeline; private readonly modelName; private initialized; constructor(config: TransformersEmbeddingConfig); private initialize; embed(text: string): Promise<EmbeddingResult>; embedBatch(texts: string[]): Promise<BatchEmbeddingResult>; } export declare class MockEmbeddingService extends BaseEmbeddingService { readonly provider: EmbeddingProvider; private readonly dimensions; private readonly simulatedLatency; constructor(config?: Partial<MockEmbeddingConfig>); embed(text: string): Promise<EmbeddingResult>; embedBatch(texts: string[]): Promise<BatchEmbeddingResult>; /** * Generate deterministic hash-based embedding */ private hashEmbedding; } /** * Agentic-Flow embedding service using OptimizedEmbedder * * Features: * - ONNX-based embeddings with SIMD acceleration * - 256-entry LRU cache with FNV-1a hash * - 8x loop unrolling for cosine similarity * - Pre-allocated buffers (no GC pressure) * - 3-4x faster batch processing */ export declare class AgenticFlowEmbeddingService extends BaseEmbeddingService { readonly provider: EmbeddingProvider; private embedder; private initialized; private readonly modelId; private readonly dimensions; private readonly embedderCacheSize; private readonly modelDir; private readonly autoDownload; constructor(config: AgenticFlowEmbeddingConfig); private initialize; embed(text: string): Promise<EmbeddingResult>; embedBatch(texts: string[]): Promise<BatchEmbeddingResult>; /** * Get combined cache statistics from both our LRU cache and embedder's internal cache */ getCacheStats(): { size: number; maxSize: number; hitRate: number; } | { size: any; maxSize: any; hitRate: number; embedderCache: any; }; shutdown(): Promise<void>; } /** * Create embedding service based on configuration (sync version) * Note: For 'auto' provider or smart fallback, use createEmbeddingServiceAsync */ export declare function createEmbeddingService(config: EmbeddingConfig): IEmbeddingService; /** * Extended config with auto provider option */ export interface AutoEmbeddingConfig { /** Provider: 'auto' will pick best available (agentic-flow > transformers > mock) */ provider: EmbeddingProvider | 'auto'; /** Fallback provider if primary fails */ fallback?: EmbeddingProvider; /** Auto-install agentic-flow if not available (default: true for 'auto' provider) */ autoInstall?: boolean; /** Model ID for agentic-flow */ modelId?: string; /** Model name for transformers */ model?: string; /** Dimensions */ dimensions?: number; /** Cache size */ cacheSize?: number; /** OpenAI API key (required for openai provider) */ apiKey?: string; } /** * Create embedding service with automatic provider detection and fallback * * Features: * - 'auto' provider picks best available: agentic-flow > transformers > mock * - Automatic fallback if primary provider fails to initialize * - Pre-validates provider availability before returning * * @example * // Auto-select best provider * const service = await createEmbeddingServiceAsync({ provider: 'auto' }); * * // Try agentic-flow, fallback to transformers * const service = await createEmbeddingServiceAsync({ * provider: 'agentic-flow', * fallback: 'transformers' * }); */ export declare function createEmbeddingServiceAsync(config: AutoEmbeddingConfig): Promise<IEmbeddingService>; /** * Convenience function for quick embeddings */ export declare function getEmbedding(text: string, config?: Partial<EmbeddingConfig>): Promise<Float32Array | number[]>; /** * Compute cosine similarity between two embeddings */ export declare function cosineSimilarity(a: Float32Array | number[], b: Float32Array | number[]): number; /** * Compute Euclidean distance between two embeddings */ export declare function euclideanDistance(a: Float32Array | number[], b: Float32Array | number[]): number; /** * Compute dot product between two embeddings */ export declare function dotProduct(a: Float32Array | number[], b: Float32Array | number[]): number; /** * Compute similarity using specified metric */ export declare function computeSimilarity(a: Float32Array | number[], b: Float32Array | number[], metric?: SimilarityMetric): SimilarityResult; //# sourceMappingURL=embedding-service.d.ts.map