@retrivora-ai/rag-engine 0.3.3 → 0.3.4
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.
|
@@ -1009,8 +1009,18 @@ var GeminiProvider = class {
|
|
|
1009
1009
|
constructor(llmConfig, embeddingConfig) {
|
|
1010
1010
|
if (!llmConfig.apiKey) throw new Error("[GeminiProvider] llmConfig.apiKey is required");
|
|
1011
1011
|
this.client = new GoogleGenAI({ apiKey: llmConfig.apiKey });
|
|
1012
|
-
this.llmConfig = llmConfig
|
|
1013
|
-
|
|
1012
|
+
this.llmConfig = __spreadProps(__spreadValues({}, llmConfig), {
|
|
1013
|
+
model: this.sanitizeModel(llmConfig.model)
|
|
1014
|
+
});
|
|
1015
|
+
if (embeddingConfig) {
|
|
1016
|
+
this.embeddingConfig = __spreadProps(__spreadValues({}, embeddingConfig), {
|
|
1017
|
+
model: this.sanitizeModel(embeddingConfig.model)
|
|
1018
|
+
});
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
sanitizeModel(model) {
|
|
1022
|
+
if (!model) return model;
|
|
1023
|
+
return model.split(":")[0];
|
|
1014
1024
|
}
|
|
1015
1025
|
async chat(messages, context, options) {
|
|
1016
1026
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -1039,8 +1049,10 @@ ${context}`;
|
|
|
1039
1049
|
return (_f = response.text) != null ? _f : "";
|
|
1040
1050
|
}
|
|
1041
1051
|
async embed(text, options) {
|
|
1042
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
1043
|
-
const model =
|
|
1052
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
1053
|
+
const model = this.sanitizeModel(
|
|
1054
|
+
(_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004"
|
|
1055
|
+
);
|
|
1044
1056
|
const apiKey = (_e = (_d = this.embeddingConfig) == null ? void 0 : _d.apiKey) != null ? _e : this.llmConfig.apiKey;
|
|
1045
1057
|
const client = apiKey !== this.llmConfig.apiKey ? new GoogleGenAI({ apiKey }) : this.client;
|
|
1046
1058
|
let content = text;
|
|
@@ -1057,14 +1069,20 @@ ${context}`;
|
|
|
1057
1069
|
}
|
|
1058
1070
|
const response = await client.models.embedContent({
|
|
1059
1071
|
model,
|
|
1060
|
-
contents: content
|
|
1072
|
+
contents: content,
|
|
1073
|
+
config: ((_h = this.embeddingConfig) == null ? void 0 : _h.dimensions) ? { outputDimensionality: this.embeddingConfig.dimensions } : void 0
|
|
1074
|
+
}).catch((err) => {
|
|
1075
|
+
console.error(`[GeminiProvider] Embedding failed for model "${model}":`, err.message);
|
|
1076
|
+
throw err;
|
|
1061
1077
|
});
|
|
1062
|
-
return (
|
|
1078
|
+
return (_k = (_j = (_i = response.embeddings) == null ? void 0 : _i[0]) == null ? void 0 : _j.values) != null ? _k : [];
|
|
1063
1079
|
}
|
|
1064
1080
|
async batchEmbed(texts, options) {
|
|
1065
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
1081
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
1066
1082
|
const vectors = [];
|
|
1067
|
-
const model =
|
|
1083
|
+
const model = this.sanitizeModel(
|
|
1084
|
+
(_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004"
|
|
1085
|
+
);
|
|
1068
1086
|
const apiKey = (_e = (_d = this.embeddingConfig) == null ? void 0 : _d.apiKey) != null ? _e : this.llmConfig.apiKey;
|
|
1069
1087
|
const client = apiKey !== this.llmConfig.apiKey ? new GoogleGenAI({ apiKey }) : this.client;
|
|
1070
1088
|
let contents = texts;
|
|
@@ -1077,12 +1095,16 @@ ${context}`;
|
|
|
1077
1095
|
}
|
|
1078
1096
|
const response = await client.models.embedContent({
|
|
1079
1097
|
model,
|
|
1080
|
-
contents
|
|
1098
|
+
contents,
|
|
1099
|
+
config: ((_h = this.embeddingConfig) == null ? void 0 : _h.dimensions) ? { outputDimensionality: this.embeddingConfig.dimensions } : void 0
|
|
1100
|
+
}).catch((err) => {
|
|
1101
|
+
console.error(`[GeminiProvider] Batch embedding failed for model "${model}":`, err.message);
|
|
1102
|
+
throw err;
|
|
1081
1103
|
});
|
|
1082
|
-
return (
|
|
1104
|
+
return (_j = (_i = response.embeddings) == null ? void 0 : _i.map((e) => {
|
|
1083
1105
|
var _a2;
|
|
1084
1106
|
return (_a2 = e.values) != null ? _a2 : [];
|
|
1085
|
-
})) != null ?
|
|
1107
|
+
})) != null ? _j : [];
|
|
1086
1108
|
}
|
|
1087
1109
|
async ping() {
|
|
1088
1110
|
try {
|
package/dist/handlers/index.js
CHANGED
|
@@ -2177,8 +2177,18 @@ var GeminiProvider = class {
|
|
|
2177
2177
|
constructor(llmConfig, embeddingConfig) {
|
|
2178
2178
|
if (!llmConfig.apiKey) throw new Error("[GeminiProvider] llmConfig.apiKey is required");
|
|
2179
2179
|
this.client = new import_genai.GoogleGenAI({ apiKey: llmConfig.apiKey });
|
|
2180
|
-
this.llmConfig = llmConfig
|
|
2181
|
-
|
|
2180
|
+
this.llmConfig = __spreadProps(__spreadValues({}, llmConfig), {
|
|
2181
|
+
model: this.sanitizeModel(llmConfig.model)
|
|
2182
|
+
});
|
|
2183
|
+
if (embeddingConfig) {
|
|
2184
|
+
this.embeddingConfig = __spreadProps(__spreadValues({}, embeddingConfig), {
|
|
2185
|
+
model: this.sanitizeModel(embeddingConfig.model)
|
|
2186
|
+
});
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2189
|
+
sanitizeModel(model) {
|
|
2190
|
+
if (!model) return model;
|
|
2191
|
+
return model.split(":")[0];
|
|
2182
2192
|
}
|
|
2183
2193
|
async chat(messages, context, options) {
|
|
2184
2194
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -2207,8 +2217,10 @@ ${context}`;
|
|
|
2207
2217
|
return (_f = response.text) != null ? _f : "";
|
|
2208
2218
|
}
|
|
2209
2219
|
async embed(text, options) {
|
|
2210
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
2211
|
-
const model =
|
|
2220
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
2221
|
+
const model = this.sanitizeModel(
|
|
2222
|
+
(_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004"
|
|
2223
|
+
);
|
|
2212
2224
|
const apiKey = (_e = (_d = this.embeddingConfig) == null ? void 0 : _d.apiKey) != null ? _e : this.llmConfig.apiKey;
|
|
2213
2225
|
const client = apiKey !== this.llmConfig.apiKey ? new import_genai.GoogleGenAI({ apiKey }) : this.client;
|
|
2214
2226
|
let content = text;
|
|
@@ -2225,14 +2237,20 @@ ${context}`;
|
|
|
2225
2237
|
}
|
|
2226
2238
|
const response = await client.models.embedContent({
|
|
2227
2239
|
model,
|
|
2228
|
-
contents: content
|
|
2240
|
+
contents: content,
|
|
2241
|
+
config: ((_h = this.embeddingConfig) == null ? void 0 : _h.dimensions) ? { outputDimensionality: this.embeddingConfig.dimensions } : void 0
|
|
2242
|
+
}).catch((err) => {
|
|
2243
|
+
console.error(`[GeminiProvider] Embedding failed for model "${model}":`, err.message);
|
|
2244
|
+
throw err;
|
|
2229
2245
|
});
|
|
2230
|
-
return (
|
|
2246
|
+
return (_k = (_j = (_i = response.embeddings) == null ? void 0 : _i[0]) == null ? void 0 : _j.values) != null ? _k : [];
|
|
2231
2247
|
}
|
|
2232
2248
|
async batchEmbed(texts, options) {
|
|
2233
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
2249
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
2234
2250
|
const vectors = [];
|
|
2235
|
-
const model =
|
|
2251
|
+
const model = this.sanitizeModel(
|
|
2252
|
+
(_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004"
|
|
2253
|
+
);
|
|
2236
2254
|
const apiKey = (_e = (_d = this.embeddingConfig) == null ? void 0 : _d.apiKey) != null ? _e : this.llmConfig.apiKey;
|
|
2237
2255
|
const client = apiKey !== this.llmConfig.apiKey ? new import_genai.GoogleGenAI({ apiKey }) : this.client;
|
|
2238
2256
|
let contents = texts;
|
|
@@ -2245,12 +2263,16 @@ ${context}`;
|
|
|
2245
2263
|
}
|
|
2246
2264
|
const response = await client.models.embedContent({
|
|
2247
2265
|
model,
|
|
2248
|
-
contents
|
|
2266
|
+
contents,
|
|
2267
|
+
config: ((_h = this.embeddingConfig) == null ? void 0 : _h.dimensions) ? { outputDimensionality: this.embeddingConfig.dimensions } : void 0
|
|
2268
|
+
}).catch((err) => {
|
|
2269
|
+
console.error(`[GeminiProvider] Batch embedding failed for model "${model}":`, err.message);
|
|
2270
|
+
throw err;
|
|
2249
2271
|
});
|
|
2250
|
-
return (
|
|
2272
|
+
return (_j = (_i = response.embeddings) == null ? void 0 : _i.map((e) => {
|
|
2251
2273
|
var _a2;
|
|
2252
2274
|
return (_a2 = e.values) != null ? _a2 : [];
|
|
2253
|
-
})) != null ?
|
|
2275
|
+
})) != null ? _j : [];
|
|
2254
2276
|
}
|
|
2255
2277
|
async ping() {
|
|
2256
2278
|
try {
|
package/dist/handlers/index.mjs
CHANGED
package/dist/server.js
CHANGED
|
@@ -2221,8 +2221,18 @@ var GeminiProvider = class {
|
|
|
2221
2221
|
constructor(llmConfig, embeddingConfig) {
|
|
2222
2222
|
if (!llmConfig.apiKey) throw new Error("[GeminiProvider] llmConfig.apiKey is required");
|
|
2223
2223
|
this.client = new import_genai.GoogleGenAI({ apiKey: llmConfig.apiKey });
|
|
2224
|
-
this.llmConfig = llmConfig
|
|
2225
|
-
|
|
2224
|
+
this.llmConfig = __spreadProps(__spreadValues({}, llmConfig), {
|
|
2225
|
+
model: this.sanitizeModel(llmConfig.model)
|
|
2226
|
+
});
|
|
2227
|
+
if (embeddingConfig) {
|
|
2228
|
+
this.embeddingConfig = __spreadProps(__spreadValues({}, embeddingConfig), {
|
|
2229
|
+
model: this.sanitizeModel(embeddingConfig.model)
|
|
2230
|
+
});
|
|
2231
|
+
}
|
|
2232
|
+
}
|
|
2233
|
+
sanitizeModel(model) {
|
|
2234
|
+
if (!model) return model;
|
|
2235
|
+
return model.split(":")[0];
|
|
2226
2236
|
}
|
|
2227
2237
|
async chat(messages, context, options) {
|
|
2228
2238
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -2251,8 +2261,10 @@ ${context}`;
|
|
|
2251
2261
|
return (_f = response.text) != null ? _f : "";
|
|
2252
2262
|
}
|
|
2253
2263
|
async embed(text, options) {
|
|
2254
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
2255
|
-
const model =
|
|
2264
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
2265
|
+
const model = this.sanitizeModel(
|
|
2266
|
+
(_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004"
|
|
2267
|
+
);
|
|
2256
2268
|
const apiKey = (_e = (_d = this.embeddingConfig) == null ? void 0 : _d.apiKey) != null ? _e : this.llmConfig.apiKey;
|
|
2257
2269
|
const client = apiKey !== this.llmConfig.apiKey ? new import_genai.GoogleGenAI({ apiKey }) : this.client;
|
|
2258
2270
|
let content = text;
|
|
@@ -2269,14 +2281,20 @@ ${context}`;
|
|
|
2269
2281
|
}
|
|
2270
2282
|
const response = await client.models.embedContent({
|
|
2271
2283
|
model,
|
|
2272
|
-
contents: content
|
|
2284
|
+
contents: content,
|
|
2285
|
+
config: ((_h = this.embeddingConfig) == null ? void 0 : _h.dimensions) ? { outputDimensionality: this.embeddingConfig.dimensions } : void 0
|
|
2286
|
+
}).catch((err) => {
|
|
2287
|
+
console.error(`[GeminiProvider] Embedding failed for model "${model}":`, err.message);
|
|
2288
|
+
throw err;
|
|
2273
2289
|
});
|
|
2274
|
-
return (
|
|
2290
|
+
return (_k = (_j = (_i = response.embeddings) == null ? void 0 : _i[0]) == null ? void 0 : _j.values) != null ? _k : [];
|
|
2275
2291
|
}
|
|
2276
2292
|
async batchEmbed(texts, options) {
|
|
2277
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
2293
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
2278
2294
|
const vectors = [];
|
|
2279
|
-
const model =
|
|
2295
|
+
const model = this.sanitizeModel(
|
|
2296
|
+
(_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004"
|
|
2297
|
+
);
|
|
2280
2298
|
const apiKey = (_e = (_d = this.embeddingConfig) == null ? void 0 : _d.apiKey) != null ? _e : this.llmConfig.apiKey;
|
|
2281
2299
|
const client = apiKey !== this.llmConfig.apiKey ? new import_genai.GoogleGenAI({ apiKey }) : this.client;
|
|
2282
2300
|
let contents = texts;
|
|
@@ -2289,12 +2307,16 @@ ${context}`;
|
|
|
2289
2307
|
}
|
|
2290
2308
|
const response = await client.models.embedContent({
|
|
2291
2309
|
model,
|
|
2292
|
-
contents
|
|
2310
|
+
contents,
|
|
2311
|
+
config: ((_h = this.embeddingConfig) == null ? void 0 : _h.dimensions) ? { outputDimensionality: this.embeddingConfig.dimensions } : void 0
|
|
2312
|
+
}).catch((err) => {
|
|
2313
|
+
console.error(`[GeminiProvider] Batch embedding failed for model "${model}":`, err.message);
|
|
2314
|
+
throw err;
|
|
2293
2315
|
});
|
|
2294
|
-
return (
|
|
2316
|
+
return (_j = (_i = response.embeddings) == null ? void 0 : _i.map((e) => {
|
|
2295
2317
|
var _a2;
|
|
2296
2318
|
return (_a2 = e.values) != null ? _a2 : [];
|
|
2297
|
-
})) != null ?
|
|
2319
|
+
})) != null ? _j : [];
|
|
2298
2320
|
}
|
|
2299
2321
|
async ping() {
|
|
2300
2322
|
try {
|
package/dist/server.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retrivora-ai/rag-engine",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Retrivora AI is a plug-and-play AI engine for RAG chat experiences — generic vector DB + LLM provider, embeddable or standalone.",
|
|
5
5
|
"author": "Abhinav Alkuchi",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,10 +26,28 @@ export class GeminiProvider implements ILLMProvider {
|
|
|
26
26
|
constructor(llmConfig: LLMConfig, embeddingConfig?: EmbeddingConfig) {
|
|
27
27
|
if (!llmConfig.apiKey) throw new Error('[GeminiProvider] llmConfig.apiKey is required');
|
|
28
28
|
this.client = new GoogleGenAI({ apiKey: llmConfig.apiKey });
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
|
|
30
|
+
// Sanitize model names (e.g. remove ':latest' suffix used by Ollama)
|
|
31
|
+
this.llmConfig = {
|
|
32
|
+
...llmConfig,
|
|
33
|
+
model: this.sanitizeModel(llmConfig.model)
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
if (embeddingConfig) {
|
|
37
|
+
this.embeddingConfig = {
|
|
38
|
+
...embeddingConfig,
|
|
39
|
+
model: this.sanitizeModel(embeddingConfig.model)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
31
42
|
}
|
|
32
43
|
|
|
44
|
+
private sanitizeModel(model: string): string {
|
|
45
|
+
if (!model) return model;
|
|
46
|
+
// Strip :latest suffix common in Ollama but invalid in Google SDK
|
|
47
|
+
return model.split(':')[0];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
33
51
|
async chat(messages: ChatMessage[], context: string, options?: ChatOptions): Promise<string> {
|
|
34
52
|
const systemPrompt =
|
|
35
53
|
this.llmConfig.systemPrompt ??
|
|
@@ -62,10 +80,11 @@ export class GeminiProvider implements ILLMProvider {
|
|
|
62
80
|
}
|
|
63
81
|
|
|
64
82
|
async embed(text: string, options?: EmbedOptions): Promise<number[]> {
|
|
65
|
-
const model =
|
|
83
|
+
const model = this.sanitizeModel(
|
|
66
84
|
options?.model ??
|
|
67
85
|
this.embeddingConfig?.model ??
|
|
68
|
-
'text-embedding-004'
|
|
86
|
+
'text-embedding-004'
|
|
87
|
+
);
|
|
69
88
|
|
|
70
89
|
const apiKey = this.embeddingConfig?.apiKey ?? this.llmConfig.apiKey;
|
|
71
90
|
const client = apiKey !== this.llmConfig.apiKey
|
|
@@ -91,6 +110,10 @@ export class GeminiProvider implements ILLMProvider {
|
|
|
91
110
|
const response = await client.models.embedContent({
|
|
92
111
|
model,
|
|
93
112
|
contents: content,
|
|
113
|
+
config: this.embeddingConfig?.dimensions ? { outputDimensionality: this.embeddingConfig.dimensions } : undefined
|
|
114
|
+
}).catch(err => {
|
|
115
|
+
console.error(`[GeminiProvider] Embedding failed for model "${model}":`, err.message);
|
|
116
|
+
throw err;
|
|
94
117
|
});
|
|
95
118
|
|
|
96
119
|
return response.embeddings?.[0]?.values ?? [];
|
|
@@ -101,10 +124,11 @@ export class GeminiProvider implements ILLMProvider {
|
|
|
101
124
|
// Sequential fallback for Gemini (API doesn't have a direct batch endpoint in the same way, though you can pass multiple contents.
|
|
102
125
|
// For simplicity and to match the other providers' structure, we'll iterate or pass array.
|
|
103
126
|
// The new SDK supports an array of contents.
|
|
104
|
-
const model =
|
|
127
|
+
const model = this.sanitizeModel(
|
|
105
128
|
options?.model ??
|
|
106
129
|
this.embeddingConfig?.model ??
|
|
107
|
-
'text-embedding-004'
|
|
130
|
+
'text-embedding-004'
|
|
131
|
+
);
|
|
108
132
|
|
|
109
133
|
const apiKey = this.embeddingConfig?.apiKey ?? this.llmConfig.apiKey;
|
|
110
134
|
const client = apiKey !== this.llmConfig.apiKey
|
|
@@ -126,6 +150,10 @@ export class GeminiProvider implements ILLMProvider {
|
|
|
126
150
|
const response = await client.models.embedContent({
|
|
127
151
|
model,
|
|
128
152
|
contents,
|
|
153
|
+
config: this.embeddingConfig?.dimensions ? { outputDimensionality: this.embeddingConfig.dimensions } : undefined
|
|
154
|
+
}).catch(err => {
|
|
155
|
+
console.error(`[GeminiProvider] Batch embedding failed for model "${model}":`, err.message);
|
|
156
|
+
throw err;
|
|
129
157
|
});
|
|
130
158
|
|
|
131
159
|
return response.embeddings?.map(e => e.values ?? []) ?? [];
|