@absolutejs/absolute 0.19.0-beta.510 → 0.19.0-beta.512

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/ai/index.js CHANGED
@@ -4539,7 +4539,10 @@ var resolveRAGWorkflowRenderers = (custom) => ({
4539
4539
  });
4540
4540
 
4541
4541
  // src/ai/rag/quality.ts
4542
+ import { mkdir, readFile as readFile2, writeFile } from "fs/promises";
4543
+ import { dirname } from "path";
4542
4544
  var DEFAULT_TOP_K2 = 6;
4545
+ var DEFAULT_HISTORY_LIMIT = 20;
4543
4546
  var normalizeStringArray = (value) => {
4544
4547
  if (!Array.isArray(value)) {
4545
4548
  return [];
@@ -4597,6 +4600,114 @@ var buildRAGEvaluationLeaderboard = (runs) => {
4597
4600
  totalCases: run.response.totalCases
4598
4601
  }));
4599
4602
  };
4603
+ var toHistorySortOrder = (left, right) => right.finishedAt - left.finishedAt;
4604
+ var normalizeHistoryRuns = (runs) => [...runs].sort(toHistorySortOrder);
4605
+ var buildCaseDiff = (currentCase, previousCase) => ({
4606
+ caseId: currentCase.caseId,
4607
+ currentF1: currentCase.f1,
4608
+ currentMatchedIds: currentCase.matchedIds,
4609
+ currentMissingIds: currentCase.missingIds,
4610
+ currentStatus: currentCase.status,
4611
+ label: currentCase.label,
4612
+ previousF1: previousCase?.f1,
4613
+ previousMatchedIds: previousCase?.matchedIds ?? [],
4614
+ previousMissingIds: previousCase?.missingIds ?? [],
4615
+ previousStatus: previousCase?.status,
4616
+ query: currentCase.query
4617
+ });
4618
+ var getStatusRank = (status) => status === "pass" ? 2 : status === "partial" ? 1 : 0;
4619
+ var buildRAGEvaluationRunDiff = ({
4620
+ current,
4621
+ previous
4622
+ }) => {
4623
+ const previousCases = new Map((previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]));
4624
+ const diffs = current.response.cases.map((entry) => buildCaseDiff(entry, previousCases.get(entry.caseId)));
4625
+ const regressedCases = diffs.filter((entry) => getStatusRank(entry.currentStatus) < getStatusRank(entry.previousStatus ?? "fail"));
4626
+ const improvedCases = diffs.filter((entry) => getStatusRank(entry.currentStatus) > getStatusRank(entry.previousStatus ?? "fail"));
4627
+ const unchangedCases = diffs.filter((entry) => getStatusRank(entry.currentStatus) === getStatusRank(entry.previousStatus ?? "fail"));
4628
+ return {
4629
+ currentRunId: current.id,
4630
+ improvedCases,
4631
+ previousRunId: previous?.id,
4632
+ regressedCases,
4633
+ suiteId: current.suiteId,
4634
+ summaryDelta: {
4635
+ averageF1: current.response.summary.averageF1 - (previous?.response.summary.averageF1 ?? 0),
4636
+ averageLatencyMs: current.response.summary.averageLatencyMs - (previous?.response.summary.averageLatencyMs ?? 0),
4637
+ failedCases: current.response.summary.failedCases - (previous?.response.summary.failedCases ?? 0),
4638
+ passedCases: current.response.summary.passedCases - (previous?.response.summary.passedCases ?? 0),
4639
+ passingRate: current.response.passingRate - (previous?.response.passingRate ?? 0),
4640
+ partialCases: current.response.summary.partialCases - (previous?.response.summary.partialCases ?? 0)
4641
+ },
4642
+ unchangedCases
4643
+ };
4644
+ };
4645
+ var createRAGFileEvaluationHistoryStore = (path) => ({
4646
+ listRuns: async ({ limit, suiteId } = {}) => {
4647
+ let parsed = [];
4648
+ try {
4649
+ const content = await readFile2(path, "utf8");
4650
+ const value = JSON.parse(content);
4651
+ parsed = Array.isArray(value) ? value : [];
4652
+ } catch (error) {
4653
+ if (error.code !== "ENOENT") {
4654
+ throw error;
4655
+ }
4656
+ }
4657
+ const filtered = parsed.filter((entry) => !suiteId || entry.suiteId === suiteId);
4658
+ const sorted = normalizeHistoryRuns(filtered);
4659
+ return typeof limit === "number" ? sorted.slice(0, limit) : sorted;
4660
+ },
4661
+ saveRun: async (run) => {
4662
+ const existing = await (async () => {
4663
+ try {
4664
+ const content = await readFile2(path, "utf8");
4665
+ const value = JSON.parse(content);
4666
+ return Array.isArray(value) ? value : [];
4667
+ } catch (error) {
4668
+ if (error.code !== "ENOENT") {
4669
+ throw error;
4670
+ }
4671
+ return [];
4672
+ }
4673
+ })();
4674
+ const next = normalizeHistoryRuns([
4675
+ run,
4676
+ ...existing.filter((entry) => entry.id !== run.id)
4677
+ ]);
4678
+ await mkdir(dirname(path), { recursive: true });
4679
+ await writeFile(path, JSON.stringify(next, null, "\t") + `
4680
+ `, "utf8");
4681
+ }
4682
+ });
4683
+ var loadRAGEvaluationHistory = async ({
4684
+ store,
4685
+ suite,
4686
+ limit = DEFAULT_HISTORY_LIMIT
4687
+ }) => {
4688
+ const runs = normalizeHistoryRuns(await Promise.resolve(store.listRuns({ limit, suiteId: suite.id })));
4689
+ const latestRun = runs[0];
4690
+ const previousRun = runs[1];
4691
+ return {
4692
+ diff: latestRun && previousRun ? buildRAGEvaluationRunDiff({
4693
+ current: latestRun,
4694
+ previous: previousRun
4695
+ }) : undefined,
4696
+ latestRun,
4697
+ leaderboard: buildRAGEvaluationLeaderboard(runs),
4698
+ previousRun,
4699
+ runs,
4700
+ suiteId: suite.id,
4701
+ suiteLabel: suite.label ?? suite.id
4702
+ };
4703
+ };
4704
+ var persistRAGEvaluationSuiteRun = async ({
4705
+ store,
4706
+ run
4707
+ }) => {
4708
+ await Promise.resolve(store.saveRun(run));
4709
+ return run;
4710
+ };
4600
4711
  var buildRAGEvaluationResponse = (cases) => {
4601
4712
  const totalCases = cases.length;
4602
4713
  const passedCases = cases.filter((entry) => entry.status === "pass").length;
@@ -7665,8 +7776,8 @@ var resolveRAGStreamStage = ({
7665
7776
  // src/ai/rag/sync.ts
7666
7777
  var {S3Client } = globalThis.Bun;
7667
7778
  import { createHash } from "crypto";
7668
- import { mkdir, readFile as readFile2, writeFile } from "fs/promises";
7669
- import { dirname, resolve as resolve2 } from "path";
7779
+ import { mkdir as mkdir2, readFile as readFile3, writeFile as writeFile2 } from "fs/promises";
7780
+ import { dirname as dirname2, resolve as resolve2 } from "path";
7670
7781
  var toSyncError = (caught) => caught instanceof Error ? caught.message : String(caught);
7671
7782
  var wait = async (delayMs) => {
7672
7783
  if (!(delayMs > 0)) {
@@ -8250,14 +8361,14 @@ var createRAGFileSyncStateStore = (path) => {
8250
8361
  return {
8251
8362
  load: async () => {
8252
8363
  try {
8253
- return parseSyncState(await readFile2(resolvedPath, "utf8"));
8364
+ return parseSyncState(await readFile3(resolvedPath, "utf8"));
8254
8365
  } catch {
8255
8366
  return [];
8256
8367
  }
8257
8368
  },
8258
8369
  save: async (records) => {
8259
- await mkdir(dirname(resolvedPath), { recursive: true });
8260
- await writeFile(resolvedPath, JSON.stringify(records, null, 2), "utf8");
8370
+ await mkdir2(dirname2(resolvedPath), { recursive: true });
8371
+ await writeFile2(resolvedPath, JSON.stringify(records, null, 2), "utf8");
8261
8372
  }
8262
8373
  };
8263
8374
  };
@@ -8461,7 +8572,7 @@ import { existsSync as existsSync2 } from "fs";
8461
8572
  import { existsSync, readFileSync } from "fs";
8462
8573
  import { createRequire } from "module";
8463
8574
  import { arch, platform } from "os";
8464
- import { dirname as dirname2, join as join2 } from "path";
8575
+ import { dirname as dirname3, join as join2 } from "path";
8465
8576
  var require2 = createRequire(import.meta.url);
8466
8577
  var PLATFORM_PACKAGE_MAP = {
8467
8578
  "darwin-arm64": {
@@ -8512,7 +8623,7 @@ var resolveAbsoluteSQLiteVec = () => {
8512
8623
  }
8513
8624
  try {
8514
8625
  const packageJsonPath = require2.resolve(`${packageInfo.packageName}/package.json`);
8515
- const packageRoot = dirname2(packageJsonPath);
8626
+ const packageRoot = dirname3(packageJsonPath);
8516
8627
  const libraryPath = join2(packageRoot, packageInfo.libraryFile);
8517
8628
  const packageVersion = readPackageVersion(packageJsonPath);
8518
8629
  if (!existsSync(libraryPath)) {
@@ -10177,6 +10288,7 @@ export {
10177
10288
  prepareRAGDocumentFile,
10178
10289
  prepareRAGDocument,
10179
10290
  prepareRAGDirectoryDocuments,
10291
+ persistRAGEvaluationSuiteRun,
10180
10292
  parseAIMessage,
10181
10293
  openaiTranscriber,
10182
10294
  openaiResponses,
@@ -10196,6 +10308,7 @@ export {
10196
10308
  mistralai,
10197
10309
  metaEmbeddings,
10198
10310
  meta,
10311
+ loadRAGEvaluationHistory,
10199
10312
  loadRAGDocumentsFromUploads,
10200
10313
  loadRAGDocumentsFromURLs,
10201
10314
  loadRAGDocumentsFromDirectory,
@@ -10240,6 +10353,7 @@ export {
10240
10353
  createRAGGmailEmailSyncClient,
10241
10354
  createRAGFileSyncStateStore,
10242
10355
  createRAGFileExtractor,
10356
+ createRAGFileEvaluationHistoryStore,
10243
10357
  createRAGEvaluationSuite,
10244
10358
  createRAGEmbeddingProvider,
10245
10359
  createRAGEmailSyncSource,
@@ -10273,6 +10387,7 @@ export {
10273
10387
  buildRAGLexicalHaystack,
10274
10388
  buildRAGGroundingReferences,
10275
10389
  buildRAGGroundedAnswer,
10390
+ buildRAGEvaluationRunDiff,
10276
10391
  buildRAGEvaluationResponse,
10277
10392
  buildRAGEvaluationLeaderboard,
10278
10393
  buildRAGCitations,
@@ -10285,5 +10400,5 @@ export {
10285
10400
  aiChat
10286
10401
  };
10287
10402
 
10288
- //# debugId=9FFECCD86029913764756E2164756E21
10403
+ //# debugId=E67FA7078681805C64756E2164756E21
10289
10404
  //# sourceMappingURL=index.js.map