claude-self-reflect 1.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.
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "self-reflection": {
4
+ "command": "node",
5
+ "args": ["/Users/ramakrishnanannaswamy/memento-stack/qdrant-mcp-stack/claude-self-reflection/dist/index.js"],
6
+ "env": {
7
+ "QDRANT_URL": "http://localhost:6333",
8
+ "VOYAGE_KEY": "pa-wdTYGObaxhs-XFKX2r7WCczRwEVNb9eYMTSO3yrQhZI"
9
+ }
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,76 @@
1
+ import { EmbeddingService } from './embeddings';
2
+ /**
3
+ * Google Gemini embedding service implementation
4
+ * Supports task-specific optimization and variable dimensions
5
+ */
6
+ export declare class GeminiEmbeddingService implements EmbeddingService {
7
+ private apiKey;
8
+ private model;
9
+ private dimensions;
10
+ private taskType;
11
+ constructor(apiKey: string, model?: string, dimensions?: number, // Can be 768, 1536, or 3072
12
+ taskType?: GeminiTaskType);
13
+ generateEmbedding(text: string): Promise<number[]>;
14
+ /**
15
+ * Normalize embedding vector
16
+ */
17
+ private normalizeEmbedding;
18
+ getDimensions(): number;
19
+ getModelName(): string;
20
+ }
21
+ /**
22
+ * Gemini task types for optimized embeddings
23
+ */
24
+ export declare enum GeminiTaskType {
25
+ SEMANTIC_SIMILARITY = "SEMANTIC_SIMILARITY",
26
+ CLASSIFICATION = "CLASSIFICATION",
27
+ CLUSTERING = "CLUSTERING",
28
+ RETRIEVAL_DOCUMENT = "RETRIEVAL_DOCUMENT",
29
+ RETRIEVAL_QUERY = "RETRIEVAL_QUERY",
30
+ CODE_RETRIEVAL_QUERY = "CODE_RETRIEVAL_QUERY",
31
+ QUESTION_ANSWERING = "QUESTION_ANSWERING",
32
+ FACT_VERIFICATION = "FACT_VERIFICATION"
33
+ }
34
+ /**
35
+ * Gemini vs Voyage comparison utility
36
+ */
37
+ export declare class EmbeddingComparison {
38
+ /**
39
+ * Compare Gemini and Voyage for different use cases
40
+ */
41
+ static getComparison(): {
42
+ gemini: {
43
+ model: string;
44
+ dimensions: number[];
45
+ taskTypes: GeminiTaskType[];
46
+ advantages: string[];
47
+ limitations: string[];
48
+ bestFor: string[];
49
+ };
50
+ voyage: {
51
+ model: string;
52
+ dimensions: number;
53
+ accuracy: string;
54
+ tokenLimit: number;
55
+ advantages: string[];
56
+ limitations: string[];
57
+ bestFor: string[];
58
+ };
59
+ };
60
+ /**
61
+ * Estimate costs for project
62
+ */
63
+ static estimateCosts(totalTokens: number): {
64
+ voyage: {
65
+ freeTokens: number;
66
+ costPerMillion: number;
67
+ estimatedCost: number;
68
+ };
69
+ gemini: {
70
+ note: string;
71
+ approximateCostPerMillion: number;
72
+ estimatedCost: number;
73
+ };
74
+ };
75
+ }
76
+ //# sourceMappingURL=embeddings-gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings-gemini.d.ts","sourceRoot":"","sources":["../src/embeddings-gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAiB;gBAG/B,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAA+B,EACtC,UAAU,GAAE,MAAY,EAAE,4BAA4B;IACtD,QAAQ,GAAE,cAA+C;IAQrD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwCxD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;CAGvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,mBAAmB,wBAAwB;IAC3C,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,kBAAkB,uBAAuB;IACzC,eAAe,oBAAoB;IACnC,oBAAoB,yBAAyB;IAC7C,kBAAkB,uBAAuB;IACzC,iBAAiB,sBAAsB;CACxC;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,aAAa;;;;;;;;;;;;;;;;;;;IAsDpB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;CAezC"}
@@ -0,0 +1,158 @@
1
+ import fetch from 'node-fetch';
2
+ /**
3
+ * Google Gemini embedding service implementation
4
+ * Supports task-specific optimization and variable dimensions
5
+ */
6
+ export class GeminiEmbeddingService {
7
+ apiKey;
8
+ model;
9
+ dimensions;
10
+ taskType;
11
+ constructor(apiKey, model = 'gemini-embedding-001', dimensions = 768, // Can be 768, 1536, or 3072
12
+ taskType = GeminiTaskType.RETRIEVAL_QUERY) {
13
+ this.apiKey = apiKey;
14
+ this.model = model;
15
+ this.dimensions = dimensions;
16
+ this.taskType = taskType;
17
+ }
18
+ async generateEmbedding(text) {
19
+ try {
20
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${this.model}:embedContent?key=${this.apiKey}`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ body: JSON.stringify({
26
+ model: `models/${this.model}`,
27
+ content: {
28
+ parts: [{ text }]
29
+ },
30
+ taskType: this.taskType,
31
+ outputDimensionality: this.dimensions
32
+ }),
33
+ });
34
+ if (!response.ok) {
35
+ const errorBody = await response.text();
36
+ console.error('Gemini API error details:', errorBody);
37
+ throw new Error(`Gemini API error: ${response.status} ${response.statusText}`);
38
+ }
39
+ const data = await response.json();
40
+ const embedding = data.embedding.values;
41
+ // Normalize embeddings for dimensions other than 3072
42
+ if (this.dimensions !== 3072) {
43
+ return this.normalizeEmbedding(embedding);
44
+ }
45
+ return embedding;
46
+ }
47
+ catch (error) {
48
+ throw new Error(`Failed to generate Gemini embedding: ${error}`);
49
+ }
50
+ }
51
+ /**
52
+ * Normalize embedding vector
53
+ */
54
+ normalizeEmbedding(embedding) {
55
+ const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
56
+ return embedding.map(val => val / magnitude);
57
+ }
58
+ getDimensions() {
59
+ return this.dimensions;
60
+ }
61
+ getModelName() {
62
+ return `gemini/${this.model}`;
63
+ }
64
+ }
65
+ /**
66
+ * Gemini task types for optimized embeddings
67
+ */
68
+ export var GeminiTaskType;
69
+ (function (GeminiTaskType) {
70
+ GeminiTaskType["SEMANTIC_SIMILARITY"] = "SEMANTIC_SIMILARITY";
71
+ GeminiTaskType["CLASSIFICATION"] = "CLASSIFICATION";
72
+ GeminiTaskType["CLUSTERING"] = "CLUSTERING";
73
+ GeminiTaskType["RETRIEVAL_DOCUMENT"] = "RETRIEVAL_DOCUMENT";
74
+ GeminiTaskType["RETRIEVAL_QUERY"] = "RETRIEVAL_QUERY";
75
+ GeminiTaskType["CODE_RETRIEVAL_QUERY"] = "CODE_RETRIEVAL_QUERY";
76
+ GeminiTaskType["QUESTION_ANSWERING"] = "QUESTION_ANSWERING";
77
+ GeminiTaskType["FACT_VERIFICATION"] = "FACT_VERIFICATION";
78
+ })(GeminiTaskType || (GeminiTaskType = {}));
79
+ /**
80
+ * Gemini vs Voyage comparison utility
81
+ */
82
+ export class EmbeddingComparison {
83
+ /**
84
+ * Compare Gemini and Voyage for different use cases
85
+ */
86
+ static getComparison() {
87
+ return {
88
+ gemini: {
89
+ model: 'gemini-embedding-001',
90
+ dimensions: [768, 1536, 3072],
91
+ taskTypes: Object.values(GeminiTaskType),
92
+ advantages: [
93
+ 'Task-specific optimization',
94
+ 'Variable dimensions (MRL technique)',
95
+ 'Normalized embeddings at 3072',
96
+ 'Google infrastructure and reliability',
97
+ 'Integrated with Google ecosystem'
98
+ ],
99
+ limitations: [
100
+ 'No published accuracy benchmarks vs Voyage',
101
+ 'Token limits not clearly documented',
102
+ 'Potentially higher cost at scale',
103
+ 'Requires Google Cloud account'
104
+ ],
105
+ bestFor: [
106
+ 'Applications already using Google Cloud',
107
+ 'Need for task-specific optimization',
108
+ 'Variable dimension requirements',
109
+ 'Question-answering systems'
110
+ ]
111
+ },
112
+ voyage: {
113
+ model: 'voyage-3.5-lite',
114
+ dimensions: 1024,
115
+ accuracy: '66.1%',
116
+ tokenLimit: 32000,
117
+ advantages: [
118
+ 'Proven high accuracy (66.1% vs OpenAI 39.2%)',
119
+ 'Large token limit (32k)',
120
+ 'Cost-effective ($0.02/M tokens)',
121
+ '200M free tokens',
122
+ 'Optimized for retrieval tasks'
123
+ ],
124
+ limitations: [
125
+ 'Fixed dimensions (1024)',
126
+ 'No task-specific optimization',
127
+ 'Single model variant for lite tier',
128
+ 'Less ecosystem integration'
129
+ ],
130
+ bestFor: [
131
+ 'Long document processing',
132
+ 'Cost-sensitive applications',
133
+ 'General-purpose retrieval',
134
+ 'High accuracy requirements'
135
+ ]
136
+ }
137
+ };
138
+ }
139
+ /**
140
+ * Estimate costs for project
141
+ */
142
+ static estimateCosts(totalTokens) {
143
+ return {
144
+ voyage: {
145
+ freeTokens: 200_000_000,
146
+ costPerMillion: 0.02,
147
+ estimatedCost: Math.max(0, (totalTokens - 200_000_000) / 1_000_000 * 0.02)
148
+ },
149
+ gemini: {
150
+ // Gemini pricing varies by region and usage
151
+ note: 'Gemini pricing varies by region. Check Google Cloud pricing for your region.',
152
+ approximateCostPerMillion: 0.025, // Approximate
153
+ estimatedCost: totalTokens / 1_000_000 * 0.025
154
+ }
155
+ };
156
+ }
157
+ }
158
+ //# sourceMappingURL=embeddings-gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings-gemini.js","sourceRoot":"","sources":["../src/embeddings-gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export interface EmbeddingService {
2
+ generateEmbedding(text: string): Promise<number[]>;
3
+ getDimensions(): number;
4
+ getModelName(): string;
5
+ }
6
+ /**
7
+ * OpenAI embedding service - primary choice for production
8
+ */
9
+ export declare class OpenAIEmbeddingService implements EmbeddingService {
10
+ private apiKey;
11
+ private model;
12
+ private dimensions;
13
+ constructor(apiKey: string, model?: string);
14
+ generateEmbedding(text: string): Promise<number[]>;
15
+ getDimensions(): number;
16
+ getModelName(): string;
17
+ }
18
+ /**
19
+ * Voyage AI embedding service - high accuracy option
20
+ */
21
+ export declare class VoyageEmbeddingService implements EmbeddingService {
22
+ private apiKey;
23
+ private model;
24
+ private dimensions;
25
+ constructor(apiKey: string, model?: string);
26
+ generateEmbedding(text: string): Promise<number[]>;
27
+ getDimensions(): number;
28
+ getModelName(): string;
29
+ }
30
+ /**
31
+ * Local sentence-transformers embedding service - fallback option
32
+ */
33
+ export declare class LocalEmbeddingService implements EmbeddingService {
34
+ private pythonScript;
35
+ private modelName;
36
+ private dimensions;
37
+ constructor(modelName?: string);
38
+ generateEmbedding(text: string): Promise<number[]>;
39
+ getDimensions(): number;
40
+ getModelName(): string;
41
+ }
42
+ /**
43
+ * Mock embedding service for development/testing
44
+ */
45
+ export declare class MockEmbeddingService implements EmbeddingService {
46
+ private dimensions;
47
+ generateEmbedding(text: string): Promise<number[]>;
48
+ getDimensions(): number;
49
+ getModelName(): string;
50
+ }
51
+ /**
52
+ * Factory to create appropriate embedding service with fallback chain
53
+ */
54
+ export declare function createEmbeddingService(config?: {
55
+ openaiApiKey?: string;
56
+ voyageApiKey?: string;
57
+ preferLocal?: boolean;
58
+ modelName?: string;
59
+ }): Promise<EmbeddingService>;
60
+ /**
61
+ * Configuration helper to detect which embedding model was used for existing data
62
+ */
63
+ export declare function detectEmbeddingModel(qdrantUrl: string, collectionName: string): Promise<{
64
+ model: string;
65
+ dimensions: number;
66
+ }>;
67
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,aAAa,IAAI,MAAM,CAAC;IACxB,YAAY,IAAI,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAiC;IAM9D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA2BxD,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;CAGvB;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA0B;IAMvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BxD,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;CAGvB;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,SAAS,GAAE,MAAiD;IAgBlE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkCxD,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;CAGvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,UAAU,CAAe;IAE3B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASxD,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;CAGvB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,CAAC,EAAE;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuD5B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAuBD"}
@@ -0,0 +1,252 @@
1
+ import { spawn } from 'child_process';
2
+ import fetch from 'node-fetch';
3
+ /**
4
+ * OpenAI embedding service - primary choice for production
5
+ */
6
+ export class OpenAIEmbeddingService {
7
+ apiKey;
8
+ model;
9
+ dimensions;
10
+ constructor(apiKey, model = 'text-embedding-3-small') {
11
+ this.apiKey = apiKey;
12
+ this.model = model;
13
+ this.dimensions = model === 'text-embedding-3-small' ? 1536 : 3072;
14
+ }
15
+ async generateEmbedding(text) {
16
+ try {
17
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
18
+ method: 'POST',
19
+ headers: {
20
+ 'Authorization': `Bearer ${this.apiKey}`,
21
+ 'Content-Type': 'application/json',
22
+ },
23
+ body: JSON.stringify({
24
+ input: text,
25
+ model: this.model,
26
+ }),
27
+ });
28
+ if (!response.ok) {
29
+ const errorBody = await response.text();
30
+ console.error('OpenAI API error details:', errorBody);
31
+ throw new Error(`OpenAI API error: ${response.status} ${response.statusText}`);
32
+ }
33
+ const data = await response.json();
34
+ return data.data[0].embedding;
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Failed to generate OpenAI embedding: ${error}`);
38
+ }
39
+ }
40
+ getDimensions() {
41
+ return this.dimensions;
42
+ }
43
+ getModelName() {
44
+ return `openai/${this.model}`;
45
+ }
46
+ }
47
+ /**
48
+ * Voyage AI embedding service - high accuracy option
49
+ */
50
+ export class VoyageEmbeddingService {
51
+ apiKey;
52
+ model;
53
+ dimensions;
54
+ constructor(apiKey, model = 'voyage-3.5-lite') {
55
+ this.apiKey = apiKey;
56
+ this.model = model;
57
+ this.dimensions = 1024; // Voyage default dimensions
58
+ }
59
+ async generateEmbedding(text) {
60
+ try {
61
+ const response = await fetch('https://api.voyageai.com/v1/embeddings', {
62
+ method: 'POST',
63
+ headers: {
64
+ 'Authorization': `Bearer ${this.apiKey}`,
65
+ 'Content-Type': 'application/json',
66
+ },
67
+ body: JSON.stringify({
68
+ input: [text],
69
+ model: this.model,
70
+ input_type: 'query', // Use query type for search
71
+ }),
72
+ });
73
+ if (!response.ok) {
74
+ const errorBody = await response.text();
75
+ console.error('Voyage API error details:', errorBody);
76
+ throw new Error(`Voyage API error: ${response.status} ${response.statusText}`);
77
+ }
78
+ const data = await response.json();
79
+ return data.data[0].embedding;
80
+ }
81
+ catch (error) {
82
+ throw new Error(`Failed to generate Voyage embedding: ${error}`);
83
+ }
84
+ }
85
+ getDimensions() {
86
+ return this.dimensions;
87
+ }
88
+ getModelName() {
89
+ return `voyage/${this.model}`;
90
+ }
91
+ }
92
+ /**
93
+ * Local sentence-transformers embedding service - fallback option
94
+ */
95
+ export class LocalEmbeddingService {
96
+ pythonScript;
97
+ modelName;
98
+ dimensions;
99
+ constructor(modelName = 'sentence-transformers/all-MiniLM-L6-v2') {
100
+ this.modelName = modelName;
101
+ this.dimensions = 384; // all-MiniLM-L6-v2 dimensions
102
+ this.pythonScript = `
103
+ import sys
104
+ import json
105
+ from sentence_transformers import SentenceTransformer
106
+
107
+ model = SentenceTransformer('${modelName}')
108
+ text = sys.stdin.read()
109
+ embedding = model.encode(text).tolist()
110
+ print(json.dumps(embedding))
111
+ `;
112
+ }
113
+ async generateEmbedding(text) {
114
+ return new Promise((resolve, reject) => {
115
+ const python = spawn('python3', ['-c', this.pythonScript]);
116
+ let output = '';
117
+ let error = '';
118
+ python.stdout.on('data', (data) => {
119
+ output += data.toString();
120
+ });
121
+ python.stderr.on('data', (data) => {
122
+ error += data.toString();
123
+ });
124
+ python.on('close', (code) => {
125
+ if (code !== 0) {
126
+ reject(new Error(`Python process exited with code ${code}: ${error}`));
127
+ return;
128
+ }
129
+ try {
130
+ const embedding = JSON.parse(output.trim());
131
+ resolve(embedding);
132
+ }
133
+ catch (e) {
134
+ reject(new Error(`Failed to parse embedding: ${e}`));
135
+ }
136
+ });
137
+ python.stdin.write(text);
138
+ python.stdin.end();
139
+ });
140
+ }
141
+ getDimensions() {
142
+ return this.dimensions;
143
+ }
144
+ getModelName() {
145
+ return this.modelName;
146
+ }
147
+ }
148
+ /**
149
+ * Mock embedding service for development/testing
150
+ */
151
+ export class MockEmbeddingService {
152
+ dimensions = 384;
153
+ async generateEmbedding(text) {
154
+ // Generate a deterministic fake embedding based on text
155
+ const embedding = new Array(this.dimensions).fill(0);
156
+ for (let i = 0; i < Math.min(text.length, this.dimensions); i++) {
157
+ embedding[i] = (text.charCodeAt(i) % 256) / 256;
158
+ }
159
+ return embedding;
160
+ }
161
+ getDimensions() {
162
+ return this.dimensions;
163
+ }
164
+ getModelName() {
165
+ return 'mock/deterministic';
166
+ }
167
+ }
168
+ /**
169
+ * Factory to create appropriate embedding service with fallback chain
170
+ */
171
+ export async function createEmbeddingService(config) {
172
+ // 1. Try Voyage AI if API key is provided (highest accuracy)
173
+ if (config?.voyageApiKey && !config.preferLocal) {
174
+ try {
175
+ console.error(`Attempting to create Voyage AI service with key: ${config.voyageApiKey.substring(0, 10)}...`);
176
+ const service = new VoyageEmbeddingService(config.voyageApiKey, config.modelName);
177
+ // Test the API key with a simple request
178
+ await service.generateEmbedding('test');
179
+ console.error('Using Voyage AI embedding service');
180
+ return service;
181
+ }
182
+ catch (error) {
183
+ console.error('Voyage AI embedding service failed, falling back to OpenAI:', error);
184
+ }
185
+ }
186
+ // 2. Try OpenAI if API key is provided and not preferring local
187
+ if (config?.openaiApiKey && !config.preferLocal) {
188
+ try {
189
+ const service = new OpenAIEmbeddingService(config.openaiApiKey, config.modelName);
190
+ // Test the API key with a simple request
191
+ await service.generateEmbedding('test');
192
+ console.error('Using OpenAI embedding service');
193
+ return service;
194
+ }
195
+ catch (error) {
196
+ console.error('OpenAI embedding service failed, falling back to local:', error);
197
+ }
198
+ }
199
+ // 2. Try local sentence-transformers
200
+ try {
201
+ const checkScript = `
202
+ import sentence_transformers
203
+ print("OK")
204
+ `;
205
+ const python = spawn('python3', ['-c', checkScript]);
206
+ const hasLocalModel = await new Promise((resolve) => {
207
+ python.on('close', (code) => {
208
+ resolve(code === 0);
209
+ });
210
+ });
211
+ if (hasLocalModel) {
212
+ console.error('Using local sentence-transformers embedding service');
213
+ return new LocalEmbeddingService(config?.modelName);
214
+ }
215
+ }
216
+ catch (error) {
217
+ console.error('Local embedding service check failed:', error);
218
+ }
219
+ // 3. Fall back to mock embeddings
220
+ console.error('Warning: No embedding service available, using mock embeddings');
221
+ console.error('For production use, provide OPENAI_API_KEY or install sentence-transformers');
222
+ return new MockEmbeddingService();
223
+ }
224
+ /**
225
+ * Configuration helper to detect which embedding model was used for existing data
226
+ */
227
+ export async function detectEmbeddingModel(qdrantUrl, collectionName) {
228
+ try {
229
+ const response = await fetch(`${qdrantUrl}/collections/${collectionName}`);
230
+ const data = await response.json();
231
+ const dimensions = data.result?.config?.params?.vectors?.size || 384;
232
+ // Infer model from dimensions
233
+ if (dimensions === 1024) {
234
+ return { model: 'voyage-3.5-lite', dimensions };
235
+ }
236
+ else if (dimensions === 1536) {
237
+ return { model: 'text-embedding-3-small', dimensions };
238
+ }
239
+ else if (dimensions === 3072) {
240
+ return { model: 'text-embedding-3-large', dimensions };
241
+ }
242
+ else if (dimensions === 384) {
243
+ return { model: 'sentence-transformers/all-MiniLM-L6-v2', dimensions };
244
+ }
245
+ return { model: 'unknown', dimensions };
246
+ }
247
+ catch (error) {
248
+ console.error('Failed to detect embedding model:', error);
249
+ return { model: 'sentence-transformers/all-MiniLM-L6-v2', dimensions: 384 };
250
+ }
251
+ }
252
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}