Files
wehub-resource-sync 23f7624596
ADR-166 MCP Bridge Security Lock / Static-source security lock (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / Compose default binds loopback + Mongo has auth (push) Failing after 2s
CodeQL Advanced / Analyze (rust) (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / plugin-agent-federation bindHost default (push) Failing after 1s
ADR-166 MCP Bridge Security Lock / Runtime behavior — 401 + terminal gate + fail-closed (push) Failing after 4s
business-pods-smoke / smoke (push) Failing after 1s
all-plugins-smoke / smoke-all (push) Failing after 2s
CI/CD Pipeline / Security & Code Quality (push) Failing after 1s
CI/CD Pipeline / Test Suite (ubuntu-latest) (push) Failing after 1s
CI/CD Pipeline / Build & Package (macos-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (ubuntu-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (windows-latest) (push) Has been skipped
CI/CD Pipeline / Documentation & Examples (push) Failing after 1s
Clone Tracker (14-day rolling) / Snapshot clones for ruflo ecosystem (push) Failing after 1s
CodeQL Advanced / Analyze (actions) (push) Failing after 1s
CodeQL Advanced / Analyze (javascript-typescript) (push) Failing after 1s
federation-peer-rust / stable-noop (push) Failing after 1s
metaharness-ci / score (push) Failing after 1s
metaharness-ci / router-compat (push) Failing after 0s
metaharness-ci / similarity-tests (push) Failing after 0s
no-agentbbs-smoke / smoke-without-agentbbs (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (windows-latest) (push) Has been skipped
codex-integration-audit / Codex integration audit (push) Failing after 1s
helpers-manifest-guard / guard (push) Failing after 1s
🔗 Cross-Agent Integration Tests / 🤝 Agent Coordination Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🧠 Memory Sharing Integration (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🛡️ Fault Tolerance Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / ⚡ Performance Integration Tests (push) Has been skipped
metaharness-ci / mcp-scan (push) Failing after 1s
metaharness-ci / eject-dryrun (push) Failing after 1s
metaharness-ci / metaharness-real-data (push) Failing after 0s
no-cli-optdep-bloat-2561 / guard (push) Failing after 1s
no-metaharness-smoke / smoke-without-metaharness (push) Failing after 1s
no-phantom-agentic-flow-subpath / guard (push) Failing after 1s
🔄 Automated Rollback Manager / 🚨 Failure Detection (push) Failing after 1s
V3 CI/CD Pipeline / Plugin hooks smoke / ubuntu-latest / Node 22 (push) Failing after 1s
V3 CI/CD Pipeline / ruflo-graph-intelligence build + test smoke (#2044, ADR-123) (push) Failing after 1s
CVE Audit Gate / Audit root (critical-blocking) (push) Failing after 2s
cost-tracker-smoke / smoke (push) Failing after 3s
oia-audit-weekly / audit (push) Failing after 2s
ruflo-agent-smoke / ruflo-agent structural smoke (push) Failing after 1s
📊 Status Badges Update / 📊 Update Status Badges (push) Failing after 1s
V3 CI/CD Pipeline / Static regression guards (#2267 YAML + (push) Failing after 1s
V3 CI/CD Pipeline / Test V3 Packages (push) Failing after 0s
V3 CI/CD Pipeline / agent_execute provider routing smoke (#2042) (push) Failing after 0s
CVE Audit Gate / Audit v3 (critical-blocking) (push) Failing after 1s
federation-peer-rust / stable-native (push) Failing after 2s
🔗 Cross-Agent Integration Tests / 🚀 Integration Test Setup (push) Failing after 2s
neural-trader-smoke / runtime-smoke (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (macos-latest) (push) Has been skipped
V3 CI/CD Pipeline / Build V3 (ubuntu-latest) (push) Has been skipped
V3 CI/CD Pipeline / Type Check V3 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 24 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 22 (push) Failing after 2s
V3 CI/CD Pipeline / browser rvf create flag smoke (#2015) (push) Failing after 0s
V3 CI/CD Pipeline / Dependency review (#2046) (push) Has been skipped
V3 CI/CD Pipeline / Supply-chain audit (#2046) (push) Failing after 0s
V3 CI/CD Pipeline / witness marker drift smoke (#2021) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader portfolio CG smoke (#2068, ADR-126 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader backtest signing smoke (#2068, ADR-126 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / kg-extract type-import classification smoke (#2049) (push) Failing after 0s
V3 CI/CD Pipeline / witness verify precondition smoke (#1880) (push) Failing after 2s
V3 CI/CD Pipeline / neural-trader pipeline risk-gate smoke (#2068, ADR-126 Phase 5) (push) Failing after 0s
V3 CI/CD Pipeline / neural-trader feature attribution smoke (#2068, ADR-126 Phase 6) (push) Failing after 0s
V3 CI/CD Pipeline / plugin-registry signature verification smoke (#1922, CWE-347) (push) Failing after 4s
V3 CI/CD Pipeline / memory stats legacy-DB smoke (#2120) (push) Failing after 4s
V3 CI/CD Pipeline / github deprecated actions smoke (#2089, ADR-127 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / graph query + pathfinder smoke (ADR-130 P2+P5) (push) Has been skipped
V3 CI/CD Pipeline / graph trajectory hooks smoke (ADR-130 P3) (push) Has been skipped
V3 CI/CD Pipeline / graph plugin adapter smoke (ADR-130 P4) (push) Has been skipped
V3 CI/CD Pipeline / graph benchmark (ADR-130 P6) (push) Has been skipped
V3 CI/CD Pipeline / statusline generator delegation smoke (#2195) (push) Failing after 1s
V3 CI/CD Pipeline / wizard init regression guard (#2206 (push) Failing after 1s
V3 CI/CD Pipeline / memory no-stray-db smoke (ADR-125 P7) (push) Failing after 1s
V3 CI/CD Pipeline / github-safe injection smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github actions pin smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github attribution opt-in smoke (#2089, ADR-127 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / pre-bash hook safety smoke (#2017) (push) Failing after 1s
V3 CI/CD Pipeline / Memory import smoke / ubuntu-latest (push) Failing after 0s
V3 CI/CD Pipeline / MCP protocol smoke / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / ruvllm WASM auto-init smoke (#2086) (push) Failing after 4s
V3 CI/CD Pipeline / MCP paired-tool round-trip smoke (#1889) (push) Failing after 1s
V3 CI/CD Pipeline / Plugin package install-safety (#1902/#1903/#1904) (push) Failing after 1s
V3 CI/CD Pipeline / Tool description discoverability (ADR-112) (push) Failing after 3s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (22) (push) Failing after 1s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (24) (push) Failing after 1s
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Vector-index dimension audit (#1947) (push) Failing after 0s
V3 CI/CD Pipeline / Hook-command install safety (#1921) (push) Failing after 1s
V3 CI/CD Pipeline / ToolOutputGuardrail smoke (ADR-131, (push) Failing after 1s
V3 CI/CD Pipeline / init-bundle invariants smoke (#2095, ADR-128 Phase 5) (push) Failing after 1s
V3 CI/CD Pipeline / wasm provider bridge smoke (ADR-129 P1) (push) Failing after 2s
V3 CI/CD Pipeline / wasm gallery CRUD smoke (ADR-129 P3) (push) Failing after 1s
V3 CI/CD Pipeline / wasm plugin bridge smoke (ADR-129 P4) (push) Failing after 0s
V3 CI/CD Pipeline / wasm compose smoke (ADR-129 P2) (push) Failing after 4s
V3 CI/CD Pipeline / graph schema smoke (ADR-130 P1) (push) Failing after 0s
Validate Marketplace / validate (push) Failing after 1s
🔍 Verification Pipeline / 🚀 Setup Verification (push) Failing after 1s
🔍 Verification Pipeline / 🛡️ Security Verification (push) Has been skipped
🔍 Verification Pipeline / 📝 Code Quality (push) Has been skipped
🔍 Verification Pipeline / 🧪 Test Verification (${{ matrix.os }}, Node ${{ matrix.node }}) (push) Has been skipped
🔍 Verification Pipeline / 🏗️ Build Verification (push) Has been skipped
🔍 Verification Pipeline / 📚 Documentation Verification (push) Has been skipped
CVE Audit Gate / High-severity report (warn only) (push) Has been cancelled
🔄 Automated Rollback Manager / 🔄 Execute Rollback (push) Has been cancelled
🔄 Automated Rollback Manager / ✅ Post-Rollback Verification (push) Has been cancelled
🔄 Automated Rollback Manager / 📊 Rollback Monitoring (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / windows-latest (push) Has been cancelled
🔄 Automated Rollback Manager / ⏳ Manual Rollback Approval (push) Has been cancelled
V3 CI/CD Pipeline / MCP protocol smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Memory import smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / ubuntu-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Publish to npm (alpha) (push) Has been cancelled
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / macos-latest / Node 22 (push) Has been cancelled
V3 CI/CD Pipeline / Plugin hooks smoke / macos-latest / Node 22 (push) Has been cancelled
CI/CD Pipeline / Deploy & Release (push) Has been cancelled
CI/CD Pipeline / CI Status (push) Has been cancelled
🔗 Cross-Agent Integration Tests / 📊 Integration Test Report (push) Has been cancelled
🔄 Automated Rollback Manager / 🔍 Pre-Rollback Validation (push) Has been cancelled
🔍 Verification Pipeline / ⚡ Performance Verification (push) Has been cancelled
🔍 Verification Pipeline / 📊 Verification Report (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:02:19 +08:00

711 lines
20 KiB
Markdown

# @claude-flow/embeddings
[![npm version](https://img.shields.io/npm/v/@claude-flow/embeddings.svg)](https://www.npmjs.com/package/@claude-flow/embeddings)
[![npm downloads](https://img.shields.io/npm/dm/@claude-flow/embeddings.svg)](https://www.npmjs.com/package/@claude-flow/embeddings)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)
[![Performance](https://img.shields.io/badge/Performance-<5ms-brightgreen.svg)](https://github.com/ruvnet/claude-flow)
> High-performance embedding generation module for Claude Flow V3 - multi-provider support with persistent caching, document chunking, normalization, hyperbolic embeddings, and neural substrate integration.
## Features
### Core Embedding
- **Multiple Providers** - Agentic-Flow (ONNX), OpenAI, Transformers.js, and Mock
- **Auto-Install** - Automatically installs agentic-flow when using `provider: 'auto'`
- **Smart Fallback** - Graceful fallback chain: agentic-flow → transformers → mock
- **LRU + Disk Caching** - In-memory LRU + SQLite persistent cache with TTL
- **Batch Processing** - Efficient batch embedding with partial cache hits
- **Similarity Functions** - Cosine, Euclidean, and dot product metrics
- **75x Faster** - Agentic-flow ONNX is 75x faster than Transformers.js
### Advanced Features (New in v3.0.0-alpha.11)
- **Document Chunking** - Character, sentence, paragraph, and token-based chunking with overlap
- **Multiple Normalization** - L2, L1, min-max, and z-score normalization
- **Hyperbolic Embeddings** - Poincaré ball model for hierarchical representations
- **Neural Substrate** - Semantic drift detection, memory physics, swarm coordination
- **Persistent Cache** - SQLite-backed disk cache with LRU eviction and TTL
## Installation
```bash
npm install @claude-flow/embeddings
```
## Standalone use (without the Ruflo CLI)
This package runs on its own — no `@claude-flow/cli`, no MCP server,
no API key required for the recipes below (the `MockEmbeddingService`
gives deterministic 384-dim vectors so examples are reproducible).
Swap to `OpenAIEmbeddingService` / `TransformersEmbeddingService` /
`AgenticFlowEmbeddingService` when you're ready for real embeddings.
### Recipe — Embed + compare without a network call
```typescript
// recipe.mjs
import {
MockEmbeddingService,
cosineSimilarity,
} from '@claude-flow/embeddings';
const service = new MockEmbeddingService({ dimension: 384 });
// `embed()` returns { embedding: Float32Array, tokens, ... } —
// destructure for the raw vector.
const [{ embedding: cat }, { embedding: dog }, { embedding: car }] =
await Promise.all([
service.embed('a friendly cat'),
service.embed('a friendly dog'),
service.embed('a red sports car'),
]);
console.log('cat ↔ dog:', cosineSimilarity(cat, dog).toFixed(4));
console.log('cat ↔ car:', cosineSimilarity(cat, car).toFixed(4));
// With real embeddings the pet pair will score higher than the cat/car pair.
```
### Provider swap — same surface, real vectors
```typescript
import { createEmbeddingService, cosineSimilarity } from '@claude-flow/embeddings';
// OpenAI
const openai = createEmbeddingService({
provider: 'openai',
model: 'text-embedding-3-small',
apiKey: process.env.OPENAI_API_KEY!,
});
// Or local ONNX via @huggingface/transformers (no API key needed)
const local = createEmbeddingService({
provider: 'transformers',
model: 'Xenova/all-MiniLM-L6-v2', // 384-dim, ~25MB
});
await openai.initialize();
const v = await openai.embed('hello world');
```
`cosineSimilarity`, `euclideanDistance`, `dotProduct`, and
`computeSimilarity` are exported as plain functions — useful when you
already have vectors from another source and just need the math.
## Quick Start
```typescript
import { createEmbeddingService, cosineSimilarity } from '@claude-flow/embeddings';
// Create embedding service
const service = createEmbeddingService({
provider: 'openai',
apiKey: process.env.OPENAI_API_KEY!,
model: 'text-embedding-3-small',
dimensions: 1536,
});
// Generate embedding
const result = await service.embed('Hello, world!');
console.log(`Embedding dimension: ${result.embedding.length}`);
console.log(`Latency: ${result.latencyMs}ms`);
// Batch embed
const batchResult = await service.embedBatch([
'First document',
'Second document',
'Third document',
]);
console.log(`Processed ${batchResult.embeddings.length} embeddings`);
console.log(`Cache hits: ${batchResult.cacheStats?.hits}`);
// Calculate similarity
const similarity = cosineSimilarity(
batchResult.embeddings[0],
batchResult.embeddings[1]
);
console.log(`Similarity: ${similarity.toFixed(4)}`);
```
## CLI Usage
```bash
# Generate embedding from CLI
claude-flow embeddings embed "Your text here"
# Batch embed from file
claude-flow embeddings batch documents.txt -o embeddings.json
# Similarity search
claude-flow embeddings search "query" --index ./vectors
# Initialize agentic-flow model
claude-flow embeddings init --provider agentic-flow
```
## API Reference
### Factory Functions
```typescript
import {
createEmbeddingService,
createEmbeddingServiceAsync,
getEmbedding
} from '@claude-flow/embeddings';
// Sync: Create with known provider
const service = createEmbeddingService({
provider: 'openai',
apiKey: 'your-api-key',
model: 'text-embedding-3-small',
});
// Async: Auto-select best provider with fallback
const autoService = await createEmbeddingServiceAsync({
provider: 'auto', // agentic-flow → transformers → mock
autoInstall: true, // Install agentic-flow if missing
fallback: 'transformers', // Custom fallback
});
// Quick one-off embedding
const embedding = await getEmbedding('Hello world', {
provider: 'mock',
dimensions: 384,
});
```
### OpenAI Provider
```typescript
import { OpenAIEmbeddingService } from '@claude-flow/embeddings';
const service = new OpenAIEmbeddingService({
provider: 'openai',
apiKey: process.env.OPENAI_API_KEY!,
model: 'text-embedding-3-small', // or 'text-embedding-3-large'
dimensions: 1536, // Adjustable for v3 models
baseURL: 'https://api.openai.com/v1/embeddings',
timeout: 30000,
maxRetries: 3,
cacheSize: 1000,
});
const result = await service.embed('Your text here');
console.log('Tokens used:', result.usage?.totalTokens);
```
### Agentic-Flow Provider (Fastest)
```typescript
import { AgenticFlowEmbeddingService } from '@claude-flow/embeddings';
const service = new AgenticFlowEmbeddingService({
provider: 'agentic-flow',
modelId: 'default', // Uses optimized ONNX model
cacheSize: 256,
});
// 75x faster than Transformers.js (3ms vs 233ms)
const result = await service.embed('Your text here');
console.log(`ONNX embedding in ${result.latencyMs}ms`);
```
### Transformers.js Provider (Local)
```typescript
import { TransformersEmbeddingService } from '@claude-flow/embeddings';
const service = new TransformersEmbeddingService({
provider: 'transformers',
model: 'Xenova/all-MiniLM-L6-v2', // Any HuggingFace model
cacheSize: 1000,
});
// First call downloads the model
const result = await service.embed('Your text here');
console.log(`Local embedding generated in ${result.latencyMs}ms`);
```
### Mock Provider (Testing)
```typescript
import { MockEmbeddingService } from '@claude-flow/embeddings';
const service = new MockEmbeddingService({
provider: 'mock',
dimensions: 384,
simulatedLatency: 10, // Optional delay
cacheSize: 100,
});
// Deterministic embeddings based on text hash
const result = await service.embed('Your text here');
```
### Batch Processing
```typescript
const result = await service.embedBatch([
'Document 1: Introduction to machine learning',
'Document 2: Deep learning fundamentals',
'Document 3: Natural language processing',
'Document 4: Computer vision basics',
]);
console.log('Batch Results:', {
count: result.embeddings.length,
totalLatency: `${result.totalLatencyMs}ms`,
avgLatency: `${result.avgLatencyMs}ms`,
cacheHits: result.cacheStats?.hits,
cacheMisses: result.cacheStats?.misses,
tokensUsed: result.usage?.totalTokens,
});
```
### Similarity Functions
```typescript
import {
cosineSimilarity,
euclideanDistance,
dotProduct,
computeSimilarity,
} from '@claude-flow/embeddings';
// Cosine similarity (most common for embeddings)
const cosine = cosineSimilarity(embedding1, embedding2);
// Returns: 0.0 to 1.0 (higher = more similar)
// Euclidean distance
const distance = euclideanDistance(embedding1, embedding2);
// Returns: 0.0 to infinity (lower = more similar)
// Dot product
const dot = dotProduct(embedding1, embedding2);
// Returns: unbounded (higher = more similar for normalized vectors)
// Generic similarity with metric selection
const result = computeSimilarity(embedding1, embedding2, 'cosine');
// Returns: { score: 0.95, metric: 'cosine' }
```
### Cache Management
```typescript
// Get cache statistics
const stats = service.getCacheStats();
console.log('Cache Stats:', {
size: stats.size,
maxSize: stats.maxSize,
hitRate: `${(stats.hitRate * 100).toFixed(1)}%`,
});
// Clear cache
service.clearCache();
// Shutdown service
await service.shutdown();
```
### Event System
```typescript
// Subscribe to embedding events
service.addEventListener((event) => {
switch (event.type) {
case 'embed_start':
console.log(`Starting: ${event.text.substring(0, 50)}...`);
break;
case 'embed_complete':
console.log(`Completed in ${event.latencyMs}ms`);
break;
case 'embed_error':
console.error(`Error: ${event.error}`);
break;
case 'cache_hit':
console.log('Cache hit!');
break;
case 'batch_start':
console.log(`Batch of ${event.count} started`);
break;
case 'batch_complete':
console.log(`Batch completed in ${event.latencyMs}ms`);
break;
case 'cache_eviction':
console.log(`Cache evicted ${event.size} entries`);
break;
}
});
// Remove listener
service.removeEventListener(listener);
```
## Provider Comparison
| Provider | Latency | Quality | Cost | Offline |
|----------|---------|---------|------|---------|
| **Agentic-Flow** | ~3ms | Good | Free | Yes |
| **OpenAI** | ~50-100ms | Excellent | $0.02-0.13/1M tokens | No |
| **Transformers.js** | ~230ms | Good | Free | Yes |
| **Mock** | <1ms | N/A | Free | Yes |
### Agentic-Flow (Recommended)
| Model | Dimensions | Speed | Best For |
|-------|------------|-------|----------|
| `default` | 384 | 3ms | General purpose, fastest |
### OpenAI Models
| Model | Dimensions | Max Tokens | Best For |
|-------|------------|------------|----------|
| `text-embedding-3-small` | 1536 | 8191 | General purpose, cost-effective |
| `text-embedding-3-large` | 3072 | 8191 | Highest quality |
| `text-embedding-ada-002` | 1536 | 8191 | Legacy support |
### Transformers.js Models
| Model | Dimensions | Size | Best For |
|-------|------------|------|----------|
| `Xenova/all-MiniLM-L6-v2` | 384 | 23MB | Fast, general purpose |
| `Xenova/all-mpnet-base-v2` | 768 | 110MB | Higher quality |
| `Xenova/bge-small-en-v1.5` | 384 | 33MB | Retrieval optimized |
## TypeScript Types
```typescript
import type {
// Provider types
EmbeddingProvider,
EmbeddingConfig,
OpenAIEmbeddingConfig,
TransformersEmbeddingConfig,
AgenticFlowEmbeddingConfig,
MockEmbeddingConfig,
AutoEmbeddingConfig,
// Result types
EmbeddingResult,
BatchEmbeddingResult,
// Service interface
IEmbeddingService,
// Event types
EmbeddingEvent,
EmbeddingEventListener,
// Similarity types
SimilarityMetric,
SimilarityResult,
} from '@claude-flow/embeddings';
```
## Environment Variables
```bash
# OpenAI configuration
OPENAI_API_KEY=sk-...
# Optional: Custom base URL (for Azure OpenAI, etc.)
OPENAI_BASE_URL=https://your-endpoint.openai.azure.com/
```
## Error Handling
```typescript
try {
const result = await service.embed('Your text');
} catch (error) {
if (error instanceof Error) {
if (error.message.includes('API error')) {
// Handle API errors (rate limits, auth, etc.)
} else if (error.message.includes('Failed to initialize')) {
// Handle model loading errors (Transformers.js)
}
}
}
```
## Integration with Memory Module
```typescript
import { createEmbeddingService } from '@claude-flow/embeddings';
import { HNSWIndex } from '@claude-flow/memory';
// Create embedding service
const embeddings = createEmbeddingService({
provider: 'openai',
apiKey: process.env.OPENAI_API_KEY!,
model: 'text-embedding-3-small',
});
// Create HNSW index
const index = new HNSWIndex({
dimensions: 1536,
metric: 'cosine',
});
// Index documents
const documents = ['Doc 1 content', 'Doc 2 content', 'Doc 3 content'];
const { embeddings: vectors } = await embeddings.embedBatch(documents);
vectors.forEach((vector, i) => {
index.addPoint(`doc-${i}`, new Float32Array(vector));
});
// Search
const queryResult = await embeddings.embed('Search query');
const results = await index.search(new Float32Array(queryResult.embedding), 5);
```
## Document Chunking
Split long documents into overlapping chunks for embedding:
```typescript
import { chunkText, estimateTokens, reconstructFromChunks } from '@claude-flow/embeddings';
// Chunk by sentence (default)
const result = chunkText(longDocument, {
maxChunkSize: 512,
overlap: 50,
strategy: 'sentence', // 'character' | 'sentence' | 'paragraph' | 'token'
minChunkSize: 100,
});
console.log('Chunks:', result.totalChunks);
result.chunks.forEach((chunk, i) => {
console.log(`Chunk ${i}: ${chunk.length} chars, ~${chunk.tokenCount} tokens`);
});
// Estimate tokens
const tokens = estimateTokens('Hello world'); // ~3 tokens
// Reconstruct (approximate)
const reconstructed = reconstructFromChunks(result.chunks);
```
## Normalization
Normalize embeddings for consistent similarity computation:
```typescript
import {
l2Normalize, // Unit vector (Euclidean norm = 1)
l1Normalize, // Manhattan norm = 1
minMaxNormalize, // Values in [0, 1]
zScoreNormalize, // Mean 0, std 1
normalize, // Generic with type option
l2Norm,
isNormalized,
} from '@claude-flow/embeddings';
const embedding = new Float32Array([3, 4, 0]);
// L2 normalize (most common for cosine similarity)
const l2 = l2Normalize(embedding); // [0.6, 0.8, 0]
console.log('L2 norm:', l2Norm(l2)); // 1.0
// Check if already normalized
console.log(isNormalized(l2)); // true
console.log(isNormalized(embedding)); // false
// Generic normalize with type
const normalized = normalize(embedding, { type: 'l2' });
```
## Hyperbolic Embeddings (Poincaré Ball)
Transform embeddings to hyperbolic space for better hierarchical representation:
```typescript
import {
euclideanToPoincare,
poincareToEuclidean,
hyperbolicDistance,
mobiusAdd,
isInPoincareBall,
batchEuclideanToPoincare,
hyperbolicCentroid,
} from '@claude-flow/embeddings';
// Convert Euclidean embedding to Poincaré ball
const euclidean = new Float32Array([0.5, 0.3, 0.2]);
const poincare = euclideanToPoincare(euclidean);
// Check if point is in the ball
console.log(isInPoincareBall(poincare)); // true
// Round-trip conversion
const back = poincareToEuclidean(poincare);
// Hyperbolic distance (geodesic in Poincaré ball)
const a = euclideanToPoincare(new Float32Array([0.1, 0.2, 0.1]));
const b = euclideanToPoincare(new Float32Array([0.3, 0.1, 0.2]));
const dist = hyperbolicDistance(a, b);
// Möbius addition (hyperbolic "plus")
const sum = mobiusAdd(a, b);
// Batch conversion
const embeddings = [vec1, vec2, vec3];
const hyperbolic = batchEuclideanToPoincare(embeddings);
// Hyperbolic centroid (Fréchet mean)
const centroid = hyperbolicCentroid(hyperbolic);
```
### Why Hyperbolic?
Hyperbolic space has natural properties for representing hierarchical data:
- **Exponential growth** - Tree-like structures fit naturally
- **Better hierarchy** - Parent-child relationships preserved
- **Lower distortion** - Taxonomies represented with less error
## Neural Substrate Integration
Access agentic-flow's neural features for advanced embedding operations:
```typescript
import {
NeuralEmbeddingService,
createNeuralService,
isNeuralAvailable,
listEmbeddingModels,
downloadEmbeddingModel,
} from '@claude-flow/embeddings';
// Check if neural features are available
const available = await isNeuralAvailable();
// Create neural service
const neural = createNeuralService({ dimension: 384 });
await neural.init();
if (neural.isAvailable()) {
// Semantic drift detection
await neural.setDriftBaseline('Initial context about the topic');
const drift = await neural.detectDrift('New input to check for drift');
console.log('Drift:', drift?.trend); // 'stable' | 'drifting' | 'accelerating'
// Memory with interference detection
const stored = await neural.storeMemory('mem-1', 'Important information');
console.log('Interference:', stored?.interference);
// Recall by similarity
const memories = await neural.recallMemories('query', 5);
// Swarm coordination
await neural.addSwarmAgent('agent-1', 'researcher');
const coordination = await neural.coordinateSwarm('Analyze this task');
// Coherence checking
await neural.calibrateCoherence(['good output 1', 'good output 2']);
const coherence = await neural.checkCoherence('Output to check');
// Health status
const health = neural.health();
console.log('Memory count:', health?.memoryCount);
}
// List available ONNX models
const models = await listEmbeddingModels();
console.log(models);
// [{ id: 'all-MiniLM-L6-v2', dimension: 384, size: '23MB', ... }]
// Download model
const path = await downloadEmbeddingModel('all-MiniLM-L6-v2', '.models');
```
## Persistent Disk Cache
SQLite-backed persistent cache for embeddings:
```typescript
import { PersistentEmbeddingCache, isPersistentCacheAvailable } from '@claude-flow/embeddings';
// Check if SQLite is available
const hasSQLite = await isPersistentCacheAvailable();
// Create persistent cache
const cache = new PersistentEmbeddingCache({
dbPath: './embeddings.db', // SQLite database path
maxSize: 10000, // Max entries before LRU eviction
ttlMs: 7 * 24 * 60 * 60 * 1000, // 7 day TTL
});
// Initialize
await cache.init();
// Store embedding
await cache.set('my text', new Float32Array([0.1, 0.2, 0.3]));
// Retrieve
const embedding = await cache.get('my text');
// Get stats
const stats = await cache.getStats();
console.log('Cache stats:', {
size: stats.totalEntries,
hitRate: stats.hitRate,
avgLatency: stats.avgLatencyMs,
});
// Close when done
await cache.close();
```
### Enable in Embedding Service
```typescript
const service = createEmbeddingService({
provider: 'openai',
apiKey: process.env.OPENAI_API_KEY!,
persistentCache: {
enabled: true,
dbPath: './cache/embeddings.db',
maxSize: 50000,
ttlMs: 30 * 24 * 60 * 60 * 1000, // 30 days
},
normalization: 'l2', // Auto-normalize embeddings
});
```
## CLI Commands (New)
```bash
# Document chunking
claude-flow embeddings chunk document.txt --strategy sentence --max-size 512
# Normalize embedding file
claude-flow embeddings normalize embeddings.json --type l2 -o normalized.json
# Convert to hyperbolic
claude-flow embeddings hyperbolic embeddings.json -o poincare.json
# Neural operations
claude-flow embeddings neural drift --baseline "context" --input "check this"
claude-flow embeddings neural store --id mem-1 --content "data"
claude-flow embeddings neural recall "query" --top-k 5
# List/download models
claude-flow embeddings models list
claude-flow embeddings models download all-MiniLM-L6-v2
# Cache management
claude-flow embeddings cache stats
claude-flow embeddings cache clear --older-than 7d
```
## Related Packages
- [@claude-flow/memory](../memory) - HNSW indexing and vector storage
- [@claude-flow/providers](../providers) - Multi-LLM provider system
- [@claude-flow/neural](../neural) - SONA learning integration
## License
MIT