@absolutejs/absolute 0.19.0-beta.515 → 0.19.0-beta.517

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.
@@ -1671,6 +1671,30 @@ var buildSources = (results) => results.map((result) => ({
1671
1671
  text: result.chunkText,
1672
1672
  title: result.title
1673
1673
  }));
1674
+ var buildAnswerGroundingStatus = ({
1675
+ coverage,
1676
+ expectedCount,
1677
+ matchedCount,
1678
+ unresolvedCitationCount,
1679
+ resolvedCitationCount
1680
+ }) => {
1681
+ if (expectedCount > 0) {
1682
+ if (matchedCount === expectedCount && unresolvedCitationCount === 0 && coverage !== "ungrounded") {
1683
+ return "pass";
1684
+ }
1685
+ if (matchedCount > 0 || resolvedCitationCount > 0) {
1686
+ return "partial";
1687
+ }
1688
+ return "fail";
1689
+ }
1690
+ if (coverage === "grounded" && unresolvedCitationCount === 0) {
1691
+ return "pass";
1692
+ }
1693
+ if (resolvedCitationCount > 0 || coverage === "partial") {
1694
+ return "partial";
1695
+ }
1696
+ return "fail";
1697
+ };
1674
1698
  var buildRAGEvaluationLeaderboard = (runs) => {
1675
1699
  const sorted = [...runs].sort((left, right) => {
1676
1700
  if (right.response.passingRate !== left.response.passingRate) {
@@ -1823,6 +1847,93 @@ var buildRAGEvaluationResponse = (cases) => {
1823
1847
  totalCases
1824
1848
  };
1825
1849
  };
1850
+ var evaluateRAGAnswerGroundingCase = ({
1851
+ caseIndex,
1852
+ caseInput
1853
+ }) => {
1854
+ const mode = resolveEvaluationMode(caseInput);
1855
+ const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
1856
+ const groundedAnswer = buildRAGGroundedAnswer(caseInput.answer, caseInput.sources);
1857
+ const citedReferences = groundedAnswer.parts.flatMap((part) => part.type === "citation" ? part.references : []);
1858
+ const citedIds = normalizeExpectedIds(citedReferences.map((reference) => extractExpectedId(reference, mode)));
1859
+ const expectedSet = new Set(expectedIds);
1860
+ const citedSet = new Set(citedIds);
1861
+ const matchedIds = normalizeExpectedIds([...expectedSet].filter((id) => citedSet.has(id)));
1862
+ const missingIds = normalizeExpectedIds([...expectedSet].filter((id) => !citedSet.has(id)));
1863
+ const extraIds = normalizeExpectedIds([...citedSet].filter((id) => !expectedSet.has(id)));
1864
+ const matchedCount = matchedIds.length;
1865
+ const expectedCount = expectedIds.length;
1866
+ const citedCount = citedIds.length;
1867
+ const precision = citedCount > 0 ? matchedCount / citedCount : 0;
1868
+ const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;
1869
+ const citationF1 = precision + recall > 0 ? 2 * precision * recall / (precision + recall) : 0;
1870
+ const citationCount = groundedAnswer.parts.filter((part) => part.type === "citation").length;
1871
+ const unresolvedCitationCount = new Set(groundedAnswer.ungroundedReferenceNumbers).size;
1872
+ const resolvedCitationCount = citedReferences.length;
1873
+ const resolvedCitationRate = citationCount > 0 ? Math.min(1, resolvedCitationCount / citationCount) : 0;
1874
+ return {
1875
+ answer: caseInput.answer,
1876
+ caseId: caseInput.id ?? `case-${caseIndex + 1}`,
1877
+ citationCount,
1878
+ citationF1,
1879
+ citationPrecision: precision,
1880
+ citationRecall: recall,
1881
+ citedIds,
1882
+ coverage: groundedAnswer.coverage,
1883
+ expectedCount,
1884
+ expectedIds,
1885
+ extraIds,
1886
+ groundedAnswer,
1887
+ hasCitations: groundedAnswer.hasCitations,
1888
+ label: caseInput.label,
1889
+ matchedCount,
1890
+ matchedIds,
1891
+ metadata: caseInput.metadata,
1892
+ missingIds,
1893
+ mode,
1894
+ query: caseInput.query,
1895
+ referenceCount: groundedAnswer.references.length,
1896
+ resolvedCitationCount,
1897
+ resolvedCitationRate,
1898
+ status: buildAnswerGroundingStatus({
1899
+ coverage: groundedAnswer.coverage,
1900
+ expectedCount,
1901
+ matchedCount,
1902
+ resolvedCitationCount,
1903
+ unresolvedCitationCount
1904
+ }),
1905
+ unresolvedCitationCount
1906
+ };
1907
+ };
1908
+ var buildRAGAnswerGroundingEvaluationResponse = (cases) => {
1909
+ const totalCases = cases.length;
1910
+ const passedCases = cases.filter((entry) => entry.status === "pass").length;
1911
+ const partialCases = cases.filter((entry) => entry.status === "partial").length;
1912
+ const failedCases = cases.filter((entry) => entry.status === "fail").length;
1913
+ const groundedCases = cases.filter((entry) => entry.coverage === "grounded").length;
1914
+ const partiallyGroundedCases = cases.filter((entry) => entry.coverage === "partial").length;
1915
+ const ungroundedCases = cases.filter((entry) => entry.coverage === "ungrounded").length;
1916
+ return {
1917
+ cases,
1918
+ ok: true,
1919
+ passingRate: totalCases > 0 ? passedCases / totalCases * 100 : 0,
1920
+ summary: {
1921
+ averageCitationF1: cases.reduce((sum, result) => sum + result.citationF1, 0) / (totalCases || 1),
1922
+ averageCitationPrecision: cases.reduce((sum, result) => sum + result.citationPrecision, 0) / (totalCases || 1),
1923
+ averageCitationRecall: cases.reduce((sum, result) => sum + result.citationRecall, 0) / (totalCases || 1),
1924
+ averageResolvedCitationRate: cases.reduce((sum, result) => sum + result.resolvedCitationRate, 0) / (totalCases || 1),
1925
+ failedCases,
1926
+ groundedCases,
1927
+ partiallyGroundedCases,
1928
+ passedCases,
1929
+ partialCases,
1930
+ totalCases,
1931
+ ungroundedCases
1932
+ },
1933
+ totalCases
1934
+ };
1935
+ };
1936
+ var evaluateRAGAnswerGrounding = (input) => buildRAGAnswerGroundingEvaluationResponse(input.cases.map((caseInput, caseIndex) => evaluateRAGAnswerGroundingCase({ caseIndex, caseInput })));
1826
1937
  var compareRAGRerankers = async ({
1827
1938
  collection,
1828
1939
  suite,
@@ -2729,5 +2840,5 @@ export {
2729
2840
  AIStreamKey
2730
2841
  };
2731
2842
 
2732
- //# debugId=A1234A2354FE60C864756E2164756E21
2843
+ //# debugId=EEFE8418E86C288B64756E2164756E21
2733
2844
  //# sourceMappingURL=index.js.map