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

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.
@@ -1,5 +1,5 @@
1
1
  import type { RAGDocumentChunk, RAGQueryInput, RAGQueryResult, RAGUpsertInput } from '../../../types/ai';
2
- export type { AIHTMXRenderConfig, RAGAnswerWorkflowState, RAGBackendCapabilities, RAGCitation, RAGCitationReferenceMap, RAGGroundedAnswer, RAGGroundedAnswerPart, RAGGroundingReference, RAGChunkingOptions, RAGChunkingStrategy, RAGCollection, RAGCollectionSearchParams, RAGContentFormat, RAGHTMXConfig, RAGHybridFusionMode, RAGHybridRetrievalMode, RAGHybridSearchOptions, RAGDocumentChunk, RAGDocumentChunkPreview, RAGArchiveEntry, RAGArchiveExpander, RAGArchiveExpansionResult, RAGExtractedFileDocument, RAGFileExtractionInput, RAGFileExtractor, RAGPDFOCRExtractorOptions, RAGDirectoryIngestInput, RAGDirectorySyncSourceOptions, RAGDocumentFileInput, RAGDocumentIngestInput, RAGDocumentUploadIngestInput, RAGDocumentUploadInput, RAGEmbeddingFunction, RAGEmbeddingInput, RAGEmbeddingProvider, RAGEmbeddingProviderLike, RAGBackendDescriptor, RAGHTMXWorkflowRenderConfig, RAGIngestDocument, RAGIndexedDocument, RAGMediaTranscriber, RAGMediaTranscriptSegment, RAGMediaTranscriptionResult, RAGLexicalQueryInput, RAGDocumentUrlInput, RAGDocumentUrlIngestInput, RAGEmailSyncAttachment, RAGEmailSyncClient, RAGEmailSyncListInput, RAGEmailSyncListResult, RAGEmailSyncMessage, RAGEmailSyncSourceOptions, RAGStorageSyncClient, RAGStorageSyncFile, RAGStorageSyncListInput, RAGStorageSyncListResult, RAGStorageSyncObject, RAGStorageSyncSourceOptions, RAGOCRProvider, RAGOCRResult, RAGPreparedDocument, RAGSource, RAGSourceGroup, RAGSourceSummary, RAGIngestResponse, RAGMutationResponse, RAGPostgresNativeDiagnostics, RAGQueryInput, RAGQueryResult, RAGQueryTransformInput, RAGQueryTransformProvider, RAGQueryTransformProviderLike, RAGQueryTransformResult, RAGQueryTransformer, RAGSearchRequest, RAGSyncManager, RAGSyncRunOptions, RAGSyncSchedule, RAGSyncScheduler, RAGSyncResponse, RAGSyncStateStore, RAGSyncSourceContext, RAGSyncSourceDefinition, RAGSyncSourceRecord, RAGSyncSourceRunResult, RAGUrlSyncSourceOptions, RAGSQLiteNativeDiagnostics, RAGStatusResponse, RAGStreamStage, RAGEvaluationCase, RAGEvaluationCaseResult, RAGEvaluationLeaderboardEntry, RAGEvaluationInput, RAGEvaluationResponse, RAGEvaluationSummary, RAGEvaluationSuite, RAGEvaluationSuiteRun, RAGRetrievalCandidate, RAGRetrievalComparison, RAGRetrievalComparisonEntry, RAGRetrievalComparisonSummary, RAGUpsertInput, RAGVectorStore, RAGVectorStoreStatus, SQLiteVecResolution } from '../../../types/ai';
2
+ export type { AIHTMXRenderConfig, RAGAnswerWorkflowState, RAGBackendCapabilities, RAGCitation, RAGCitationReferenceMap, RAGGroundedAnswer, RAGGroundedAnswerPart, RAGGroundingReference, RAGChunkingOptions, RAGChunkingStrategy, RAGCollection, RAGCollectionSearchParams, RAGContentFormat, RAGHTMXConfig, RAGHybridFusionMode, RAGHybridRetrievalMode, RAGHybridSearchOptions, RAGDocumentChunk, RAGDocumentChunkPreview, RAGArchiveEntry, RAGArchiveExpander, RAGArchiveExpansionResult, RAGExtractedFileDocument, RAGFileExtractionInput, RAGFileExtractor, RAGPDFOCRExtractorOptions, RAGDirectoryIngestInput, RAGDirectorySyncSourceOptions, RAGDocumentFileInput, RAGDocumentIngestInput, RAGDocumentUploadIngestInput, RAGDocumentUploadInput, RAGEmbeddingFunction, RAGEmbeddingInput, RAGEmbeddingProvider, RAGEmbeddingProviderLike, RAGBackendDescriptor, RAGHTMXWorkflowRenderConfig, RAGIngestDocument, RAGIndexedDocument, RAGMediaTranscriber, RAGMediaTranscriptSegment, RAGMediaTranscriptionResult, RAGLexicalQueryInput, RAGDocumentUrlInput, RAGDocumentUrlIngestInput, RAGEmailSyncAttachment, RAGEmailSyncClient, RAGEmailSyncListInput, RAGEmailSyncListResult, RAGEmailSyncMessage, RAGEmailSyncSourceOptions, RAGStorageSyncClient, RAGStorageSyncFile, RAGStorageSyncListInput, RAGStorageSyncListResult, RAGStorageSyncObject, RAGStorageSyncSourceOptions, RAGOCRProvider, RAGOCRResult, RAGPreparedDocument, RAGSource, RAGSourceGroup, RAGSourceSummary, RAGIngestResponse, RAGMutationResponse, RAGPostgresNativeDiagnostics, RAGQueryInput, RAGQueryResult, RAGQueryTransformInput, RAGQueryTransformProvider, RAGQueryTransformProviderLike, RAGQueryTransformResult, RAGQueryTransformer, RAGSearchRequest, RAGSyncManager, RAGSyncRunOptions, RAGSyncSchedule, RAGSyncScheduler, RAGSyncResponse, RAGSyncStateStore, RAGSyncSourceContext, RAGSyncSourceDefinition, RAGSyncSourceRecord, RAGSyncSourceRunResult, RAGUrlSyncSourceOptions, RAGSQLiteNativeDiagnostics, RAGStatusResponse, RAGStreamStage, RAGEvaluationCase, RAGEvaluationCaseDiff, RAGEvaluationHistory, RAGEvaluationHistoryStore, RAGEvaluationCaseResult, RAGEvaluationLeaderboardEntry, RAGEvaluationInput, RAGEvaluationResponse, RAGEvaluationRunDiff, RAGEvaluationSummary, RAGEvaluationSuite, RAGEvaluationSuiteRun, RAGRetrievalCandidate, RAGRetrievalComparison, RAGRetrievalComparisonEntry, RAGRetrievalComparisonSummary, RAGUpsertInput, RAGVectorStore, RAGVectorStoreStatus, SQLiteVecResolution } from '../../../types/ai';
3
3
  export type InternalRAGStoredChunk = RAGDocumentChunk & {
4
4
  vector: number[];
5
5
  sourceId: string;
@@ -1614,7 +1614,10 @@ var createRAGDocuments = (path) => {
1614
1614
  import { derived as derived2, writable as writable3 } from "svelte/store";
1615
1615
 
1616
1616
  // src/ai/rag/quality.ts
1617
+ import { mkdir, readFile, writeFile } from "fs/promises";
1618
+ import { dirname } from "path";
1617
1619
  var DEFAULT_TOP_K = 6;
1620
+ var DEFAULT_HISTORY_LIMIT = 20;
1618
1621
  var normalizeStringArray = (value) => {
1619
1622
  if (!Array.isArray(value)) {
1620
1623
  return [];
@@ -1672,6 +1675,114 @@ var buildRAGEvaluationLeaderboard = (runs) => {
1672
1675
  totalCases: run.response.totalCases
1673
1676
  }));
1674
1677
  };
1678
+ var toHistorySortOrder = (left, right) => right.finishedAt - left.finishedAt;
1679
+ var normalizeHistoryRuns = (runs) => [...runs].sort(toHistorySortOrder);
1680
+ var buildCaseDiff = (currentCase, previousCase) => ({
1681
+ caseId: currentCase.caseId,
1682
+ currentF1: currentCase.f1,
1683
+ currentMatchedIds: currentCase.matchedIds,
1684
+ currentMissingIds: currentCase.missingIds,
1685
+ currentStatus: currentCase.status,
1686
+ label: currentCase.label,
1687
+ previousF1: previousCase?.f1,
1688
+ previousMatchedIds: previousCase?.matchedIds ?? [],
1689
+ previousMissingIds: previousCase?.missingIds ?? [],
1690
+ previousStatus: previousCase?.status,
1691
+ query: currentCase.query
1692
+ });
1693
+ var getStatusRank = (status) => status === "pass" ? 2 : status === "partial" ? 1 : 0;
1694
+ var buildRAGEvaluationRunDiff = ({
1695
+ current,
1696
+ previous
1697
+ }) => {
1698
+ const previousCases = new Map((previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]));
1699
+ const diffs = current.response.cases.map((entry) => buildCaseDiff(entry, previousCases.get(entry.caseId)));
1700
+ const regressedCases = diffs.filter((entry) => getStatusRank(entry.currentStatus) < getStatusRank(entry.previousStatus ?? "fail"));
1701
+ const improvedCases = diffs.filter((entry) => getStatusRank(entry.currentStatus) > getStatusRank(entry.previousStatus ?? "fail"));
1702
+ const unchangedCases = diffs.filter((entry) => getStatusRank(entry.currentStatus) === getStatusRank(entry.previousStatus ?? "fail"));
1703
+ return {
1704
+ currentRunId: current.id,
1705
+ improvedCases,
1706
+ previousRunId: previous?.id,
1707
+ regressedCases,
1708
+ suiteId: current.suiteId,
1709
+ summaryDelta: {
1710
+ averageF1: current.response.summary.averageF1 - (previous?.response.summary.averageF1 ?? 0),
1711
+ averageLatencyMs: current.response.summary.averageLatencyMs - (previous?.response.summary.averageLatencyMs ?? 0),
1712
+ failedCases: current.response.summary.failedCases - (previous?.response.summary.failedCases ?? 0),
1713
+ passedCases: current.response.summary.passedCases - (previous?.response.summary.passedCases ?? 0),
1714
+ passingRate: current.response.passingRate - (previous?.response.passingRate ?? 0),
1715
+ partialCases: current.response.summary.partialCases - (previous?.response.summary.partialCases ?? 0)
1716
+ },
1717
+ unchangedCases
1718
+ };
1719
+ };
1720
+ var createRAGFileEvaluationHistoryStore = (path) => ({
1721
+ listRuns: async ({ limit, suiteId } = {}) => {
1722
+ let parsed = [];
1723
+ try {
1724
+ const content = await readFile(path, "utf8");
1725
+ const value = JSON.parse(content);
1726
+ parsed = Array.isArray(value) ? value : [];
1727
+ } catch (error) {
1728
+ if (error.code !== "ENOENT") {
1729
+ throw error;
1730
+ }
1731
+ }
1732
+ const filtered = parsed.filter((entry) => !suiteId || entry.suiteId === suiteId);
1733
+ const sorted = normalizeHistoryRuns(filtered);
1734
+ return typeof limit === "number" ? sorted.slice(0, limit) : sorted;
1735
+ },
1736
+ saveRun: async (run) => {
1737
+ const existing = await (async () => {
1738
+ try {
1739
+ const content = await readFile(path, "utf8");
1740
+ const value = JSON.parse(content);
1741
+ return Array.isArray(value) ? value : [];
1742
+ } catch (error) {
1743
+ if (error.code !== "ENOENT") {
1744
+ throw error;
1745
+ }
1746
+ return [];
1747
+ }
1748
+ })();
1749
+ const next = normalizeHistoryRuns([
1750
+ run,
1751
+ ...existing.filter((entry) => entry.id !== run.id)
1752
+ ]);
1753
+ await mkdir(dirname(path), { recursive: true });
1754
+ await writeFile(path, JSON.stringify(next, null, "\t") + `
1755
+ `, "utf8");
1756
+ }
1757
+ });
1758
+ var loadRAGEvaluationHistory = async ({
1759
+ store,
1760
+ suite,
1761
+ limit = DEFAULT_HISTORY_LIMIT
1762
+ }) => {
1763
+ const runs = normalizeHistoryRuns(await Promise.resolve(store.listRuns({ limit, suiteId: suite.id })));
1764
+ const latestRun = runs[0];
1765
+ const previousRun = runs[1];
1766
+ return {
1767
+ diff: latestRun ? buildRAGEvaluationRunDiff({
1768
+ current: latestRun,
1769
+ previous: previousRun
1770
+ }) : undefined,
1771
+ latestRun,
1772
+ leaderboard: buildRAGEvaluationLeaderboard(runs),
1773
+ previousRun,
1774
+ runs,
1775
+ suiteId: suite.id,
1776
+ suiteLabel: suite.label ?? suite.id
1777
+ };
1778
+ };
1779
+ var persistRAGEvaluationSuiteRun = async ({
1780
+ store,
1781
+ run
1782
+ }) => {
1783
+ await Promise.resolve(store.saveRun(run));
1784
+ return run;
1785
+ };
1675
1786
  var buildRAGEvaluationResponse = (cases) => {
1676
1787
  const totalCases = cases.length;
1677
1788
  const passedCases = cases.filter((entry) => entry.status === "pass").length;
@@ -2615,5 +2726,5 @@ export {
2615
2726
  createAIStream
2616
2727
  };
2617
2728
 
2618
- //# debugId=6BFDC217A4E0662C64756E2164756E21
2729
+ //# debugId=9700FB9A49629A6964756E2164756E21
2619
2730
  //# sourceMappingURL=index.js.map