@splashcodex/api-key-manager 3.0.0 → 4.0.0

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/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # @splashcodex/api-key-manager
1
+ # @splashcodex/ApiKeyManager v4.0 — Mastermind Edition
2
2
 
3
- > Universal API Key Rotation System with Resilience, Load Balancing & AI Gateway Features
3
+ > Universal API Key Rotation System with Resilience, Load Balancing, Semantic Caching & AI Gateway Features
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/@splashcodex/api-key-manager)](https://www.npmjs.com/package/@splashcodex/api-key-manager)
5
+ [![npm version](https://img.shields.io/npm/v/@splashcodex/ApiKeyManager)](https://www.npmjs.com/package/@splashcodex/ApiKeyManager)
6
6
 
7
7
  ## Features
8
8
 
@@ -17,8 +17,10 @@
17
17
  - **Provider Tagging** — Multi-provider routing (`openai`, `gemini`, etc.)
18
18
  - **Health Checks** — Periodic key validation and auto-recovery
19
19
  - **Bulkhead / Concurrency** — Limits concurrent `execute()` calls
20
+ - **Semantic Cache** *(v4 NEW)* — Cosine-similarity cache with pluggable embeddings
21
+ - **Recursion Guard** *(v4 NEW)* — Prevents infinite loops when `getEmbedding` calls `execute()`
20
22
  - **State Persistence** — Survives restarts via pluggable storage
21
- - **100% Backward Compatible** — v1.x and v2.x code works without changes
23
+ - **100% Backward Compatible** — v1.x, v2.x, and v3.x code works without changes
22
24
 
23
25
  ## Installation
24
26
 
@@ -36,16 +38,44 @@ const manager = new ApiKeyManager(['key1', 'key2', 'key3']);
36
38
  const key = manager.getKey();
37
39
  manager.markSuccess(key!);
38
40
 
39
- // v3 — Full power
41
+ // v3+ — Full power
40
42
  const result = await manager.execute(
41
43
  (key) => fetch(`https://api.example.com?key=${key}`),
42
44
  { maxRetries: 3, timeoutMs: 5000 }
43
45
  );
44
46
  ```
45
47
 
46
- ## v3.0 — execute() Wrapper
48
+ ## v4.0 — Semantic Cache (Mastermind Edition)
47
49
 
48
- The star feature. Wraps the entire lifecycle into one method:
50
+ Automatically cache API responses by semantic similarity. Identical or near-identical prompts return cached results without consuming API quota.
51
+
52
+ ```typescript
53
+ import { ApiKeyManager } from '@splashcodex/api-key-manager';
54
+
55
+ const manager = new ApiKeyManager(['key1', 'key2'], {
56
+ semanticCache: {
57
+ threshold: 0.92, // 92% cosine similarity to match
58
+ ttlMs: 86400000, // 24-hour TTL (default)
59
+ getEmbedding: async (text) => {
60
+ // Your embedding function (e.g. OpenAI, Gemini, local model)
61
+ return await myEmbeddingModel.embed(text);
62
+ }
63
+ }
64
+ });
65
+
66
+ // First call → API hit, cached
67
+ const r1 = await manager.execute(apiFn, { prompt: 'What is the weather?' });
68
+
69
+ // Second call → Semantic Cache HIT (no API call)
70
+ const r2 = await manager.execute(apiFn, { prompt: 'How is the weather today?' });
71
+ ```
72
+
73
+ > **Recursion Guard**: If your `getEmbedding` callback internally calls `execute()`,
74
+ > the cache automatically skips on nested calls to prevent infinite recursion.
75
+
76
+ ## execute() Wrapper
77
+
78
+ Wraps the entire lifecycle into one method:
49
79
 
50
80
  ```typescript
51
81
  const manager = new ApiKeyManager(keys, {
@@ -62,7 +92,7 @@ const result = await manager.execute(
62
92
  },
63
93
  { maxRetries: 3, timeoutMs: 10000 }
64
94
  );
65
- // Handles: key selection → timeout → retry → fallback → latency tracking
95
+ // Handles: key selection → cache → timeout → retry → fallback → latency tracking
66
96
  ```
67
97
 
68
98
  ## Event Emitter
@@ -163,12 +193,13 @@ try {
163
193
  // Legacy (v1/v2)
164
194
  new ApiKeyManager(keys, storage?, strategy?)
165
195
 
166
- // v3 Options
196
+ // v3+ Options
167
197
  new ApiKeyManager(keys, {
168
- storage?, // Pluggable storage { getItem, setItem }
169
- strategy?, // LoadBalancingStrategy instance
170
- fallbackFn?, // () => any — called when all keys exhausted
171
- concurrency?, // Max concurrent execute() calls
198
+ storage?, // Pluggable storage { getItem, setItem }
199
+ strategy?, // LoadBalancingStrategy instance
200
+ fallbackFn?, // () => any — called when all keys exhausted
201
+ concurrency?, // Max concurrent execute() calls
202
+ semanticCache?, // v4: { threshold, ttlMs, getEmbedding }
172
203
  })
173
204
  ```
174
205
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Universal ApiKeyManager v3.0
2
+ * Universal ApiKeyManager v4.0 — Mastermind Edition
3
3
  * Implements: Rotation, Circuit Breaker, Persistence, Exponential Backoff, Strategies,
4
4
  * Event Emitter, Fallback, execute(), Timeout, Auto-Retry, Provider Tags,
5
5
  * Health Checks, Bulkhead/Concurrency
@@ -41,12 +41,24 @@ export interface ExecuteOptions {
41
41
  timeoutMs?: number;
42
42
  maxRetries?: number;
43
43
  finishReason?: string;
44
+ provider?: string;
44
45
  }
45
46
  export interface ApiKeyManagerOptions {
46
47
  storage?: any;
47
48
  strategy?: LoadBalancingStrategy;
48
49
  fallbackFn?: () => any;
49
50
  concurrency?: number;
51
+ semanticCache?: {
52
+ threshold?: number;
53
+ ttlMs?: number;
54
+ getEmbedding: (text: string) => Promise<number[]>;
55
+ };
56
+ }
57
+ export interface CacheEntry {
58
+ vector: number[];
59
+ prompt: string;
60
+ response: any;
61
+ timestamp: number;
50
62
  }
51
63
  export interface ApiKeyManagerEventMap {
52
64
  keyDead: (key: string) => void;
@@ -96,6 +108,22 @@ export declare class WeightedStrategy implements LoadBalancingStrategy {
96
108
  export declare class LatencyStrategy implements LoadBalancingStrategy {
97
109
  next(candidates: KeyState[]): KeyState | null;
98
110
  }
111
+ /**
112
+ * High-performance Vanilla Semantic Cache
113
+ * Implements Cosine Similarity math from scratch.
114
+ */
115
+ export declare class SemanticCache {
116
+ private entries;
117
+ private threshold;
118
+ private ttlMs;
119
+ constructor(threshold?: number, ttlMs?: number);
120
+ set(prompt: string, vector: number[], response: any): void;
121
+ get(vector: number[]): any | null;
122
+ /**
123
+ * Vanilla Cosine Similarity: (A·B) / (||A|| * ||B||)
124
+ */
125
+ private calculateCosineSimilarity;
126
+ }
99
127
  export declare class ApiKeyManager extends EventEmitter {
100
128
  private keys;
101
129
  private storageKey;
@@ -106,6 +134,9 @@ export declare class ApiKeyManager extends EventEmitter {
106
134
  private activeCalls;
107
135
  private healthCheckFn?;
108
136
  private healthCheckInterval?;
137
+ private semanticCache?;
138
+ private getEmbeddingFn?;
139
+ private _isResolvingEmbedding;
109
140
  /**
110
141
  * Constructor supports both legacy positional args and new options object.
111
142
  *
@@ -151,7 +182,9 @@ export declare class ApiKeyManager extends EventEmitter {
151
182
  * { maxRetries: 3, timeoutMs: 5000 }
152
183
  * );
153
184
  */
154
- execute<T>(fn: (key: string, signal?: AbortSignal) => Promise<T>, options?: ExecuteOptions): Promise<T>;
185
+ execute<T>(fn: (key: string, signal?: AbortSignal) => Promise<T>, options?: ExecuteOptions & {
186
+ prompt?: string;
187
+ }): Promise<T>;
155
188
  private _executeWithRetry;
156
189
  private _executeWithTimeout;
157
190
  private _sleep;
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  /**
3
- * Universal ApiKeyManager v3.0
3
+ * Universal ApiKeyManager v4.0 — Mastermind Edition
4
4
  * Implements: Rotation, Circuit Breaker, Persistence, Exponential Backoff, Strategies,
5
5
  * Event Emitter, Fallback, execute(), Timeout, Auto-Retry, Provider Tags,
6
6
  * Health Checks, Bulkhead/Concurrency
7
7
  * Gemini-Specific: finishReason handling, Safety blocks, RECITATION detection
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ApiKeyManager = exports.LatencyStrategy = exports.WeightedStrategy = exports.StandardStrategy = exports.AllKeysExhaustedError = exports.BulkheadRejectionError = exports.TimeoutError = void 0;
10
+ exports.ApiKeyManager = exports.SemanticCache = exports.LatencyStrategy = exports.WeightedStrategy = exports.StandardStrategy = exports.AllKeysExhaustedError = exports.BulkheadRejectionError = exports.TimeoutError = void 0;
11
11
  const events_1 = require("events");
12
12
  // ─── Config ──────────────────────────────────────────────────────────────────
13
13
  const CONFIG = {
@@ -94,6 +94,70 @@ class LatencyStrategy {
94
94
  }
95
95
  }
96
96
  exports.LatencyStrategy = LatencyStrategy;
97
+ // ─── Semantic Engine ─────────────────────────────────────────────────────────
98
+ /**
99
+ * High-performance Vanilla Semantic Cache
100
+ * Implements Cosine Similarity math from scratch.
101
+ */
102
+ class SemanticCache {
103
+ entries = [];
104
+ threshold;
105
+ ttlMs;
106
+ constructor(threshold = 0.95, ttlMs = 24 * 60 * 60 * 1000) {
107
+ this.threshold = threshold;
108
+ this.ttlMs = ttlMs;
109
+ }
110
+ set(prompt, vector, response) {
111
+ // Expire old entry for same prompt if exists
112
+ this.entries = this.entries.filter(e => e.prompt !== prompt);
113
+ this.entries.push({
114
+ prompt,
115
+ vector,
116
+ response,
117
+ timestamp: Date.now()
118
+ });
119
+ // Optional: Cap size to prevent memory leaks
120
+ if (this.entries.length > 500)
121
+ this.entries.shift();
122
+ }
123
+ get(vector) {
124
+ const now = Date.now();
125
+ let bestMatch = null;
126
+ let highestSimilarity = -1;
127
+ for (let i = this.entries.length - 1; i >= 0; i--) {
128
+ const entry = this.entries[i];
129
+ // Check TTL
130
+ if (now - entry.timestamp > this.ttlMs) {
131
+ this.entries.splice(i, 1);
132
+ continue;
133
+ }
134
+ const similarity = this.calculateCosineSimilarity(vector, entry.vector);
135
+ if (similarity >= this.threshold && similarity > highestSimilarity) {
136
+ highestSimilarity = similarity;
137
+ bestMatch = entry;
138
+ }
139
+ }
140
+ return bestMatch ? bestMatch.response : null;
141
+ }
142
+ /**
143
+ * Vanilla Cosine Similarity: (A·B) / (||A|| * ||B||)
144
+ */
145
+ calculateCosineSimilarity(vecA, vecB) {
146
+ if (vecA.length !== vecB.length)
147
+ return 0;
148
+ let dotProduct = 0;
149
+ let normA = 0;
150
+ let normB = 0;
151
+ for (let i = 0; i < vecA.length; i++) {
152
+ dotProduct += vecA[i] * vecB[i];
153
+ normA += vecA[i] * vecA[i];
154
+ normB += vecB[i] * vecB[i];
155
+ }
156
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
157
+ return denominator === 0 ? 0 : dotProduct / denominator;
158
+ }
159
+ }
160
+ exports.SemanticCache = SemanticCache;
97
161
  // ─── Main Class ──────────────────────────────────────────────────────────────
98
162
  class ApiKeyManager extends events_1.EventEmitter {
99
163
  keys = [];
@@ -107,6 +171,10 @@ class ApiKeyManager extends events_1.EventEmitter {
107
171
  // Health check state
108
172
  healthCheckFn;
109
173
  healthCheckInterval;
174
+ // Semantic Cache v4
175
+ semanticCache;
176
+ getEmbeddingFn;
177
+ _isResolvingEmbedding = false; // Recursion guard
110
178
  /**
111
179
  * Constructor supports both legacy positional args and new options object.
112
180
  *
@@ -120,7 +188,7 @@ class ApiKeyManager extends events_1.EventEmitter {
120
188
  super();
121
189
  // Detect if second arg is options object or legacy storage
122
190
  let options = {};
123
- if (storageOrOptions && typeof storageOrOptions === 'object' && ('storage' in storageOrOptions || 'strategy' in storageOrOptions || 'fallbackFn' in storageOrOptions || 'concurrency' in storageOrOptions)) {
191
+ if (storageOrOptions && typeof storageOrOptions === 'object' && ('storage' in storageOrOptions || 'strategy' in storageOrOptions || 'fallbackFn' in storageOrOptions || 'concurrency' in storageOrOptions || 'semanticCache' in storageOrOptions)) {
124
192
  // New v3 options object
125
193
  options = storageOrOptions;
126
194
  }
@@ -138,6 +206,11 @@ class ApiKeyManager extends events_1.EventEmitter {
138
206
  this.strategy = options.strategy || new StandardStrategy();
139
207
  this.fallbackFn = options.fallbackFn;
140
208
  this.maxConcurrency = options.concurrency || Infinity;
209
+ // Init Semantic Cache if provided
210
+ if (options.semanticCache) {
211
+ this.semanticCache = new SemanticCache(options.semanticCache.threshold, options.semanticCache.ttlMs);
212
+ this.getEmbeddingFn = options.semanticCache.getEmbedding;
213
+ }
141
214
  // Normalize input to objects
142
215
  let inputKeys = [];
143
216
  if (initialKeys.length > 0 && typeof initialKeys[0] === 'string') {
@@ -386,23 +459,52 @@ class ApiKeyManager extends events_1.EventEmitter {
386
459
  const maxRetries = options?.maxRetries ?? 0;
387
460
  const timeoutMs = options?.timeoutMs;
388
461
  const finishReason = options?.finishReason;
389
- // Bulkhead check
462
+ const prompt = options?.prompt;
463
+ const provider = options?.provider;
464
+ // 1. Semantic Cache Check (Mastermind Edition)
465
+ // Guard: skip cache if we're already resolving an embedding to prevent
466
+ // infinite recursion when getEmbeddingFn calls execute() internally.
467
+ let currentPromptVector = null;
468
+ if (this.semanticCache && this.getEmbeddingFn && prompt && !this._isResolvingEmbedding) {
469
+ try {
470
+ this._isResolvingEmbedding = true;
471
+ currentPromptVector = await this.getEmbeddingFn(prompt);
472
+ const cachedResponse = this.semanticCache.get(currentPromptVector);
473
+ if (cachedResponse !== null) {
474
+ console.log(`[Semantic Cache HIT] for prompt: "${prompt.slice(0, 30)}..."`);
475
+ this.emit('executeSuccess', 'CACHE_HIT', 0);
476
+ return cachedResponse;
477
+ }
478
+ }
479
+ catch (e) {
480
+ console.warn('[Semantic Cache Check Failed] Proceeding to live API', e);
481
+ }
482
+ finally {
483
+ this._isResolvingEmbedding = false;
484
+ }
485
+ }
486
+ // 2. Bulkhead check
390
487
  if (this.activeCalls >= this.maxConcurrency) {
391
488
  this.emit('bulkheadRejected');
392
489
  throw new BulkheadRejectionError();
393
490
  }
394
491
  this.activeCalls++;
395
492
  try {
396
- return await this._executeWithRetry(fn, maxRetries, timeoutMs, finishReason);
493
+ const result = await this._executeWithRetry(fn, maxRetries, timeoutMs, finishReason, provider);
494
+ // 3. Store in Semantic Cache on success
495
+ if (this.semanticCache && prompt && currentPromptVector) {
496
+ this.semanticCache.set(prompt, currentPromptVector, result);
497
+ }
498
+ return result;
397
499
  }
398
500
  finally {
399
501
  this.activeCalls--;
400
502
  }
401
503
  }
402
- async _executeWithRetry(fn, maxRetries, timeoutMs, finishReason) {
504
+ async _executeWithRetry(fn, maxRetries, timeoutMs, finishReason, provider) {
403
505
  let lastError;
404
506
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
405
- const key = this.getKey();
507
+ const key = provider ? this.getKeyByProvider(provider) : this.getKey();
406
508
  if (!key) {
407
509
  // All keys exhausted — try fallback
408
510
  if (this.fallbackFn) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splashcodex/api-key-manager",
3
- "version": "3.0.0",
3
+ "version": "4.0.0",
4
4
  "description": "Universal API Key Rotation System for rate-limited APIs",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Universal ApiKeyManager v3.0
2
+ * Universal ApiKeyManager v4.0 — Mastermind Edition
3
3
  * Implements: Rotation, Circuit Breaker, Persistence, Exponential Backoff, Strategies,
4
4
  * Event Emitter, Fallback, execute(), Timeout, Auto-Retry, Provider Tags,
5
5
  * Health Checks, Bulkhead/Concurrency
@@ -59,6 +59,7 @@ export interface ExecuteOptions {
59
59
  timeoutMs?: number; // Timeout per attempt in ms
60
60
  maxRetries?: number; // Max retry attempts (default: 0 = no retry)
61
61
  finishReason?: string; // For Gemini finishReason handling
62
+ provider?: string; // Filter keys by provider (e.g. 'openai')
62
63
  }
63
64
 
64
65
  export interface ApiKeyManagerOptions {
@@ -66,6 +67,18 @@ export interface ApiKeyManagerOptions {
66
67
  strategy?: LoadBalancingStrategy;
67
68
  fallbackFn?: () => any;
68
69
  concurrency?: number; // Max concurrent execute() calls
70
+ semanticCache?: {
71
+ threshold?: number; // Similarity threshold (0.0 - 1.0, default 0.95)
72
+ ttlMs?: number; // Cache TTL
73
+ getEmbedding: (text: string) => Promise<number[]>;
74
+ };
75
+ }
76
+
77
+ export interface CacheEntry {
78
+ vector: number[];
79
+ prompt: string;
80
+ response: any;
81
+ timestamp: number;
69
82
  }
70
83
 
71
84
  // ─── Event Types ─────────────────────────────────────────────────────────────
@@ -182,6 +195,79 @@ export class LatencyStrategy implements LoadBalancingStrategy {
182
195
  }
183
196
  }
184
197
 
198
+ // ─── Semantic Engine ─────────────────────────────────────────────────────────
199
+
200
+ /**
201
+ * High-performance Vanilla Semantic Cache
202
+ * Implements Cosine Similarity math from scratch.
203
+ */
204
+ export class SemanticCache {
205
+ private entries: CacheEntry[] = [];
206
+ private threshold: number;
207
+ private ttlMs: number;
208
+
209
+ constructor(threshold: number = 0.95, ttlMs: number = 24 * 60 * 60 * 1000) {
210
+ this.threshold = threshold;
211
+ this.ttlMs = ttlMs;
212
+ }
213
+
214
+ public set(prompt: string, vector: number[], response: any) {
215
+ // Expire old entry for same prompt if exists
216
+ this.entries = this.entries.filter(e => e.prompt !== prompt);
217
+ this.entries.push({
218
+ prompt,
219
+ vector,
220
+ response,
221
+ timestamp: Date.now()
222
+ });
223
+ // Optional: Cap size to prevent memory leaks
224
+ if (this.entries.length > 500) this.entries.shift();
225
+ }
226
+
227
+ public get(vector: number[]): any | null {
228
+ const now = Date.now();
229
+ let bestMatch: CacheEntry | null = null;
230
+ let highestSimilarity = -1;
231
+
232
+ for (let i = this.entries.length - 1; i >= 0; i--) {
233
+ const entry = this.entries[i];
234
+
235
+ // Check TTL
236
+ if (now - entry.timestamp > this.ttlMs) {
237
+ this.entries.splice(i, 1);
238
+ continue;
239
+ }
240
+
241
+ const similarity = this.calculateCosineSimilarity(vector, entry.vector);
242
+ if (similarity >= this.threshold && similarity > highestSimilarity) {
243
+ highestSimilarity = similarity;
244
+ bestMatch = entry;
245
+ }
246
+ }
247
+
248
+ return bestMatch ? bestMatch.response : null;
249
+ }
250
+
251
+ /**
252
+ * Vanilla Cosine Similarity: (A·B) / (||A|| * ||B||)
253
+ */
254
+ private calculateCosineSimilarity(vecA: number[], vecB: number[]): number {
255
+ if (vecA.length !== vecB.length) return 0;
256
+ let dotProduct = 0;
257
+ let normA = 0;
258
+ let normB = 0;
259
+
260
+ for (let i = 0; i < vecA.length; i++) {
261
+ dotProduct += vecA[i] * vecB[i];
262
+ normA += vecA[i] * vecA[i];
263
+ normB += vecB[i] * vecB[i];
264
+ }
265
+
266
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
267
+ return denominator === 0 ? 0 : dotProduct / denominator;
268
+ }
269
+ }
270
+
185
271
  // ─── Main Class ──────────────────────────────────────────────────────────────
186
272
 
187
273
  export class ApiKeyManager extends EventEmitter {
@@ -199,6 +285,11 @@ export class ApiKeyManager extends EventEmitter {
199
285
  private healthCheckFn?: (key: string) => Promise<boolean>;
200
286
  private healthCheckInterval?: ReturnType<typeof setInterval>;
201
287
 
288
+ // Semantic Cache v4
289
+ private semanticCache?: SemanticCache;
290
+ private getEmbeddingFn?: (text: string) => Promise<number[]>;
291
+ private _isResolvingEmbedding: boolean = false; // Recursion guard
292
+
202
293
  /**
203
294
  * Constructor supports both legacy positional args and new options object.
204
295
  *
@@ -217,7 +308,7 @@ export class ApiKeyManager extends EventEmitter {
217
308
 
218
309
  // Detect if second arg is options object or legacy storage
219
310
  let options: ApiKeyManagerOptions = {};
220
- if (storageOrOptions && typeof storageOrOptions === 'object' && ('storage' in storageOrOptions || 'strategy' in storageOrOptions || 'fallbackFn' in storageOrOptions || 'concurrency' in storageOrOptions)) {
311
+ if (storageOrOptions && typeof storageOrOptions === 'object' && ('storage' in storageOrOptions || 'strategy' in storageOrOptions || 'fallbackFn' in storageOrOptions || 'concurrency' in storageOrOptions || 'semanticCache' in storageOrOptions)) {
221
312
  // New v3 options object
222
313
  options = storageOrOptions as ApiKeyManagerOptions;
223
314
  } else {
@@ -236,6 +327,15 @@ export class ApiKeyManager extends EventEmitter {
236
327
  this.fallbackFn = options.fallbackFn;
237
328
  this.maxConcurrency = options.concurrency || Infinity;
238
329
 
330
+ // Init Semantic Cache if provided
331
+ if (options.semanticCache) {
332
+ this.semanticCache = new SemanticCache(
333
+ options.semanticCache.threshold,
334
+ options.semanticCache.ttlMs
335
+ );
336
+ this.getEmbeddingFn = options.semanticCache.getEmbedding;
337
+ }
338
+
239
339
  // Normalize input to objects
240
340
  let inputKeys: { key: string; weight?: number; provider?: string }[] = [];
241
341
  if (initialKeys.length > 0 && typeof initialKeys[0] === 'string') {
@@ -514,13 +614,36 @@ export class ApiKeyManager extends EventEmitter {
514
614
  */
515
615
  public async execute<T>(
516
616
  fn: (key: string, signal?: AbortSignal) => Promise<T>,
517
- options?: ExecuteOptions
617
+ options?: ExecuteOptions & { prompt?: string }
518
618
  ): Promise<T> {
519
619
  const maxRetries = options?.maxRetries ?? 0;
520
620
  const timeoutMs = options?.timeoutMs;
521
621
  const finishReason = options?.finishReason;
622
+ const prompt = options?.prompt;
623
+ const provider = options?.provider;
624
+
625
+ // 1. Semantic Cache Check (Mastermind Edition)
626
+ // Guard: skip cache if we're already resolving an embedding to prevent
627
+ // infinite recursion when getEmbeddingFn calls execute() internally.
628
+ let currentPromptVector: number[] | null = null;
629
+ if (this.semanticCache && this.getEmbeddingFn && prompt && !this._isResolvingEmbedding) {
630
+ try {
631
+ this._isResolvingEmbedding = true;
632
+ currentPromptVector = await this.getEmbeddingFn(prompt);
633
+ const cachedResponse = this.semanticCache.get(currentPromptVector);
634
+ if (cachedResponse !== null) {
635
+ console.log(`[Semantic Cache HIT] for prompt: "${prompt.slice(0, 30)}..."`);
636
+ this.emit('executeSuccess', 'CACHE_HIT', 0);
637
+ return cachedResponse as T;
638
+ }
639
+ } catch (e) {
640
+ console.warn('[Semantic Cache Check Failed] Proceeding to live API', e);
641
+ } finally {
642
+ this._isResolvingEmbedding = false;
643
+ }
644
+ }
522
645
 
523
- // Bulkhead check
646
+ // 2. Bulkhead check
524
647
  if (this.activeCalls >= this.maxConcurrency) {
525
648
  this.emit('bulkheadRejected');
526
649
  throw new BulkheadRejectionError();
@@ -528,7 +651,14 @@ export class ApiKeyManager extends EventEmitter {
528
651
 
529
652
  this.activeCalls++;
530
653
  try {
531
- return await this._executeWithRetry(fn, maxRetries, timeoutMs, finishReason);
654
+ const result = await this._executeWithRetry(fn, maxRetries, timeoutMs, finishReason, provider);
655
+
656
+ // 3. Store in Semantic Cache on success
657
+ if (this.semanticCache && prompt && currentPromptVector) {
658
+ this.semanticCache.set(prompt, currentPromptVector, result);
659
+ }
660
+
661
+ return result;
532
662
  } finally {
533
663
  this.activeCalls--;
534
664
  }
@@ -538,12 +668,13 @@ export class ApiKeyManager extends EventEmitter {
538
668
  fn: (key: string, signal?: AbortSignal) => Promise<T>,
539
669
  maxRetries: number,
540
670
  timeoutMs?: number,
541
- finishReason?: string
671
+ finishReason?: string,
672
+ provider?: string
542
673
  ): Promise<T> {
543
674
  let lastError: any;
544
675
 
545
676
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
546
- const key = this.getKey();
677
+ const key = provider ? this.getKeyByProvider(provider) : this.getKey();
547
678
 
548
679
  if (!key) {
549
680
  // All keys exhausted — try fallback