@claude-flow/embeddings
Version:
V3 Embedding Service - OpenAI, Transformers.js, Agentic-Flow (ONNX), Mock providers with hyperbolic embeddings, normalization, and chunking
429 lines (395 loc) • 13.3 kB
text/typescript
/**
* V3 Embedding Service Module
*
* Production embedding service aligned with agentic-flow@alpha:
* - OpenAI provider (text-embedding-3-small/large)
* - Transformers.js provider (local ONNX models)
* - Agentic-flow provider (optimized ONNX with SIMD)
* - Mock provider (development/testing)
*
* Additional features:
* - Persistent SQLite cache
* - Document chunking with overlap
* - L2/L1/minmax/zscore normalization
* - Hyperbolic embeddings (Poincaré ball)
* - Neural substrate integration (drift, memory, swarm)
*
* @module @claude-flow/embeddings
*/
export * from './types.js';
export * from './embedding-service.js';
// Re-export commonly used items at top level
export {
createEmbeddingService,
createEmbeddingServiceAsync,
getEmbedding,
cosineSimilarity,
euclideanDistance,
dotProduct,
computeSimilarity,
OpenAIEmbeddingService,
TransformersEmbeddingService,
MockEmbeddingService,
AgenticFlowEmbeddingService,
BaseEmbeddingService,
} from './embedding-service.js';
// ADR-121 Phase 1 — WASM+SIMD ONNX provider via ruvector-onnx-embeddings-wasm.
export {
RuvectorOnnxEmbeddingService,
createRuvectorOnnxEmbeddingService,
} from './ruvector-onnx-embedding-service.js';
// ADR-121 Phase 2 — HNSW-backed searchable cache via @ruvector/core.
// Falls back to linear-scan when the optional peer dep isn't installed,
// so the contract holds end-to-end regardless of install state.
export {
SearchableEmbeddingCache,
createSearchableEmbeddingCache,
type CacheSearchHit,
type SearchableCacheOptions,
} from './searchable-embedding-cache.js';
// ADR-121 Phase 5 (lightweight) — ruvector sidecar availability probe.
// Foundation for the full MCP sidecar wire-up (which lives in the CLI
// package). Consumers: `ruflo doctor`, new
// `embeddings_check_ruvector_sidecar` MCP tool (follow-up).
export {
probeRuvectorSidecar,
formatRuvectorAvailability,
type RuvectorAvailability,
type RuvectorMcpTool,
type RuvectorProbeOptions,
} from './ruvector-mcp-probe.js';
// ADR-121 Phase 3 — quantization.
// int8 : 4× memory reduction, streaming-insert friendly,
// wired into SearchableEmbeddingCache via
// `quantize: 'int8'`. Recall ≥0.98 on unit-normalized
// vectors.
// RabitqSnapshot : 32× memory reduction, batch-build only (suits
// fixed corpora — agent-fleet shared memory, etc.).
// Requires @ruvector/rabitq-wasm as an optional peer.
export {
int8Encode,
int8Decode,
measureInt8RoundTripRecall,
RabitqSnapshot,
rabitqMemoryReduction,
type Int8EncodedVector,
type RabitqSnapshotOptions,
type RabitqSnapshotHit,
} from './quantization.js';
// ADR-121 Phase 5b — `@ruvector/diskann` snapshot for billion-scale
// agent-fleet caches. Streaming insert + on-disk persistence
// (survives process restarts). Complements RabitqSnapshot (in-memory,
// build-once, 32× compression) — DiskannSnapshot is the right tool
// when the corpus outgrows RAM.
export {
DiskannSnapshot,
diskannAvailable,
type DiskannSnapshotOptions,
type DiskannSnapshotHit,
} from './diskann-snapshot.js';
// ADR-121 Phase 8 — AnnRouter composition. Auto-selects between
// HNSW (streaming/mutable), RaBitQ (batch/memory-tight), and DiskANN
// (persistent/billion-scale) based on the workload descriptor. Single
// unified search interface; degrades cleanly when the preferred
// backing's peer dep isn't installed.
export {
AnnRouter,
decideBacking,
type AnnBacking,
type AnnRouterWorkload,
type AnnRouterHit,
type AnnRouterDecision,
} from './ann-router.js';
// ADR-121 Phase 10 — Maximal Marginal Relevance diversity rerank.
// Pure function; takes (candidates, queryVec, {k, lambda}) and returns
// a diversified subset. Composable with any of the ANN backings.
export {
mmrRerank,
mmrIds,
averagePairwiseSimilarity,
type MmrCandidate,
type MmrOptions,
type MmrPickedHit,
} from './mmr.js';
// ADR-121 Phase 11 — Reciprocal Rank Fusion (Cormack-Clarke-Büttcher 2009).
// Combines N ranked lists into a single fused ranking without needing
// score comparability. Composes with `embeddings_search_text_batch`
// for ensemble RAG.
export {
reciprocalRankFusion,
rrfIds,
type RrfListItem,
type RrfOptions,
type RrfFusedHit,
} from './rrf.js';
// ADR-121 Phase 12 — Embedding-level fusion (HyDE, Gao et al. 2022).
// Averages N embedding vectors into a single query vector — fuses at
// the embedding level (one search after average) vs RRF which fuses
// at the rank level (N searches then merge). Standard HyDE recipe
// for zero-shot dense retrieval. Composes with any retrieval shape.
export {
averageEmbeddings,
isUnitNorm,
type AverageEmbeddingsOptions,
} from './embedding-fusion.js';
// ADR-121 Phase 17 — Hybrid sparse+dense retrieval.
// Composes BM25 (sparse lexical) + dense vector search via RRF.
// Standard production fix for the "dense embeddings underweight
// rare/technical terms" failure mode.
export {
hybridRetrieval,
type HybridRetrievalOptions,
type HybridRetrievalDiagnostics,
type HybridRetrievalResult,
} from './hybrid-retrieval.js';
// ADR-121 Phase 17 — Sparse lexical retrieval (Okapi BM25).
// Pure-function BM25 — composes with dense vector retrieval via the
// Phase 11 RRF primitive for hybrid sparse+dense search. The
// standard production fix for the "dense embeddings underweight
// rare technical tokens" failure mode.
export {
tokenize,
buildBm25Index,
bm25Score,
bm25TopK,
idfOf,
queryMeanIdf,
type Bm25Options,
type Bm25Document,
type Bm25Index,
type Bm25Hit,
} from './bm25.js';
// ADR-121 Phase 21 — Content-addressed embed cache (BEYOND SOTA).
// In-memory LRU cache with sha256-keyed lookups. Composes with the
// lazy router by wrapping the embed adapter; production workloads
// with repeated queries see ~zero marginal cost on cache hits.
export {
EmbedCache,
wrapWithCache,
canonicalizeText,
type EmbedCacheOptions,
type EmbedCacheStats,
} from './embed-cache.js';
// ADR-121 Phase 20 — Lazy/short-circuit adaptive router (BEYOND SOTA).
// Extends Phase 16's adaptive router with incremental feature
// extraction: embeds query → checks duplicate-density → if signal
// fires, skips variant+hypothetical embeds. Same routing decisions
// as Phase 16 with materially lower cost on workloads where easy
// signals fire early.
export {
lazyAdaptiveRoute,
type LazyEmbedAdapter,
type LazyCandidateSource,
type LazyRouterInputs,
type LazyRouterCostReport,
type LazyRouterResult,
} from './lazy-adaptive-router.js';
// ADR-121 Phase 16 — Adaptive primitive selection (BEYOND SOTA).
// Pure-function feature extractor + router that examines query/corpus
// shape and picks the right primitive automatically — saving the
// cost of run-everything-and-vote while preserving topology-winner
// behavior from Phase 14.
export {
extractRetrievalFeatures,
adaptiveRoute,
type RetrievalFeatures,
type AdaptiveRouterOptions,
type AdaptivePrimitive,
type AdaptiveDecision,
} from './adaptive-router.js';
// ADR-121 Phase 15 — Compound retrieval primitive (BEYOND SOTA).
// Composes HyDE (per-intent embedding fusion) + MMR (per-intent
// diversity) + RRF (across-intent rank fusion) into a single
// pipeline. Each component is well-known; the compound shape isn't
// shipped in any production library to my knowledge. Tested in CI
// against each individual primitive on real-embedding benchmarks.
export {
compoundRetrieval,
type CompoundIntent,
type CompoundRetrievalOptions,
type CompoundRetrievalResult,
type CompoundIntentTrace,
} from './compound-retrieval.js';
// ADR-121 Phase 23 — Trend visualization + drift detection (BEYOND SOTA).
// Catches the "death by a thousand cuts" pattern where every commit
// drops 1% but cumulative drift is 30%. Renders sparklines for
// CI/PR dashboards.
export {
renderSparkline,
detectDrift,
summarizeBenchmarkTrend,
type DriftDetectionOptions,
type DriftDetectionResult,
type BenchmarkTrendSummary,
} from './ledger-trends.js';
// ADR-121 Phase 22 — Ledger analyzer + regression detection.
// Uses the Phase 18 chained ledger to detect performance regressions
// on every new benchmark run. The chain becomes a self-auditing
// performance history instead of just provenance.
export {
getMetricAtPath,
entriesForBenchmark,
pickBaseline,
checkRegression,
checkRegressionBatch,
type BaselineSelection,
type RegressionCheckOptions,
type RegressionCheckResult,
type RegressionBatchInput,
type RegressionBatchResult,
} from './ledger-analyzer.js';
// ADR-121 Phase 18 — Chained witness ledger.
// Builds a hash chain over Phase 15 witness manifests so the FULL
// HISTORY of benchmark runs becomes tamper-evident. Editing any
// historical entry breaks every subsequent signature. Anyone can
// replay the ledger and detect retroactive edits.
export {
appendToLedger,
verifyEntry,
verifyLedger,
generateLedgerKeypair,
coSign,
verifyCosignatureAgainst,
type BenchmarkLedger,
type LedgerEntry,
type ChainVerifyResult,
type CosignatureRecord,
} from './witness-ledger.js';
// ADR-121 Phase 15 — Benchmark witness manifest (ed25519-signed).
// Every benchmark run emits a tamper-evident JSON manifest with the
// corpus/query/model identity + results + signature. Anyone can
// verify the published numbers match the published code on the
// published commit. Zero new deps — uses node:crypto.
export {
witness,
verify,
canonicalHash,
corpusFingerprint,
generateEphemeralKeypair,
type BenchmarkWitnessInput,
type WitnessedManifest,
} from './witness.js';
// ADR-121 Phase 15 — Synthetic topic-clustered corpus builder.
// Deterministic generator for benchmark + test corpora with known
// topic structure and relevance judgements. Used by the scale
// benchmark + available for users building their own benchmarks.
export {
buildSyntheticTopicCorpus,
type SyntheticCorpusOptions,
type SyntheticCorpusEntry,
type SyntheticCorpus,
} from './synthetic-corpus.js';
// ADR-121 Phase 13 — Standard IR evaluation metrics for benchmarking
// the RAG primitives. Pure functions: recall@k, precision@k, MRR,
// nDCG@k (binary + graded). Used by scripts/benchmark-rag-primitives.mjs
// to produce comparable numbers across all 5 search_text_* tools.
export {
recallAtK,
precisionAtK,
reciprocalRank,
meanReciprocalRank,
dcgAtK,
idcgAtK,
ndcgAtK,
meanMetric,
compareRankings,
type RelevanceSet,
type GradedRelevance,
type RankingComparison,
} from './ir-metrics.js';
export type { AutoEmbeddingConfig } from './embedding-service.js';
// RVF embedding service (pure-TS hash-based embeddings)
export { RvfEmbeddingService } from './rvf-embedding-service.js';
// RVF embedding cache (binary file persistence)
export {
RvfEmbeddingCache,
type RvfEmbeddingCacheConfig,
} from './rvf-embedding-cache.js';
// Chunking utilities
export {
chunkText,
estimateTokens,
reconstructFromChunks,
type ChunkingConfig,
type Chunk,
type ChunkedDocument,
} from './chunking.js';
// Normalization utilities
export {
l2Normalize,
l2NormalizeInPlace,
l1Normalize,
minMaxNormalize,
zScoreNormalize,
normalize,
normalizeBatch,
l2Norm,
isNormalized,
centerEmbeddings,
type NormalizationOptions,
} from './normalization.js';
// Hyperbolic embeddings (Poincaré ball)
export {
euclideanToPoincare,
poincareToEuclidean,
hyperbolicDistance,
mobiusAdd,
mobiusScalarMul,
hyperbolicCentroid,
batchEuclideanToPoincare,
pairwiseHyperbolicDistances,
isInPoincareBall,
type HyperbolicConfig,
} from './hyperbolic.js';
// ADR-121 Phase 3b — async Poincaré ops backed by @ruvector/attention
// when installed; falls back to the hand-rolled hyperbolic.ts above.
// Same conceptual surface, but Float32Array-native and routed through
// Rust NAPI bindings for ~order-of-magnitude precision improvement
// (the hand-rolled path is approximate for expMap/logMap).
export {
projectToPoincareBall as projectToPoincareBallAsync,
poincareDistance as poincareDistanceAsync,
expMap as expMapAsync,
logMap as logMapAsync,
mobiusAddition as mobiusAdditionAsync,
hyperbolicAttentionAvailable,
type HyperbolicAttentionOptions,
} from './hyperbolic-attention.js';
// Persistent cache
export {
PersistentEmbeddingCache,
isPersistentCacheAvailable,
type PersistentCacheConfig as DiskCacheConfig,
type PersistentCacheStats,
} from './persistent-cache.js';
// Neural substrate integration
export {
NeuralEmbeddingService,
createNeuralService,
isNeuralAvailable,
listEmbeddingModels,
downloadEmbeddingModel,
type DriftResult,
type MemoryEntry,
type AgentState,
type CoherenceResult,
type SubstrateHealth,
type NeuralSubstrateConfig,
} from './neural-integration.js';
export type {
EmbeddingProvider,
EmbeddingConfig,
OpenAIEmbeddingConfig,
TransformersEmbeddingConfig,
MockEmbeddingConfig,
AgenticFlowEmbeddingConfig,
RvfEmbeddingConfig,
RuvectorOnnxEmbeddingConfig,
EmbeddingResult,
BatchEmbeddingResult,
IEmbeddingService,
SimilarityMetric,
SimilarityResult,
NormalizationType,
PersistentCacheConfig,
} from './types.js';