@retrivora-ai/rag-engine 2.1.3 → 2.1.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.
- package/dist/{ILLMProvider-0rRBYbVW.d.mts → ILLMProvider-BWa68XX5.d.mts} +2 -0
- package/dist/{ILLMProvider-0rRBYbVW.d.ts → ILLMProvider-BWa68XX5.d.ts} +2 -0
- package/dist/handlers/index.d.mts +2 -2
- package/dist/handlers/index.d.ts +2 -2
- package/dist/handlers/index.js +240 -59
- package/dist/handlers/index.mjs +240 -59
- package/dist/{index-B1wGUlSL.d.mts → index-BCbeeh74.d.ts} +11 -2
- package/dist/{index-DcklhThn.d.ts → index-BbJGyNmW.d.mts} +11 -2
- package/dist/{index-BIHHp_f6.d.ts → index-C6ehmP0b.d.ts} +1 -1
- package/dist/{index-BvODr57d.d.mts → index-DFc_Ll9z.d.mts} +1 -1
- package/dist/index.css +23 -0
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +191 -21
- package/dist/index.mjs +190 -21
- package/dist/server.d.mts +6 -6
- package/dist/server.d.ts +6 -6
- package/dist/server.js +242 -59
- package/dist/server.mjs +241 -59
- package/package.json +1 -1
- package/src/components/DocumentUpload.tsx +50 -18
- package/src/config/serverConfig.ts +2 -2
- package/src/core/Pipeline.ts +23 -1
- package/src/handlers/index.ts +34 -10
- package/src/index.css +23 -0
- package/src/index.ts +1 -0
- package/src/server.ts +1 -0
- package/src/types/index.ts +2 -0
- package/src/types/props.ts +4 -0
- package/src/version.ts +6 -0
package/dist/server.mjs
CHANGED
|
@@ -3045,7 +3045,7 @@ function getRagConfig(baseConfig, env = process.env) {
|
|
|
3045
3045
|
return getEnvConfig(env, baseConfig);
|
|
3046
3046
|
}
|
|
3047
3047
|
function getEnvConfig(env = process.env, base) {
|
|
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;
|
|
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, _Gb, _Hb, _Ib;
|
|
3049
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__";
|
|
3050
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;
|
|
3051
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);
|
|
@@ -3053,38 +3053,38 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3053
3053
|
const embeddingDimensions = readNumber(env, "EMBEDDING_DIMENSIONS", 768);
|
|
3054
3054
|
const vectorDbOptions = {};
|
|
3055
3055
|
if (vectorProvider === "pinecone") {
|
|
3056
|
-
vectorDbOptions.apiKey = (_l = (_k = readString(env, "PINECONE_API_KEY")) != null ? _k : (_j = (_i = base == null ? void 0 : base.vectorDb) == null ? void 0 : _i.options) == null ? void 0 : _j.apiKey) != null ? _l : "";
|
|
3057
|
-
vectorDbOptions.indexName = (
|
|
3056
|
+
vectorDbOptions.apiKey = (_m = (_l = (_k = readString(env, "PINECONE_API_KEY")) != null ? _k : (_j = (_i = base == null ? void 0 : base.vectorDb) == null ? void 0 : _i.options) == null ? void 0 : _j.apiKey) != null ? _l : process.env.PINECONE_API_KEY) != null ? _m : "";
|
|
3057
|
+
vectorDbOptions.indexName = (_t = (_s = (_r = (_o = readString(env, "PINECONE_INDEX")) != null ? _o : (_n = base == null ? void 0 : base.vectorDb) == null ? void 0 : _n.indexName) != null ? _r : (_q = (_p = base == null ? void 0 : base.vectorDb) == null ? void 0 : _p.options) == null ? void 0 : _q.indexName) != null ? _s : process.env.PINECONE_INDEX) != null ? _t : "retrivora-free";
|
|
3058
3058
|
} else if (vectorProvider === "pgvector" || vectorProvider === "postgresql") {
|
|
3059
|
-
vectorDbOptions.connectionString = (
|
|
3060
|
-
vectorDbOptions.tables = (
|
|
3061
|
-
vectorDbOptions.searchFields = (
|
|
3059
|
+
vectorDbOptions.connectionString = (_y = (_x = (_u = readString(env, "PGVECTOR_CONNECTION_STRING")) != null ? _u : readString(env, "POSTGRES_URL")) != null ? _x : (_w = (_v = base == null ? void 0 : base.vectorDb) == null ? void 0 : _v.options) == null ? void 0 : _w.connectionString) != null ? _y : "";
|
|
3060
|
+
vectorDbOptions.tables = (_D = (_A = (_z = readString(env, "VECTOR_DB_TABLES")) != null ? _z : readString(env, "POSTGRES_TABLES")) == null ? void 0 : _A.split(",").map((t) => t.trim())) != null ? _D : (_C = (_B = base == null ? void 0 : base.vectorDb) == null ? void 0 : _B.options) == null ? void 0 : _C.tables;
|
|
3061
|
+
vectorDbOptions.searchFields = (_H = (_E = readString(env, "POSTGRES_SEARCH_FIELDS")) == null ? void 0 : _E.split(",").map((f) => f.trim())) != null ? _H : (_G = (_F = base == null ? void 0 : base.vectorDb) == null ? void 0 : _F.options) == null ? void 0 : _G.searchFields;
|
|
3062
3062
|
vectorDbOptions.dimensions = embeddingDimensions;
|
|
3063
3063
|
} else if (vectorProvider === "mongodb") {
|
|
3064
|
-
vectorDbOptions.uri = (
|
|
3065
|
-
vectorDbOptions.database = (
|
|
3066
|
-
vectorDbOptions.collection = (
|
|
3067
|
-
vectorDbOptions.indexName = (
|
|
3064
|
+
vectorDbOptions.uri = (_L = (_K = readString(env, "MONGODB_URI")) != null ? _K : (_J = (_I = base == null ? void 0 : base.vectorDb) == null ? void 0 : _I.options) == null ? void 0 : _J.uri) != null ? _L : "";
|
|
3065
|
+
vectorDbOptions.database = (_P = (_O = readString(env, "MONGODB_DB")) != null ? _O : (_N = (_M = base == null ? void 0 : base.vectorDb) == null ? void 0 : _M.options) == null ? void 0 : _N.database) != null ? _P : "";
|
|
3066
|
+
vectorDbOptions.collection = (_T = (_S = readString(env, "MONGODB_COLLECTION")) != null ? _S : (_R = (_Q = base == null ? void 0 : base.vectorDb) == null ? void 0 : _Q.options) == null ? void 0 : _R.collection) != null ? _T : "";
|
|
3067
|
+
vectorDbOptions.indexName = (_Z = (_Y = (_V = readString(env, "MONGODB_INDEX_NAME")) != null ? _V : (_U = base == null ? void 0 : base.vectorDb) == null ? void 0 : _U.indexName) != null ? _Y : (_X = (_W = base == null ? void 0 : base.vectorDb) == null ? void 0 : _W.options) == null ? void 0 : _X.indexName) != null ? _Z : "vector_index";
|
|
3068
3068
|
} else if (vectorProvider === "qdrant") {
|
|
3069
|
-
vectorDbOptions.baseUrl = (
|
|
3070
|
-
vectorDbOptions.apiKey = (
|
|
3069
|
+
vectorDbOptions.baseUrl = (_ba = (_aa = readString(env, "QDRANT_URL")) != null ? _aa : (_$ = (__ = base == null ? void 0 : base.vectorDb) == null ? void 0 : __.options) == null ? void 0 : _$.baseUrl) != null ? _ba : "http://localhost:6333";
|
|
3070
|
+
vectorDbOptions.apiKey = (_ea = readString(env, "QDRANT_API_KEY")) != null ? _ea : (_da = (_ca = base == null ? void 0 : base.vectorDb) == null ? void 0 : _ca.options) == null ? void 0 : _da.apiKey;
|
|
3071
3071
|
vectorDbOptions.dimensions = embeddingDimensions;
|
|
3072
3072
|
} else if (vectorProvider === "milvus") {
|
|
3073
|
-
vectorDbOptions.baseUrl = (
|
|
3073
|
+
vectorDbOptions.baseUrl = (_fa = readString(env, "MILVUS_URL")) != null ? _fa : "http://localhost:19530";
|
|
3074
3074
|
vectorDbOptions.apiKey = readString(env, "MILVUS_API_KEY");
|
|
3075
3075
|
} else if (vectorProvider === "chromadb") {
|
|
3076
|
-
vectorDbOptions.baseUrl = (
|
|
3076
|
+
vectorDbOptions.baseUrl = (_ga = readString(env, "CHROMADB_URL")) != null ? _ga : "http://localhost:8000";
|
|
3077
3077
|
} else if (vectorProvider === "weaviate") {
|
|
3078
|
-
vectorDbOptions.baseUrl = (
|
|
3078
|
+
vectorDbOptions.baseUrl = (_ha = readString(env, "WEAVIATE_URL")) != null ? _ha : "http://localhost:8080";
|
|
3079
3079
|
vectorDbOptions.apiKey = readString(env, "WEAVIATE_API_KEY");
|
|
3080
3080
|
} else if (vectorProvider === "redis") {
|
|
3081
|
-
vectorDbOptions.baseUrl = (
|
|
3081
|
+
vectorDbOptions.baseUrl = (_ia = readString(env, "REDIS_URL")) != null ? _ia : "";
|
|
3082
3082
|
vectorDbOptions.apiKey = readString(env, "REDIS_API_KEY");
|
|
3083
3083
|
} else if (vectorProvider === "rest") {
|
|
3084
|
-
vectorDbOptions.baseUrl = (
|
|
3084
|
+
vectorDbOptions.baseUrl = (_ja = readString(env, "VECTOR_DB_REST_URL")) != null ? _ja : "";
|
|
3085
3085
|
vectorDbOptions.headers = readString(env, "VECTOR_DB_REST_API_KEY") ? { "api-key": readString(env, "VECTOR_DB_REST_API_KEY") } : {};
|
|
3086
3086
|
} else if (vectorProvider === "universal_rest") {
|
|
3087
|
-
vectorDbOptions.baseUrl = (
|
|
3087
|
+
vectorDbOptions.baseUrl = (_la = (_ka = readString(env, "VECTOR_BASE_URL")) != null ? _ka : readString(env, "VECTOR_DB_REST_URL")) != null ? _la : "";
|
|
3088
3088
|
vectorDbOptions.profile = readString(env, "VECTOR_UNIVERSAL_PROFILE");
|
|
3089
3089
|
vectorDbOptions.headers = readString(env, "VECTOR_DB_REST_API_KEY") ? { Authorization: `Bearer ${readString(env, "VECTOR_DB_REST_API_KEY")}` } : {};
|
|
3090
3090
|
}
|
|
@@ -3103,8 +3103,8 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3103
3103
|
// Anthropic needs a separate embedding provider; key kept for completeness
|
|
3104
3104
|
gemini: readString(env, "GEMINI_API_KEY"),
|
|
3105
3105
|
ollama: void 0,
|
|
3106
|
-
universal_rest: (
|
|
3107
|
-
custom: (
|
|
3106
|
+
universal_rest: (_ma = readString(env, "EMBEDDING_API_KEY")) != null ? _ma : readString(env, "OPENAI_API_KEY"),
|
|
3107
|
+
custom: (_na = readString(env, "EMBEDDING_API_KEY")) != null ? _na : readString(env, "OPENAI_API_KEY")
|
|
3108
3108
|
};
|
|
3109
3109
|
const DEFAULT_MODEL_BY_PROVIDER = {
|
|
3110
3110
|
openai: "gpt-4o",
|
|
@@ -3125,25 +3125,25 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3125
3125
|
return true;
|
|
3126
3126
|
}
|
|
3127
3127
|
})();
|
|
3128
|
-
const defaultGatewayUrl = (
|
|
3128
|
+
const defaultGatewayUrl = (_pa = (_oa = readString(env, "LITELLM_BASE_URL")) != null ? _oa : readString(env, "LLM_BASE_URL")) != null ? _pa : "https://llm.retrivora.com/api/v1";
|
|
3129
3129
|
const defaultLlmProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3130
|
-
const llmProvider = (
|
|
3131
|
-
const llmBaseUrl = (
|
|
3132
|
-
const llmModel = (
|
|
3133
|
-
const llmApiKey = (
|
|
3134
|
-
const llmProfile = (
|
|
3130
|
+
const llmProvider = (_sa = (_ra = readEnum(env, "LLM_PROVIDER", defaultLlmProvider, LLM_PROVIDERS)) != null ? _ra : (_qa = base == null ? void 0 : base.llm) == null ? void 0 : _qa.provider) != null ? _sa : defaultLlmProvider;
|
|
3131
|
+
const llmBaseUrl = (_wa = (_va = (_ta = readString(env, "LITELLM_BASE_URL")) != null ? _ta : readString(env, "LLM_BASE_URL")) != null ? _va : (_ua = base == null ? void 0 : base.llm) == null ? void 0 : _ua.baseUrl) != null ? _wa : defaultGatewayUrl;
|
|
3132
|
+
const llmModel = (_Aa = (_ya = readString(env, "LLM_MODEL")) != null ? _ya : (_xa = base == null ? void 0 : base.llm) == null ? void 0 : _xa.model) != null ? _Aa : isFreeTier ? "llama-3.1-8b-instant" : (_za = DEFAULT_MODEL_BY_PROVIDER[llmProvider]) != null ? _za : "gpt-4o";
|
|
3133
|
+
const llmApiKey = (_Ga = (_Fa = (_Da = (_Ca = (_Ba = llmApiKeyByProvider[llmProvider]) != null ? _Ba : readString(env, "LLM_API_KEY")) != null ? _Ca : readString(env, "LITELLM_MASTER_KEY")) != null ? _Da : readString(env, "LITELLM_API_KEY")) != null ? _Fa : (_Ea = base == null ? void 0 : base.llm) == null ? void 0 : _Ea.apiKey) != null ? _Ga : licenseKey;
|
|
3134
|
+
const llmProfile = (_Ka = (_Ja = readString(env, "LLM_UNIVERSAL_PROFILE")) != null ? _Ja : (_Ia = (_Ha = base == null ? void 0 : base.llm) == null ? void 0 : _Ha.options) == null ? void 0 : _Ia.profile) != null ? _Ka : "litellm";
|
|
3135
3135
|
const defaultEmbeddingProvider = isFreeTier ? "universal_rest" : "universal_rest";
|
|
3136
|
-
const embeddingProvider = (
|
|
3137
|
-
const embeddingBaseUrl = (
|
|
3138
|
-
const embeddingModel = (
|
|
3139
|
-
const embeddingApiKey = (
|
|
3140
|
-
const embeddingProfile = (
|
|
3136
|
+
const embeddingProvider = (_Na = (_Ma = readEnum(env, "EMBEDDING_PROVIDER", defaultEmbeddingProvider, EMBEDDING_PROVIDERS)) != null ? _Ma : (_La = base == null ? void 0 : base.embedding) == null ? void 0 : _La.provider) != null ? _Na : defaultEmbeddingProvider;
|
|
3137
|
+
const embeddingBaseUrl = (_Sa = (_Ra = (_Pa = (_Oa = readString(env, "LITELLM_BASE_URL")) != null ? _Oa : readString(env, "EMBEDDING_BASE_URL")) != null ? _Pa : readString(env, "LLM_BASE_URL")) != null ? _Ra : (_Qa = base == null ? void 0 : base.embedding) == null ? void 0 : _Qa.baseUrl) != null ? _Sa : defaultGatewayUrl;
|
|
3138
|
+
const embeddingModel = (_Va = (_Ua = readString(env, "EMBEDDING_MODEL")) != null ? _Ua : (_Ta = base == null ? void 0 : base.embedding) == null ? void 0 : _Ta.model) != null ? _Va : "text-embedding-004";
|
|
3139
|
+
const embeddingApiKey = (_ab = (_$a = (_Za = (_Ya = (_Xa = (_Wa = embeddingApiKeyByProvider[embeddingProvider]) != null ? _Wa : readString(env, "EMBEDDING_API_KEY")) != null ? _Xa : readString(env, "LLM_API_KEY")) != null ? _Ya : readString(env, "LITELLM_MASTER_KEY")) != null ? _Za : readString(env, "LITELLM_API_KEY")) != null ? _$a : (__a = base == null ? void 0 : base.embedding) == null ? void 0 : __a.apiKey) != null ? _ab : licenseKey;
|
|
3140
|
+
const embeddingProfile = (_eb = (_db = readString(env, "EMBEDDING_UNIVERSAL_PROFILE")) != null ? _db : (_cb = (_bb = base == null ? void 0 : base.embedding) == null ? void 0 : _bb.options) == null ? void 0 : _cb.profile) != null ? _eb : "litellm";
|
|
3141
3141
|
return __spreadProps(__spreadValues({
|
|
3142
3142
|
projectId,
|
|
3143
3143
|
licenseKey,
|
|
3144
3144
|
vectorDb: {
|
|
3145
3145
|
provider: vectorProvider,
|
|
3146
|
-
indexName: (
|
|
3146
|
+
indexName: (_gb = (_fb = readString(env, "VECTOR_DB_INDEX")) != null ? _fb : vectorDbOptions.indexName) != null ? _gb : "rag-index",
|
|
3147
3147
|
options: vectorDbOptions
|
|
3148
3148
|
},
|
|
3149
3149
|
llm: {
|
|
@@ -3173,30 +3173,30 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3173
3173
|
}
|
|
3174
3174
|
},
|
|
3175
3175
|
ui: {
|
|
3176
|
-
title: (
|
|
3177
|
-
subtitle: (
|
|
3178
|
-
primaryColor: (
|
|
3179
|
-
accentColor: (
|
|
3180
|
-
logoUrl: (
|
|
3181
|
-
placeholder: (
|
|
3182
|
-
showSources: ((
|
|
3183
|
-
welcomeMessage: (
|
|
3184
|
-
visualStyle: (
|
|
3185
|
-
borderRadius: (
|
|
3186
|
-
allowUpload: ((
|
|
3176
|
+
title: (_ib = (_hb = readString(env, "NEXT_PUBLIC_UI_TITLE")) != null ? _hb : readString(env, "UI_TITLE")) != null ? _ib : "AI Assistant",
|
|
3177
|
+
subtitle: (_kb = (_jb = readString(env, "NEXT_PUBLIC_UI_SUBTITLE")) != null ? _jb : readString(env, "UI_SUBTITLE")) != null ? _kb : "Powered by RAG",
|
|
3178
|
+
primaryColor: (_mb = (_lb = readString(env, "NEXT_PUBLIC_PRIMARY_COLOR")) != null ? _lb : readString(env, "UI_PRIMARY_COLOR")) != null ? _mb : "#10b981",
|
|
3179
|
+
accentColor: (_ob = (_nb = readString(env, "NEXT_PUBLIC_ACCENT_COLOR")) != null ? _nb : readString(env, "UI_ACCENT_COLOR")) != null ? _ob : "#3b82f6",
|
|
3180
|
+
logoUrl: (_pb = readString(env, "NEXT_PUBLIC_LOGO_URL")) != null ? _pb : readString(env, "UI_LOGO_URL"),
|
|
3181
|
+
placeholder: (_rb = (_qb = readString(env, "NEXT_PUBLIC_PLACEHOLDER")) != null ? _qb : readString(env, "UI_PLACEHOLDER")) != null ? _rb : "Ask me anything\u2026",
|
|
3182
|
+
showSources: ((_tb = (_sb = readString(env, "NEXT_PUBLIC_SHOW_SOURCES")) != null ? _sb : readString(env, "UI_SHOW_SOURCES")) != null ? _tb : "true") !== "false",
|
|
3183
|
+
welcomeMessage: (_vb = (_ub = readString(env, "NEXT_PUBLIC_WELCOME_MESSAGE")) != null ? _ub : readString(env, "UI_WELCOME_MESSAGE")) != null ? _vb : "Hello! I'm your AI assistant. Ask me anything about your documents.",
|
|
3184
|
+
visualStyle: (_xb = (_wb = readString(env, "NEXT_PUBLIC_UI_VISUAL_STYLE")) != null ? _wb : readString(env, "UI_VISUAL_STYLE")) != null ? _xb : "glass",
|
|
3185
|
+
borderRadius: (_zb = (_yb = readString(env, "NEXT_PUBLIC_UI_BORDER_RADIUS")) != null ? _yb : readString(env, "UI_BORDER_RADIUS")) != null ? _zb : "xl",
|
|
3186
|
+
allowUpload: ((_Bb = (_Ab = readString(env, "NEXT_PUBLIC_ALLOW_UPLOAD")) != null ? _Ab : readString(env, "UI_ALLOW_UPLOAD")) != null ? _Bb : "false") === "true"
|
|
3187
3187
|
},
|
|
3188
3188
|
rag: {
|
|
3189
3189
|
topK: readNumber(env, "RAG_TOP_K", 5),
|
|
3190
3190
|
scoreThreshold: readNumber(env, "RAG_SCORE_THRESHOLD", 0),
|
|
3191
3191
|
chunkSize: readNumber(env, "RAG_CHUNK_SIZE", 1e3),
|
|
3192
3192
|
chunkOverlap: readNumber(env, "RAG_CHUNK_OVERLAP", 200),
|
|
3193
|
-
filterableFields: (
|
|
3193
|
+
filterableFields: (_Cb = readString(env, "RAG_FILTERABLE_FIELDS")) == null ? void 0 : _Cb.split(",").map((f) => f.trim()),
|
|
3194
3194
|
// Query pipeline toggles — read from .env.local
|
|
3195
3195
|
useQueryTransformation: readString(env, "RAG_USE_QUERY_TRANSFORMATION") === "true",
|
|
3196
3196
|
useReranking: readString(env, "RAG_USE_RERANKING") === "true",
|
|
3197
3197
|
useGraphRetrieval: readString(env, "RAG_USE_GRAPH_RETRIEVAL") === "true",
|
|
3198
|
-
architecture: (
|
|
3199
|
-
chunkingStrategy: (
|
|
3198
|
+
architecture: (_Db = readString(env, "RAG_ARCHITECTURE")) != null ? _Db : "simple",
|
|
3199
|
+
chunkingStrategy: (_Eb = readString(env, "RAG_CHUNKING_STRATEGY")) != null ? _Eb : "recursive",
|
|
3200
3200
|
uiMapping: (() => {
|
|
3201
3201
|
const raw = readString(env, "RAG_UI_MAPPING");
|
|
3202
3202
|
if (!raw) return void 0;
|
|
@@ -3209,7 +3209,7 @@ function getEnvConfig(env = process.env, base) {
|
|
|
3209
3209
|
},
|
|
3210
3210
|
telemetry: {
|
|
3211
3211
|
enabled: telemetryEnabled,
|
|
3212
|
-
url: (
|
|
3212
|
+
url: (_Ib = (_Hb = (_Fb = readString(env, "TELEMETRY_URL")) != null ? _Fb : readString(env, "NEXT_PUBLIC_TELEMETRY_URL")) != null ? _Hb : (_Gb = base == null ? void 0 : base.telemetry) == null ? void 0 : _Gb.url) != null ? _Ib : process.env.NODE_ENV === "development" ? "http://localhost:3001/api/telemetry" : "https://retrivora.com/api/telemetry"
|
|
3213
3213
|
}
|
|
3214
3214
|
}, readString(env, "GRAPH_DB_PROVIDER") ? {
|
|
3215
3215
|
graphDb: {
|
|
@@ -5248,6 +5248,147 @@ var ConfigValidator = class {
|
|
|
5248
5248
|
}
|
|
5249
5249
|
};
|
|
5250
5250
|
|
|
5251
|
+
// package.json
|
|
5252
|
+
var package_default = {
|
|
5253
|
+
name: "@retrivora-ai/rag-engine",
|
|
5254
|
+
version: "2.1.4",
|
|
5255
|
+
description: "Retrivora AI is a plug-and-play AI engine for RAG chat experiences \u2014 generic vector DB + LLM provider, embeddable or standalone.",
|
|
5256
|
+
author: "Abhinav Alkuchi",
|
|
5257
|
+
license: "UNLICENSED",
|
|
5258
|
+
keywords: [
|
|
5259
|
+
"rag",
|
|
5260
|
+
"retrieval-augmented-generation",
|
|
5261
|
+
"chatbot",
|
|
5262
|
+
"vector-database",
|
|
5263
|
+
"pinecone",
|
|
5264
|
+
"pgvector",
|
|
5265
|
+
"postgresql",
|
|
5266
|
+
"milvus",
|
|
5267
|
+
"qdrant",
|
|
5268
|
+
"chromadb",
|
|
5269
|
+
"redis",
|
|
5270
|
+
"weaviate",
|
|
5271
|
+
"mongodb",
|
|
5272
|
+
"openai",
|
|
5273
|
+
"anthropic",
|
|
5274
|
+
"ollama",
|
|
5275
|
+
"nextjs",
|
|
5276
|
+
"react",
|
|
5277
|
+
"ai",
|
|
5278
|
+
"llm",
|
|
5279
|
+
"embeddings"
|
|
5280
|
+
],
|
|
5281
|
+
main: "dist/index.js",
|
|
5282
|
+
module: "dist/index.mjs",
|
|
5283
|
+
types: "dist/index.d.ts",
|
|
5284
|
+
exports: {
|
|
5285
|
+
".": {
|
|
5286
|
+
types: "./dist/index.d.ts",
|
|
5287
|
+
require: "./dist/index.js",
|
|
5288
|
+
import: "./dist/index.mjs"
|
|
5289
|
+
},
|
|
5290
|
+
"./style.css": "./dist/index.css",
|
|
5291
|
+
"./handlers": {
|
|
5292
|
+
types: "./dist/handlers/index.d.ts",
|
|
5293
|
+
require: "./dist/handlers/index.js",
|
|
5294
|
+
import: "./dist/handlers/index.mjs"
|
|
5295
|
+
},
|
|
5296
|
+
"./server": {
|
|
5297
|
+
types: "./dist/server.d.ts",
|
|
5298
|
+
require: "./dist/server.js",
|
|
5299
|
+
import: "./dist/server.mjs"
|
|
5300
|
+
}
|
|
5301
|
+
},
|
|
5302
|
+
browser: {
|
|
5303
|
+
child_process: false,
|
|
5304
|
+
fs: false,
|
|
5305
|
+
net: false,
|
|
5306
|
+
tls: false,
|
|
5307
|
+
crypto: false,
|
|
5308
|
+
os: false,
|
|
5309
|
+
path: false,
|
|
5310
|
+
stream: false,
|
|
5311
|
+
http: false,
|
|
5312
|
+
https: false,
|
|
5313
|
+
zlib: false,
|
|
5314
|
+
mongodb: false,
|
|
5315
|
+
pg: false,
|
|
5316
|
+
"pdf-parse": false,
|
|
5317
|
+
mammoth: false
|
|
5318
|
+
},
|
|
5319
|
+
files: [
|
|
5320
|
+
"dist",
|
|
5321
|
+
"src",
|
|
5322
|
+
".env.example",
|
|
5323
|
+
"README.md",
|
|
5324
|
+
"FREE_TIER_ARCHITECTURE.md"
|
|
5325
|
+
],
|
|
5326
|
+
scripts: {
|
|
5327
|
+
dev: "npx @tailwindcss/cli -i src/tailwind.css -o src/index.css && tsup src/index.ts src/handlers/index.ts src/server.ts --format cjs,esm --watch --tsconfig tsconfig.build.json --external react,react-dom,next,mongodb,pg,openai,@anthropic-ai/sdk,@pinecone-database/pinecone,axios,lucide-react,mammoth,pdf-parse,xlsx,react-markdown,remark-gfm,next-themes,langchain,@langchain/core,@langchain/openai,llamaindex --inject-style",
|
|
5328
|
+
build: "npm run build:pkg",
|
|
5329
|
+
"build:pkg": "npx @tailwindcss/cli -i src/tailwind.css -o src/index.css && tsup src/index.ts src/handlers/index.ts src/server.ts --format cjs,esm --dts --clean --no-splitting --tsconfig tsconfig.build.json --external react,react-dom,next,mongodb,pg,openai,@anthropic-ai/sdk,@pinecone-database/pinecone,axios,lucide-react,mammoth,pdf-parse,xlsx,react-markdown,remark-gfm,next-themes,langchain,@langchain/core,@langchain/openai,llamaindex --inject-style && npx @tailwindcss/cli -i src/tailwind.css -o dist/index.css",
|
|
5330
|
+
lint: "eslint",
|
|
5331
|
+
clean: "rm -rf dist"
|
|
5332
|
+
},
|
|
5333
|
+
peerDependencies: {
|
|
5334
|
+
next: ">=15.0.0",
|
|
5335
|
+
react: ">=18.0.0",
|
|
5336
|
+
"react-dom": ">=18.0.0"
|
|
5337
|
+
},
|
|
5338
|
+
peerDependenciesMeta: {
|
|
5339
|
+
next: {
|
|
5340
|
+
optional: true
|
|
5341
|
+
}
|
|
5342
|
+
},
|
|
5343
|
+
dependencies: {
|
|
5344
|
+
"@anthropic-ai/sdk": "^0.95.1",
|
|
5345
|
+
"@google/genai": "^0.8.0",
|
|
5346
|
+
"@google/generative-ai": "^0.24.1",
|
|
5347
|
+
"@pinecone-database/pinecone": "^7.2.0",
|
|
5348
|
+
"@types/papaparse": "^5.5.2",
|
|
5349
|
+
axios: "^1.15.0",
|
|
5350
|
+
"lucide-react": "^1.8.0",
|
|
5351
|
+
"next-themes": "^0.4.6",
|
|
5352
|
+
openai: "^6.34.0",
|
|
5353
|
+
papaparse: "^5.5.3",
|
|
5354
|
+
"react-is": "^18.3.1",
|
|
5355
|
+
"react-markdown": "^10.1.0",
|
|
5356
|
+
recharts: "^3.8.1",
|
|
5357
|
+
"remark-gfm": "^4.0.1",
|
|
5358
|
+
xlsx: "^0.18.5"
|
|
5359
|
+
},
|
|
5360
|
+
optionalDependencies: {
|
|
5361
|
+
"@langchain/core": "^1.1.42",
|
|
5362
|
+
"@langchain/openai": "^1.4.5",
|
|
5363
|
+
langchain: "^1.3.5",
|
|
5364
|
+
llamaindex: "^0.11.9",
|
|
5365
|
+
mammoth: "^1.8.0",
|
|
5366
|
+
mongodb: "^7.1.1",
|
|
5367
|
+
"pdf-parse": "^1.1.1",
|
|
5368
|
+
pg: "^8.20.0"
|
|
5369
|
+
},
|
|
5370
|
+
devDependencies: {
|
|
5371
|
+
"@tailwindcss/cli": "^4",
|
|
5372
|
+
"@tailwindcss/postcss": "^4",
|
|
5373
|
+
"@types/estree": "^1.0.9",
|
|
5374
|
+
"@types/node": "^20",
|
|
5375
|
+
"@types/pdf-parse": "^1.1.5",
|
|
5376
|
+
"@types/pg": "^8.20.0",
|
|
5377
|
+
"@types/react": "^19.2.14",
|
|
5378
|
+
"@types/react-dom": "^19.2.3",
|
|
5379
|
+
dotenv: "^17.4.2",
|
|
5380
|
+
eslint: "^9",
|
|
5381
|
+
"eslint-config-next": "16.2.4",
|
|
5382
|
+
next: "16.2.10",
|
|
5383
|
+
tailwindcss: "^4",
|
|
5384
|
+
tsup: "^8.5.1",
|
|
5385
|
+
typescript: "^5"
|
|
5386
|
+
}
|
|
5387
|
+
};
|
|
5388
|
+
|
|
5389
|
+
// src/version.ts
|
|
5390
|
+
var SDK_VERSION = package_default.version || "2.1.3";
|
|
5391
|
+
|
|
5251
5392
|
// src/rag/DocumentChunker.ts
|
|
5252
5393
|
var DocumentChunker = class {
|
|
5253
5394
|
constructor(chunkSize = 1e3, chunkOverlap = 200, separators = ["\n# ", "\n## ", "\n### ", "\n#### ", "\n\n", "\n", " ", ""]) {
|
|
@@ -9531,6 +9672,7 @@ ${context}`;
|
|
|
9531
9672
|
const telemetryUrl = ((_B = this.config.telemetry) == null ? void 0 : _B.url) || process.env.TELEMETRY_URL || process.env.NEXT_PUBLIC_TELEMETRY_URL || defaultUrl;
|
|
9532
9673
|
const absoluteUrl = telemetryUrl.startsWith("http") ? telemetryUrl : (process.env.NEXT_PUBLIC_APP_URL || `http://localhost:${process.env.PORT || 3e3}`) + telemetryUrl;
|
|
9533
9674
|
(async () => {
|
|
9675
|
+
var _a3, _b2, _c2, _d2, _e2;
|
|
9534
9676
|
try {
|
|
9535
9677
|
let finalTrace = trace;
|
|
9536
9678
|
if (!awaitHallucination && runHallucination) {
|
|
@@ -9539,6 +9681,12 @@ ${context}`;
|
|
|
9539
9681
|
finalTrace = buildTrace(backgroundScoreResult);
|
|
9540
9682
|
}
|
|
9541
9683
|
}
|
|
9684
|
+
const modelName = (finalTrace == null ? void 0 : finalTrace.model) || ((_a3 = this.config.llm) == null ? void 0 : _a3.model) || "llama-3.1-8b-instant";
|
|
9685
|
+
const providerName = (finalTrace == null ? void 0 : finalTrace.provider) || ((_b2 = this.config.llm) == null ? void 0 : _b2.provider) || "groq";
|
|
9686
|
+
const tokenCount = Number(((_c2 = finalTrace == null ? void 0 : finalTrace.tokens) == null ? void 0 : _c2.totalTokens) || 0);
|
|
9687
|
+
const costEst = Number(((_d2 = finalTrace == null ? void 0 : finalTrace.tokens) == null ? void 0 : _d2.estimatedCostUsd) || 0);
|
|
9688
|
+
const latencyDuration = Number(((_e2 = finalTrace == null ? void 0 : finalTrace.latency) == null ? void 0 : _e2.totalMs) || 0);
|
|
9689
|
+
console.log(`[Retrivora Pipeline Telemetry] \u{1F4CA} Dispatching RAG telemetry -> Project: "${ns}", Model: "${providerName}/${modelName}", Tokens: ${tokenCount}, Latency: ${latencyDuration}ms`);
|
|
9542
9690
|
await fetch(absoluteUrl, {
|
|
9543
9691
|
method: "POST",
|
|
9544
9692
|
headers: {
|
|
@@ -9547,7 +9695,20 @@ ${context}`;
|
|
|
9547
9695
|
body: JSON.stringify({
|
|
9548
9696
|
trace: finalTrace,
|
|
9549
9697
|
licenseKey: this.config.licenseKey,
|
|
9550
|
-
projectId: ns
|
|
9698
|
+
projectId: ns,
|
|
9699
|
+
organization: process.env.RETRIVORA_ORGANIZATION || "default-org",
|
|
9700
|
+
sdkVersion: SDK_VERSION,
|
|
9701
|
+
model: modelName,
|
|
9702
|
+
provider: providerName,
|
|
9703
|
+
tokens: tokenCount,
|
|
9704
|
+
cost: costEst,
|
|
9705
|
+
costUsd: costEst,
|
|
9706
|
+
latencyMs: latencyDuration,
|
|
9707
|
+
status: "success",
|
|
9708
|
+
action: "RAG_QUERY",
|
|
9709
|
+
feature: "RAG",
|
|
9710
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
9711
|
+
details: `Org: default-org | Model: ${providerName}/${modelName} | Tokens: ${tokenCount} | Latency: ${latencyDuration}ms | Cost: $${costEst} | SDK: v${SDK_VERSION} | Feature: RAG`
|
|
9551
9712
|
})
|
|
9552
9713
|
});
|
|
9553
9714
|
} catch (err) {
|
|
@@ -10943,7 +11104,7 @@ function getOrCreatePlugin(configOrPlugin) {
|
|
|
10943
11104
|
return _g[cacheKey];
|
|
10944
11105
|
}
|
|
10945
11106
|
function reportTelemetry(req, plugin, action, status, details, trace) {
|
|
10946
|
-
var _a2;
|
|
11107
|
+
var _a2, _b, _c, _d, _e, _f, _g2, _h;
|
|
10947
11108
|
try {
|
|
10948
11109
|
const config = plugin.getConfig();
|
|
10949
11110
|
const licenseKey = config.licenseKey || process.env.RAG_LICENSE_KEY || process.env.RETRIVORA_LICENSE_KEY || process.env.NEXT_PUBLIC_RETRIVORA_LICENSE_KEY;
|
|
@@ -10952,29 +11113,49 @@ function reportTelemetry(req, plugin, action, status, details, trace) {
|
|
|
10952
11113
|
const defaultUrl = process.env.NODE_ENV === "development" && !process.env.TELEMETRY_URL && !process.env.NEXT_PUBLIC_TELEMETRY_URL ? "http://localhost:3001/api/telemetry" : "https://retrivora.com/api/telemetry";
|
|
10953
11114
|
const telemetryUrl = (telemetryConfig == null ? void 0 : telemetryConfig.url) || process.env.TELEMETRY_URL || process.env.NEXT_PUBLIC_TELEMETRY_URL || defaultUrl;
|
|
10954
11115
|
const host = req.headers.get("host") || "localhost";
|
|
11116
|
+
const userAgent = req.headers.get("user-agent") || `Retrivora-SDK/${SDK_VERSION}`;
|
|
10955
11117
|
let absoluteUrl = telemetryUrl;
|
|
10956
11118
|
if (!telemetryUrl.startsWith("http")) {
|
|
10957
11119
|
const proto = req.headers.get("x-forwarded-proto") || "http";
|
|
10958
11120
|
absoluteUrl = `${proto}://${host}${telemetryUrl}`;
|
|
10959
11121
|
}
|
|
10960
11122
|
const projectId = config.projectId || "default";
|
|
11123
|
+
const model = (trace == null ? void 0 : trace.model) || ((_b = config.llm) == null ? void 0 : _b.model) || ((_c = config.embedding) == null ? void 0 : _c.model) || "llama-3.1-8b-instant";
|
|
11124
|
+
const provider = (trace == null ? void 0 : trace.provider) || ((_d = config.llm) == null ? void 0 : _d.provider) || ((_e = config.embedding) == null ? void 0 : _e.provider) || "groq";
|
|
11125
|
+
const tokens = Number(((_f = trace == null ? void 0 : trace.tokens) == null ? void 0 : _f.totalTokens) || (trace == null ? void 0 : trace.totalTokens) || 0);
|
|
11126
|
+
const costUsd = Number(((_g2 = trace == null ? void 0 : trace.tokens) == null ? void 0 : _g2.estimatedCostUsd) || (trace == null ? void 0 : trace.costUsd) || 0);
|
|
11127
|
+
const latencyMs = Number(((_h = trace == null ? void 0 : trace.latency) == null ? void 0 : _h.totalMs) || (trace == null ? void 0 : trace.latencyMs) || 0);
|
|
11128
|
+
const payload = {
|
|
11129
|
+
trace,
|
|
11130
|
+
licenseKey,
|
|
11131
|
+
projectId,
|
|
11132
|
+
organization: process.env.RETRIVORA_ORGANIZATION || "default-org",
|
|
11133
|
+
sdkVersion: SDK_VERSION,
|
|
11134
|
+
model,
|
|
11135
|
+
provider,
|
|
11136
|
+
tokens,
|
|
11137
|
+
cost: costUsd,
|
|
11138
|
+
costUsd,
|
|
11139
|
+
latencyMs,
|
|
11140
|
+
status,
|
|
11141
|
+
action,
|
|
11142
|
+
feature: action,
|
|
11143
|
+
userAgent,
|
|
11144
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
11145
|
+
details
|
|
11146
|
+
};
|
|
11147
|
+
console.log(`[Retrivora SDK Telemetry] \u{1F4CA} Dispatching telemetry -> Feature: "${action}", Status: "${status}", Project: "${projectId}", Model: "${provider}/${model}", Latency: ${latencyMs}ms`);
|
|
10961
11148
|
fetch(absoluteUrl, {
|
|
10962
11149
|
method: "POST",
|
|
10963
11150
|
headers: {
|
|
10964
11151
|
"Content-Type": "application/json",
|
|
10965
11152
|
"x-forwarded-for": req.headers.get("x-forwarded-for") || "",
|
|
10966
|
-
"x-real-ip": req.headers.get("x-real-ip") || ""
|
|
11153
|
+
"x-real-ip": req.headers.get("x-real-ip") || "",
|
|
11154
|
+
"user-agent": userAgent
|
|
10967
11155
|
},
|
|
10968
|
-
body: JSON.stringify(
|
|
10969
|
-
trace,
|
|
10970
|
-
licenseKey,
|
|
10971
|
-
projectId,
|
|
10972
|
-
action,
|
|
10973
|
-
status,
|
|
10974
|
-
details
|
|
10975
|
-
})
|
|
11156
|
+
body: JSON.stringify(payload)
|
|
10976
11157
|
}).catch((err) => {
|
|
10977
|
-
console.warn("[Retrivora Telemetry] Async report warning:", err.message);
|
|
11158
|
+
console.warn("[Retrivora SDK Telemetry] Async report warning:", err.message);
|
|
10978
11159
|
});
|
|
10979
11160
|
} catch (e) {
|
|
10980
11161
|
}
|
|
@@ -11628,6 +11809,7 @@ export {
|
|
|
11628
11809
|
Rule6SmallResultSetRule,
|
|
11629
11810
|
Rule7LargeTableRule,
|
|
11630
11811
|
RuleEngine,
|
|
11812
|
+
SDK_VERSION,
|
|
11631
11813
|
TableRendererStrategy,
|
|
11632
11814
|
TextRendererStrategy,
|
|
11633
11815
|
UniversalLLMAdapter,
|
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.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": "UNLICENSED",
|
|
@@ -12,12 +12,14 @@ interface FileState {
|
|
|
12
12
|
error?: string;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export function DocumentUpload({ namespace, onUploadComplete, className = '' }: DocumentUploadProps) {
|
|
15
|
+
export function DocumentUpload({ namespace, uploadUrl, retrivoraApiBase, onUploadComplete, className = '' }: DocumentUploadProps) {
|
|
16
16
|
const { ui, embedding, projectId } = useConfig();
|
|
17
17
|
const [fileStates, setFileStates] = useState<FileState[]>([]);
|
|
18
18
|
const [isDragging, setIsDragging] = useState(false);
|
|
19
19
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
|
20
20
|
|
|
21
|
+
const isFreeTier = !projectId || projectId.includes('free') || projectId.includes('demo');
|
|
22
|
+
|
|
21
23
|
const MULTI_DIMENSION_MODELS: Record<string, number[]> = {
|
|
22
24
|
'text-embedding-3-small': [512, 1536],
|
|
23
25
|
'text-embedding-3-large': [256, 1024, 3072],
|
|
@@ -26,18 +28,20 @@ export function DocumentUpload({ namespace, onUploadComplete, className = '' }:
|
|
|
26
28
|
|
|
27
29
|
const COMMON_DIMENSIONS = [64, 128, 256, 384, 512, 768, 1024, 1536, 3072];
|
|
28
30
|
const currentModel = embedding?.model || 'unknown';
|
|
29
|
-
const defaultDimension = embedding?.dimensions || 1536;
|
|
31
|
+
const defaultDimension = isFreeTier ? 768 : (embedding?.dimensions || 1536);
|
|
30
32
|
|
|
31
33
|
// Provide specific dimensions for known models, otherwise provide common ones
|
|
32
|
-
let availableDimensions =
|
|
34
|
+
let availableDimensions = isFreeTier
|
|
35
|
+
? [768]
|
|
36
|
+
: Object.entries(MULTI_DIMENSION_MODELS).find(([k]) => currentModel.includes(k))?.[1];
|
|
37
|
+
|
|
33
38
|
if (!availableDimensions) {
|
|
34
39
|
availableDimensions = COMMON_DIMENSIONS.includes(defaultDimension)
|
|
35
40
|
? COMMON_DIMENSIONS
|
|
36
41
|
: [...COMMON_DIMENSIONS, defaultDimension].sort((a, b) => a - b);
|
|
37
42
|
}
|
|
38
|
-
|
|
39
|
-
const isChangeable = true; // Always allow the user to select the dimension
|
|
40
43
|
|
|
44
|
+
const isChangeable = !isFreeTier;
|
|
41
45
|
const [dimension, setDimension] = useState(defaultDimension);
|
|
42
46
|
|
|
43
47
|
const addFiles = (files: File[]) => {
|
|
@@ -85,20 +89,37 @@ export function DocumentUpload({ namespace, onUploadComplete, className = '' }:
|
|
|
85
89
|
if (targetNs) formData.append('namespace', targetNs);
|
|
86
90
|
formData.append('dimension', dimension.toString());
|
|
87
91
|
|
|
92
|
+
const apiBase = retrivoraApiBase || '/api/retrivora';
|
|
93
|
+
const primaryUrl = uploadUrl || `${apiBase.replace(/\/$/, '')}/upload`;
|
|
94
|
+
|
|
95
|
+
console.log(`[Retrivora SDK] 📤 Initiating upload request to "${primaryUrl}" (Files: ${idleFiles.length}, Namespace: "${targetNs}", Dimension: ${dimension})`);
|
|
96
|
+
|
|
88
97
|
try {
|
|
89
|
-
|
|
98
|
+
let response = await fetch(primaryUrl, {
|
|
90
99
|
method: 'POST',
|
|
91
100
|
body: formData,
|
|
92
101
|
});
|
|
93
102
|
|
|
103
|
+
// Fallback resolution: if primaryUrl returns 404 and is not '/api/upload', try '/api/upload'
|
|
104
|
+
if (response.status === 404 && primaryUrl !== '/api/upload') {
|
|
105
|
+
console.warn(`[Retrivora SDK] ⚠️ Upload endpoint "${primaryUrl}" returned 404. Retrying fallback to "/api/upload"...`);
|
|
106
|
+
response = await fetch('/api/upload', {
|
|
107
|
+
method: 'POST',
|
|
108
|
+
body: formData,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
94
112
|
const result = await response.json();
|
|
95
113
|
|
|
96
|
-
if (!response.ok) throw new Error(result.error ||
|
|
114
|
+
if (!response.ok) throw new Error(result.error || `Upload failed with HTTP status ${response.status}`);
|
|
115
|
+
|
|
116
|
+
console.log(`[Retrivora SDK] ✅ Upload response success:`, result);
|
|
97
117
|
|
|
98
118
|
setFileStates(prev => prev.map(s => s.status === 'uploading' ? { ...s, status: 'success' } : s));
|
|
99
119
|
if (onUploadComplete) onUploadComplete(result);
|
|
100
|
-
} catch (err) {
|
|
120
|
+
} catch (err: any) {
|
|
101
121
|
const message = err instanceof Error ? err.message : 'Upload failed';
|
|
122
|
+
console.error(`[Retrivora SDK] ❌ Document upload failed:`, message);
|
|
102
123
|
setFileStates(prev => prev.map(s => s.status === 'uploading' ? { ...s, status: 'error', error: message } : s));
|
|
103
124
|
}
|
|
104
125
|
};
|
|
@@ -152,22 +173,33 @@ export function DocumentUpload({ namespace, onUploadComplete, className = '' }:
|
|
|
152
173
|
|
|
153
174
|
<div className="mt-6 flex flex-col items-center gap-2 text-sm">
|
|
154
175
|
<label className="text-slate-600 dark:text-white/60 font-medium">Embedding Dimension</label>
|
|
155
|
-
|
|
176
|
+
<div className="flex flex-col items-center gap-1.5">
|
|
156
177
|
<select
|
|
157
178
|
value={dimension}
|
|
158
179
|
onChange={(e) => setDimension(Number(e.target.value))}
|
|
159
180
|
disabled={isUploading}
|
|
160
|
-
className="px-3 py-1.5 rounded-lg bg-slate-50 dark:bg-white/5 border border-slate-200 dark:border-white/10 text-slate-800 dark:text-white/90 outline-none focus:border-emerald-500 transition-colors"
|
|
181
|
+
className="px-3 py-1.5 rounded-lg bg-slate-50 dark:bg-white/5 border border-slate-200 dark:border-white/10 text-slate-800 dark:text-white/90 outline-none focus:border-emerald-500 transition-colors text-sm font-medium cursor-pointer"
|
|
161
182
|
>
|
|
162
|
-
{
|
|
163
|
-
|
|
164
|
-
|
|
183
|
+
{COMMON_DIMENSIONS.map(dim => {
|
|
184
|
+
const isDisabled = isFreeTier && dim !== 768;
|
|
185
|
+
return (
|
|
186
|
+
<option
|
|
187
|
+
key={dim}
|
|
188
|
+
value={dim}
|
|
189
|
+
disabled={isDisabled}
|
|
190
|
+
className="bg-white dark:bg-slate-900 text-slate-800 dark:text-white disabled:text-slate-400 dark:disabled:text-white/30"
|
|
191
|
+
>
|
|
192
|
+
{dim} {dim === 768 ? '(Free Tier Fixed)' : isDisabled ? '(Pro/Enterprise Only)' : ''}
|
|
193
|
+
</option>
|
|
194
|
+
);
|
|
195
|
+
})}
|
|
165
196
|
</select>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
197
|
+
{isFreeTier && (
|
|
198
|
+
<span className="text-[11px] text-amber-600 dark:text-amber-400/90 font-medium">
|
|
199
|
+
⚡ 768 Dimension active for Free Tier (Upgrade for 1536 / 3072)
|
|
200
|
+
</span>
|
|
201
|
+
)}
|
|
202
|
+
</div>
|
|
171
203
|
</div>
|
|
172
204
|
</div>
|
|
173
205
|
|
|
@@ -85,8 +85,8 @@ export function getEnvConfig(env: Record<string, string | undefined> = process.e
|
|
|
85
85
|
const vectorDbOptions: Record<string, unknown> = {};
|
|
86
86
|
|
|
87
87
|
if (vectorProvider === 'pinecone') {
|
|
88
|
-
vectorDbOptions.apiKey = readString(env, 'PINECONE_API_KEY') ?? (base?.vectorDb?.options?.apiKey as string) ?? '';
|
|
89
|
-
vectorDbOptions.indexName = readString(env, 'PINECONE_INDEX') ?? (base?.vectorDb?.indexName as string) ?? (base?.vectorDb?.options?.indexName as string);
|
|
88
|
+
vectorDbOptions.apiKey = readString(env, 'PINECONE_API_KEY') ?? (base?.vectorDb?.options?.apiKey as string) ?? process.env.PINECONE_API_KEY ?? '';
|
|
89
|
+
vectorDbOptions.indexName = readString(env, 'PINECONE_INDEX') ?? (base?.vectorDb?.indexName as string) ?? (base?.vectorDb?.options?.indexName as string) ?? process.env.PINECONE_INDEX ?? 'retrivora-free';
|
|
90
90
|
} else if (vectorProvider === 'pgvector' || vectorProvider === 'postgresql') {
|
|
91
91
|
vectorDbOptions.connectionString = readString(env, 'PGVECTOR_CONNECTION_STRING') ?? readString(env, 'POSTGRES_URL') ?? (base?.vectorDb?.options?.connectionString as string) ?? '';
|
|
92
92
|
vectorDbOptions.tables = (readString(env, 'VECTOR_DB_TABLES') ?? readString(env, 'POSTGRES_TABLES'))?.split(',').map(t => t.trim()) ?? (base?.vectorDb?.options?.tables as string[]);
|