@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
- this.embeddingConfig = embeddingConfig;
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 = (_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004";
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 (_j = (_i = (_h = response.embeddings) == null ? void 0 : _h[0]) == null ? void 0 : _i.values) != null ? _j : [];
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 = (_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004";
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 (_i = (_h = response.embeddings) == null ? void 0 : _h.map((e) => {
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 ? _i : [];
1107
+ })) != null ? _j : [];
1086
1108
  }
1087
1109
  async ping() {
1088
1110
  try {
@@ -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
- this.embeddingConfig = embeddingConfig;
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 = (_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004";
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 (_j = (_i = (_h = response.embeddings) == null ? void 0 : _h[0]) == null ? void 0 : _i.values) != null ? _j : [];
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 = (_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004";
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 (_i = (_h = response.embeddings) == null ? void 0 : _h.map((e) => {
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 ? _i : [];
2275
+ })) != null ? _j : [];
2254
2276
  }
2255
2277
  async ping() {
2256
2278
  try {
@@ -3,7 +3,7 @@ import {
3
3
  createHealthHandler,
4
4
  createIngestHandler,
5
5
  createUploadHandler
6
- } from "../chunk-SNPFZBDK.mjs";
6
+ } from "../chunk-GE4AVGA5.mjs";
7
7
  import "../chunk-EDLTMSNY.mjs";
8
8
  import "../chunk-FWCSY2DS.mjs";
9
9
  export {
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
- this.embeddingConfig = embeddingConfig;
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 = (_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004";
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 (_j = (_i = (_h = response.embeddings) == null ? void 0 : _h[0]) == null ? void 0 : _i.values) != null ? _j : [];
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 = (_c = (_b = options == null ? void 0 : options.model) != null ? _b : (_a = this.embeddingConfig) == null ? void 0 : _a.model) != null ? _c : "text-embedding-004";
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 (_i = (_h = response.embeddings) == null ? void 0 : _h.map((e) => {
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 ? _i : [];
2319
+ })) != null ? _j : [];
2298
2320
  }
2299
2321
  async ping() {
2300
2322
  try {
package/dist/server.mjs CHANGED
@@ -34,7 +34,7 @@ import {
34
34
  createIngestHandler,
35
35
  createUploadHandler,
36
36
  getRagConfig
37
- } from "./chunk-SNPFZBDK.mjs";
37
+ } from "./chunk-GE4AVGA5.mjs";
38
38
  import "./chunk-EDLTMSNY.mjs";
39
39
  import {
40
40
  PineconeProvider
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retrivora-ai/rag-engine",
3
- "version": "0.3.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
- this.llmConfig = llmConfig;
30
- this.embeddingConfig = embeddingConfig;
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 ?? []) ?? [];