@traqr/memory 0.1.1 → 0.1.3

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/index.d.ts CHANGED
@@ -22,8 +22,8 @@ export type { EntityExtractionResult } from './lib/entity-pipeline.js';
22
22
  export type { StoreWithDedupResult, TriageResult, TriageZone, TriageAction, TriageOptions, RoundTripResult, DetailedStats, SystemHealth, } from './lib/memory.js';
23
23
  export { searchMemoriesV2, reciprocalRankFusion, detectStrategies, parseTemporalRange, findEntitiesInQuery, } from './lib/retrieval.js';
24
24
  export type { SearchV2Options, SearchStrategy, FusedItem, StrategyResult, DetectedStrategies, } from './lib/retrieval.js';
25
- export { generateEmbedding, generateEmbeddingsBatch, cosineSimilarity, formatEmbeddingForPgVector, parseEmbeddingFromPgVector, needsReembedding, checkEmbeddingHealth, EMBEDDING_CONFIG, } from './lib/embeddings.js';
26
- export type { EmbeddingResult, EmbeddingHealthStatus } from './lib/embeddings.js';
25
+ export { generateEmbedding, generateEmbeddingsBatch, cosineSimilarity, formatEmbeddingForPgVector, parseEmbeddingFromPgVector, needsReembedding, checkEmbeddingHealth, EMBEDDING_CONFIG, getEmbeddingProvider, getEmbeddingConfig, resetEmbeddingProvider, } from './lib/embeddings.js';
26
+ export type { EmbeddingResult, EmbeddingHealthStatus, EmbeddingProvider } from './lib/embeddings.js';
27
27
  export { CATEGORY_EMOJI, CATEGORY_EMOJI_SLACK, CATEGORY_EMOJI_TEXT, SOURCE_TYPE_EMOJI, getCategoryEmoji, } from './lib/formatting.js';
28
28
  export { getMemoryClient, resetMemoryClient, getUserId, getProjectId, configureMemory, getTableName } from './lib/client.js';
29
29
  export type { MemoryClientConfig } from './lib/client.js';
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ export { processEntitiesForMemory } from './lib/entity-pipeline.js';
24
24
  // Multi-strategy retrieval (v2)
25
25
  export { searchMemoriesV2, reciprocalRankFusion, detectStrategies, parseTemporalRange, findEntitiesInQuery, } from './lib/retrieval.js';
26
26
  // Embeddings
27
- export { generateEmbedding, generateEmbeddingsBatch, cosineSimilarity, formatEmbeddingForPgVector, parseEmbeddingFromPgVector, needsReembedding, checkEmbeddingHealth, EMBEDDING_CONFIG, } from './lib/embeddings.js';
27
+ export { generateEmbedding, generateEmbeddingsBatch, cosineSimilarity, formatEmbeddingForPgVector, parseEmbeddingFromPgVector, needsReembedding, checkEmbeddingHealth, EMBEDDING_CONFIG, getEmbeddingProvider, getEmbeddingConfig, resetEmbeddingProvider, } from './lib/embeddings.js';
28
28
  // Formatting
29
29
  export { CATEGORY_EMOJI, CATEGORY_EMOJI_SLACK, CATEGORY_EMOJI_TEXT, SOURCE_TYPE_EMOJI, getCategoryEmoji, } from './lib/formatting.js';
30
30
  // Client configuration
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAmBhE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAExE,iBAAiB;AACjB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,sBAAsB,CAAA;AAG7B,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAGxD,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,+BAA+B;AAC/B,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,MAAM,EACN,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAG3B,6BAA6B;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAcnE,gCAAgC;AAChC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAS3B,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAG5B,aAAa;AACb,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAE5B,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG5H,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE1E,mBAAmB;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,qBAAqB;AACrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAmBhE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAExE,iBAAiB;AACjB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,sBAAsB,CAAA;AAG7B,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAGxD,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,+BAA+B;AAC/B,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,MAAM,EACN,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAG3B,6BAA6B;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAcnE,gCAAgC;AAChC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAS3B,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAG5B,aAAa;AACb,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAE5B,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG5H,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE1E,mBAAmB;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,qBAAqB;AACrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,6BAA6B,CAAA"}
@@ -17,7 +17,9 @@ function getClient() {
17
17
  return client;
18
18
  const apiKey = process.env.OPENAI_API_KEY;
19
19
  if (!apiKey)
20
- throw new Error('OPENAI_API_KEY not set');
20
+ throw new Error('OPENAI_API_KEY not set. Borderline decisions use GPT-4o-mini to classify memories ' +
21
+ 'near the cosine similarity threshold. Without it, the system falls back to heuristic ' +
22
+ 'scoring (still works, slightly less accurate). Set OPENAI_API_KEY to enable LLM triage.');
21
23
  client = new OpenAI({ apiKey });
22
24
  return client;
23
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"borderline.js","sourceRoot":"","sources":["../../src/lib/borderline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"borderline.js","sourceRoot":"","sources":["../../src/lib/borderline.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,16 @@
1
1
  /**
2
- * Embeddings Utility
2
+ * Embeddings Provider System
3
3
  *
4
- * Generates vector embeddings using configurable provider.
5
- * Supports OpenAI text-embedding-3-small and Google Gemini Embedding 2.
6
- * Set EMBEDDING_PROVIDER env var: 'openai' (default) or 'gemini'.
4
+ * Provider-agnostic embedding generation. Supports:
5
+ * - OpenAI (text-embedding-3-small)
6
+ * - Gemini (gemini-embedding-001)
7
+ * - Amazon Bedrock (Nova Embeddings, Titan, etc.)
8
+ * - Ollama (local models)
9
+ * - None (BM25-only keyword search, no embeddings)
10
+ *
11
+ * Set EMBEDDING_PROVIDER env var: 'openai', 'gemini', 'bedrock', 'ollama', 'none'
12
+ * If not set, auto-detects from available API keys.
7
13
  */
8
- export declare const EMBEDDING_CONFIG: {
9
- readonly MODEL: "gemini-embedding-001" | "text-embedding-3-small";
10
- readonly MODEL_VERSION: "v1";
11
- readonly DIMENSIONS: 1536;
12
- readonly PROVIDER: string;
13
- readonly MAX_TOKENS: 8191;
14
- };
15
14
  export interface EmbeddingResult {
16
15
  embedding: number[];
17
16
  model: string;
@@ -22,8 +21,37 @@ export interface EmbeddingResult {
22
21
  totalTokens: number;
23
22
  };
24
23
  }
24
+ export interface EmbeddingProvider {
25
+ generate(text: string): Promise<EmbeddingResult>;
26
+ generateBatch(texts: string[]): Promise<EmbeddingResult[]>;
27
+ readonly dimensions: number;
28
+ readonly model: string;
29
+ readonly provider: string;
30
+ }
31
+ /**
32
+ * Get the configured embedding provider.
33
+ * Auto-detects from EMBEDDING_PROVIDER env var, or falls back to API key detection.
34
+ */
35
+ export declare function getEmbeddingProvider(): EmbeddingProvider;
36
+ /** Reset singleton (for testing or reconfiguration) */
37
+ export declare function resetEmbeddingProvider(): void;
38
+ /** Dynamic config based on active provider */
39
+ export declare function getEmbeddingConfig(): {
40
+ MODEL: string;
41
+ MODEL_VERSION: string;
42
+ DIMENSIONS: number;
43
+ PROVIDER: string;
44
+ MAX_TOKENS: number;
45
+ };
46
+ export declare const EMBEDDING_CONFIG: {
47
+ readonly MODEL: string;
48
+ readonly MODEL_VERSION: "v1";
49
+ readonly DIMENSIONS: number;
50
+ readonly PROVIDER: string;
51
+ readonly MAX_TOKENS: 8191;
52
+ };
25
53
  /**
26
- * Generate embedding for a single text (provider-agnostic)
54
+ * Generate embedding for a single text (backward-compatible entry point)
27
55
  */
28
56
  export declare function generateEmbedding(text: string): Promise<EmbeddingResult>;
29
57
  /**
@@ -1,117 +1,340 @@
1
1
  /**
2
- * Embeddings Utility
2
+ * Embeddings Provider System
3
3
  *
4
- * Generates vector embeddings using configurable provider.
5
- * Supports OpenAI text-embedding-3-small and Google Gemini Embedding 2.
6
- * Set EMBEDDING_PROVIDER env var: 'openai' (default) or 'gemini'.
4
+ * Provider-agnostic embedding generation. Supports:
5
+ * - OpenAI (text-embedding-3-small)
6
+ * - Gemini (gemini-embedding-001)
7
+ * - Amazon Bedrock (Nova Embeddings, Titan, etc.)
8
+ * - Ollama (local models)
9
+ * - None (BM25-only keyword search, no embeddings)
10
+ *
11
+ * Set EMBEDDING_PROVIDER env var: 'openai', 'gemini', 'bedrock', 'ollama', 'none'
12
+ * If not set, auto-detects from available API keys.
7
13
  */
8
14
  import OpenAI from 'openai';
9
- // Embedding provider detection
10
- const EMBEDDING_PROVIDER = process.env.EMBEDDING_PROVIDER || 'openai';
11
- // Embedding model configuration
12
- export const EMBEDDING_CONFIG = {
13
- MODEL: EMBEDDING_PROVIDER === 'gemini' ? 'gemini-embedding-001' : 'text-embedding-3-small',
14
- MODEL_VERSION: 'v1',
15
- DIMENSIONS: 1536,
16
- PROVIDER: EMBEDDING_PROVIDER,
17
- MAX_TOKENS: 8191,
18
- };
19
- // Singleton OpenAI client
20
- let openaiClient = null;
21
- function getOpenAIClient() {
22
- if (openaiClient)
23
- return openaiClient;
24
- const apiKey = process.env.OPENAI_API_KEY;
25
- if (!apiKey) {
26
- throw new Error('OPENAI_API_KEY environment variable is not set. ' +
27
- 'Get your API key from https://platform.openai.com/api-keys');
28
- }
29
- openaiClient = new OpenAI({ apiKey });
30
- return openaiClient;
15
+ // ---------------------------------------------------------------------------
16
+ // OpenAI Provider
17
+ // ---------------------------------------------------------------------------
18
+ class OpenAIEmbeddingProvider {
19
+ constructor() {
20
+ this.provider = 'openai';
21
+ this.model = 'text-embedding-3-small';
22
+ this.dimensions = 1536;
23
+ this.client = null;
24
+ }
25
+ getClient() {
26
+ if (this.client)
27
+ return this.client;
28
+ const apiKey = process.env.OPENAI_API_KEY;
29
+ if (!apiKey) {
30
+ throw new Error('OPENAI_API_KEY environment variable is not set. ' +
31
+ 'Get your API key from https://platform.openai.com/api-keys');
32
+ }
33
+ this.client = new OpenAI({ apiKey, baseURL: process.env.OPENAI_BASE_URL });
34
+ return this.client;
35
+ }
36
+ async generate(text) {
37
+ const client = this.getClient();
38
+ const truncated = text.slice(0, 8191 * 4);
39
+ const response = await client.embeddings.create({
40
+ model: this.model,
41
+ input: truncated,
42
+ encoding_format: 'float',
43
+ });
44
+ const data = response.data[0];
45
+ return {
46
+ embedding: data.embedding,
47
+ model: `openai/${this.model}`,
48
+ modelVersion: 'v1',
49
+ dimensions: this.dimensions,
50
+ usage: { promptTokens: response.usage.prompt_tokens, totalTokens: response.usage.total_tokens },
51
+ };
52
+ }
53
+ async generateBatch(texts) {
54
+ if (texts.length === 0)
55
+ return [];
56
+ const client = this.getClient();
57
+ const truncated = texts.map(t => t.slice(0, 8191 * 4));
58
+ const response = await client.embeddings.create({
59
+ model: this.model,
60
+ input: truncated,
61
+ encoding_format: 'float',
62
+ });
63
+ return response.data.map(d => ({
64
+ embedding: d.embedding,
65
+ model: `openai/${this.model}`,
66
+ modelVersion: 'v1',
67
+ dimensions: this.dimensions,
68
+ usage: {
69
+ promptTokens: Math.floor(response.usage.prompt_tokens / texts.length),
70
+ totalTokens: Math.floor(response.usage.total_tokens / texts.length),
71
+ },
72
+ }));
73
+ }
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Gemini Provider
77
+ // ---------------------------------------------------------------------------
78
+ class GeminiEmbeddingProvider {
79
+ constructor() {
80
+ this.provider = 'gemini';
81
+ this.model = 'gemini-embedding-001';
82
+ this.dimensions = 1536;
83
+ }
84
+ async generate(text) {
85
+ const apiKey = process.env.GOOGLE_API_KEY;
86
+ if (!apiKey) {
87
+ throw new Error('GOOGLE_API_KEY not set. Required when EMBEDDING_PROVIDER=gemini. Get one at https://aistudio.google.com');
88
+ }
89
+ const truncated = text.slice(0, 8191 * 4);
90
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${this.model}:embedContent?key=${apiKey}`, {
91
+ method: 'POST',
92
+ headers: { 'Content-Type': 'application/json' },
93
+ body: JSON.stringify({
94
+ model: `models/${this.model}`,
95
+ content: { parts: [{ text: truncated }] },
96
+ outputDimensionality: this.dimensions,
97
+ }),
98
+ });
99
+ if (!response.ok) {
100
+ throw new Error(`Gemini embedding failed: ${response.status} ${response.statusText}`);
101
+ }
102
+ const data = await response.json();
103
+ return {
104
+ embedding: data.embedding.values,
105
+ model: `gemini/${this.model}`,
106
+ modelVersion: 'v1',
107
+ dimensions: data.embedding.values.length,
108
+ usage: { promptTokens: 0, totalTokens: 0 },
109
+ };
110
+ }
111
+ async generateBatch(texts) {
112
+ // Gemini doesn't have a native batch API — sequential for now
113
+ return Promise.all(texts.map(t => this.generate(t)));
114
+ }
115
+ }
116
+ // ---------------------------------------------------------------------------
117
+ // Bedrock Provider (Amazon Nova Embeddings, Titan, etc.)
118
+ // ---------------------------------------------------------------------------
119
+ class BedrockEmbeddingProvider {
120
+ constructor() {
121
+ this.provider = 'bedrock';
122
+ this._sdk = null;
123
+ this.model = process.env.EMBEDDING_MODEL || 'amazon.nova-embed-v1:0';
124
+ this.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS || '1536', 10);
125
+ }
126
+ async getSdk() {
127
+ if (this._sdk)
128
+ return this._sdk;
129
+ try {
130
+ // Dynamic import — @aws-sdk is optional, only loaded when EMBEDDING_PROVIDER=bedrock
131
+ const mod = await Function('return import("@aws-sdk/client-bedrock-runtime")')();
132
+ this._sdk = {
133
+ client: new mod.BedrockRuntimeClient({ region: process.env.AWS_REGION || 'us-east-1' }),
134
+ InvokeModelCommand: mod.InvokeModelCommand,
135
+ };
136
+ return this._sdk;
137
+ }
138
+ catch {
139
+ throw new Error('Amazon Bedrock requires @aws-sdk/client-bedrock-runtime. ' +
140
+ 'Install it: npm install @aws-sdk/client-bedrock-runtime\n' +
141
+ 'Then set AWS_REGION and configure AWS credentials (IAM role, env vars, or ~/.aws/credentials).');
142
+ }
143
+ }
144
+ async generate(text) {
145
+ const { client, InvokeModelCommand } = await this.getSdk();
146
+ const truncated = text.slice(0, 8191 * 4);
147
+ const command = new InvokeModelCommand({
148
+ modelId: this.model,
149
+ contentType: 'application/json',
150
+ accept: 'application/json',
151
+ body: JSON.stringify({
152
+ inputText: truncated,
153
+ dimensions: this.dimensions,
154
+ }),
155
+ });
156
+ const response = await client.send(command);
157
+ const body = JSON.parse(new TextDecoder().decode(response.body));
158
+ const embedding = body.embedding || body.embeddings?.[0];
159
+ if (!embedding) {
160
+ throw new Error(`Bedrock model ${this.model} returned no embedding. Response keys: ${Object.keys(body).join(', ')}`);
161
+ }
162
+ return {
163
+ embedding,
164
+ model: `bedrock/${this.model}`,
165
+ modelVersion: 'v1',
166
+ dimensions: embedding.length,
167
+ usage: { promptTokens: body.inputTextTokenCount || 0, totalTokens: body.inputTextTokenCount || 0 },
168
+ };
169
+ }
170
+ async generateBatch(texts) {
171
+ // Bedrock doesn't have a native batch embedding API — sequential
172
+ return Promise.all(texts.map(t => this.generate(t)));
173
+ }
174
+ }
175
+ // ---------------------------------------------------------------------------
176
+ // Ollama Provider (local models)
177
+ // ---------------------------------------------------------------------------
178
+ class OllamaEmbeddingProvider {
179
+ constructor() {
180
+ this.provider = 'ollama';
181
+ this.model = process.env.EMBEDDING_MODEL || 'nomic-embed-text';
182
+ this.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS || '768', 10);
183
+ this.baseUrl = process.env.OLLAMA_BASE_URL || 'http://localhost:11434';
184
+ }
185
+ async generate(text) {
186
+ const truncated = text.slice(0, 8191 * 4);
187
+ const response = await fetch(`${this.baseUrl}/api/embed`, {
188
+ method: 'POST',
189
+ headers: { 'Content-Type': 'application/json' },
190
+ body: JSON.stringify({ model: this.model, input: truncated }),
191
+ });
192
+ if (!response.ok) {
193
+ throw new Error(`Ollama embedding failed: ${response.status} ${response.statusText}. ` +
194
+ `Is Ollama running at ${this.baseUrl}? Has model '${this.model}' been pulled?`);
195
+ }
196
+ const data = await response.json();
197
+ const embedding = data.embeddings[0];
198
+ return {
199
+ embedding,
200
+ model: `ollama/${this.model}`,
201
+ modelVersion: 'v1',
202
+ dimensions: embedding.length,
203
+ usage: { promptTokens: 0, totalTokens: 0 },
204
+ };
205
+ }
206
+ async generateBatch(texts) {
207
+ // Ollama supports batch via array input
208
+ const truncated = texts.map(t => t.slice(0, 8191 * 4));
209
+ const response = await fetch(`${this.baseUrl}/api/embed`, {
210
+ method: 'POST',
211
+ headers: { 'Content-Type': 'application/json' },
212
+ body: JSON.stringify({ model: this.model, input: truncated }),
213
+ });
214
+ if (!response.ok) {
215
+ throw new Error(`Ollama batch embedding failed: ${response.status}`);
216
+ }
217
+ const data = await response.json();
218
+ return data.embeddings.map(emb => ({
219
+ embedding: emb,
220
+ model: `ollama/${this.model}`,
221
+ modelVersion: 'v1',
222
+ dimensions: emb.length,
223
+ usage: { promptTokens: 0, totalTokens: 0 },
224
+ }));
225
+ }
226
+ }
227
+ // ---------------------------------------------------------------------------
228
+ // Null Provider (BM25-only, no embeddings)
229
+ // ---------------------------------------------------------------------------
230
+ class NullEmbeddingProvider {
231
+ constructor() {
232
+ this.provider = 'none';
233
+ this.model = 'none';
234
+ this.dimensions = 0;
235
+ }
236
+ async generate(_text) {
237
+ return {
238
+ embedding: [],
239
+ model: 'none',
240
+ modelVersion: 'v1',
241
+ dimensions: 0,
242
+ usage: { promptTokens: 0, totalTokens: 0 },
243
+ };
244
+ }
245
+ async generateBatch(texts) {
246
+ return texts.map(() => ({
247
+ embedding: [],
248
+ model: 'none',
249
+ modelVersion: 'v1',
250
+ dimensions: 0,
251
+ usage: { promptTokens: 0, totalTokens: 0 },
252
+ }));
253
+ }
31
254
  }
255
+ // ---------------------------------------------------------------------------
256
+ // Factory + Singleton
257
+ // ---------------------------------------------------------------------------
258
+ let providerInstance = null;
32
259
  /**
33
- * Generate embedding for a single text (provider-agnostic)
260
+ * Get the configured embedding provider.
261
+ * Auto-detects from EMBEDDING_PROVIDER env var, or falls back to API key detection.
34
262
  */
35
- export async function generateEmbedding(text) {
36
- if (EMBEDDING_PROVIDER === 'gemini') {
37
- return generateGeminiEmbedding(text);
263
+ export function getEmbeddingProvider() {
264
+ if (providerInstance)
265
+ return providerInstance;
266
+ const type = process.env.EMBEDDING_PROVIDER;
267
+ switch (type) {
268
+ case 'openai':
269
+ providerInstance = new OpenAIEmbeddingProvider();
270
+ break;
271
+ case 'gemini':
272
+ providerInstance = new GeminiEmbeddingProvider();
273
+ break;
274
+ case 'bedrock':
275
+ providerInstance = new BedrockEmbeddingProvider();
276
+ break;
277
+ case 'ollama':
278
+ providerInstance = new OllamaEmbeddingProvider();
279
+ break;
280
+ case 'none':
281
+ providerInstance = new NullEmbeddingProvider();
282
+ break;
283
+ default:
284
+ // Auto-detect from available API keys (backward compat)
285
+ if (process.env.OPENAI_API_KEY) {
286
+ providerInstance = new OpenAIEmbeddingProvider();
287
+ }
288
+ else if (process.env.GOOGLE_API_KEY) {
289
+ providerInstance = new GeminiEmbeddingProvider();
290
+ }
291
+ else {
292
+ providerInstance = new NullEmbeddingProvider();
293
+ }
38
294
  }
39
- return generateOpenAIEmbedding(text);
295
+ return providerInstance;
40
296
  }
41
- async function generateOpenAIEmbedding(text) {
42
- const client = getOpenAIClient();
43
- const maxChars = EMBEDDING_CONFIG.MAX_TOKENS * 4;
44
- const truncatedText = text.slice(0, maxChars);
45
- const response = await client.embeddings.create({
46
- model: 'text-embedding-3-small',
47
- input: truncatedText,
48
- encoding_format: 'float',
49
- });
50
- const embeddingData = response.data[0];
51
- return {
52
- embedding: embeddingData.embedding,
53
- model: 'openai/text-embedding-3-small',
54
- modelVersion: 'v1',
55
- dimensions: EMBEDDING_CONFIG.DIMENSIONS,
56
- usage: {
57
- promptTokens: response.usage.prompt_tokens,
58
- totalTokens: response.usage.total_tokens,
59
- },
60
- };
297
+ /** Reset singleton (for testing or reconfiguration) */
298
+ export function resetEmbeddingProvider() {
299
+ providerInstance = null;
61
300
  }
62
- async function generateGeminiEmbedding(text) {
63
- const apiKey = process.env.GOOGLE_API_KEY;
64
- if (!apiKey) {
65
- throw new Error('GOOGLE_API_KEY not set. Required when EMBEDDING_PROVIDER=gemini.');
66
- }
67
- const maxChars = EMBEDDING_CONFIG.MAX_TOKENS * 4;
68
- const truncatedText = text.slice(0, maxChars);
69
- const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent?key=${apiKey}`, {
70
- method: 'POST',
71
- headers: { 'Content-Type': 'application/json' },
72
- body: JSON.stringify({
73
- model: 'models/gemini-embedding-001',
74
- content: { parts: [{ text: truncatedText }] },
75
- outputDimensionality: EMBEDDING_CONFIG.DIMENSIONS,
76
- }),
77
- });
78
- if (!response.ok) {
79
- throw new Error(`Gemini embedding failed: ${response.status} ${response.statusText}`);
80
- }
81
- const data = await response.json();
301
+ // ---------------------------------------------------------------------------
302
+ // Backward-compatible API (existing callers use these)
303
+ // ---------------------------------------------------------------------------
304
+ /** Dynamic config based on active provider */
305
+ export function getEmbeddingConfig() {
306
+ const p = getEmbeddingProvider();
82
307
  return {
83
- embedding: data.embedding.values,
84
- model: 'gemini/gemini-embedding-001',
85
- modelVersion: 'v1',
86
- dimensions: data.embedding.values.length,
87
- usage: { promptTokens: 0, totalTokens: 0 }, // Gemini doesn't report token usage
308
+ MODEL: p.model,
309
+ MODEL_VERSION: 'v1',
310
+ DIMENSIONS: p.dimensions,
311
+ PROVIDER: p.provider,
312
+ MAX_TOKENS: 8191,
88
313
  };
89
314
  }
315
+ // Keep the old constant for backward compat (code that imports EMBEDDING_CONFIG directly)
316
+ export const EMBEDDING_CONFIG = {
317
+ get MODEL() { return getEmbeddingConfig().MODEL; },
318
+ MODEL_VERSION: 'v1',
319
+ get DIMENSIONS() { return getEmbeddingConfig().DIMENSIONS; },
320
+ get PROVIDER() { return getEmbeddingConfig().PROVIDER; },
321
+ MAX_TOKENS: 8191,
322
+ };
323
+ /**
324
+ * Generate embedding for a single text (backward-compatible entry point)
325
+ */
326
+ export async function generateEmbedding(text) {
327
+ return getEmbeddingProvider().generate(text);
328
+ }
90
329
  /**
91
330
  * Generate embeddings for multiple texts in batch
92
331
  */
93
332
  export async function generateEmbeddingsBatch(texts) {
94
- if (texts.length === 0)
95
- return [];
96
- const client = getOpenAIClient();
97
- const maxChars = EMBEDDING_CONFIG.MAX_TOKENS * 4;
98
- const truncatedTexts = texts.map(t => t.slice(0, maxChars));
99
- const response = await client.embeddings.create({
100
- model: EMBEDDING_CONFIG.MODEL,
101
- input: truncatedTexts,
102
- encoding_format: 'float',
103
- });
104
- return response.data.map((embeddingData) => ({
105
- embedding: embeddingData.embedding,
106
- model: `${EMBEDDING_CONFIG.PROVIDER}/${EMBEDDING_CONFIG.MODEL}`,
107
- modelVersion: EMBEDDING_CONFIG.MODEL_VERSION,
108
- dimensions: EMBEDDING_CONFIG.DIMENSIONS,
109
- usage: {
110
- promptTokens: Math.floor(response.usage.prompt_tokens / texts.length),
111
- totalTokens: Math.floor(response.usage.total_tokens / texts.length),
112
- },
113
- }));
333
+ return getEmbeddingProvider().generateBatch(texts);
114
334
  }
335
+ // ---------------------------------------------------------------------------
336
+ // Utility functions (provider-agnostic)
337
+ // ---------------------------------------------------------------------------
115
338
  /**
116
339
  * Calculate cosine similarity between two embeddings
117
340
  */
@@ -119,18 +342,14 @@ export function cosineSimilarity(a, b) {
119
342
  if (a.length !== b.length) {
120
343
  throw new Error(`Embedding dimensions don't match: ${a.length} vs ${b.length}`);
121
344
  }
122
- let dotProduct = 0;
123
- let normA = 0;
124
- let normB = 0;
345
+ let dotProduct = 0, normA = 0, normB = 0;
125
346
  for (let i = 0; i < a.length; i++) {
126
347
  dotProduct += a[i] * b[i];
127
348
  normA += a[i] * a[i];
128
349
  normB += b[i] * b[i];
129
350
  }
130
351
  const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
131
- if (magnitude === 0)
132
- return 0;
133
- return dotProduct / magnitude;
352
+ return magnitude === 0 ? 0 : dotProduct / magnitude;
134
353
  }
135
354
  /**
136
355
  * Format embedding for Supabase pgvector storage
@@ -154,76 +373,37 @@ export function parseEmbeddingFromPgVector(pgvectorString) {
154
373
  * Check if embeddings need regeneration
155
374
  */
156
375
  export function needsReembedding(currentModel, currentVersion) {
157
- const expectedModel = `${EMBEDDING_CONFIG.PROVIDER}/${EMBEDDING_CONFIG.MODEL}`;
158
- const expectedVersion = EMBEDDING_CONFIG.MODEL_VERSION;
159
- return currentModel !== expectedModel || currentVersion !== expectedVersion;
376
+ const config = getEmbeddingConfig();
377
+ const expectedModel = `${config.PROVIDER}/${config.MODEL}`;
378
+ return currentModel !== expectedModel || currentVersion !== config.MODEL_VERSION;
160
379
  }
161
380
  /**
162
381
  * Check embedding service health
163
382
  */
164
383
  export async function checkEmbeddingHealth() {
384
+ const provider = getEmbeddingProvider();
385
+ if (provider.provider === 'none') {
386
+ return { status: 'degraded', canStore: true, canSearch: false, reason: 'No embedding provider configured. BM25 keyword search only.' };
387
+ }
165
388
  const startTime = Date.now();
166
389
  try {
167
- const client = getOpenAIClient();
168
- const response = await client.embeddings.create({
169
- model: EMBEDDING_CONFIG.MODEL,
170
- input: 'health check',
171
- encoding_format: 'float',
172
- });
390
+ const result = await provider.generate('health check');
173
391
  const latencyMs = Date.now() - startTime;
174
- if (!response.data?.[0]?.embedding) {
175
- return {
176
- status: 'degraded',
177
- canStore: false,
178
- canSearch: false,
179
- reason: 'OpenAI returned empty embedding',
180
- latencyMs,
181
- };
392
+ if (!result.embedding?.length) {
393
+ return { status: 'degraded', canStore: false, canSearch: false, reason: 'Provider returned empty embedding', latencyMs };
182
394
  }
183
- return {
184
- status: 'healthy',
185
- canStore: true,
186
- canSearch: true,
187
- latencyMs,
188
- };
395
+ return { status: 'healthy', canStore: true, canSearch: true, latencyMs };
189
396
  }
190
397
  catch (error) {
191
398
  const latencyMs = Date.now() - startTime;
192
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
193
- const isQuotaExceeded = errorMessage.includes('quota') ||
194
- errorMessage.includes('rate limit') ||
195
- errorMessage.includes('exceeded') ||
196
- errorMessage.includes('billing') ||
197
- errorMessage.includes('insufficient_quota');
198
- const isAuthError = errorMessage.includes('API key') ||
199
- errorMessage.includes('authentication') ||
200
- errorMessage.includes('unauthorized');
201
- if (isQuotaExceeded) {
202
- return {
203
- status: 'degraded',
204
- canStore: false,
205
- canSearch: false,
206
- reason: 'OpenAI quota exceeded - cannot generate embeddings',
207
- quotaExceeded: true,
208
- latencyMs,
209
- };
210
- }
211
- if (isAuthError) {
212
- return {
213
- status: 'failed',
214
- canStore: false,
215
- canSearch: false,
216
- reason: 'OpenAI API key invalid or missing',
217
- latencyMs,
218
- };
219
- }
220
- return {
221
- status: 'failed',
222
- canStore: false,
223
- canSearch: false,
224
- reason: errorMessage,
225
- latencyMs,
226
- };
399
+ const msg = error instanceof Error ? error.message : 'Unknown error';
400
+ const isQuota = msg.includes('quota') || msg.includes('rate limit') || msg.includes('exceeded');
401
+ const isAuth = msg.includes('API key') || msg.includes('authentication') || msg.includes('unauthorized');
402
+ if (isQuota)
403
+ return { status: 'degraded', canStore: false, canSearch: false, reason: 'API quota exceeded', quotaExceeded: true, latencyMs };
404
+ if (isAuth)
405
+ return { status: 'failed', canStore: false, canSearch: false, reason: 'API key invalid or missing', latencyMs };
406
+ return { status: 'failed', canStore: false, canSearch: false, reason: msg, latencyMs };
227
407
  }
228
408
  }
229
409
  //# sourceMappingURL=embeddings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/lib/embeddings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/lib/embeddings.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@traqr/memory",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Persistent memory for AI agents. Multi-strategy retrieval (semantic + BM25 + RRF), 3-zone cosine triage, type-aware lifecycle, entity canonicalization. Postgres + pgvector.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",