@retrivora-ai/rag-engine 2.1.2 → 2.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/handlers/index.js +66 -38
- package/dist/handlers/index.mjs +66 -38
- package/dist/server.js +66 -38
- package/dist/server.mjs +66 -38
- package/package.json +1 -1
- package/src/config/serverConfig.ts +5 -5
package/dist/handlers/index.js
CHANGED
|
@@ -591,26 +591,54 @@ function cleanApiKeyOverride(apiKeyOverride) {
|
|
|
591
591
|
}
|
|
592
592
|
return key;
|
|
593
593
|
}
|
|
594
|
+
async function resolveUserGatewayConfig(apiKeyOverride) {
|
|
595
|
+
var _a2;
|
|
596
|
+
if (!apiKeyOverride || !process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.SUPABASE_SERVICE_ROLE_KEY) {
|
|
597
|
+
return {};
|
|
598
|
+
}
|
|
599
|
+
try {
|
|
600
|
+
const { createAdminClient } = await import("@/lib/supabase-server");
|
|
601
|
+
const supabase = createAdminClient();
|
|
602
|
+
const { data: licenseRecord } = await supabase.from("licenses").select("project_id, customer_name, tier").eq("license_key", apiKeyOverride.trim()).single();
|
|
603
|
+
if (!licenseRecord) {
|
|
604
|
+
return {};
|
|
605
|
+
}
|
|
606
|
+
const projectId = licenseRecord.project_id;
|
|
607
|
+
const { data: configs } = await supabase.from("gateway_config").select("project_id, default_model, provider_keys, is_active").in("project_id", [projectId, "global"]).eq("is_active", true);
|
|
608
|
+
if (!configs || configs.length === 0) {
|
|
609
|
+
return {};
|
|
610
|
+
}
|
|
611
|
+
const matchedConfig = configs.find((c) => c.project_id === projectId) || configs.find((c) => c.project_id === "global");
|
|
612
|
+
const customGroqKey = (_a2 = matchedConfig == null ? void 0 : matchedConfig.provider_keys) == null ? void 0 : _a2.groq;
|
|
613
|
+
const targetModel = matchedConfig == null ? void 0 : matchedConfig.default_model;
|
|
614
|
+
return { customGroqKey, targetModel };
|
|
615
|
+
} catch (err) {
|
|
616
|
+
console.warn("[LLM Gateway Router] Error resolving user gateway_config:", err.message);
|
|
617
|
+
return {};
|
|
618
|
+
}
|
|
619
|
+
}
|
|
594
620
|
async function dispatchChatCompletion(req, apiKeyOverride) {
|
|
595
|
-
const
|
|
596
|
-
const
|
|
597
|
-
|
|
621
|
+
const { customGroqKey, targetModel } = await resolveUserGatewayConfig(apiKeyOverride);
|
|
622
|
+
const effectiveKey = customGroqKey || cleanApiKeyOverride(apiKeyOverride);
|
|
623
|
+
const activeModel = req.model || targetModel || "llama-3.1-8b-instant";
|
|
624
|
+
const provider = resolveProvider(activeModel);
|
|
625
|
+
console.log(`[LLM Gateway Router] Dispatching chat request: model=${activeModel}, provider=${provider}, hasCustomKey=${Boolean(customGroqKey)}, hasGlobalGroqKey=${Boolean(process.env.GROQ_API_KEY)}`);
|
|
598
626
|
try {
|
|
599
627
|
switch (provider) {
|
|
600
628
|
case "groq":
|
|
601
|
-
return await handleGroqRequest(req, effectiveKey);
|
|
629
|
+
return await handleGroqRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
602
630
|
case "openai":
|
|
603
|
-
return await handleOpenAIRequest(req, effectiveKey);
|
|
631
|
+
return await handleOpenAIRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
604
632
|
case "gemini":
|
|
605
|
-
return await handleGeminiRequest(req, effectiveKey);
|
|
633
|
+
return await handleGeminiRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
606
634
|
case "anthropic":
|
|
607
|
-
return await handleAnthropicRequest(req, effectiveKey);
|
|
635
|
+
return await handleAnthropicRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
608
636
|
case "ollama":
|
|
609
|
-
return await handleOllamaRequest(req);
|
|
637
|
+
return await handleOllamaRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }));
|
|
610
638
|
case "huggingface":
|
|
611
|
-
return await handleHuggingFaceChatRequest(req, effectiveKey);
|
|
639
|
+
return await handleHuggingFaceChatRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
612
640
|
default:
|
|
613
|
-
throw new Error(`Unsupported LLM provider for model: ${
|
|
641
|
+
throw new Error(`Unsupported LLM provider for model: ${activeModel}`);
|
|
614
642
|
}
|
|
615
643
|
} catch (error) {
|
|
616
644
|
console.error(`[LLM Gateway Router] Provider '${provider}' failed for model '${req.model}':`, {
|
|
@@ -3052,7 +3080,7 @@ function readEnum(env, name, fallback, allowed) {
|
|
|
3052
3080
|
throw new Error(`[getRagConfig] ${name} must be one of: ${allowed.join(", ")}`);
|
|
3053
3081
|
}
|
|
3054
3082
|
function getEnvConfig(env = process.env, base) {
|
|
3055
|
-
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb;
|
|
3083
|
+
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb, _xb, _yb, _zb, _Ab, _Bb, _Cb, _Db, _Eb, _Fb;
|
|
3056
3084
|
const projectId = (_c = (_b = (_a2 = readString(env, "RAG_PROJECT_ID")) != null ? _a2 : readString(env, "NEXT_PUBLIC_PROJECT_ID")) != null ? _b : base == null ? void 0 : base.projectId) != null ? _c : "__default__";
|
|
3057
3085
|
const licenseKey = (_g2 = (_f = (_e = (_d = readString(env, "RAG_LICENSE_KEY")) != null ? _d : readString(env, "RETRIVORA_LICENSE_KEY")) != null ? _e : readString(env, "NEXT_PUBLIC_RETRIVORA_LICENSE_KEY")) != null ? _f : readString(env, "LICENSE_KEY")) != null ? _g2 : base == null ? void 0 : base.licenseKey;
|
|
3058
3086
|
const telemetryEnabled = readString(env, "TELEMETRY_ENABLED") === "true" || readString(env, "NEXT_PUBLIC_TELEMETRY_ENABLED") === "true" || ((_h = base == null ? void 0 : base.telemetry) == null ? void 0 : _h.enabled) || Boolean(licenseKey);
|
|
@@ -3132,25 +3160,25 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3132
3160
|
return true;
|
|
3133
3161
|
}
|
|
3134
3162
|
})();
|
|
3135
|
-
const
|
|
3163
|
+
const defaultGatewayUrl = (_ma = (_la = readString(env, "LITELLM_BASE_URL")) != null ? _la : readString(env, "LLM_BASE_URL")) != null ? _ma : "https://llm.retrivora.com/api/v1";
|
|
3136
3164
|
const defaultLlmProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3137
|
-
const llmProvider = (
|
|
3138
|
-
const llmBaseUrl = (
|
|
3139
|
-
const llmModel = (
|
|
3140
|
-
const llmApiKey = (
|
|
3141
|
-
const llmProfile = (
|
|
3165
|
+
const llmProvider = (_pa = (_oa = readEnum(env, "LLM_PROVIDER", defaultLlmProvider, LLM_PROVIDERS)) != null ? _oa : (_na = base == null ? void 0 : base.llm) == null ? void 0 : _na.provider) != null ? _pa : defaultLlmProvider;
|
|
3166
|
+
const llmBaseUrl = (_ta = (_sa = (_qa = readString(env, "LITELLM_BASE_URL")) != null ? _qa : readString(env, "LLM_BASE_URL")) != null ? _sa : (_ra = base == null ? void 0 : base.llm) == null ? void 0 : _ra.baseUrl) != null ? _ta : defaultGatewayUrl;
|
|
3167
|
+
const llmModel = (_xa = (_va = readString(env, "LLM_MODEL")) != null ? _va : (_ua = base == null ? void 0 : base.llm) == null ? void 0 : _ua.model) != null ? _xa : isFreeTier ? "llama-3.1-8b-instant" : (_wa = DEFAULT_MODEL_BY_PROVIDER[llmProvider]) != null ? _wa : "gpt-4o";
|
|
3168
|
+
const llmApiKey = (_Da = (_Ca = (_Aa = (_za = (_ya = llmApiKeyByProvider[llmProvider]) != null ? _ya : readString(env, "LLM_API_KEY")) != null ? _za : readString(env, "LITELLM_MASTER_KEY")) != null ? _Aa : readString(env, "LITELLM_API_KEY")) != null ? _Ca : (_Ba = base == null ? void 0 : base.llm) == null ? void 0 : _Ba.apiKey) != null ? _Da : licenseKey;
|
|
3169
|
+
const llmProfile = (_Ha = (_Ga = readString(env, "LLM_UNIVERSAL_PROFILE")) != null ? _Ga : (_Fa = (_Ea = base == null ? void 0 : base.llm) == null ? void 0 : _Ea.options) == null ? void 0 : _Fa.profile) != null ? _Ha : "litellm";
|
|
3142
3170
|
const defaultEmbeddingProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3143
|
-
const embeddingProvider = (
|
|
3144
|
-
const embeddingBaseUrl = (
|
|
3145
|
-
const embeddingModel = (
|
|
3146
|
-
const embeddingApiKey = (
|
|
3147
|
-
const embeddingProfile = (
|
|
3171
|
+
const embeddingProvider = (_Ka = (_Ja = readEnum(env, "EMBEDDING_PROVIDER", defaultEmbeddingProvider, EMBEDDING_PROVIDERS)) != null ? _Ja : (_Ia = base == null ? void 0 : base.embedding) == null ? void 0 : _Ia.provider) != null ? _Ka : defaultEmbeddingProvider;
|
|
3172
|
+
const embeddingBaseUrl = (_Pa = (_Oa = (_Ma = (_La = readString(env, "LITELLM_BASE_URL")) != null ? _La : readString(env, "EMBEDDING_BASE_URL")) != null ? _Ma : readString(env, "LLM_BASE_URL")) != null ? _Oa : (_Na = base == null ? void 0 : base.embedding) == null ? void 0 : _Na.baseUrl) != null ? _Pa : defaultGatewayUrl;
|
|
3173
|
+
const embeddingModel = (_Sa = (_Ra = readString(env, "EMBEDDING_MODEL")) != null ? _Ra : (_Qa = base == null ? void 0 : base.embedding) == null ? void 0 : _Qa.model) != null ? _Sa : "text-embedding-004";
|
|
3174
|
+
const embeddingApiKey = (_Za = (_Ya = (_Wa = (_Va = (_Ua = (_Ta = embeddingApiKeyByProvider[embeddingProvider]) != null ? _Ta : readString(env, "EMBEDDING_API_KEY")) != null ? _Ua : readString(env, "LLM_API_KEY")) != null ? _Va : readString(env, "LITELLM_MASTER_KEY")) != null ? _Wa : readString(env, "LITELLM_API_KEY")) != null ? _Ya : (_Xa = base == null ? void 0 : base.embedding) == null ? void 0 : _Xa.apiKey) != null ? _Za : licenseKey;
|
|
3175
|
+
const embeddingProfile = (_bb = (_ab = readString(env, "EMBEDDING_UNIVERSAL_PROFILE")) != null ? _ab : (_$a = (__a = base == null ? void 0 : base.embedding) == null ? void 0 : __a.options) == null ? void 0 : _$a.profile) != null ? _bb : "litellm";
|
|
3148
3176
|
return __spreadProps(__spreadValues({
|
|
3149
3177
|
projectId,
|
|
3150
3178
|
licenseKey,
|
|
3151
3179
|
vectorDb: {
|
|
3152
3180
|
provider: vectorProvider,
|
|
3153
|
-
indexName: (
|
|
3181
|
+
indexName: (_db = (_cb = readString(env, "VECTOR_DB_INDEX")) != null ? _cb : vectorDbOptions.indexName) != null ? _db : "rag-index",
|
|
3154
3182
|
options: vectorDbOptions
|
|
3155
3183
|
},
|
|
3156
3184
|
llm: {
|
|
@@ -3180,30 +3208,30 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3180
3208
|
}
|
|
3181
3209
|
},
|
|
3182
3210
|
ui: {
|
|
3183
|
-
title: (
|
|
3184
|
-
subtitle: (
|
|
3185
|
-
primaryColor: (
|
|
3186
|
-
accentColor: (
|
|
3187
|
-
logoUrl: (
|
|
3188
|
-
placeholder: (
|
|
3189
|
-
showSources: ((
|
|
3190
|
-
welcomeMessage: (
|
|
3191
|
-
visualStyle: (
|
|
3192
|
-
borderRadius: (
|
|
3193
|
-
allowUpload: ((
|
|
3211
|
+
title: (_fb = (_eb = readString(env, "NEXT_PUBLIC_UI_TITLE")) != null ? _eb : readString(env, "UI_TITLE")) != null ? _fb : "AI Assistant",
|
|
3212
|
+
subtitle: (_hb = (_gb = readString(env, "NEXT_PUBLIC_UI_SUBTITLE")) != null ? _gb : readString(env, "UI_SUBTITLE")) != null ? _hb : "Powered by RAG",
|
|
3213
|
+
primaryColor: (_jb = (_ib = readString(env, "NEXT_PUBLIC_PRIMARY_COLOR")) != null ? _ib : readString(env, "UI_PRIMARY_COLOR")) != null ? _jb : "#10b981",
|
|
3214
|
+
accentColor: (_lb = (_kb = readString(env, "NEXT_PUBLIC_ACCENT_COLOR")) != null ? _kb : readString(env, "UI_ACCENT_COLOR")) != null ? _lb : "#3b82f6",
|
|
3215
|
+
logoUrl: (_mb = readString(env, "NEXT_PUBLIC_LOGO_URL")) != null ? _mb : readString(env, "UI_LOGO_URL"),
|
|
3216
|
+
placeholder: (_ob = (_nb = readString(env, "NEXT_PUBLIC_PLACEHOLDER")) != null ? _nb : readString(env, "UI_PLACEHOLDER")) != null ? _ob : "Ask me anything\u2026",
|
|
3217
|
+
showSources: ((_qb = (_pb = readString(env, "NEXT_PUBLIC_SHOW_SOURCES")) != null ? _pb : readString(env, "UI_SHOW_SOURCES")) != null ? _qb : "true") !== "false",
|
|
3218
|
+
welcomeMessage: (_sb = (_rb = readString(env, "NEXT_PUBLIC_WELCOME_MESSAGE")) != null ? _rb : readString(env, "UI_WELCOME_MESSAGE")) != null ? _sb : "Hello! I'm your AI assistant. Ask me anything about your documents.",
|
|
3219
|
+
visualStyle: (_ub = (_tb = readString(env, "NEXT_PUBLIC_UI_VISUAL_STYLE")) != null ? _tb : readString(env, "UI_VISUAL_STYLE")) != null ? _ub : "glass",
|
|
3220
|
+
borderRadius: (_wb = (_vb = readString(env, "NEXT_PUBLIC_UI_BORDER_RADIUS")) != null ? _vb : readString(env, "UI_BORDER_RADIUS")) != null ? _wb : "xl",
|
|
3221
|
+
allowUpload: ((_yb = (_xb = readString(env, "NEXT_PUBLIC_ALLOW_UPLOAD")) != null ? _xb : readString(env, "UI_ALLOW_UPLOAD")) != null ? _yb : "false") === "true"
|
|
3194
3222
|
},
|
|
3195
3223
|
rag: {
|
|
3196
3224
|
topK: readNumber(env, "RAG_TOP_K", 5),
|
|
3197
3225
|
scoreThreshold: readNumber(env, "RAG_SCORE_THRESHOLD", 0),
|
|
3198
3226
|
chunkSize: readNumber(env, "RAG_CHUNK_SIZE", 1e3),
|
|
3199
3227
|
chunkOverlap: readNumber(env, "RAG_CHUNK_OVERLAP", 200),
|
|
3200
|
-
filterableFields: (
|
|
3228
|
+
filterableFields: (_zb = readString(env, "RAG_FILTERABLE_FIELDS")) == null ? void 0 : _zb.split(",").map((f) => f.trim()),
|
|
3201
3229
|
// Query pipeline toggles — read from .env.local
|
|
3202
3230
|
useQueryTransformation: readString(env, "RAG_USE_QUERY_TRANSFORMATION") === "true",
|
|
3203
3231
|
useReranking: readString(env, "RAG_USE_RERANKING") === "true",
|
|
3204
3232
|
useGraphRetrieval: readString(env, "RAG_USE_GRAPH_RETRIEVAL") === "true",
|
|
3205
|
-
architecture: (
|
|
3206
|
-
chunkingStrategy: (
|
|
3233
|
+
architecture: (_Ab = readString(env, "RAG_ARCHITECTURE")) != null ? _Ab : "simple",
|
|
3234
|
+
chunkingStrategy: (_Bb = readString(env, "RAG_CHUNKING_STRATEGY")) != null ? _Bb : "recursive",
|
|
3207
3235
|
uiMapping: (() => {
|
|
3208
3236
|
const raw = readString(env, "RAG_UI_MAPPING");
|
|
3209
3237
|
if (!raw) return void 0;
|
|
@@ -3216,7 +3244,7 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3216
3244
|
},
|
|
3217
3245
|
telemetry: {
|
|
3218
3246
|
enabled: telemetryEnabled,
|
|
3219
|
-
url: (
|
|
3247
|
+
url: (_Fb = (_Eb = (_Cb = readString(env, "TELEMETRY_URL")) != null ? _Cb : readString(env, "NEXT_PUBLIC_TELEMETRY_URL")) != null ? _Eb : (_Db = base == null ? void 0 : base.telemetry) == null ? void 0 : _Db.url) != null ? _Fb : process.env.NODE_ENV === "development" ? "http://localhost:3001/api/telemetry" : "https://retrivora.com/api/telemetry"
|
|
3220
3248
|
}
|
|
3221
3249
|
}, readString(env, "GRAPH_DB_PROVIDER") ? {
|
|
3222
3250
|
graphDb: {
|
package/dist/handlers/index.mjs
CHANGED
|
@@ -576,26 +576,54 @@ function cleanApiKeyOverride(apiKeyOverride) {
|
|
|
576
576
|
}
|
|
577
577
|
return key;
|
|
578
578
|
}
|
|
579
|
+
async function resolveUserGatewayConfig(apiKeyOverride) {
|
|
580
|
+
var _a2;
|
|
581
|
+
if (!apiKeyOverride || !process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.SUPABASE_SERVICE_ROLE_KEY) {
|
|
582
|
+
return {};
|
|
583
|
+
}
|
|
584
|
+
try {
|
|
585
|
+
const { createAdminClient } = await import("@/lib/supabase-server");
|
|
586
|
+
const supabase = createAdminClient();
|
|
587
|
+
const { data: licenseRecord } = await supabase.from("licenses").select("project_id, customer_name, tier").eq("license_key", apiKeyOverride.trim()).single();
|
|
588
|
+
if (!licenseRecord) {
|
|
589
|
+
return {};
|
|
590
|
+
}
|
|
591
|
+
const projectId = licenseRecord.project_id;
|
|
592
|
+
const { data: configs } = await supabase.from("gateway_config").select("project_id, default_model, provider_keys, is_active").in("project_id", [projectId, "global"]).eq("is_active", true);
|
|
593
|
+
if (!configs || configs.length === 0) {
|
|
594
|
+
return {};
|
|
595
|
+
}
|
|
596
|
+
const matchedConfig = configs.find((c) => c.project_id === projectId) || configs.find((c) => c.project_id === "global");
|
|
597
|
+
const customGroqKey = (_a2 = matchedConfig == null ? void 0 : matchedConfig.provider_keys) == null ? void 0 : _a2.groq;
|
|
598
|
+
const targetModel = matchedConfig == null ? void 0 : matchedConfig.default_model;
|
|
599
|
+
return { customGroqKey, targetModel };
|
|
600
|
+
} catch (err) {
|
|
601
|
+
console.warn("[LLM Gateway Router] Error resolving user gateway_config:", err.message);
|
|
602
|
+
return {};
|
|
603
|
+
}
|
|
604
|
+
}
|
|
579
605
|
async function dispatchChatCompletion(req, apiKeyOverride) {
|
|
580
|
-
const
|
|
581
|
-
const
|
|
582
|
-
|
|
606
|
+
const { customGroqKey, targetModel } = await resolveUserGatewayConfig(apiKeyOverride);
|
|
607
|
+
const effectiveKey = customGroqKey || cleanApiKeyOverride(apiKeyOverride);
|
|
608
|
+
const activeModel = req.model || targetModel || "llama-3.1-8b-instant";
|
|
609
|
+
const provider = resolveProvider(activeModel);
|
|
610
|
+
console.log(`[LLM Gateway Router] Dispatching chat request: model=${activeModel}, provider=${provider}, hasCustomKey=${Boolean(customGroqKey)}, hasGlobalGroqKey=${Boolean(process.env.GROQ_API_KEY)}`);
|
|
583
611
|
try {
|
|
584
612
|
switch (provider) {
|
|
585
613
|
case "groq":
|
|
586
|
-
return await handleGroqRequest(req, effectiveKey);
|
|
614
|
+
return await handleGroqRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
587
615
|
case "openai":
|
|
588
|
-
return await handleOpenAIRequest(req, effectiveKey);
|
|
616
|
+
return await handleOpenAIRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
589
617
|
case "gemini":
|
|
590
|
-
return await handleGeminiRequest(req, effectiveKey);
|
|
618
|
+
return await handleGeminiRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
591
619
|
case "anthropic":
|
|
592
|
-
return await handleAnthropicRequest(req, effectiveKey);
|
|
620
|
+
return await handleAnthropicRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
593
621
|
case "ollama":
|
|
594
|
-
return await handleOllamaRequest(req);
|
|
622
|
+
return await handleOllamaRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }));
|
|
595
623
|
case "huggingface":
|
|
596
|
-
return await handleHuggingFaceChatRequest(req, effectiveKey);
|
|
624
|
+
return await handleHuggingFaceChatRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
597
625
|
default:
|
|
598
|
-
throw new Error(`Unsupported LLM provider for model: ${
|
|
626
|
+
throw new Error(`Unsupported LLM provider for model: ${activeModel}`);
|
|
599
627
|
}
|
|
600
628
|
} catch (error) {
|
|
601
629
|
console.error(`[LLM Gateway Router] Provider '${provider}' failed for model '${req.model}':`, {
|
|
@@ -3017,7 +3045,7 @@ function readEnum(env, name, fallback, allowed) {
|
|
|
3017
3045
|
throw new Error(`[getRagConfig] ${name} must be one of: ${allowed.join(", ")}`);
|
|
3018
3046
|
}
|
|
3019
3047
|
function getEnvConfig(env = process.env, base) {
|
|
3020
|
-
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb;
|
|
3048
|
+
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb, _xb, _yb, _zb, _Ab, _Bb, _Cb, _Db, _Eb, _Fb;
|
|
3021
3049
|
const projectId = (_c = (_b = (_a2 = readString(env, "RAG_PROJECT_ID")) != null ? _a2 : readString(env, "NEXT_PUBLIC_PROJECT_ID")) != null ? _b : base == null ? void 0 : base.projectId) != null ? _c : "__default__";
|
|
3022
3050
|
const licenseKey = (_g2 = (_f = (_e = (_d = readString(env, "RAG_LICENSE_KEY")) != null ? _d : readString(env, "RETRIVORA_LICENSE_KEY")) != null ? _e : readString(env, "NEXT_PUBLIC_RETRIVORA_LICENSE_KEY")) != null ? _f : readString(env, "LICENSE_KEY")) != null ? _g2 : base == null ? void 0 : base.licenseKey;
|
|
3023
3051
|
const telemetryEnabled = readString(env, "TELEMETRY_ENABLED") === "true" || readString(env, "NEXT_PUBLIC_TELEMETRY_ENABLED") === "true" || ((_h = base == null ? void 0 : base.telemetry) == null ? void 0 : _h.enabled) || Boolean(licenseKey);
|
|
@@ -3097,25 +3125,25 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3097
3125
|
return true;
|
|
3098
3126
|
}
|
|
3099
3127
|
})();
|
|
3100
|
-
const
|
|
3128
|
+
const defaultGatewayUrl = (_ma = (_la = readString(env, "LITELLM_BASE_URL")) != null ? _la : readString(env, "LLM_BASE_URL")) != null ? _ma : "https://llm.retrivora.com/api/v1";
|
|
3101
3129
|
const defaultLlmProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3102
|
-
const llmProvider = (
|
|
3103
|
-
const llmBaseUrl = (
|
|
3104
|
-
const llmModel = (
|
|
3105
|
-
const llmApiKey = (
|
|
3106
|
-
const llmProfile = (
|
|
3130
|
+
const llmProvider = (_pa = (_oa = readEnum(env, "LLM_PROVIDER", defaultLlmProvider, LLM_PROVIDERS)) != null ? _oa : (_na = base == null ? void 0 : base.llm) == null ? void 0 : _na.provider) != null ? _pa : defaultLlmProvider;
|
|
3131
|
+
const llmBaseUrl = (_ta = (_sa = (_qa = readString(env, "LITELLM_BASE_URL")) != null ? _qa : readString(env, "LLM_BASE_URL")) != null ? _sa : (_ra = base == null ? void 0 : base.llm) == null ? void 0 : _ra.baseUrl) != null ? _ta : defaultGatewayUrl;
|
|
3132
|
+
const llmModel = (_xa = (_va = readString(env, "LLM_MODEL")) != null ? _va : (_ua = base == null ? void 0 : base.llm) == null ? void 0 : _ua.model) != null ? _xa : isFreeTier ? "llama-3.1-8b-instant" : (_wa = DEFAULT_MODEL_BY_PROVIDER[llmProvider]) != null ? _wa : "gpt-4o";
|
|
3133
|
+
const llmApiKey = (_Da = (_Ca = (_Aa = (_za = (_ya = llmApiKeyByProvider[llmProvider]) != null ? _ya : readString(env, "LLM_API_KEY")) != null ? _za : readString(env, "LITELLM_MASTER_KEY")) != null ? _Aa : readString(env, "LITELLM_API_KEY")) != null ? _Ca : (_Ba = base == null ? void 0 : base.llm) == null ? void 0 : _Ba.apiKey) != null ? _Da : licenseKey;
|
|
3134
|
+
const llmProfile = (_Ha = (_Ga = readString(env, "LLM_UNIVERSAL_PROFILE")) != null ? _Ga : (_Fa = (_Ea = base == null ? void 0 : base.llm) == null ? void 0 : _Ea.options) == null ? void 0 : _Fa.profile) != null ? _Ha : "litellm";
|
|
3107
3135
|
const defaultEmbeddingProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3108
|
-
const embeddingProvider = (
|
|
3109
|
-
const embeddingBaseUrl = (
|
|
3110
|
-
const embeddingModel = (
|
|
3111
|
-
const embeddingApiKey = (
|
|
3112
|
-
const embeddingProfile = (
|
|
3136
|
+
const embeddingProvider = (_Ka = (_Ja = readEnum(env, "EMBEDDING_PROVIDER", defaultEmbeddingProvider, EMBEDDING_PROVIDERS)) != null ? _Ja : (_Ia = base == null ? void 0 : base.embedding) == null ? void 0 : _Ia.provider) != null ? _Ka : defaultEmbeddingProvider;
|
|
3137
|
+
const embeddingBaseUrl = (_Pa = (_Oa = (_Ma = (_La = readString(env, "LITELLM_BASE_URL")) != null ? _La : readString(env, "EMBEDDING_BASE_URL")) != null ? _Ma : readString(env, "LLM_BASE_URL")) != null ? _Oa : (_Na = base == null ? void 0 : base.embedding) == null ? void 0 : _Na.baseUrl) != null ? _Pa : defaultGatewayUrl;
|
|
3138
|
+
const embeddingModel = (_Sa = (_Ra = readString(env, "EMBEDDING_MODEL")) != null ? _Ra : (_Qa = base == null ? void 0 : base.embedding) == null ? void 0 : _Qa.model) != null ? _Sa : "text-embedding-004";
|
|
3139
|
+
const embeddingApiKey = (_Za = (_Ya = (_Wa = (_Va = (_Ua = (_Ta = embeddingApiKeyByProvider[embeddingProvider]) != null ? _Ta : readString(env, "EMBEDDING_API_KEY")) != null ? _Ua : readString(env, "LLM_API_KEY")) != null ? _Va : readString(env, "LITELLM_MASTER_KEY")) != null ? _Wa : readString(env, "LITELLM_API_KEY")) != null ? _Ya : (_Xa = base == null ? void 0 : base.embedding) == null ? void 0 : _Xa.apiKey) != null ? _Za : licenseKey;
|
|
3140
|
+
const embeddingProfile = (_bb = (_ab = readString(env, "EMBEDDING_UNIVERSAL_PROFILE")) != null ? _ab : (_$a = (__a = base == null ? void 0 : base.embedding) == null ? void 0 : __a.options) == null ? void 0 : _$a.profile) != null ? _bb : "litellm";
|
|
3113
3141
|
return __spreadProps(__spreadValues({
|
|
3114
3142
|
projectId,
|
|
3115
3143
|
licenseKey,
|
|
3116
3144
|
vectorDb: {
|
|
3117
3145
|
provider: vectorProvider,
|
|
3118
|
-
indexName: (
|
|
3146
|
+
indexName: (_db = (_cb = readString(env, "VECTOR_DB_INDEX")) != null ? _cb : vectorDbOptions.indexName) != null ? _db : "rag-index",
|
|
3119
3147
|
options: vectorDbOptions
|
|
3120
3148
|
},
|
|
3121
3149
|
llm: {
|
|
@@ -3145,30 +3173,30 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3145
3173
|
}
|
|
3146
3174
|
},
|
|
3147
3175
|
ui: {
|
|
3148
|
-
title: (
|
|
3149
|
-
subtitle: (
|
|
3150
|
-
primaryColor: (
|
|
3151
|
-
accentColor: (
|
|
3152
|
-
logoUrl: (
|
|
3153
|
-
placeholder: (
|
|
3154
|
-
showSources: ((
|
|
3155
|
-
welcomeMessage: (
|
|
3156
|
-
visualStyle: (
|
|
3157
|
-
borderRadius: (
|
|
3158
|
-
allowUpload: ((
|
|
3176
|
+
title: (_fb = (_eb = readString(env, "NEXT_PUBLIC_UI_TITLE")) != null ? _eb : readString(env, "UI_TITLE")) != null ? _fb : "AI Assistant",
|
|
3177
|
+
subtitle: (_hb = (_gb = readString(env, "NEXT_PUBLIC_UI_SUBTITLE")) != null ? _gb : readString(env, "UI_SUBTITLE")) != null ? _hb : "Powered by RAG",
|
|
3178
|
+
primaryColor: (_jb = (_ib = readString(env, "NEXT_PUBLIC_PRIMARY_COLOR")) != null ? _ib : readString(env, "UI_PRIMARY_COLOR")) != null ? _jb : "#10b981",
|
|
3179
|
+
accentColor: (_lb = (_kb = readString(env, "NEXT_PUBLIC_ACCENT_COLOR")) != null ? _kb : readString(env, "UI_ACCENT_COLOR")) != null ? _lb : "#3b82f6",
|
|
3180
|
+
logoUrl: (_mb = readString(env, "NEXT_PUBLIC_LOGO_URL")) != null ? _mb : readString(env, "UI_LOGO_URL"),
|
|
3181
|
+
placeholder: (_ob = (_nb = readString(env, "NEXT_PUBLIC_PLACEHOLDER")) != null ? _nb : readString(env, "UI_PLACEHOLDER")) != null ? _ob : "Ask me anything\u2026",
|
|
3182
|
+
showSources: ((_qb = (_pb = readString(env, "NEXT_PUBLIC_SHOW_SOURCES")) != null ? _pb : readString(env, "UI_SHOW_SOURCES")) != null ? _qb : "true") !== "false",
|
|
3183
|
+
welcomeMessage: (_sb = (_rb = readString(env, "NEXT_PUBLIC_WELCOME_MESSAGE")) != null ? _rb : readString(env, "UI_WELCOME_MESSAGE")) != null ? _sb : "Hello! I'm your AI assistant. Ask me anything about your documents.",
|
|
3184
|
+
visualStyle: (_ub = (_tb = readString(env, "NEXT_PUBLIC_UI_VISUAL_STYLE")) != null ? _tb : readString(env, "UI_VISUAL_STYLE")) != null ? _ub : "glass",
|
|
3185
|
+
borderRadius: (_wb = (_vb = readString(env, "NEXT_PUBLIC_UI_BORDER_RADIUS")) != null ? _vb : readString(env, "UI_BORDER_RADIUS")) != null ? _wb : "xl",
|
|
3186
|
+
allowUpload: ((_yb = (_xb = readString(env, "NEXT_PUBLIC_ALLOW_UPLOAD")) != null ? _xb : readString(env, "UI_ALLOW_UPLOAD")) != null ? _yb : "false") === "true"
|
|
3159
3187
|
},
|
|
3160
3188
|
rag: {
|
|
3161
3189
|
topK: readNumber(env, "RAG_TOP_K", 5),
|
|
3162
3190
|
scoreThreshold: readNumber(env, "RAG_SCORE_THRESHOLD", 0),
|
|
3163
3191
|
chunkSize: readNumber(env, "RAG_CHUNK_SIZE", 1e3),
|
|
3164
3192
|
chunkOverlap: readNumber(env, "RAG_CHUNK_OVERLAP", 200),
|
|
3165
|
-
filterableFields: (
|
|
3193
|
+
filterableFields: (_zb = readString(env, "RAG_FILTERABLE_FIELDS")) == null ? void 0 : _zb.split(",").map((f) => f.trim()),
|
|
3166
3194
|
// Query pipeline toggles — read from .env.local
|
|
3167
3195
|
useQueryTransformation: readString(env, "RAG_USE_QUERY_TRANSFORMATION") === "true",
|
|
3168
3196
|
useReranking: readString(env, "RAG_USE_RERANKING") === "true",
|
|
3169
3197
|
useGraphRetrieval: readString(env, "RAG_USE_GRAPH_RETRIEVAL") === "true",
|
|
3170
|
-
architecture: (
|
|
3171
|
-
chunkingStrategy: (
|
|
3198
|
+
architecture: (_Ab = readString(env, "RAG_ARCHITECTURE")) != null ? _Ab : "simple",
|
|
3199
|
+
chunkingStrategy: (_Bb = readString(env, "RAG_CHUNKING_STRATEGY")) != null ? _Bb : "recursive",
|
|
3172
3200
|
uiMapping: (() => {
|
|
3173
3201
|
const raw = readString(env, "RAG_UI_MAPPING");
|
|
3174
3202
|
if (!raw) return void 0;
|
|
@@ -3181,7 +3209,7 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3181
3209
|
},
|
|
3182
3210
|
telemetry: {
|
|
3183
3211
|
enabled: telemetryEnabled,
|
|
3184
|
-
url: (
|
|
3212
|
+
url: (_Fb = (_Eb = (_Cb = readString(env, "TELEMETRY_URL")) != null ? _Cb : readString(env, "NEXT_PUBLIC_TELEMETRY_URL")) != null ? _Eb : (_Db = base == null ? void 0 : base.telemetry) == null ? void 0 : _Db.url) != null ? _Fb : process.env.NODE_ENV === "development" ? "http://localhost:3001/api/telemetry" : "https://retrivora.com/api/telemetry"
|
|
3185
3213
|
}
|
|
3186
3214
|
}, readString(env, "GRAPH_DB_PROVIDER") ? {
|
|
3187
3215
|
graphDb: {
|
package/dist/server.js
CHANGED
|
@@ -591,26 +591,54 @@ function cleanApiKeyOverride(apiKeyOverride) {
|
|
|
591
591
|
}
|
|
592
592
|
return key;
|
|
593
593
|
}
|
|
594
|
+
async function resolveUserGatewayConfig(apiKeyOverride) {
|
|
595
|
+
var _a2;
|
|
596
|
+
if (!apiKeyOverride || !process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.SUPABASE_SERVICE_ROLE_KEY) {
|
|
597
|
+
return {};
|
|
598
|
+
}
|
|
599
|
+
try {
|
|
600
|
+
const { createAdminClient } = await import("@/lib/supabase-server");
|
|
601
|
+
const supabase = createAdminClient();
|
|
602
|
+
const { data: licenseRecord } = await supabase.from("licenses").select("project_id, customer_name, tier").eq("license_key", apiKeyOverride.trim()).single();
|
|
603
|
+
if (!licenseRecord) {
|
|
604
|
+
return {};
|
|
605
|
+
}
|
|
606
|
+
const projectId = licenseRecord.project_id;
|
|
607
|
+
const { data: configs } = await supabase.from("gateway_config").select("project_id, default_model, provider_keys, is_active").in("project_id", [projectId, "global"]).eq("is_active", true);
|
|
608
|
+
if (!configs || configs.length === 0) {
|
|
609
|
+
return {};
|
|
610
|
+
}
|
|
611
|
+
const matchedConfig = configs.find((c) => c.project_id === projectId) || configs.find((c) => c.project_id === "global");
|
|
612
|
+
const customGroqKey = (_a2 = matchedConfig == null ? void 0 : matchedConfig.provider_keys) == null ? void 0 : _a2.groq;
|
|
613
|
+
const targetModel = matchedConfig == null ? void 0 : matchedConfig.default_model;
|
|
614
|
+
return { customGroqKey, targetModel };
|
|
615
|
+
} catch (err) {
|
|
616
|
+
console.warn("[LLM Gateway Router] Error resolving user gateway_config:", err.message);
|
|
617
|
+
return {};
|
|
618
|
+
}
|
|
619
|
+
}
|
|
594
620
|
async function dispatchChatCompletion(req, apiKeyOverride) {
|
|
595
|
-
const
|
|
596
|
-
const
|
|
597
|
-
|
|
621
|
+
const { customGroqKey, targetModel } = await resolveUserGatewayConfig(apiKeyOverride);
|
|
622
|
+
const effectiveKey = customGroqKey || cleanApiKeyOverride(apiKeyOverride);
|
|
623
|
+
const activeModel = req.model || targetModel || "llama-3.1-8b-instant";
|
|
624
|
+
const provider = resolveProvider(activeModel);
|
|
625
|
+
console.log(`[LLM Gateway Router] Dispatching chat request: model=${activeModel}, provider=${provider}, hasCustomKey=${Boolean(customGroqKey)}, hasGlobalGroqKey=${Boolean(process.env.GROQ_API_KEY)}`);
|
|
598
626
|
try {
|
|
599
627
|
switch (provider) {
|
|
600
628
|
case "groq":
|
|
601
|
-
return await handleGroqRequest(req, effectiveKey);
|
|
629
|
+
return await handleGroqRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
602
630
|
case "openai":
|
|
603
|
-
return await handleOpenAIRequest(req, effectiveKey);
|
|
631
|
+
return await handleOpenAIRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
604
632
|
case "gemini":
|
|
605
|
-
return await handleGeminiRequest(req, effectiveKey);
|
|
633
|
+
return await handleGeminiRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
606
634
|
case "anthropic":
|
|
607
|
-
return await handleAnthropicRequest(req, effectiveKey);
|
|
635
|
+
return await handleAnthropicRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
608
636
|
case "ollama":
|
|
609
|
-
return await handleOllamaRequest(req);
|
|
637
|
+
return await handleOllamaRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }));
|
|
610
638
|
case "huggingface":
|
|
611
|
-
return await handleHuggingFaceChatRequest(req, effectiveKey);
|
|
639
|
+
return await handleHuggingFaceChatRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
612
640
|
default:
|
|
613
|
-
throw new Error(`Unsupported LLM provider for model: ${
|
|
641
|
+
throw new Error(`Unsupported LLM provider for model: ${activeModel}`);
|
|
614
642
|
}
|
|
615
643
|
} catch (error) {
|
|
616
644
|
console.error(`[LLM Gateway Router] Provider '${provider}' failed for model '${req.model}':`, {
|
|
@@ -3113,7 +3141,7 @@ function getRagConfig(baseConfig, env = process.env) {
|
|
|
3113
3141
|
return getEnvConfig(env, baseConfig);
|
|
3114
3142
|
}
|
|
3115
3143
|
function getEnvConfig(env = process.env, base) {
|
|
3116
|
-
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb;
|
|
3144
|
+
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb, _xb, _yb, _zb, _Ab, _Bb, _Cb, _Db, _Eb, _Fb;
|
|
3117
3145
|
const projectId = (_c = (_b = (_a2 = readString(env, "RAG_PROJECT_ID")) != null ? _a2 : readString(env, "NEXT_PUBLIC_PROJECT_ID")) != null ? _b : base == null ? void 0 : base.projectId) != null ? _c : "__default__";
|
|
3118
3146
|
const licenseKey = (_g2 = (_f = (_e = (_d = readString(env, "RAG_LICENSE_KEY")) != null ? _d : readString(env, "RETRIVORA_LICENSE_KEY")) != null ? _e : readString(env, "NEXT_PUBLIC_RETRIVORA_LICENSE_KEY")) != null ? _f : readString(env, "LICENSE_KEY")) != null ? _g2 : base == null ? void 0 : base.licenseKey;
|
|
3119
3147
|
const telemetryEnabled = readString(env, "TELEMETRY_ENABLED") === "true" || readString(env, "NEXT_PUBLIC_TELEMETRY_ENABLED") === "true" || ((_h = base == null ? void 0 : base.telemetry) == null ? void 0 : _h.enabled) || Boolean(licenseKey);
|
|
@@ -3193,25 +3221,25 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3193
3221
|
return true;
|
|
3194
3222
|
}
|
|
3195
3223
|
})();
|
|
3196
|
-
const
|
|
3224
|
+
const defaultGatewayUrl = (_ma = (_la = readString(env, "LITELLM_BASE_URL")) != null ? _la : readString(env, "LLM_BASE_URL")) != null ? _ma : "https://llm.retrivora.com/api/v1";
|
|
3197
3225
|
const defaultLlmProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3198
|
-
const llmProvider = (
|
|
3199
|
-
const llmBaseUrl = (
|
|
3200
|
-
const llmModel = (
|
|
3201
|
-
const llmApiKey = (
|
|
3202
|
-
const llmProfile = (
|
|
3226
|
+
const llmProvider = (_pa = (_oa = readEnum(env, "LLM_PROVIDER", defaultLlmProvider, LLM_PROVIDERS)) != null ? _oa : (_na = base == null ? void 0 : base.llm) == null ? void 0 : _na.provider) != null ? _pa : defaultLlmProvider;
|
|
3227
|
+
const llmBaseUrl = (_ta = (_sa = (_qa = readString(env, "LITELLM_BASE_URL")) != null ? _qa : readString(env, "LLM_BASE_URL")) != null ? _sa : (_ra = base == null ? void 0 : base.llm) == null ? void 0 : _ra.baseUrl) != null ? _ta : defaultGatewayUrl;
|
|
3228
|
+
const llmModel = (_xa = (_va = readString(env, "LLM_MODEL")) != null ? _va : (_ua = base == null ? void 0 : base.llm) == null ? void 0 : _ua.model) != null ? _xa : isFreeTier ? "llama-3.1-8b-instant" : (_wa = DEFAULT_MODEL_BY_PROVIDER[llmProvider]) != null ? _wa : "gpt-4o";
|
|
3229
|
+
const llmApiKey = (_Da = (_Ca = (_Aa = (_za = (_ya = llmApiKeyByProvider[llmProvider]) != null ? _ya : readString(env, "LLM_API_KEY")) != null ? _za : readString(env, "LITELLM_MASTER_KEY")) != null ? _Aa : readString(env, "LITELLM_API_KEY")) != null ? _Ca : (_Ba = base == null ? void 0 : base.llm) == null ? void 0 : _Ba.apiKey) != null ? _Da : licenseKey;
|
|
3230
|
+
const llmProfile = (_Ha = (_Ga = readString(env, "LLM_UNIVERSAL_PROFILE")) != null ? _Ga : (_Fa = (_Ea = base == null ? void 0 : base.llm) == null ? void 0 : _Ea.options) == null ? void 0 : _Fa.profile) != null ? _Ha : "litellm";
|
|
3203
3231
|
const defaultEmbeddingProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3204
|
-
const embeddingProvider = (
|
|
3205
|
-
const embeddingBaseUrl = (
|
|
3206
|
-
const embeddingModel = (
|
|
3207
|
-
const embeddingApiKey = (
|
|
3208
|
-
const embeddingProfile = (
|
|
3232
|
+
const embeddingProvider = (_Ka = (_Ja = readEnum(env, "EMBEDDING_PROVIDER", defaultEmbeddingProvider, EMBEDDING_PROVIDERS)) != null ? _Ja : (_Ia = base == null ? void 0 : base.embedding) == null ? void 0 : _Ia.provider) != null ? _Ka : defaultEmbeddingProvider;
|
|
3233
|
+
const embeddingBaseUrl = (_Pa = (_Oa = (_Ma = (_La = readString(env, "LITELLM_BASE_URL")) != null ? _La : readString(env, "EMBEDDING_BASE_URL")) != null ? _Ma : readString(env, "LLM_BASE_URL")) != null ? _Oa : (_Na = base == null ? void 0 : base.embedding) == null ? void 0 : _Na.baseUrl) != null ? _Pa : defaultGatewayUrl;
|
|
3234
|
+
const embeddingModel = (_Sa = (_Ra = readString(env, "EMBEDDING_MODEL")) != null ? _Ra : (_Qa = base == null ? void 0 : base.embedding) == null ? void 0 : _Qa.model) != null ? _Sa : "text-embedding-004";
|
|
3235
|
+
const embeddingApiKey = (_Za = (_Ya = (_Wa = (_Va = (_Ua = (_Ta = embeddingApiKeyByProvider[embeddingProvider]) != null ? _Ta : readString(env, "EMBEDDING_API_KEY")) != null ? _Ua : readString(env, "LLM_API_KEY")) != null ? _Va : readString(env, "LITELLM_MASTER_KEY")) != null ? _Wa : readString(env, "LITELLM_API_KEY")) != null ? _Ya : (_Xa = base == null ? void 0 : base.embedding) == null ? void 0 : _Xa.apiKey) != null ? _Za : licenseKey;
|
|
3236
|
+
const embeddingProfile = (_bb = (_ab = readString(env, "EMBEDDING_UNIVERSAL_PROFILE")) != null ? _ab : (_$a = (__a = base == null ? void 0 : base.embedding) == null ? void 0 : __a.options) == null ? void 0 : _$a.profile) != null ? _bb : "litellm";
|
|
3209
3237
|
return __spreadProps(__spreadValues({
|
|
3210
3238
|
projectId,
|
|
3211
3239
|
licenseKey,
|
|
3212
3240
|
vectorDb: {
|
|
3213
3241
|
provider: vectorProvider,
|
|
3214
|
-
indexName: (
|
|
3242
|
+
indexName: (_db = (_cb = readString(env, "VECTOR_DB_INDEX")) != null ? _cb : vectorDbOptions.indexName) != null ? _db : "rag-index",
|
|
3215
3243
|
options: vectorDbOptions
|
|
3216
3244
|
},
|
|
3217
3245
|
llm: {
|
|
@@ -3241,30 +3269,30 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3241
3269
|
}
|
|
3242
3270
|
},
|
|
3243
3271
|
ui: {
|
|
3244
|
-
title: (
|
|
3245
|
-
subtitle: (
|
|
3246
|
-
primaryColor: (
|
|
3247
|
-
accentColor: (
|
|
3248
|
-
logoUrl: (
|
|
3249
|
-
placeholder: (
|
|
3250
|
-
showSources: ((
|
|
3251
|
-
welcomeMessage: (
|
|
3252
|
-
visualStyle: (
|
|
3253
|
-
borderRadius: (
|
|
3254
|
-
allowUpload: ((
|
|
3272
|
+
title: (_fb = (_eb = readString(env, "NEXT_PUBLIC_UI_TITLE")) != null ? _eb : readString(env, "UI_TITLE")) != null ? _fb : "AI Assistant",
|
|
3273
|
+
subtitle: (_hb = (_gb = readString(env, "NEXT_PUBLIC_UI_SUBTITLE")) != null ? _gb : readString(env, "UI_SUBTITLE")) != null ? _hb : "Powered by RAG",
|
|
3274
|
+
primaryColor: (_jb = (_ib = readString(env, "NEXT_PUBLIC_PRIMARY_COLOR")) != null ? _ib : readString(env, "UI_PRIMARY_COLOR")) != null ? _jb : "#10b981",
|
|
3275
|
+
accentColor: (_lb = (_kb = readString(env, "NEXT_PUBLIC_ACCENT_COLOR")) != null ? _kb : readString(env, "UI_ACCENT_COLOR")) != null ? _lb : "#3b82f6",
|
|
3276
|
+
logoUrl: (_mb = readString(env, "NEXT_PUBLIC_LOGO_URL")) != null ? _mb : readString(env, "UI_LOGO_URL"),
|
|
3277
|
+
placeholder: (_ob = (_nb = readString(env, "NEXT_PUBLIC_PLACEHOLDER")) != null ? _nb : readString(env, "UI_PLACEHOLDER")) != null ? _ob : "Ask me anything\u2026",
|
|
3278
|
+
showSources: ((_qb = (_pb = readString(env, "NEXT_PUBLIC_SHOW_SOURCES")) != null ? _pb : readString(env, "UI_SHOW_SOURCES")) != null ? _qb : "true") !== "false",
|
|
3279
|
+
welcomeMessage: (_sb = (_rb = readString(env, "NEXT_PUBLIC_WELCOME_MESSAGE")) != null ? _rb : readString(env, "UI_WELCOME_MESSAGE")) != null ? _sb : "Hello! I'm your AI assistant. Ask me anything about your documents.",
|
|
3280
|
+
visualStyle: (_ub = (_tb = readString(env, "NEXT_PUBLIC_UI_VISUAL_STYLE")) != null ? _tb : readString(env, "UI_VISUAL_STYLE")) != null ? _ub : "glass",
|
|
3281
|
+
borderRadius: (_wb = (_vb = readString(env, "NEXT_PUBLIC_UI_BORDER_RADIUS")) != null ? _vb : readString(env, "UI_BORDER_RADIUS")) != null ? _wb : "xl",
|
|
3282
|
+
allowUpload: ((_yb = (_xb = readString(env, "NEXT_PUBLIC_ALLOW_UPLOAD")) != null ? _xb : readString(env, "UI_ALLOW_UPLOAD")) != null ? _yb : "false") === "true"
|
|
3255
3283
|
},
|
|
3256
3284
|
rag: {
|
|
3257
3285
|
topK: readNumber(env, "RAG_TOP_K", 5),
|
|
3258
3286
|
scoreThreshold: readNumber(env, "RAG_SCORE_THRESHOLD", 0),
|
|
3259
3287
|
chunkSize: readNumber(env, "RAG_CHUNK_SIZE", 1e3),
|
|
3260
3288
|
chunkOverlap: readNumber(env, "RAG_CHUNK_OVERLAP", 200),
|
|
3261
|
-
filterableFields: (
|
|
3289
|
+
filterableFields: (_zb = readString(env, "RAG_FILTERABLE_FIELDS")) == null ? void 0 : _zb.split(",").map((f) => f.trim()),
|
|
3262
3290
|
// Query pipeline toggles — read from .env.local
|
|
3263
3291
|
useQueryTransformation: readString(env, "RAG_USE_QUERY_TRANSFORMATION") === "true",
|
|
3264
3292
|
useReranking: readString(env, "RAG_USE_RERANKING") === "true",
|
|
3265
3293
|
useGraphRetrieval: readString(env, "RAG_USE_GRAPH_RETRIEVAL") === "true",
|
|
3266
|
-
architecture: (
|
|
3267
|
-
chunkingStrategy: (
|
|
3294
|
+
architecture: (_Ab = readString(env, "RAG_ARCHITECTURE")) != null ? _Ab : "simple",
|
|
3295
|
+
chunkingStrategy: (_Bb = readString(env, "RAG_CHUNKING_STRATEGY")) != null ? _Bb : "recursive",
|
|
3268
3296
|
uiMapping: (() => {
|
|
3269
3297
|
const raw = readString(env, "RAG_UI_MAPPING");
|
|
3270
3298
|
if (!raw) return void 0;
|
|
@@ -3277,7 +3305,7 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3277
3305
|
},
|
|
3278
3306
|
telemetry: {
|
|
3279
3307
|
enabled: telemetryEnabled,
|
|
3280
|
-
url: (
|
|
3308
|
+
url: (_Fb = (_Eb = (_Cb = readString(env, "TELEMETRY_URL")) != null ? _Cb : readString(env, "NEXT_PUBLIC_TELEMETRY_URL")) != null ? _Eb : (_Db = base == null ? void 0 : base.telemetry) == null ? void 0 : _Db.url) != null ? _Fb : process.env.NODE_ENV === "development" ? "http://localhost:3001/api/telemetry" : "https://retrivora.com/api/telemetry"
|
|
3281
3309
|
}
|
|
3282
3310
|
}, readString(env, "GRAPH_DB_PROVIDER") ? {
|
|
3283
3311
|
graphDb: {
|
package/dist/server.mjs
CHANGED
|
@@ -576,26 +576,54 @@ function cleanApiKeyOverride(apiKeyOverride) {
|
|
|
576
576
|
}
|
|
577
577
|
return key;
|
|
578
578
|
}
|
|
579
|
+
async function resolveUserGatewayConfig(apiKeyOverride) {
|
|
580
|
+
var _a2;
|
|
581
|
+
if (!apiKeyOverride || !process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.SUPABASE_SERVICE_ROLE_KEY) {
|
|
582
|
+
return {};
|
|
583
|
+
}
|
|
584
|
+
try {
|
|
585
|
+
const { createAdminClient } = await import("@/lib/supabase-server");
|
|
586
|
+
const supabase = createAdminClient();
|
|
587
|
+
const { data: licenseRecord } = await supabase.from("licenses").select("project_id, customer_name, tier").eq("license_key", apiKeyOverride.trim()).single();
|
|
588
|
+
if (!licenseRecord) {
|
|
589
|
+
return {};
|
|
590
|
+
}
|
|
591
|
+
const projectId = licenseRecord.project_id;
|
|
592
|
+
const { data: configs } = await supabase.from("gateway_config").select("project_id, default_model, provider_keys, is_active").in("project_id", [projectId, "global"]).eq("is_active", true);
|
|
593
|
+
if (!configs || configs.length === 0) {
|
|
594
|
+
return {};
|
|
595
|
+
}
|
|
596
|
+
const matchedConfig = configs.find((c) => c.project_id === projectId) || configs.find((c) => c.project_id === "global");
|
|
597
|
+
const customGroqKey = (_a2 = matchedConfig == null ? void 0 : matchedConfig.provider_keys) == null ? void 0 : _a2.groq;
|
|
598
|
+
const targetModel = matchedConfig == null ? void 0 : matchedConfig.default_model;
|
|
599
|
+
return { customGroqKey, targetModel };
|
|
600
|
+
} catch (err) {
|
|
601
|
+
console.warn("[LLM Gateway Router] Error resolving user gateway_config:", err.message);
|
|
602
|
+
return {};
|
|
603
|
+
}
|
|
604
|
+
}
|
|
579
605
|
async function dispatchChatCompletion(req, apiKeyOverride) {
|
|
580
|
-
const
|
|
581
|
-
const
|
|
582
|
-
|
|
606
|
+
const { customGroqKey, targetModel } = await resolveUserGatewayConfig(apiKeyOverride);
|
|
607
|
+
const effectiveKey = customGroqKey || cleanApiKeyOverride(apiKeyOverride);
|
|
608
|
+
const activeModel = req.model || targetModel || "llama-3.1-8b-instant";
|
|
609
|
+
const provider = resolveProvider(activeModel);
|
|
610
|
+
console.log(`[LLM Gateway Router] Dispatching chat request: model=${activeModel}, provider=${provider}, hasCustomKey=${Boolean(customGroqKey)}, hasGlobalGroqKey=${Boolean(process.env.GROQ_API_KEY)}`);
|
|
583
611
|
try {
|
|
584
612
|
switch (provider) {
|
|
585
613
|
case "groq":
|
|
586
|
-
return await handleGroqRequest(req, effectiveKey);
|
|
614
|
+
return await handleGroqRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
587
615
|
case "openai":
|
|
588
|
-
return await handleOpenAIRequest(req, effectiveKey);
|
|
616
|
+
return await handleOpenAIRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
589
617
|
case "gemini":
|
|
590
|
-
return await handleGeminiRequest(req, effectiveKey);
|
|
618
|
+
return await handleGeminiRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
591
619
|
case "anthropic":
|
|
592
|
-
return await handleAnthropicRequest(req, effectiveKey);
|
|
620
|
+
return await handleAnthropicRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
593
621
|
case "ollama":
|
|
594
|
-
return await handleOllamaRequest(req);
|
|
622
|
+
return await handleOllamaRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }));
|
|
595
623
|
case "huggingface":
|
|
596
|
-
return await handleHuggingFaceChatRequest(req, effectiveKey);
|
|
624
|
+
return await handleHuggingFaceChatRequest(__spreadProps(__spreadValues({}, req), { model: activeModel }), effectiveKey);
|
|
597
625
|
default:
|
|
598
|
-
throw new Error(`Unsupported LLM provider for model: ${
|
|
626
|
+
throw new Error(`Unsupported LLM provider for model: ${activeModel}`);
|
|
599
627
|
}
|
|
600
628
|
} catch (error) {
|
|
601
629
|
console.error(`[LLM Gateway Router] Provider '${provider}' failed for model '${req.model}':`, {
|
|
@@ -3017,7 +3045,7 @@ function getRagConfig(baseConfig, env = process.env) {
|
|
|
3017
3045
|
return getEnvConfig(env, baseConfig);
|
|
3018
3046
|
}
|
|
3019
3047
|
function getEnvConfig(env = process.env, base) {
|
|
3020
|
-
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb;
|
|
3048
|
+
var _a2, _b, _c, _d, _e, _f, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb, _lb, _mb, _nb, _ob, _pb, _qb, _rb, _sb, _tb, _ub, _vb, _wb, _xb, _yb, _zb, _Ab, _Bb, _Cb, _Db, _Eb, _Fb;
|
|
3021
3049
|
const projectId = (_c = (_b = (_a2 = readString(env, "RAG_PROJECT_ID")) != null ? _a2 : readString(env, "NEXT_PUBLIC_PROJECT_ID")) != null ? _b : base == null ? void 0 : base.projectId) != null ? _c : "__default__";
|
|
3022
3050
|
const licenseKey = (_g2 = (_f = (_e = (_d = readString(env, "RAG_LICENSE_KEY")) != null ? _d : readString(env, "RETRIVORA_LICENSE_KEY")) != null ? _e : readString(env, "NEXT_PUBLIC_RETRIVORA_LICENSE_KEY")) != null ? _f : readString(env, "LICENSE_KEY")) != null ? _g2 : base == null ? void 0 : base.licenseKey;
|
|
3023
3051
|
const telemetryEnabled = readString(env, "TELEMETRY_ENABLED") === "true" || readString(env, "NEXT_PUBLIC_TELEMETRY_ENABLED") === "true" || ((_h = base == null ? void 0 : base.telemetry) == null ? void 0 : _h.enabled) || Boolean(licenseKey);
|
|
@@ -3097,25 +3125,25 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3097
3125
|
return true;
|
|
3098
3126
|
}
|
|
3099
3127
|
})();
|
|
3100
|
-
const
|
|
3128
|
+
const defaultGatewayUrl = (_ma = (_la = readString(env, "LITELLM_BASE_URL")) != null ? _la : readString(env, "LLM_BASE_URL")) != null ? _ma : "https://llm.retrivora.com/api/v1";
|
|
3101
3129
|
const defaultLlmProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3102
|
-
const llmProvider = (
|
|
3103
|
-
const llmBaseUrl = (
|
|
3104
|
-
const llmModel = (
|
|
3105
|
-
const llmApiKey = (
|
|
3106
|
-
const llmProfile = (
|
|
3130
|
+
const llmProvider = (_pa = (_oa = readEnum(env, "LLM_PROVIDER", defaultLlmProvider, LLM_PROVIDERS)) != null ? _oa : (_na = base == null ? void 0 : base.llm) == null ? void 0 : _na.provider) != null ? _pa : defaultLlmProvider;
|
|
3131
|
+
const llmBaseUrl = (_ta = (_sa = (_qa = readString(env, "LITELLM_BASE_URL")) != null ? _qa : readString(env, "LLM_BASE_URL")) != null ? _sa : (_ra = base == null ? void 0 : base.llm) == null ? void 0 : _ra.baseUrl) != null ? _ta : defaultGatewayUrl;
|
|
3132
|
+
const llmModel = (_xa = (_va = readString(env, "LLM_MODEL")) != null ? _va : (_ua = base == null ? void 0 : base.llm) == null ? void 0 : _ua.model) != null ? _xa : isFreeTier ? "llama-3.1-8b-instant" : (_wa = DEFAULT_MODEL_BY_PROVIDER[llmProvider]) != null ? _wa : "gpt-4o";
|
|
3133
|
+
const llmApiKey = (_Da = (_Ca = (_Aa = (_za = (_ya = llmApiKeyByProvider[llmProvider]) != null ? _ya : readString(env, "LLM_API_KEY")) != null ? _za : readString(env, "LITELLM_MASTER_KEY")) != null ? _Aa : readString(env, "LITELLM_API_KEY")) != null ? _Ca : (_Ba = base == null ? void 0 : base.llm) == null ? void 0 : _Ba.apiKey) != null ? _Da : licenseKey;
|
|
3134
|
+
const llmProfile = (_Ha = (_Ga = readString(env, "LLM_UNIVERSAL_PROFILE")) != null ? _Ga : (_Fa = (_Ea = base == null ? void 0 : base.llm) == null ? void 0 : _Ea.options) == null ? void 0 : _Fa.profile) != null ? _Ha : "litellm";
|
|
3107
3135
|
const defaultEmbeddingProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3108
|
-
const embeddingProvider = (
|
|
3109
|
-
const embeddingBaseUrl = (
|
|
3110
|
-
const embeddingModel = (
|
|
3111
|
-
const embeddingApiKey = (
|
|
3112
|
-
const embeddingProfile = (
|
|
3136
|
+
const embeddingProvider = (_Ka = (_Ja = readEnum(env, "EMBEDDING_PROVIDER", defaultEmbeddingProvider, EMBEDDING_PROVIDERS)) != null ? _Ja : (_Ia = base == null ? void 0 : base.embedding) == null ? void 0 : _Ia.provider) != null ? _Ka : defaultEmbeddingProvider;
|
|
3137
|
+
const embeddingBaseUrl = (_Pa = (_Oa = (_Ma = (_La = readString(env, "LITELLM_BASE_URL")) != null ? _La : readString(env, "EMBEDDING_BASE_URL")) != null ? _Ma : readString(env, "LLM_BASE_URL")) != null ? _Oa : (_Na = base == null ? void 0 : base.embedding) == null ? void 0 : _Na.baseUrl) != null ? _Pa : defaultGatewayUrl;
|
|
3138
|
+
const embeddingModel = (_Sa = (_Ra = readString(env, "EMBEDDING_MODEL")) != null ? _Ra : (_Qa = base == null ? void 0 : base.embedding) == null ? void 0 : _Qa.model) != null ? _Sa : "text-embedding-004";
|
|
3139
|
+
const embeddingApiKey = (_Za = (_Ya = (_Wa = (_Va = (_Ua = (_Ta = embeddingApiKeyByProvider[embeddingProvider]) != null ? _Ta : readString(env, "EMBEDDING_API_KEY")) != null ? _Ua : readString(env, "LLM_API_KEY")) != null ? _Va : readString(env, "LITELLM_MASTER_KEY")) != null ? _Wa : readString(env, "LITELLM_API_KEY")) != null ? _Ya : (_Xa = base == null ? void 0 : base.embedding) == null ? void 0 : _Xa.apiKey) != null ? _Za : licenseKey;
|
|
3140
|
+
const embeddingProfile = (_bb = (_ab = readString(env, "EMBEDDING_UNIVERSAL_PROFILE")) != null ? _ab : (_$a = (__a = base == null ? void 0 : base.embedding) == null ? void 0 : __a.options) == null ? void 0 : _$a.profile) != null ? _bb : "litellm";
|
|
3113
3141
|
return __spreadProps(__spreadValues({
|
|
3114
3142
|
projectId,
|
|
3115
3143
|
licenseKey,
|
|
3116
3144
|
vectorDb: {
|
|
3117
3145
|
provider: vectorProvider,
|
|
3118
|
-
indexName: (
|
|
3146
|
+
indexName: (_db = (_cb = readString(env, "VECTOR_DB_INDEX")) != null ? _cb : vectorDbOptions.indexName) != null ? _db : "rag-index",
|
|
3119
3147
|
options: vectorDbOptions
|
|
3120
3148
|
},
|
|
3121
3149
|
llm: {
|
|
@@ -3145,30 +3173,30 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3145
3173
|
}
|
|
3146
3174
|
},
|
|
3147
3175
|
ui: {
|
|
3148
|
-
title: (
|
|
3149
|
-
subtitle: (
|
|
3150
|
-
primaryColor: (
|
|
3151
|
-
accentColor: (
|
|
3152
|
-
logoUrl: (
|
|
3153
|
-
placeholder: (
|
|
3154
|
-
showSources: ((
|
|
3155
|
-
welcomeMessage: (
|
|
3156
|
-
visualStyle: (
|
|
3157
|
-
borderRadius: (
|
|
3158
|
-
allowUpload: ((
|
|
3176
|
+
title: (_fb = (_eb = readString(env, "NEXT_PUBLIC_UI_TITLE")) != null ? _eb : readString(env, "UI_TITLE")) != null ? _fb : "AI Assistant",
|
|
3177
|
+
subtitle: (_hb = (_gb = readString(env, "NEXT_PUBLIC_UI_SUBTITLE")) != null ? _gb : readString(env, "UI_SUBTITLE")) != null ? _hb : "Powered by RAG",
|
|
3178
|
+
primaryColor: (_jb = (_ib = readString(env, "NEXT_PUBLIC_PRIMARY_COLOR")) != null ? _ib : readString(env, "UI_PRIMARY_COLOR")) != null ? _jb : "#10b981",
|
|
3179
|
+
accentColor: (_lb = (_kb = readString(env, "NEXT_PUBLIC_ACCENT_COLOR")) != null ? _kb : readString(env, "UI_ACCENT_COLOR")) != null ? _lb : "#3b82f6",
|
|
3180
|
+
logoUrl: (_mb = readString(env, "NEXT_PUBLIC_LOGO_URL")) != null ? _mb : readString(env, "UI_LOGO_URL"),
|
|
3181
|
+
placeholder: (_ob = (_nb = readString(env, "NEXT_PUBLIC_PLACEHOLDER")) != null ? _nb : readString(env, "UI_PLACEHOLDER")) != null ? _ob : "Ask me anything\u2026",
|
|
3182
|
+
showSources: ((_qb = (_pb = readString(env, "NEXT_PUBLIC_SHOW_SOURCES")) != null ? _pb : readString(env, "UI_SHOW_SOURCES")) != null ? _qb : "true") !== "false",
|
|
3183
|
+
welcomeMessage: (_sb = (_rb = readString(env, "NEXT_PUBLIC_WELCOME_MESSAGE")) != null ? _rb : readString(env, "UI_WELCOME_MESSAGE")) != null ? _sb : "Hello! I'm your AI assistant. Ask me anything about your documents.",
|
|
3184
|
+
visualStyle: (_ub = (_tb = readString(env, "NEXT_PUBLIC_UI_VISUAL_STYLE")) != null ? _tb : readString(env, "UI_VISUAL_STYLE")) != null ? _ub : "glass",
|
|
3185
|
+
borderRadius: (_wb = (_vb = readString(env, "NEXT_PUBLIC_UI_BORDER_RADIUS")) != null ? _vb : readString(env, "UI_BORDER_RADIUS")) != null ? _wb : "xl",
|
|
3186
|
+
allowUpload: ((_yb = (_xb = readString(env, "NEXT_PUBLIC_ALLOW_UPLOAD")) != null ? _xb : readString(env, "UI_ALLOW_UPLOAD")) != null ? _yb : "false") === "true"
|
|
3159
3187
|
},
|
|
3160
3188
|
rag: {
|
|
3161
3189
|
topK: readNumber(env, "RAG_TOP_K", 5),
|
|
3162
3190
|
scoreThreshold: readNumber(env, "RAG_SCORE_THRESHOLD", 0),
|
|
3163
3191
|
chunkSize: readNumber(env, "RAG_CHUNK_SIZE", 1e3),
|
|
3164
3192
|
chunkOverlap: readNumber(env, "RAG_CHUNK_OVERLAP", 200),
|
|
3165
|
-
filterableFields: (
|
|
3193
|
+
filterableFields: (_zb = readString(env, "RAG_FILTERABLE_FIELDS")) == null ? void 0 : _zb.split(",").map((f) => f.trim()),
|
|
3166
3194
|
// Query pipeline toggles — read from .env.local
|
|
3167
3195
|
useQueryTransformation: readString(env, "RAG_USE_QUERY_TRANSFORMATION") === "true",
|
|
3168
3196
|
useReranking: readString(env, "RAG_USE_RERANKING") === "true",
|
|
3169
3197
|
useGraphRetrieval: readString(env, "RAG_USE_GRAPH_RETRIEVAL") === "true",
|
|
3170
|
-
architecture: (
|
|
3171
|
-
chunkingStrategy: (
|
|
3198
|
+
architecture: (_Ab = readString(env, "RAG_ARCHITECTURE")) != null ? _Ab : "simple",
|
|
3199
|
+
chunkingStrategy: (_Bb = readString(env, "RAG_CHUNKING_STRATEGY")) != null ? _Bb : "recursive",
|
|
3172
3200
|
uiMapping: (() => {
|
|
3173
3201
|
const raw = readString(env, "RAG_UI_MAPPING");
|
|
3174
3202
|
if (!raw) return void 0;
|
|
@@ -3181,7 +3209,7 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3181
3209
|
},
|
|
3182
3210
|
telemetry: {
|
|
3183
3211
|
enabled: telemetryEnabled,
|
|
3184
|
-
url: (
|
|
3212
|
+
url: (_Fb = (_Eb = (_Cb = readString(env, "TELEMETRY_URL")) != null ? _Cb : readString(env, "NEXT_PUBLIC_TELEMETRY_URL")) != null ? _Eb : (_Db = base == null ? void 0 : base.telemetry) == null ? void 0 : _Db.url) != null ? _Fb : process.env.NODE_ENV === "development" ? "http://localhost:3001/api/telemetry" : "https://retrivora.com/api/telemetry"
|
|
3185
3213
|
}
|
|
3186
3214
|
}, readString(env, "GRAPH_DB_PROVIDER") ? {
|
|
3187
3215
|
graphDb: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retrivora-ai/rag-engine",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
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": "UNLICENSED",
|
|
@@ -171,20 +171,20 @@ export function getEnvConfig(env: Record<string, string | undefined> = process.e
|
|
|
171
171
|
}
|
|
172
172
|
})();
|
|
173
173
|
|
|
174
|
-
const
|
|
174
|
+
const defaultGatewayUrl = readString(env, 'LITELLM_BASE_URL') ?? readString(env, 'LLM_BASE_URL') ?? 'https://llm.retrivora.com/api/v1';
|
|
175
175
|
|
|
176
176
|
const defaultLlmProvider = isFreeTier ? 'universal_rest' : 'universal_rest';
|
|
177
177
|
const llmProvider = (readEnum(env, 'LLM_PROVIDER', defaultLlmProvider, LLM_PROVIDERS) ?? base?.llm?.provider ?? defaultLlmProvider) as LLMProvider;
|
|
178
|
-
const llmBaseUrl = readString(env, 'LLM_BASE_URL') ?? base?.llm?.baseUrl ??
|
|
178
|
+
const llmBaseUrl = readString(env, 'LITELLM_BASE_URL') ?? readString(env, 'LLM_BASE_URL') ?? base?.llm?.baseUrl ?? defaultGatewayUrl;
|
|
179
179
|
const llmModel = readString(env, 'LLM_MODEL') ?? base?.llm?.model ?? (isFreeTier ? 'llama-3.1-8b-instant' : (DEFAULT_MODEL_BY_PROVIDER[llmProvider] ?? 'gpt-4o'));
|
|
180
|
-
const llmApiKey = llmApiKeyByProvider[llmProvider] ?? readString(env, 'LLM_API_KEY') ?? base?.llm?.apiKey ??
|
|
180
|
+
const llmApiKey = llmApiKeyByProvider[llmProvider] ?? readString(env, 'LLM_API_KEY') ?? readString(env, 'LITELLM_MASTER_KEY') ?? readString(env, 'LITELLM_API_KEY') ?? base?.llm?.apiKey ?? licenseKey;
|
|
181
181
|
const llmProfile = readString(env, 'LLM_UNIVERSAL_PROFILE') ?? (base?.llm?.options?.profile as string) ?? 'litellm';
|
|
182
182
|
|
|
183
183
|
const defaultEmbeddingProvider = isFreeTier ? 'universal_rest' : 'universal_rest';
|
|
184
184
|
const embeddingProvider = (readEnum(env, 'EMBEDDING_PROVIDER', defaultEmbeddingProvider, EMBEDDING_PROVIDERS) ?? base?.embedding?.provider ?? defaultEmbeddingProvider) as EmbeddingProvider;
|
|
185
|
-
const embeddingBaseUrl = readString(env, 'EMBEDDING_BASE_URL') ?? base?.embedding?.baseUrl ??
|
|
185
|
+
const embeddingBaseUrl = readString(env, 'LITELLM_BASE_URL') ?? readString(env, 'EMBEDDING_BASE_URL') ?? readString(env, 'LLM_BASE_URL') ?? base?.embedding?.baseUrl ?? defaultGatewayUrl;
|
|
186
186
|
const embeddingModel = readString(env, 'EMBEDDING_MODEL') ?? base?.embedding?.model ?? 'text-embedding-004';
|
|
187
|
-
const embeddingApiKey = embeddingApiKeyByProvider[embeddingProvider] ?? readString(env, 'EMBEDDING_API_KEY') ?? readString(env, 'LLM_API_KEY') ?? base?.embedding?.apiKey ??
|
|
187
|
+
const embeddingApiKey = embeddingApiKeyByProvider[embeddingProvider] ?? readString(env, 'EMBEDDING_API_KEY') ?? readString(env, 'LLM_API_KEY') ?? readString(env, 'LITELLM_MASTER_KEY') ?? readString(env, 'LITELLM_API_KEY') ?? base?.embedding?.apiKey ?? licenseKey;
|
|
188
188
|
const embeddingProfile = readString(env, 'EMBEDDING_UNIVERSAL_PROFILE') ?? (base?.embedding?.options?.profile as string) ?? 'litellm';
|
|
189
189
|
|
|
190
190
|
return {
|