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.
- package/config/claude-desktop-config.json +12 -0
- package/dist/embeddings-gemini.d.ts +76 -0
- package/dist/embeddings-gemini.d.ts.map +1 -0
- package/dist/embeddings-gemini.js +158 -0
- package/dist/embeddings-gemini.js.map +1 -0
- package/dist/embeddings.d.ts +67 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +252 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +307 -0
- package/dist/index.js.map +1 -0
- package/dist/project-isolation.d.ts +29 -0
- package/dist/project-isolation.d.ts.map +1 -0
- package/dist/project-isolation.js +78 -0
- package/dist/project-isolation.js.map +1 -0
- package/package.json +66 -0
- package/src/embeddings-gemini.ts +176 -0
- package/src/embeddings.ts +296 -0
- package/src/index.ts +366 -0
- package/src/project-isolation.ts +93 -0
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|