@burtson-labs/bandit-engine 2.0.167 → 2.0.168
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/{chat-6N5B7A7F.mjs → chat-7LOFYEWE.mjs} +5 -5
- package/dist/chat-provider.js +154 -38
- package/dist/chat-provider.js.map +1 -1
- package/dist/chat-provider.mjs +2 -2
- package/dist/{chunk-PK3LFBGC.mjs → chunk-4SXXEGEK.mjs} +142 -27
- package/dist/chunk-4SXXEGEK.mjs.map +1 -0
- package/dist/{chunk-KDIL5WUL.mjs → chunk-62IYSU3I.mjs} +4 -3
- package/dist/chunk-62IYSU3I.mjs.map +1 -0
- package/dist/{chunk-5BZWJQ5O.mjs → chunk-JD6C64CT.mjs} +2 -2
- package/dist/{chunk-46OGYEME.mjs → chunk-KAXUI5H7.mjs} +154 -40
- package/dist/chunk-KAXUI5H7.mjs.map +1 -0
- package/dist/{chunk-US4TG745.mjs → chunk-QI67R5F6.mjs} +2 -2
- package/dist/{chunk-N4BQ6HKL.mjs → chunk-R3NOM2DG.mjs} +3 -3
- package/dist/{chunk-SHYNXDRO.mjs → chunk-YGOLNWXJ.mjs} +4 -4
- package/dist/index.d.mts +54 -2
- package/dist/index.d.ts +54 -2
- package/dist/index.js +306 -68
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -7
- package/dist/management/management.js +305 -68
- package/dist/management/management.js.map +1 -1
- package/dist/management/management.mjs +5 -5
- package/dist/modals/chat-modal/chat-modal.js +159 -42
- package/dist/modals/chat-modal/chat-modal.js.map +1 -1
- package/dist/modals/chat-modal/chat-modal.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-46OGYEME.mjs.map +0 -1
- package/dist/chunk-KDIL5WUL.mjs.map +0 -1
- package/dist/chunk-PK3LFBGC.mjs.map +0 -1
- /package/dist/{chat-6N5B7A7F.mjs.map → chat-7LOFYEWE.mjs.map} +0 -0
- /package/dist/{chunk-5BZWJQ5O.mjs.map → chunk-JD6C64CT.mjs.map} +0 -0
- /package/dist/{chunk-US4TG745.mjs.map → chunk-QI67R5F6.mjs.map} +0 -0
- /package/dist/{chunk-N4BQ6HKL.mjs.map → chunk-R3NOM2DG.mjs.map} +0 -0
- /package/dist/{chunk-SHYNXDRO.mjs.map → chunk-YGOLNWXJ.mjs.map} +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
chat_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YGOLNWXJ.mjs";
|
|
4
4
|
import "./chunk-ONQMRE2G.mjs";
|
|
5
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-JD6C64CT.mjs";
|
|
6
6
|
import "./chunk-E5WMDLE3.mjs";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-62IYSU3I.mjs";
|
|
8
|
+
import "./chunk-KAXUI5H7.mjs";
|
|
9
9
|
import "./chunk-SZJB5FLZ.mjs";
|
|
10
10
|
import "./chunk-GRPTCHFN.mjs";
|
|
11
11
|
import "./chunk-HNXPDIWC.mjs";
|
|
12
12
|
export {
|
|
13
13
|
chat_default as default
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chat-
|
|
15
|
+
//# sourceMappingURL=chat-7LOFYEWE.mjs.map
|
package/dist/chat-provider.js
CHANGED
|
@@ -7563,6 +7563,95 @@ init_debugLogger();
|
|
|
7563
7563
|
|
|
7564
7564
|
// src/services/vectorDatabase/vectorDatabaseService.ts
|
|
7565
7565
|
init_debugLogger();
|
|
7566
|
+
|
|
7567
|
+
// src/services/vectorDatabase/knowledgeFiles.ts
|
|
7568
|
+
var KNOWLEDGE_PAGE_LIMIT_MAX = 200;
|
|
7569
|
+
var MEDIA_MIME_PREFIXES = ["image/", "video/", "audio/"];
|
|
7570
|
+
var MEDIA_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
7571
|
+
"png",
|
|
7572
|
+
"jpg",
|
|
7573
|
+
"jpeg",
|
|
7574
|
+
"gif",
|
|
7575
|
+
"webp",
|
|
7576
|
+
"bmp",
|
|
7577
|
+
"tif",
|
|
7578
|
+
"tiff",
|
|
7579
|
+
"heic",
|
|
7580
|
+
"heif",
|
|
7581
|
+
"svg",
|
|
7582
|
+
"ico",
|
|
7583
|
+
"avif",
|
|
7584
|
+
"mp4",
|
|
7585
|
+
"mov",
|
|
7586
|
+
"m4v",
|
|
7587
|
+
"webm",
|
|
7588
|
+
"avi",
|
|
7589
|
+
"mkv",
|
|
7590
|
+
"mp3",
|
|
7591
|
+
"wav",
|
|
7592
|
+
"m4a",
|
|
7593
|
+
"aac",
|
|
7594
|
+
"ogg",
|
|
7595
|
+
"flac"
|
|
7596
|
+
]);
|
|
7597
|
+
var TEMP_NAME = /^(~WRD\d*|~\$|~\w+\.tmp$)|\.tmp$/i;
|
|
7598
|
+
var str = (value) => typeof value === "string" ? value : "";
|
|
7599
|
+
var recordName = (record) => str(record.filename) || str(record.fileName) || str(record.name);
|
|
7600
|
+
var recordMime = (record) => (str(record.mimeType) || str(record.contentType) || str(record.type)).toLowerCase();
|
|
7601
|
+
var isLikelyKnowledgeFile = (record) => {
|
|
7602
|
+
const name = recordName(record);
|
|
7603
|
+
if (TEMP_NAME.test(name)) return false;
|
|
7604
|
+
const ext = name.includes(".") ? name.split(".").pop().toLowerCase() : "";
|
|
7605
|
+
if (MEDIA_EXTENSIONS.has(ext)) return false;
|
|
7606
|
+
const mime = recordMime(record);
|
|
7607
|
+
if (MEDIA_MIME_PREFIXES.some((prefix) => mime.startsWith(prefix))) return false;
|
|
7608
|
+
return true;
|
|
7609
|
+
};
|
|
7610
|
+
var toRecords = (value) => Array.isArray(value) ? value.filter((item) => !!item && typeof item === "object" && !Array.isArray(item)) : [];
|
|
7611
|
+
var num = (value, fallback) => typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
7612
|
+
var parseKnowledgeFileList = (body, request) => {
|
|
7613
|
+
if (body && typeof body === "object" && !Array.isArray(body) && "total" in body) {
|
|
7614
|
+
const envelope = body;
|
|
7615
|
+
const files2 = toRecords(envelope.files);
|
|
7616
|
+
const total = num(envelope.total, files2.length);
|
|
7617
|
+
const skip = num(envelope.skip, request.skip);
|
|
7618
|
+
const scope = envelope.scope === "all" ? "all" : "knowledge";
|
|
7619
|
+
return {
|
|
7620
|
+
files: files2,
|
|
7621
|
+
total,
|
|
7622
|
+
hasMore: typeof envelope.hasMore === "boolean" ? envelope.hasMore : skip + files2.length < total,
|
|
7623
|
+
scope,
|
|
7624
|
+
serverScoped: true,
|
|
7625
|
+
knowledgeFilterUnavailable: envelope.knowledgeFilterUnavailable === true,
|
|
7626
|
+
hiddenCount: 0
|
|
7627
|
+
};
|
|
7628
|
+
}
|
|
7629
|
+
const raw = body && typeof body === "object" && !Array.isArray(body) ? toRecords(body.files) : toRecords(body);
|
|
7630
|
+
const hasMore = raw.length >= request.limit;
|
|
7631
|
+
if (request.scope === "all") {
|
|
7632
|
+
return {
|
|
7633
|
+
files: raw,
|
|
7634
|
+
total: request.skip + raw.length,
|
|
7635
|
+
hasMore,
|
|
7636
|
+
scope: "all",
|
|
7637
|
+
serverScoped: false,
|
|
7638
|
+
knowledgeFilterUnavailable: false,
|
|
7639
|
+
hiddenCount: 0
|
|
7640
|
+
};
|
|
7641
|
+
}
|
|
7642
|
+
const files = raw.filter(isLikelyKnowledgeFile);
|
|
7643
|
+
return {
|
|
7644
|
+
files,
|
|
7645
|
+
total: files.length,
|
|
7646
|
+
hasMore,
|
|
7647
|
+
scope: "knowledge",
|
|
7648
|
+
serverScoped: false,
|
|
7649
|
+
knowledgeFilterUnavailable: false,
|
|
7650
|
+
hiddenCount: raw.length - files.length
|
|
7651
|
+
};
|
|
7652
|
+
};
|
|
7653
|
+
|
|
7654
|
+
// src/services/vectorDatabase/vectorDatabaseService.ts
|
|
7566
7655
|
var VectorDatabaseService = class {
|
|
7567
7656
|
baseUrl;
|
|
7568
7657
|
fileStorageApiUrl;
|
|
@@ -8322,36 +8411,44 @@ var VectorDatabaseService = class {
|
|
|
8322
8411
|
}
|
|
8323
8412
|
}
|
|
8324
8413
|
/**
|
|
8325
|
-
*
|
|
8414
|
+
* One page of the Knowledge file list from the gateway (see ./knowledgeFiles).
|
|
8415
|
+
*
|
|
8416
|
+
* No fallback to the file storage API here: its listing is the whole Drive (every product's
|
|
8417
|
+
* files), which is exactly what Knowledge must not show. A failure surfaces to the caller.
|
|
8326
8418
|
*/
|
|
8327
|
-
async
|
|
8419
|
+
async listKnowledgeFiles(skip = 0, limit = 50, scope = "knowledge") {
|
|
8328
8420
|
if (!this.isAvailable()) {
|
|
8329
|
-
return [];
|
|
8421
|
+
return parseKnowledgeFileList([], { skip, limit, scope });
|
|
8422
|
+
}
|
|
8423
|
+
const safeSkip = Math.max(0, Math.floor(skip));
|
|
8424
|
+
const safeLimit = Math.min(KNOWLEDGE_PAGE_LIMIT_MAX, Math.max(1, Math.floor(limit)));
|
|
8425
|
+
const query = new URLSearchParams({
|
|
8426
|
+
skip: String(safeSkip),
|
|
8427
|
+
limit: String(safeLimit),
|
|
8428
|
+
scope
|
|
8429
|
+
});
|
|
8430
|
+
debugLogger.debug("Fetching knowledge files from Gateway API", { skip: safeSkip, limit: safeLimit, scope });
|
|
8431
|
+
const response = await fetch(`${this.baseUrl}/embedding/files?${query.toString()}`, {
|
|
8432
|
+
method: "GET",
|
|
8433
|
+
headers: this.getHeaders()
|
|
8434
|
+
});
|
|
8435
|
+
if (!response.ok) {
|
|
8436
|
+
throw new Error(`Couldn't list documents (gateway answered ${response.status})`);
|
|
8330
8437
|
}
|
|
8438
|
+
const body = await response.json();
|
|
8439
|
+
return parseKnowledgeFileList(body, { skip: safeSkip, limit: safeLimit, scope });
|
|
8440
|
+
}
|
|
8441
|
+
/**
|
|
8442
|
+
* Get the user's Knowledge files (first page, knowledge scope). Kept for existing callers;
|
|
8443
|
+
* prefer listKnowledgeFiles for totals and paging.
|
|
8444
|
+
*/
|
|
8445
|
+
async getUserFiles(skip = 0, limit = 50) {
|
|
8331
8446
|
try {
|
|
8332
|
-
|
|
8333
|
-
|
|
8334
|
-
method: "GET",
|
|
8335
|
-
headers: this.getHeaders()
|
|
8336
|
-
});
|
|
8337
|
-
if (!response.ok) {
|
|
8338
|
-
debugLogger.warn("Gateway API files endpoint failed, falling back to file storage API", {
|
|
8339
|
-
status: response.status
|
|
8340
|
-
});
|
|
8341
|
-
return await this.getUserFilesFromFileStorage(skip, limit);
|
|
8342
|
-
}
|
|
8343
|
-
const result = await response.json();
|
|
8344
|
-
debugLogger.debug("Gateway API files response", result);
|
|
8345
|
-
if (Array.isArray(result)) {
|
|
8346
|
-
return this.toRecordArray(result);
|
|
8347
|
-
}
|
|
8348
|
-
if (result && Array.isArray(result.files)) {
|
|
8349
|
-
return this.toRecordArray(result.files);
|
|
8350
|
-
}
|
|
8351
|
-
return [];
|
|
8447
|
+
const page = await this.listKnowledgeFiles(skip, limit, "knowledge");
|
|
8448
|
+
return page.files;
|
|
8352
8449
|
} catch (error) {
|
|
8353
|
-
debugLogger.error("
|
|
8354
|
-
return
|
|
8450
|
+
debugLogger.error("Failed to fetch knowledge files from Gateway API", { error });
|
|
8451
|
+
return [];
|
|
8355
8452
|
}
|
|
8356
8453
|
}
|
|
8357
8454
|
/**
|
|
@@ -9527,6 +9624,7 @@ var knowledgeDocToVectorDocument = (doc) => ({
|
|
|
9527
9624
|
isTeamContent: doc.isTeamContent ?? false,
|
|
9528
9625
|
contentSource: doc.contentSource ?? (doc.isTeamContent ? "team" : "user")
|
|
9529
9626
|
});
|
|
9627
|
+
var optionalString = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
|
|
9530
9628
|
var rawFileRecordToVectorDocument = (record) => {
|
|
9531
9629
|
if (!record || typeof record !== "object") {
|
|
9532
9630
|
return null;
|
|
@@ -9541,10 +9639,12 @@ var rawFileRecordToVectorDocument = (record) => {
|
|
|
9541
9639
|
const mimeType = typeof record.mimeType === "string" ? record.mimeType : "application/octet-stream";
|
|
9542
9640
|
const uploadedBy = typeof record.uploadedBy === "string" ? record.uploadedBy : "unknown";
|
|
9543
9641
|
const uploadedAt = typeof record.uploadedAt === "string" ? record.uploadedAt : (/* @__PURE__ */ new Date()).toISOString();
|
|
9544
|
-
const
|
|
9545
|
-
const isTeamContent = typeof record.isTeamContent === "boolean" ? record.isTeamContent :
|
|
9546
|
-
const
|
|
9642
|
+
const teamSid = optionalString(record.teamSid);
|
|
9643
|
+
const isTeamContent = typeof record.isTeamContent === "boolean" ? record.isTeamContent : !!teamSid;
|
|
9644
|
+
const isUserContent = typeof record.isUserContent === "boolean" ? record.isUserContent : !isTeamContent;
|
|
9645
|
+
const contentSource = record.contentSource === "team" || record.contentSource === void 0 && isTeamContent ? "team" : "user";
|
|
9547
9646
|
const score = typeof record.score === "number" ? record.score : void 0;
|
|
9647
|
+
const size = typeof record.size === "number" && Number.isFinite(record.size) && record.size >= 0 ? record.size : void 0;
|
|
9548
9648
|
return {
|
|
9549
9649
|
id,
|
|
9550
9650
|
filename,
|
|
@@ -9555,7 +9655,12 @@ var rawFileRecordToVectorDocument = (record) => {
|
|
|
9555
9655
|
isUserContent,
|
|
9556
9656
|
isTeamContent,
|
|
9557
9657
|
contentSource,
|
|
9558
|
-
score
|
|
9658
|
+
score,
|
|
9659
|
+
size,
|
|
9660
|
+
bucket: optionalString(record.bucket),
|
|
9661
|
+
teamSid,
|
|
9662
|
+
userEmail: optionalString(record.userEmail),
|
|
9663
|
+
preview
|
|
9559
9664
|
};
|
|
9560
9665
|
};
|
|
9561
9666
|
var useVectorStore = () => {
|
|
@@ -10107,22 +10212,32 @@ var useVectorStore = () => {
|
|
|
10107
10212
|
(0, import_react3.useEffect)(() => {
|
|
10108
10213
|
initializeVectorService();
|
|
10109
10214
|
}, [initializeVectorService]);
|
|
10110
|
-
const
|
|
10215
|
+
const getKnowledgeDocumentsPage = (0, import_react3.useCallback)(async (skip = 0, limit = 50, scope = "knowledge") => {
|
|
10111
10216
|
if (!status.isEnabled || status.migrationRequired) {
|
|
10112
|
-
return
|
|
10217
|
+
return {
|
|
10218
|
+
documents: [],
|
|
10219
|
+
total: 0,
|
|
10220
|
+
hasMore: false,
|
|
10221
|
+
scope,
|
|
10222
|
+
serverScoped: false,
|
|
10223
|
+
knowledgeFilterUnavailable: false,
|
|
10224
|
+
hiddenCount: 0
|
|
10225
|
+
};
|
|
10113
10226
|
}
|
|
10227
|
+
const { files, ...meta } = await vectorDatabaseService.listKnowledgeFiles(skip, limit, scope);
|
|
10228
|
+
const documents = files.map(rawFileRecordToVectorDocument).filter((doc) => doc !== null);
|
|
10229
|
+
debugLogger.info("Retrieved knowledge documents", { count: documents.length, total: meta.total, scope: meta.scope });
|
|
10230
|
+
return { documents, ...meta };
|
|
10231
|
+
}, [status.isEnabled, status.migrationRequired]);
|
|
10232
|
+
const getUserDocuments = (0, import_react3.useCallback)(async (skip = 0, limit = 50) => {
|
|
10114
10233
|
try {
|
|
10115
|
-
const
|
|
10116
|
-
|
|
10117
|
-
debugLogger.info("Retrieved user documents from vector database", {
|
|
10118
|
-
count: documents.length
|
|
10119
|
-
});
|
|
10120
|
-
return documents;
|
|
10234
|
+
const page = await getKnowledgeDocumentsPage(skip, limit, "knowledge");
|
|
10235
|
+
return page.documents;
|
|
10121
10236
|
} catch (error) {
|
|
10122
10237
|
debugLogger.error("Failed to get user documents", { error });
|
|
10123
10238
|
return [];
|
|
10124
10239
|
}
|
|
10125
|
-
}, [
|
|
10240
|
+
}, [getKnowledgeDocumentsPage]);
|
|
10126
10241
|
const deleteDocument = (0, import_react3.useCallback)(async (fileId) => {
|
|
10127
10242
|
if (!status.isEnabled || status.migrationRequired) {
|
|
10128
10243
|
return {
|
|
@@ -10219,6 +10334,7 @@ var useVectorStore = () => {
|
|
|
10219
10334
|
uploadDocument,
|
|
10220
10335
|
searchDocuments,
|
|
10221
10336
|
getUserDocuments,
|
|
10337
|
+
getKnowledgeDocumentsPage,
|
|
10222
10338
|
deleteDocument,
|
|
10223
10339
|
downloadVectorFile,
|
|
10224
10340
|
getFilePreview,
|