@polpo-ai/core 0.15.133 → 0.15.135
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/README.md +22 -0
- package/dist/__tests__/brain-local.test.js +43 -1
- package/dist/__tests__/brain-local.test.js.map +1 -1
- package/dist/__tests__/memory-store-policy.test.js +67 -0
- package/dist/__tests__/memory-store-policy.test.js.map +1 -1
- package/dist/__tests__/project-layout.test.js +5 -0
- package/dist/__tests__/project-layout.test.js.map +1 -1
- package/dist/brain/in-memory-store.d.ts +2 -1
- package/dist/brain/in-memory-store.d.ts.map +1 -1
- package/dist/brain/in-memory-store.js +16 -0
- package/dist/brain/in-memory-store.js.map +1 -1
- package/dist/brain/index.d.ts +5 -2
- package/dist/brain/index.d.ts.map +1 -1
- package/dist/brain/index.js +2 -1
- package/dist/brain/index.js.map +1 -1
- package/dist/brain/ingestion-worker.d.ts +33 -0
- package/dist/brain/ingestion-worker.d.ts.map +1 -0
- package/dist/brain/ingestion-worker.js +222 -0
- package/dist/brain/ingestion-worker.js.map +1 -0
- package/dist/brain/ingestion-worker.test.d.ts +2 -0
- package/dist/brain/ingestion-worker.test.d.ts.map +1 -0
- package/dist/brain/ingestion-worker.test.js +355 -0
- package/dist/brain/ingestion-worker.test.js.map +1 -0
- package/dist/brain/retrieval.d.ts +4 -0
- package/dist/brain/retrieval.d.ts.map +1 -1
- package/dist/brain/retrieval.js +37 -0
- package/dist/brain/retrieval.js.map +1 -1
- package/dist/brain/stores.d.ts +3 -1
- package/dist/brain/stores.d.ts.map +1 -1
- package/dist/brain/types.d.ts +3 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/canonical-turn-dispatcher.d.ts +30 -0
- package/dist/canonical-turn-dispatcher.d.ts.map +1 -0
- package/dist/canonical-turn-dispatcher.js +50 -0
- package/dist/canonical-turn-dispatcher.js.map +1 -0
- package/dist/canonical-turn-dispatcher.test.d.ts +2 -0
- package/dist/canonical-turn-dispatcher.test.d.ts.map +1 -0
- package/dist/canonical-turn-dispatcher.test.js +118 -0
- package/dist/canonical-turn-dispatcher.test.js.map +1 -0
- package/dist/canonical-turn.d.ts +36 -0
- package/dist/canonical-turn.d.ts.map +1 -0
- package/dist/canonical-turn.js +132 -0
- package/dist/canonical-turn.js.map +1 -0
- package/dist/canonical-turn.test.d.ts +2 -0
- package/dist/canonical-turn.test.d.ts.map +1 -0
- package/dist/canonical-turn.test.js +64 -0
- package/dist/canonical-turn.test.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/extraction.d.ts +10 -0
- package/dist/memory/extraction.d.ts.map +1 -1
- package/dist/memory/extraction.js +7 -1
- package/dist/memory/extraction.js.map +1 -1
- package/dist/memory/extraction.test.js +27 -0
- package/dist/memory/extraction.test.js.map +1 -1
- package/dist/memory/in-memory-extraction-store.d.ts +2 -0
- package/dist/memory/in-memory-extraction-store.d.ts.map +1 -1
- package/dist/memory/in-memory-extraction-store.js +37 -0
- package/dist/memory/in-memory-extraction-store.js.map +1 -1
- package/dist/memory/in-memory-store.d.ts +4 -0
- package/dist/memory/in-memory-store.d.ts.map +1 -1
- package/dist/memory/in-memory-store.js +81 -15
- package/dist/memory/in-memory-store.js.map +1 -1
- package/dist/memory/index.d.ts +5 -3
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +2 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/learning.d.ts +113 -0
- package/dist/memory/learning.d.ts.map +1 -0
- package/dist/memory/learning.js +310 -0
- package/dist/memory/learning.js.map +1 -0
- package/dist/memory/learning.test.d.ts +2 -0
- package/dist/memory/learning.test.d.ts.map +1 -0
- package/dist/memory/learning.test.js +274 -0
- package/dist/memory/learning.test.js.map +1 -0
- package/dist/memory/store-types.d.ts +5 -1
- package/dist/memory/store-types.d.ts.map +1 -1
- package/dist/memory/tool-settings.d.ts +16 -0
- package/dist/memory/tool-settings.d.ts.map +1 -1
- package/dist/memory/tool-settings.js +53 -1
- package/dist/memory/tool-settings.js.map +1 -1
- package/dist/memory/tool-settings.test.js +33 -0
- package/dist/memory/tool-settings.test.js.map +1 -1
- package/dist/model-runtime.d.ts +1 -1
- package/dist/model-runtime.d.ts.map +1 -1
- package/dist/model-runtime.js.map +1 -1
- package/dist/semantic-retrieval-quality.test.d.ts +2 -0
- package/dist/semantic-retrieval-quality.test.d.ts.map +1 -0
- package/dist/semantic-retrieval-quality.test.js +319 -0
- package/dist/semantic-retrieval-quality.test.js.map +1 -0
- package/dist/semantic-retrieval.d.ts +118 -1
- package/dist/semantic-retrieval.d.ts.map +1 -1
- package/dist/semantic-retrieval.js +484 -23
- package/dist/semantic-retrieval.js.map +1 -1
- package/dist/semantic-retrieval.test.js +1 -1
- package/dist/semantic-retrieval.test.js.map +1 -1
- package/dist/session-continuation.d.ts +2 -0
- package/dist/session-continuation.d.ts.map +1 -1
- package/dist/session-continuation.js.map +1 -1
- package/dist/session-store.d.ts +33 -0
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js.map +1 -1
- package/package.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-runtime.js","sourceRoot":"","sources":["../src/model-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,SAAS,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"model-runtime.js","sourceRoot":"","sources":["../src/model-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,SAAS,CAAU,CAAC;AAqIpE,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,mBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-retrieval-quality.test.d.ts","sourceRoot":"","sources":["../src/semantic-retrieval-quality.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { evaluateSemanticRetrievalQualityGate, rerankTextCandidates, runSemanticRetrievalEval, } from "./semantic-retrieval.js";
|
|
3
|
+
const cases = [
|
|
4
|
+
{
|
|
5
|
+
id: "exact",
|
|
6
|
+
query: "invoice INV-2048",
|
|
7
|
+
relevantIds: ["invoice-2048"],
|
|
8
|
+
tags: ["exact_identifier"],
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: "paraphrase",
|
|
12
|
+
query: "get my money back",
|
|
13
|
+
relevantIds: ["refund-policy", "refund-faq"],
|
|
14
|
+
tags: ["paraphrase"],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "abstain",
|
|
18
|
+
query: "founder's favorite constellation",
|
|
19
|
+
relevantIds: [],
|
|
20
|
+
tags: ["abstention"],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: "isolation",
|
|
24
|
+
query: "quarterly plan",
|
|
25
|
+
relevantIds: ["public-plan"],
|
|
26
|
+
forbiddenIds: ["other-tenant-plan"],
|
|
27
|
+
tags: ["cross_scope"],
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
describe("semantic retrieval quality evaluation", () => {
|
|
31
|
+
it("computes ranking, exact-id, abstention, isolation, and latency metrics", async () => {
|
|
32
|
+
const report = await runSemanticRetrievalEval(cases, async ({ id }) => {
|
|
33
|
+
switch (id) {
|
|
34
|
+
case "exact":
|
|
35
|
+
return { resultIds: ["noise", "invoice-2048"], durationMs: 10 };
|
|
36
|
+
case "paraphrase":
|
|
37
|
+
return {
|
|
38
|
+
resultIds: ["refund-policy", "noise", "refund-faq"],
|
|
39
|
+
durationMs: 20,
|
|
40
|
+
};
|
|
41
|
+
case "abstain":
|
|
42
|
+
return { resultIds: [], durationMs: 30 };
|
|
43
|
+
default:
|
|
44
|
+
return {
|
|
45
|
+
resultIds: ["public-plan", "other-tenant-plan"],
|
|
46
|
+
durationMs: 40,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
expect(report).toMatchObject({
|
|
51
|
+
cases: 4,
|
|
52
|
+
retrievalCases: 3,
|
|
53
|
+
hits: 3,
|
|
54
|
+
recallAtK: 1,
|
|
55
|
+
mrr: (0.5 + 1 + 1) / 3,
|
|
56
|
+
abstentionCases: 1,
|
|
57
|
+
abstentionFalsePositives: 0,
|
|
58
|
+
forbiddenResultCount: 1,
|
|
59
|
+
failedCaseIds: [],
|
|
60
|
+
failureRate: 0,
|
|
61
|
+
exactIdentifier: { cases: 1, hits: 1, recallAtK: 1 },
|
|
62
|
+
latencyMs: { p50: 20, p95: 40, max: 40 },
|
|
63
|
+
});
|
|
64
|
+
expect(report.ndcgAtK).toBeCloseTo(((1 / Math.log2(3))
|
|
65
|
+
+ ((1 + (1 / Math.log2(4))) / (1 + (1 / Math.log2(3))))
|
|
66
|
+
+ 1) / 3);
|
|
67
|
+
expect(report.caseReports.find(({ id }) => id === "isolation"))
|
|
68
|
+
.toMatchObject({ forbiddenResultIds: ["other-tenant-plan"] });
|
|
69
|
+
expect(JSON.stringify(report)).not.toContain("quarterly plan");
|
|
70
|
+
});
|
|
71
|
+
it("preserves the simple retriever contract and old top-level metrics", async () => {
|
|
72
|
+
const report = await runSemanticRetrievalEval([
|
|
73
|
+
{ id: "hit", query: "refund", relevantIds: ["refund"] },
|
|
74
|
+
{ id: "miss", query: "shipping", relevantIds: ["delivery"] },
|
|
75
|
+
], async ({ id }) => id === "hit" ? ["refund"] : ["other"]);
|
|
76
|
+
expect(report).toMatchObject({
|
|
77
|
+
cases: 2,
|
|
78
|
+
hits: 1,
|
|
79
|
+
recallAtK: 0.5,
|
|
80
|
+
missedCaseIds: ["miss"],
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
it("classifies retriever failures per case but never converts abort into a report", async () => {
|
|
84
|
+
const report = await runSemanticRetrievalEval([
|
|
85
|
+
{ id: "failed", query: "refund", relevantIds: ["refund"] },
|
|
86
|
+
], async () => {
|
|
87
|
+
throw new Error("provider leaked source content here");
|
|
88
|
+
});
|
|
89
|
+
expect(report).toMatchObject({
|
|
90
|
+
failures: 1,
|
|
91
|
+
failedCaseIds: ["failed"],
|
|
92
|
+
failureRate: 1,
|
|
93
|
+
});
|
|
94
|
+
expect(JSON.stringify(report)).not.toContain("provider leaked");
|
|
95
|
+
await expect(runSemanticRetrievalEval([
|
|
96
|
+
{ id: "aborted", query: "refund", relevantIds: ["refund"] },
|
|
97
|
+
], async () => {
|
|
98
|
+
throw Object.assign(new Error("cancelled"), { name: "AbortError" });
|
|
99
|
+
})).rejects.toMatchObject({ name: "AbortError" });
|
|
100
|
+
});
|
|
101
|
+
it.each([
|
|
102
|
+
[[
|
|
103
|
+
{ id: "duplicate", query: "a", relevantIds: ["one"] },
|
|
104
|
+
{ id: "duplicate", query: "b", relevantIds: ["two"] },
|
|
105
|
+
], "duplicate"],
|
|
106
|
+
[[
|
|
107
|
+
{ id: "overlap", query: "a", relevantIds: ["same"], forbiddenIds: ["same"] },
|
|
108
|
+
], "both relevant and forbidden"],
|
|
109
|
+
[[
|
|
110
|
+
{ id: "empty", query: "a", relevantIds: [] },
|
|
111
|
+
], "abstention"],
|
|
112
|
+
[[
|
|
113
|
+
{ id: "bad-abstain", query: "a", relevantIds: ["one"], tags: ["abstention"] },
|
|
114
|
+
], "must not define relevant"],
|
|
115
|
+
])("rejects malformed case manifests %#", async (manifest, message) => {
|
|
116
|
+
await expect(runSemanticRetrievalEval(manifest, async () => [])).rejects.toThrow(message);
|
|
117
|
+
});
|
|
118
|
+
it("rejects duplicate, unknown, over-limit, and non-canonical result identities", async () => {
|
|
119
|
+
const oneCase = [{ id: "case", query: "q", relevantIds: ["one"] }];
|
|
120
|
+
await expect(runSemanticRetrievalEval(oneCase, async () => ["one", "one"]))
|
|
121
|
+
.rejects.toThrow("duplicate");
|
|
122
|
+
await expect(runSemanticRetrievalEval([{ ...oneCase[0], limit: 1 }], async () => ["one", "two"])).rejects.toThrow("limit");
|
|
123
|
+
await expect(runSemanticRetrievalEval(oneCase, async () => ["e\u0301"]))
|
|
124
|
+
.rejects.toThrow("Unicode-normalized");
|
|
125
|
+
await expect(runSemanticRetrievalEval(oneCase, async () => ({
|
|
126
|
+
resultIds: ["one"],
|
|
127
|
+
fallbackReason: "provider returned its raw error",
|
|
128
|
+
}))).rejects.toThrow("sanitized reason code");
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe("semantic retrieval quality gates", () => {
|
|
132
|
+
it("blocks exact-id regression and forbidden output despite aggregate uplift", async () => {
|
|
133
|
+
const baseline = await runSemanticRetrievalEval(cases, async ({ id }) => ({
|
|
134
|
+
resultIds: id === "abstain"
|
|
135
|
+
? []
|
|
136
|
+
: id === "exact"
|
|
137
|
+
? ["invoice-2048"]
|
|
138
|
+
: id === "paraphrase"
|
|
139
|
+
? ["noise"]
|
|
140
|
+
: ["public-plan"],
|
|
141
|
+
durationMs: 10,
|
|
142
|
+
}));
|
|
143
|
+
const candidate = await runSemanticRetrievalEval(cases, async ({ id }) => ({
|
|
144
|
+
resultIds: id === "abstain"
|
|
145
|
+
? []
|
|
146
|
+
: id === "exact"
|
|
147
|
+
? ["noise"]
|
|
148
|
+
: id === "paraphrase"
|
|
149
|
+
? ["refund-policy"]
|
|
150
|
+
: ["public-plan", "other-tenant-plan"],
|
|
151
|
+
durationMs: 12,
|
|
152
|
+
}));
|
|
153
|
+
const gate = evaluateSemanticRetrievalQualityGate({
|
|
154
|
+
baseline,
|
|
155
|
+
candidate,
|
|
156
|
+
policy: {
|
|
157
|
+
minimumRecallAtK: 0.5,
|
|
158
|
+
maximumRecallAtKRegression: 0,
|
|
159
|
+
maximumExactIdentifierRecallRegression: 0,
|
|
160
|
+
maximumForbiddenResults: 0,
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
expect(gate.passed).toBe(false);
|
|
164
|
+
expect(gate.failures.map(({ code }) => code)).toEqual(expect.arrayContaining([
|
|
165
|
+
"exact_identifier_regression",
|
|
166
|
+
"forbidden_results",
|
|
167
|
+
]));
|
|
168
|
+
});
|
|
169
|
+
it("passes a non-regressing candidate and rejects invalid policy", async () => {
|
|
170
|
+
const report = await runSemanticRetrievalEval(cases, async ({ id }) => ({
|
|
171
|
+
resultIds: id === "abstain"
|
|
172
|
+
? []
|
|
173
|
+
: id === "exact"
|
|
174
|
+
? ["invoice-2048"]
|
|
175
|
+
: id === "paraphrase"
|
|
176
|
+
? ["refund-policy", "refund-faq"]
|
|
177
|
+
: ["public-plan"],
|
|
178
|
+
durationMs: 8,
|
|
179
|
+
}));
|
|
180
|
+
expect(evaluateSemanticRetrievalQualityGate({
|
|
181
|
+
baseline: report,
|
|
182
|
+
candidate: report,
|
|
183
|
+
policy: {
|
|
184
|
+
minimumRecallAtK: 1,
|
|
185
|
+
minimumMrr: 1,
|
|
186
|
+
minimumNdcgAtK: 1,
|
|
187
|
+
maximumP95LatencyMs: 10,
|
|
188
|
+
},
|
|
189
|
+
})).toMatchObject({ passed: true, failures: [] });
|
|
190
|
+
expect(() => evaluateSemanticRetrievalQualityGate({
|
|
191
|
+
baseline: report,
|
|
192
|
+
candidate: report,
|
|
193
|
+
policy: { minimumMrr: 1.1 },
|
|
194
|
+
})).toThrow("minimumMrr");
|
|
195
|
+
});
|
|
196
|
+
it("refuses to compare reports from different case manifests", async () => {
|
|
197
|
+
const baseline = await runSemanticRetrievalEval([
|
|
198
|
+
{ id: "one", query: "one", relevantIds: ["one"] },
|
|
199
|
+
], async () => ["one"]);
|
|
200
|
+
const candidate = await runSemanticRetrievalEval([
|
|
201
|
+
{ id: "two", query: "two", relevantIds: ["two"] },
|
|
202
|
+
], async () => ["two"]);
|
|
203
|
+
expect(() => evaluateSemanticRetrievalQualityGate({ baseline, candidate }))
|
|
204
|
+
.toThrow("same case manifest");
|
|
205
|
+
const changedJudgement = await runSemanticRetrievalEval([
|
|
206
|
+
{ id: "one", query: "one", relevantIds: ["different"] },
|
|
207
|
+
], async () => ["different"]);
|
|
208
|
+
expect(() => evaluateSemanticRetrievalQualityGate({
|
|
209
|
+
baseline,
|
|
210
|
+
candidate: changedJudgement,
|
|
211
|
+
})).toThrow("same case manifest");
|
|
212
|
+
expect(() => evaluateSemanticRetrievalQualityGate({
|
|
213
|
+
baseline,
|
|
214
|
+
candidate: { ...baseline, recallAtK: Number.NaN },
|
|
215
|
+
})).toThrow("candidate.recallAtK");
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe("shared text reranker", () => {
|
|
219
|
+
const candidates = [
|
|
220
|
+
{ id: "a", text: "Alpha" },
|
|
221
|
+
{ id: "b", text: "Beta" },
|
|
222
|
+
{ id: "c", text: "Gamma" },
|
|
223
|
+
];
|
|
224
|
+
it("returns a bounded immutable ranking with usage", async () => {
|
|
225
|
+
const reranker = {
|
|
226
|
+
rerank: async () => ({
|
|
227
|
+
ranking: [{ id: "b", score: 0.9 }, { id: "a", score: 0.8 }],
|
|
228
|
+
usage: { tokens: 3 },
|
|
229
|
+
}),
|
|
230
|
+
};
|
|
231
|
+
const outcome = await rerankTextCandidates({
|
|
232
|
+
query: "beta first",
|
|
233
|
+
candidates,
|
|
234
|
+
limit: 2,
|
|
235
|
+
failureMode: "strict",
|
|
236
|
+
}, reranker);
|
|
237
|
+
expect(outcome.ranking).toEqual([
|
|
238
|
+
{ candidate: candidates[1], score: 0.9 },
|
|
239
|
+
{ candidate: candidates[0], score: 0.8 },
|
|
240
|
+
]);
|
|
241
|
+
expect(outcome.usage).toEqual({ tokens: 3 });
|
|
242
|
+
expect(Object.isFrozen(outcome.ranking)).toBe(true);
|
|
243
|
+
});
|
|
244
|
+
it.each([
|
|
245
|
+
[[{ id: "unknown", score: 1 }, { id: "a", score: 0 }], "unknown"],
|
|
246
|
+
[[{ id: "a", score: 1 }, { id: "a", score: 0 }], "duplicate"],
|
|
247
|
+
[[{ id: "a", score: Number.NaN }, { id: "b", score: 0 }], "finite"],
|
|
248
|
+
[[{ id: "a", score: 1 }], "exactly 2"],
|
|
249
|
+
])("falls back on malformed provider output %#", async (ranking, reason) => {
|
|
250
|
+
const reranker = {
|
|
251
|
+
rerank: async () => ({ ranking }),
|
|
252
|
+
};
|
|
253
|
+
const outcome = await rerankTextCandidates({
|
|
254
|
+
query: "test",
|
|
255
|
+
candidates,
|
|
256
|
+
limit: 2,
|
|
257
|
+
failureMode: "fallback",
|
|
258
|
+
}, reranker);
|
|
259
|
+
expect(outcome.fallbackReason).toBe("reranker_invalid_output");
|
|
260
|
+
expect(outcome.ranking.map(({ candidate }) => candidate.id)).toEqual(["a", "b"]);
|
|
261
|
+
await expect(rerankTextCandidates({
|
|
262
|
+
query: "test",
|
|
263
|
+
candidates,
|
|
264
|
+
limit: 2,
|
|
265
|
+
failureMode: "strict",
|
|
266
|
+
}, reranker)).rejects.toThrow(reason);
|
|
267
|
+
});
|
|
268
|
+
it("propagates cancellation instead of silently falling back", async () => {
|
|
269
|
+
const reranker = {
|
|
270
|
+
rerank: async () => {
|
|
271
|
+
throw Object.assign(new Error("cancelled"), { name: "AbortError" });
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
await expect(rerankTextCandidates({
|
|
275
|
+
query: "test",
|
|
276
|
+
candidates,
|
|
277
|
+
limit: 2,
|
|
278
|
+
failureMode: "fallback",
|
|
279
|
+
}, reranker)).rejects.toMatchObject({ name: "AbortError" });
|
|
280
|
+
});
|
|
281
|
+
it("bounds a provider that ignores cancellation and classifies timeout", async () => {
|
|
282
|
+
const reranker = {
|
|
283
|
+
rerank: async () => new Promise(() => undefined),
|
|
284
|
+
};
|
|
285
|
+
const outcome = await rerankTextCandidates({
|
|
286
|
+
query: "test",
|
|
287
|
+
candidates,
|
|
288
|
+
limit: 2,
|
|
289
|
+
timeoutMs: 1,
|
|
290
|
+
failureMode: "fallback",
|
|
291
|
+
}, reranker);
|
|
292
|
+
expect(outcome.fallbackReason).toBe("reranker_timeout");
|
|
293
|
+
const controller = new AbortController();
|
|
294
|
+
const pending = rerankTextCandidates({
|
|
295
|
+
query: "test",
|
|
296
|
+
candidates,
|
|
297
|
+
limit: 2,
|
|
298
|
+
timeoutMs: 10_000,
|
|
299
|
+
failureMode: "fallback",
|
|
300
|
+
signal: controller.signal,
|
|
301
|
+
}, reranker);
|
|
302
|
+
controller.abort();
|
|
303
|
+
await expect(pending).rejects.toMatchObject({ name: "AbortError" });
|
|
304
|
+
});
|
|
305
|
+
it("does not classify a provider TypeError as malformed output", async () => {
|
|
306
|
+
const outcome = await rerankTextCandidates({
|
|
307
|
+
query: "test",
|
|
308
|
+
candidates,
|
|
309
|
+
limit: 2,
|
|
310
|
+
failureMode: "fallback",
|
|
311
|
+
}, {
|
|
312
|
+
rerank: async () => {
|
|
313
|
+
throw new TypeError("network library failed");
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
expect(outcome.fallbackReason).toBe("reranker_unavailable");
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
//# sourceMappingURL=semantic-retrieval-quality.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-retrieval-quality.test.js","sourceRoot":"","sources":["../src/semantic-retrieval-quality.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,6 +81,7 @@ export interface HybridRankingResult {
|
|
|
81
81
|
readonly scores: {
|
|
82
82
|
readonly lexical?: number;
|
|
83
83
|
readonly semantic?: number;
|
|
84
|
+
readonly rerank?: number;
|
|
84
85
|
};
|
|
85
86
|
}
|
|
86
87
|
export interface HybridRetrievalPolicy {
|
|
@@ -103,15 +104,131 @@ export interface SemanticRetrievalEvalCase {
|
|
|
103
104
|
readonly id: string;
|
|
104
105
|
readonly query: string;
|
|
105
106
|
readonly relevantIds: readonly string[];
|
|
107
|
+
readonly forbiddenIds?: readonly string[];
|
|
108
|
+
readonly tags?: readonly SemanticRetrievalEvalTag[];
|
|
109
|
+
readonly limit?: number;
|
|
110
|
+
}
|
|
111
|
+
export declare const SEMANTIC_RETRIEVAL_EVAL_TAGS: readonly ["exact_identifier", "paraphrase", "multilingual", "abstention", "stale", "revoked", "cross_scope"];
|
|
112
|
+
export type SemanticRetrievalEvalTag = (typeof SEMANTIC_RETRIEVAL_EVAL_TAGS)[number];
|
|
113
|
+
export interface SemanticRetrievalEvalObservationInput {
|
|
114
|
+
readonly resultIds: readonly string[];
|
|
115
|
+
readonly durationMs?: number;
|
|
116
|
+
readonly fallbackReason?: string;
|
|
117
|
+
}
|
|
118
|
+
export interface SemanticRetrievalEvalCaseReport {
|
|
119
|
+
readonly id: string;
|
|
120
|
+
readonly tags: readonly SemanticRetrievalEvalTag[];
|
|
121
|
+
readonly relevantIds: readonly string[];
|
|
122
|
+
readonly forbiddenIds: readonly string[];
|
|
123
|
+
readonly limit?: number;
|
|
124
|
+
readonly resultIds: readonly string[];
|
|
125
|
+
readonly hit: boolean;
|
|
126
|
+
readonly firstRelevantRank?: number;
|
|
127
|
+
readonly reciprocalRank: number;
|
|
128
|
+
readonly ndcgAtK: number;
|
|
129
|
+
readonly forbiddenResultIds: readonly string[];
|
|
130
|
+
readonly abstentionFalsePositive: boolean;
|
|
131
|
+
readonly durationMs: number;
|
|
132
|
+
readonly fallbackReason?: string;
|
|
133
|
+
readonly failure?: "retriever_error";
|
|
106
134
|
}
|
|
107
135
|
export interface SemanticRetrievalEvalReport {
|
|
108
136
|
readonly cases: number;
|
|
137
|
+
readonly retrievalCases: number;
|
|
109
138
|
readonly hits: number;
|
|
110
139
|
readonly recallAtK: number;
|
|
140
|
+
readonly mrr: number;
|
|
141
|
+
readonly ndcgAtK: number;
|
|
111
142
|
readonly missedCaseIds: readonly string[];
|
|
143
|
+
readonly abstentionCases: number;
|
|
144
|
+
readonly abstentionFalsePositives: number;
|
|
145
|
+
readonly abstentionFalsePositiveRate: number;
|
|
146
|
+
readonly forbiddenResultCount: number;
|
|
147
|
+
readonly failures: number;
|
|
148
|
+
readonly failedCaseIds: readonly string[];
|
|
149
|
+
readonly failureRate: number;
|
|
150
|
+
readonly exactIdentifier: {
|
|
151
|
+
readonly cases: number;
|
|
152
|
+
readonly hits: number;
|
|
153
|
+
readonly recallAtK: number;
|
|
154
|
+
};
|
|
155
|
+
readonly latencyMs: {
|
|
156
|
+
readonly p50: number;
|
|
157
|
+
readonly p95: number;
|
|
158
|
+
readonly max: number;
|
|
159
|
+
};
|
|
160
|
+
readonly caseReports: readonly SemanticRetrievalEvalCaseReport[];
|
|
161
|
+
}
|
|
162
|
+
export interface SemanticRetrievalQualityGatePolicy {
|
|
163
|
+
readonly minimumRecallAtK?: number;
|
|
164
|
+
readonly minimumMrr?: number;
|
|
165
|
+
readonly minimumNdcgAtK?: number;
|
|
166
|
+
readonly minimumExactIdentifierRecall?: number;
|
|
167
|
+
readonly maximumAbstentionFalsePositiveRate?: number;
|
|
168
|
+
readonly maximumForbiddenResults?: number;
|
|
169
|
+
readonly maximumFailureRate?: number;
|
|
170
|
+
readonly maximumP95LatencyMs?: number;
|
|
171
|
+
readonly maximumRecallAtKRegression?: number;
|
|
172
|
+
readonly maximumMrrRegression?: number;
|
|
173
|
+
readonly maximumNdcgAtKRegression?: number;
|
|
174
|
+
readonly maximumExactIdentifierRecallRegression?: number;
|
|
175
|
+
}
|
|
176
|
+
export type SemanticRetrievalQualityGateFailureCode = "minimum_recall_at_k" | "minimum_mrr" | "minimum_ndcg_at_k" | "minimum_exact_identifier_recall" | "abstention_false_positive_rate" | "forbidden_results" | "failure_rate" | "p95_latency" | "recall_at_k_regression" | "mrr_regression" | "ndcg_at_k_regression" | "exact_identifier_regression";
|
|
177
|
+
export interface SemanticRetrievalQualityGateFailure {
|
|
178
|
+
readonly code: SemanticRetrievalQualityGateFailureCode;
|
|
179
|
+
readonly actual: number;
|
|
180
|
+
readonly threshold: number;
|
|
181
|
+
readonly caseIds?: readonly string[];
|
|
182
|
+
}
|
|
183
|
+
export interface SemanticRetrievalQualityGateResult {
|
|
184
|
+
readonly passed: boolean;
|
|
185
|
+
readonly failures: readonly SemanticRetrievalQualityGateFailure[];
|
|
186
|
+
}
|
|
187
|
+
export interface TextRerankCandidate {
|
|
188
|
+
readonly id: string;
|
|
189
|
+
readonly text: string;
|
|
190
|
+
}
|
|
191
|
+
export interface TextRerankRequest {
|
|
192
|
+
readonly query: string;
|
|
193
|
+
readonly candidates: readonly TextRerankCandidate[];
|
|
194
|
+
readonly limit: number;
|
|
195
|
+
readonly signal?: AbortSignal;
|
|
196
|
+
}
|
|
197
|
+
export interface TextRerankScore {
|
|
198
|
+
readonly id: string;
|
|
199
|
+
readonly score: number;
|
|
200
|
+
}
|
|
201
|
+
export interface TextRerankResult {
|
|
202
|
+
readonly ranking: readonly TextRerankScore[];
|
|
203
|
+
readonly usage?: unknown;
|
|
204
|
+
}
|
|
205
|
+
export interface TextReranker {
|
|
206
|
+
rerank(request: TextRerankRequest): Promise<TextRerankResult>;
|
|
207
|
+
}
|
|
208
|
+
export interface TextRerankedCandidate {
|
|
209
|
+
readonly candidate: TextRerankCandidate;
|
|
210
|
+
readonly score?: number;
|
|
211
|
+
}
|
|
212
|
+
export interface TextRerankOutcome {
|
|
213
|
+
readonly ranking: readonly TextRerankedCandidate[];
|
|
214
|
+
readonly usage?: unknown;
|
|
215
|
+
readonly fallbackReason?: "reranker_invalid_output" | "reranker_timeout" | "reranker_unavailable";
|
|
112
216
|
}
|
|
113
217
|
export declare function normalizeHybridRetrievalPolicy(value?: HybridRetrievalPolicy): NormalizedHybridRetrievalPolicy;
|
|
114
|
-
export declare function runSemanticRetrievalEval(cases: readonly SemanticRetrievalEvalCase[], retrieve: (value: SemanticRetrievalEvalCase) => Promise<readonly string[]>): Promise<SemanticRetrievalEvalReport>;
|
|
218
|
+
export declare function runSemanticRetrievalEval(cases: readonly SemanticRetrievalEvalCase[], retrieve: (value: SemanticRetrievalEvalCase) => Promise<readonly string[] | SemanticRetrievalEvalObservationInput>): Promise<SemanticRetrievalEvalReport>;
|
|
219
|
+
export declare function evaluateSemanticRetrievalQualityGate(input: {
|
|
220
|
+
readonly baseline: SemanticRetrievalEvalReport;
|
|
221
|
+
readonly candidate: SemanticRetrievalEvalReport;
|
|
222
|
+
readonly policy?: SemanticRetrievalQualityGatePolicy;
|
|
223
|
+
}): SemanticRetrievalQualityGateResult;
|
|
224
|
+
export declare function rerankTextCandidates(input: {
|
|
225
|
+
readonly query: string;
|
|
226
|
+
readonly candidates: readonly TextRerankCandidate[];
|
|
227
|
+
readonly limit: number;
|
|
228
|
+
readonly timeoutMs?: number;
|
|
229
|
+
readonly failureMode?: "fallback" | "strict";
|
|
230
|
+
readonly signal?: AbortSignal;
|
|
231
|
+
}, reranker: TextReranker): Promise<TextRerankOutcome>;
|
|
115
232
|
export declare function normalizeTextEmbeddingIdentity(value: TextEmbeddingIdentity): TextEmbeddingIdentity;
|
|
116
233
|
export declare function textEmbeddingIdentitiesEqual(left: TextEmbeddingIdentity, right: TextEmbeddingIdentity): boolean;
|
|
117
234
|
export declare function assertTextEmbeddingResult(value: TextEmbeddingResult, options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-retrieval.d.ts","sourceRoot":"","sources":["../src/semantic-retrieval.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"semantic-retrieval.d.ts","sourceRoot":"","sources":["../src/semantic-retrieval.ts"],"names":[],"mappings":"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"}
|