@mnemoai/core 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.d.ts +128 -0
- package/dist/index.d.ts.map +1 -0
- package/{index.ts → dist/index.js} +526 -1333
- package/dist/index.js.map +7 -0
- package/dist/src/access-tracker.d.ts +97 -0
- package/dist/src/access-tracker.d.ts.map +1 -0
- package/dist/src/access-tracker.js +184 -0
- package/dist/src/access-tracker.js.map +7 -0
- package/dist/src/adapters/chroma.d.ts +31 -0
- package/dist/src/adapters/chroma.d.ts.map +1 -0
- package/{src/adapters/chroma.ts → dist/src/adapters/chroma.js} +45 -107
- package/dist/src/adapters/chroma.js.map +7 -0
- package/dist/src/adapters/lancedb.d.ts +29 -0
- package/dist/src/adapters/lancedb.d.ts.map +1 -0
- package/{src/adapters/lancedb.ts → dist/src/adapters/lancedb.js} +41 -109
- package/dist/src/adapters/lancedb.js.map +7 -0
- package/dist/src/adapters/pgvector.d.ts +33 -0
- package/dist/src/adapters/pgvector.d.ts.map +1 -0
- package/{src/adapters/pgvector.ts → dist/src/adapters/pgvector.js} +42 -104
- package/dist/src/adapters/pgvector.js.map +7 -0
- package/dist/src/adapters/qdrant.d.ts +34 -0
- package/dist/src/adapters/qdrant.d.ts.map +1 -0
- package/dist/src/adapters/qdrant.js +132 -0
- package/dist/src/adapters/qdrant.js.map +7 -0
- package/dist/src/adaptive-retrieval.d.ts +14 -0
- package/dist/src/adaptive-retrieval.d.ts.map +1 -0
- package/dist/src/adaptive-retrieval.js +52 -0
- package/dist/src/adaptive-retrieval.js.map +7 -0
- package/dist/src/audit-log.d.ts +56 -0
- package/dist/src/audit-log.d.ts.map +1 -0
- package/dist/src/audit-log.js +139 -0
- package/dist/src/audit-log.js.map +7 -0
- package/dist/src/chunker.d.ts +45 -0
- package/dist/src/chunker.d.ts.map +1 -0
- package/dist/src/chunker.js +157 -0
- package/dist/src/chunker.js.map +7 -0
- package/dist/src/config.d.ts +70 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +142 -0
- package/dist/src/config.js.map +7 -0
- package/dist/src/decay-engine.d.ts +73 -0
- package/dist/src/decay-engine.d.ts.map +1 -0
- package/dist/src/decay-engine.js +119 -0
- package/dist/src/decay-engine.js.map +7 -0
- package/dist/src/embedder.d.ts +94 -0
- package/dist/src/embedder.d.ts.map +1 -0
- package/{src/embedder.ts → dist/src/embedder.js} +119 -317
- package/dist/src/embedder.js.map +7 -0
- package/dist/src/extraction-prompts.d.ts +12 -0
- package/dist/src/extraction-prompts.d.ts.map +1 -0
- package/dist/src/extraction-prompts.js +311 -0
- package/dist/src/extraction-prompts.js.map +7 -0
- package/dist/src/license.d.ts +29 -0
- package/dist/src/license.d.ts.map +1 -0
- package/{src/license.ts → dist/src/license.js} +42 -113
- package/dist/src/license.js.map +7 -0
- package/dist/src/llm-client.d.ts +23 -0
- package/dist/src/llm-client.d.ts.map +1 -0
- package/{src/llm-client.ts → dist/src/llm-client.js} +22 -55
- package/dist/src/llm-client.js.map +7 -0
- package/dist/src/logger.d.ts +33 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +35 -0
- package/dist/src/logger.js.map +7 -0
- package/dist/src/mcp-server.d.ts +16 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/{src/mcp-server.ts → dist/src/mcp-server.js} +81 -181
- package/dist/src/mcp-server.js.map +7 -0
- package/dist/src/memory-categories.d.ts +40 -0
- package/dist/src/memory-categories.d.ts.map +1 -0
- package/dist/src/memory-categories.js +33 -0
- package/dist/src/memory-categories.js.map +7 -0
- package/dist/src/memory-upgrader.d.ts +71 -0
- package/dist/src/memory-upgrader.d.ts.map +1 -0
- package/dist/src/memory-upgrader.js +238 -0
- package/dist/src/memory-upgrader.js.map +7 -0
- package/dist/src/migrate.d.ts +47 -0
- package/dist/src/migrate.d.ts.map +1 -0
- package/{src/migrate.ts → dist/src/migrate.js} +57 -165
- package/dist/src/migrate.js.map +7 -0
- package/dist/src/mnemo.d.ts +67 -0
- package/dist/src/mnemo.d.ts.map +1 -0
- package/dist/src/mnemo.js +66 -0
- package/dist/src/mnemo.js.map +7 -0
- package/dist/src/noise-filter.d.ts +23 -0
- package/dist/src/noise-filter.d.ts.map +1 -0
- package/dist/src/noise-filter.js +62 -0
- package/dist/src/noise-filter.js.map +7 -0
- package/dist/src/noise-prototypes.d.ts +40 -0
- package/dist/src/noise-prototypes.d.ts.map +1 -0
- package/dist/src/noise-prototypes.js +116 -0
- package/dist/src/noise-prototypes.js.map +7 -0
- package/dist/src/observability.d.ts +16 -0
- package/dist/src/observability.d.ts.map +1 -0
- package/dist/src/observability.js +53 -0
- package/dist/src/observability.js.map +7 -0
- package/dist/src/query-tracker.d.ts +27 -0
- package/dist/src/query-tracker.d.ts.map +1 -0
- package/dist/src/query-tracker.js +32 -0
- package/dist/src/query-tracker.js.map +7 -0
- package/dist/src/reflection-event-store.d.ts +44 -0
- package/dist/src/reflection-event-store.d.ts.map +1 -0
- package/dist/src/reflection-event-store.js +50 -0
- package/dist/src/reflection-event-store.js.map +7 -0
- package/dist/src/reflection-item-store.d.ts +58 -0
- package/dist/src/reflection-item-store.d.ts.map +1 -0
- package/dist/src/reflection-item-store.js +69 -0
- package/dist/src/reflection-item-store.js.map +7 -0
- package/dist/src/reflection-mapped-metadata.d.ts +47 -0
- package/dist/src/reflection-mapped-metadata.d.ts.map +1 -0
- package/dist/src/reflection-mapped-metadata.js +40 -0
- package/dist/src/reflection-mapped-metadata.js.map +7 -0
- package/dist/src/reflection-metadata.d.ts +11 -0
- package/dist/src/reflection-metadata.d.ts.map +1 -0
- package/dist/src/reflection-metadata.js +24 -0
- package/dist/src/reflection-metadata.js.map +7 -0
- package/dist/src/reflection-ranking.d.ts +13 -0
- package/dist/src/reflection-ranking.d.ts.map +1 -0
- package/{src/reflection-ranking.ts → dist/src/reflection-ranking.js} +12 -21
- package/dist/src/reflection-ranking.js.map +7 -0
- package/dist/src/reflection-retry.d.ts +30 -0
- package/dist/src/reflection-retry.d.ts.map +1 -0
- package/{src/reflection-retry.ts → dist/src/reflection-retry.js} +24 -64
- package/dist/src/reflection-retry.js.map +7 -0
- package/dist/src/reflection-slices.d.ts +42 -0
- package/dist/src/reflection-slices.d.ts.map +1 -0
- package/{src/reflection-slices.ts → dist/src/reflection-slices.js} +60 -136
- package/dist/src/reflection-slices.js.map +7 -0
- package/dist/src/reflection-store.d.ts +85 -0
- package/dist/src/reflection-store.d.ts.map +1 -0
- package/dist/src/reflection-store.js +407 -0
- package/dist/src/reflection-store.js.map +7 -0
- package/dist/src/resonance-state.d.ts +19 -0
- package/dist/src/resonance-state.d.ts.map +1 -0
- package/{src/resonance-state.ts → dist/src/resonance-state.js} +13 -42
- package/dist/src/resonance-state.js.map +7 -0
- package/dist/src/retriever.d.ts +228 -0
- package/dist/src/retriever.d.ts.map +1 -0
- package/dist/src/retriever.js +1006 -0
- package/dist/src/retriever.js.map +7 -0
- package/dist/src/scopes.d.ts +58 -0
- package/dist/src/scopes.d.ts.map +1 -0
- package/dist/src/scopes.js +252 -0
- package/dist/src/scopes.js.map +7 -0
- package/dist/src/self-improvement-files.d.ts +20 -0
- package/dist/src/self-improvement-files.d.ts.map +1 -0
- package/{src/self-improvement-files.ts → dist/src/self-improvement-files.js} +24 -49
- package/dist/src/self-improvement-files.js.map +7 -0
- package/dist/src/semantic-gate.d.ts +24 -0
- package/dist/src/semantic-gate.d.ts.map +1 -0
- package/dist/src/semantic-gate.js +86 -0
- package/dist/src/semantic-gate.js.map +7 -0
- package/dist/src/session-recovery.d.ts +9 -0
- package/dist/src/session-recovery.d.ts.map +1 -0
- package/{src/session-recovery.ts → dist/src/session-recovery.js} +40 -57
- package/dist/src/session-recovery.js.map +7 -0
- package/dist/src/smart-extractor.d.ts +107 -0
- package/dist/src/smart-extractor.d.ts.map +1 -0
- package/{src/smart-extractor.ts → dist/src/smart-extractor.js} +130 -383
- package/dist/src/smart-extractor.js.map +7 -0
- package/dist/src/smart-metadata.d.ts +103 -0
- package/dist/src/smart-metadata.d.ts.map +1 -0
- package/dist/src/smart-metadata.js +361 -0
- package/dist/src/smart-metadata.js.map +7 -0
- package/dist/src/storage-adapter.d.ts +102 -0
- package/dist/src/storage-adapter.d.ts.map +1 -0
- package/dist/src/storage-adapter.js +22 -0
- package/dist/src/storage-adapter.js.map +7 -0
- package/dist/src/store.d.ts +108 -0
- package/dist/src/store.d.ts.map +1 -0
- package/dist/src/store.js +939 -0
- package/dist/src/store.js.map +7 -0
- package/dist/src/tier-manager.d.ts +57 -0
- package/dist/src/tier-manager.d.ts.map +1 -0
- package/dist/src/tier-manager.js +80 -0
- package/dist/src/tier-manager.js.map +7 -0
- package/dist/src/tools.d.ts +43 -0
- package/dist/src/tools.d.ts.map +1 -0
- package/dist/src/tools.js +1075 -0
- package/dist/src/tools.js.map +7 -0
- package/dist/src/wal-recovery.d.ts +30 -0
- package/dist/src/wal-recovery.d.ts.map +1 -0
- package/{src/wal-recovery.ts → dist/src/wal-recovery.js} +26 -79
- package/dist/src/wal-recovery.js.map +7 -0
- package/package.json +21 -2
- package/openclaw.plugin.json +0 -815
- package/src/access-tracker.ts +0 -341
- package/src/adapters/README.md +0 -78
- package/src/adapters/qdrant.ts +0 -191
- package/src/adaptive-retrieval.ts +0 -90
- package/src/audit-log.ts +0 -238
- package/src/chunker.ts +0 -254
- package/src/config.ts +0 -271
- package/src/decay-engine.ts +0 -238
- package/src/extraction-prompts.ts +0 -339
- package/src/memory-categories.ts +0 -71
- package/src/memory-upgrader.ts +0 -388
- package/src/mnemo.ts +0 -142
- package/src/noise-filter.ts +0 -97
- package/src/noise-prototypes.ts +0 -164
- package/src/observability.ts +0 -81
- package/src/query-tracker.ts +0 -57
- package/src/reflection-event-store.ts +0 -98
- package/src/reflection-item-store.ts +0 -112
- package/src/reflection-mapped-metadata.ts +0 -84
- package/src/reflection-metadata.ts +0 -23
- package/src/reflection-store.ts +0 -602
- package/src/retriever.ts +0 -1510
- package/src/scopes.ts +0 -375
- package/src/semantic-gate.ts +0 -121
- package/src/smart-metadata.ts +0 -561
- package/src/storage-adapter.ts +0 -153
- package/src/store.ts +0 -1330
- package/src/tier-manager.ts +0 -189
- package/src/tools.ts +0 -1292
- package/test/core.test.mjs +0 -301
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/decay-engine.ts"],
|
|
4
|
+
"sourcesContent": ["// SPDX-License-Identifier: MIT\n/**\n * Decay Engine \u2014 Weibull stretched-exponential decay model\n *\n * Composite score = recencyWeight * recency + frequencyWeight * frequency + intrinsicWeight * intrinsic\n *\n * - Recency: Weibull decay with importance-modulated half-life and tier-specific beta\n * - Frequency: Logarithmic saturation with time-weighted access pattern bonus\n * - Intrinsic: importance \u00D7 confidence\n */\n\nimport type { MemoryTier } from \"./memory-categories.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nconst MS_PER_DAY = 86_400_000;\n\nexport interface DecayConfig {\n /** Days until recency score halves (default: 30) */\n recencyHalfLifeDays: number;\n /** Weight of recency in composite (default: 0.4) */\n recencyWeight: number;\n /** Weight of access frequency (default: 0.3) */\n frequencyWeight: number;\n /** Weight of importance \u00D7 confidence (default: 0.3) */\n intrinsicWeight: number;\n /** Below this composite = stale (default: 0.3) */\n staleThreshold: number;\n /** Minimum search boost (default: 0.3) */\n searchBoostMin: number;\n /** Importance modulation coefficient for half-life (default: 1.5) */\n importanceModulation: number;\n /** Weibull beta for Core tier \u2014 sub-exponential (default: 0.8) */\n betaCore: number;\n /** Weibull beta for Working tier \u2014 standard exponential (default: 1.0) */\n betaWorking: number;\n /** Weibull beta for Peripheral tier \u2014 super-exponential (default: 1.3) */\n betaPeripheral: number;\n /** Decay floor for Core memories (default: 0.9) */\n coreDecayFloor: number;\n /** Decay floor for Working memories (default: 0.7) */\n workingDecayFloor: number;\n /** Decay floor for Peripheral memories (default: 0.5) */\n peripheralDecayFloor: number;\n}\n\n// NOTE: These weights are initial values pending grid-search optimization.\nexport const DEFAULT_DECAY_CONFIG: DecayConfig = {\n recencyHalfLifeDays: 30,\n recencyWeight: 0.4, // initial \u2014 pending optimization\n frequencyWeight: 0.3, // initial \u2014 pending optimization\n intrinsicWeight: 0.3, // initial \u2014 pending optimization\n staleThreshold: 0.3,\n searchBoostMin: 0.3,\n importanceModulation: 1.5,\n betaCore: 0.8,\n betaWorking: 1.0,\n betaPeripheral: 1.3,\n coreDecayFloor: 0.9,\n workingDecayFloor: 0.7,\n peripheralDecayFloor: 0.5,\n};\n\nexport interface DecayScore {\n memoryId: string;\n recency: number;\n frequency: number;\n intrinsic: number;\n composite: number;\n}\n\n/** Minimal memory fields needed for decay calculation. */\nexport interface DecayableMemory {\n id: string;\n importance: number;\n confidence: number;\n tier: MemoryTier;\n accessCount: number;\n createdAt: number;\n lastAccessedAt: number;\n /** Emotional salience (0-1). Modulates decay: high salience = slower decay. */\n emotionalSalience: number;\n}\n\nexport interface DecayEngine {\n /** Calculate decay score for a single memory */\n score(memory: DecayableMemory, now?: number): DecayScore;\n /** Calculate decay scores for multiple memories */\n scoreAll(memories: DecayableMemory[], now?: number): DecayScore[];\n /** Apply decay boost to search results (multiplies each score by boost) */\n applySearchBoost(\n results: Array<{ memory: DecayableMemory; score: number }>,\n now?: number,\n ): void;\n /** Find stale memories (composite below threshold) */\n getStaleMemories(\n memories: DecayableMemory[],\n now?: number,\n ): DecayScore[];\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createDecayEngine(\n config: DecayConfig = DEFAULT_DECAY_CONFIG,\n): DecayEngine {\n const {\n recencyHalfLifeDays: halfLife,\n recencyWeight: rw,\n frequencyWeight: fw,\n intrinsicWeight: iw,\n staleThreshold,\n searchBoostMin: boostMin,\n importanceModulation: mu,\n betaCore,\n betaWorking,\n betaPeripheral,\n coreDecayFloor,\n workingDecayFloor,\n peripheralDecayFloor,\n } = config;\n\n function getTierBeta(tier: MemoryTier): number {\n switch (tier) {\n case \"core\":\n return betaCore;\n case \"working\":\n return betaWorking;\n case \"peripheral\":\n return betaPeripheral;\n }\n }\n\n function getTierFloor(tier: MemoryTier): number {\n switch (tier) {\n case \"core\":\n return coreDecayFloor;\n case \"working\":\n return workingDecayFloor;\n case \"peripheral\":\n return peripheralDecayFloor;\n }\n }\n\n /**\n * Recency: Weibull stretched-exponential decay with importance + salience modulated half-life.\n * effectiveHL = halfLife * exp(mu * importance) * (1 + salience * 0.5)\n *\n * Salience effect: a memory with salience=1.0 gets 1.5x the half-life.\n * This models the human brain's amygdala tagging: emotionally charged\n * memories decay slower regardless of their \"importance\" category.\n */\n function recency(memory: DecayableMemory, now: number): number {\n const lastActive =\n memory.accessCount > 0 ? memory.lastAccessedAt : memory.createdAt;\n const daysSince = Math.max(0, (now - lastActive) / MS_PER_DAY);\n const salience = memory.emotionalSalience ?? 0.3;\n const effectiveHL = halfLife * Math.exp(mu * memory.importance) * (1 + salience * 0.5);\n const lambda = Math.LN2 / effectiveHL;\n const beta = getTierBeta(memory.tier);\n return Math.exp(-lambda * Math.pow(daysSince, beta));\n }\n\n /**\n * Frequency: logarithmic saturation curve with time-weighted access pattern bonus.\n * base = 1 - exp(-accessCount / 5)\n * For memories with >1 access, a recentness bonus is applied.\n */\n function frequency(memory: DecayableMemory): number {\n const base = 1 - Math.exp(-memory.accessCount / 5);\n if (memory.accessCount <= 1) return base;\n\n const lastActive =\n memory.accessCount > 0 ? memory.lastAccessedAt : memory.createdAt;\n const accessSpanDays = Math.max(\n 1,\n (lastActive - memory.createdAt) / MS_PER_DAY,\n );\n const avgGapDays = accessSpanDays / Math.max(memory.accessCount - 1, 1);\n const recentnessBonus = Math.exp(-avgGapDays / 30);\n return base * (0.5 + 0.5 * recentnessBonus);\n }\n\n /**\n * Intrinsic value: importance \u00D7 confidence \u00D7 (1 + salience * 0.3).\n * Salience gives a mild intrinsic boost \u2014 emotionally significant memories\n * are inherently more valuable even if importance score is moderate.\n */\n function intrinsic(memory: DecayableMemory): number {\n const salience = memory.emotionalSalience ?? 0.3;\n return memory.importance * memory.confidence * (1 + salience * 0.3);\n }\n\n function scoreOne(memory: DecayableMemory, now: number): DecayScore {\n const r = recency(memory, now);\n const f = frequency(memory);\n const i = intrinsic(memory);\n const composite = rw * r + fw * f + iw * i;\n\n return {\n memoryId: memory.id,\n recency: r,\n frequency: f,\n intrinsic: i,\n composite,\n };\n }\n\n return {\n score(memory, now = Date.now()) {\n return scoreOne(memory, now);\n },\n\n scoreAll(memories, now = Date.now()) {\n return memories.map((m) => scoreOne(m, now));\n },\n\n applySearchBoost(results, now = Date.now()) {\n for (const r of results) {\n const ds = scoreOne(r.memory, now);\n const tierFloor = Math.max(getTierFloor(r.memory.tier), ds.composite);\n const multiplier = boostMin + ((1 - boostMin) * tierFloor);\n r.score *= Math.min(1, Math.max(boostMin, multiplier));\n }\n },\n\n getStaleMemories(memories, now = Date.now()) {\n const scores = memories.map((m) => scoreOne(m, now));\n return scores\n .filter((s) => s.composite < staleThreshold)\n .sort((a, b) => a.composite - b.composite);\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Abstraction Layer
|
|
3
|
+
* OpenAI-compatible API for various embedding providers.
|
|
4
|
+
* Supports automatic chunking for documents exceeding embedding context limits.
|
|
5
|
+
*
|
|
6
|
+
* Note: Some providers (e.g. Jina) support extra parameters like `task` and
|
|
7
|
+
* `normalized` on the embeddings endpoint. The OpenAI SDK types do not include
|
|
8
|
+
* these fields, so we pass them via a narrow `any` cast.
|
|
9
|
+
*/
|
|
10
|
+
export interface EmbeddingConfig {
|
|
11
|
+
provider: "openai-compatible";
|
|
12
|
+
/** Single API key or array of keys for round-robin rotation with failover. */
|
|
13
|
+
apiKey: string | string[];
|
|
14
|
+
model: string;
|
|
15
|
+
baseURL?: string;
|
|
16
|
+
dimensions?: number;
|
|
17
|
+
/** Optional task type for query embeddings (e.g. "retrieval.query") */
|
|
18
|
+
taskQuery?: string;
|
|
19
|
+
/** Optional task type for passage/document embeddings (e.g. "retrieval.passage") */
|
|
20
|
+
taskPassage?: string;
|
|
21
|
+
/** Optional flag to request normalized embeddings (provider-dependent, e.g. Jina v5) */
|
|
22
|
+
normalized?: boolean;
|
|
23
|
+
/** Enable automatic chunking for documents exceeding context limits (default: true) */
|
|
24
|
+
chunking?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function formatEmbeddingProviderError(error: unknown, opts: {
|
|
27
|
+
baseURL?: string;
|
|
28
|
+
model: string;
|
|
29
|
+
mode?: "single" | "batch";
|
|
30
|
+
}): string;
|
|
31
|
+
export declare function getVectorDimensions(model: string, overrideDims?: number): number;
|
|
32
|
+
export declare class Embedder {
|
|
33
|
+
/** Pool of OpenAI clients — one per API key for round-robin rotation. */
|
|
34
|
+
private clients;
|
|
35
|
+
/** Round-robin index for client rotation. */
|
|
36
|
+
private _clientIndex;
|
|
37
|
+
readonly dimensions: number;
|
|
38
|
+
private readonly _cache;
|
|
39
|
+
private readonly _model;
|
|
40
|
+
private readonly _baseURL?;
|
|
41
|
+
private readonly _taskQuery?;
|
|
42
|
+
private readonly _taskPassage?;
|
|
43
|
+
private readonly _normalized?;
|
|
44
|
+
/** Optional requested dimensions to pass through to the embedding provider (OpenAI-compatible). */
|
|
45
|
+
private readonly _requestDimensions?;
|
|
46
|
+
/** Enable automatic chunking for long documents (default: true) */
|
|
47
|
+
private readonly _autoChunk;
|
|
48
|
+
constructor(config: EmbeddingConfig & {
|
|
49
|
+
chunking?: boolean;
|
|
50
|
+
});
|
|
51
|
+
/** Return the next client in round-robin order. */
|
|
52
|
+
private nextClient;
|
|
53
|
+
/** Check whether an error is a rate-limit / quota-exceeded / overload error. */
|
|
54
|
+
private isRateLimitError;
|
|
55
|
+
/**
|
|
56
|
+
* Call embeddings.create with automatic key rotation on rate-limit errors.
|
|
57
|
+
* Tries each key in the pool at most once before giving up.
|
|
58
|
+
*/
|
|
59
|
+
private embedWithRetry;
|
|
60
|
+
/** Number of API keys in the rotation pool. */
|
|
61
|
+
get keyCount(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Backward-compatible embedding API.
|
|
64
|
+
*
|
|
65
|
+
* Historically the plugin used a single `embed()` method for both query and
|
|
66
|
+
* passage embeddings. With task-aware providers we treat this as passage.
|
|
67
|
+
*/
|
|
68
|
+
embed(text: string): Promise<number[]>;
|
|
69
|
+
/** Backward-compatible batch embedding API (treated as passage). */
|
|
70
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
71
|
+
embedQuery(text: string): Promise<number[]>;
|
|
72
|
+
embedPassage(text: string): Promise<number[]>;
|
|
73
|
+
embedBatchQuery(texts: string[]): Promise<number[][]>;
|
|
74
|
+
embedBatchPassage(texts: string[]): Promise<number[][]>;
|
|
75
|
+
private validateEmbedding;
|
|
76
|
+
private buildPayload;
|
|
77
|
+
private embedSingle;
|
|
78
|
+
private embedMany;
|
|
79
|
+
get model(): string;
|
|
80
|
+
test(): Promise<{
|
|
81
|
+
success: boolean;
|
|
82
|
+
error?: string;
|
|
83
|
+
dimensions?: number;
|
|
84
|
+
}>;
|
|
85
|
+
get cacheStats(): {
|
|
86
|
+
keyCount: number;
|
|
87
|
+
size: number;
|
|
88
|
+
hits: number;
|
|
89
|
+
misses: number;
|
|
90
|
+
hitRate: string;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export declare function createEmbedder(config: EmbeddingConfig): Embedder;
|
|
94
|
+
//# sourceMappingURL=embedder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/embedder.ts"],"names":[],"mappings":"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"}
|