veriquote 0.2.2 → 0.4.0

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.
Files changed (43) hide show
  1. package/CITATION.cff +2 -2
  2. package/README.md +91 -36
  3. package/dist/cli/main.js +12 -1
  4. package/dist/cli/main.js.map +1 -1
  5. package/dist/gate.d.ts +1 -1
  6. package/dist/gate.d.ts.map +1 -1
  7. package/dist/gate.js +14 -0
  8. package/dist/gate.js.map +1 -1
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/judge/decisions-judge.d.ts +72 -0
  14. package/dist/judge/decisions-judge.d.ts.map +1 -0
  15. package/dist/judge/decisions-judge.js +160 -0
  16. package/dist/judge/decisions-judge.js.map +1 -0
  17. package/dist/match/fuzzy.d.ts +10 -2
  18. package/dist/match/fuzzy.d.ts.map +1 -1
  19. package/dist/match/fuzzy.js +87 -11
  20. package/dist/match/fuzzy.js.map +1 -1
  21. package/dist/protocol/evi1.d.ts +21 -1
  22. package/dist/protocol/evi1.d.ts.map +1 -1
  23. package/dist/protocol/evi1.js +169 -28
  24. package/dist/protocol/evi1.js.map +1 -1
  25. package/dist/protocol/prompt.d.ts +6 -0
  26. package/dist/protocol/prompt.d.ts.map +1 -1
  27. package/dist/protocol/prompt.js +35 -10
  28. package/dist/protocol/prompt.js.map +1 -1
  29. package/dist/report.d.ts.map +1 -1
  30. package/dist/report.js +52 -15
  31. package/dist/report.js.map +1 -1
  32. package/dist/types.d.ts +23 -2
  33. package/dist/types.d.ts.map +1 -1
  34. package/package.json +3 -3
  35. package/src/cli/main.ts +13 -2
  36. package/src/gate.ts +16 -1
  37. package/src/index.ts +10 -0
  38. package/src/judge/decisions-judge.ts +230 -0
  39. package/src/match/fuzzy.ts +98 -11
  40. package/src/protocol/evi1.ts +174 -29
  41. package/src/protocol/prompt.ts +42 -9
  42. package/src/report.ts +53 -21
  43. package/src/types.ts +20 -2
@@ -11,14 +11,34 @@
11
11
  * c1|5|"verbatim quote from source 5"
12
12
  * END_EVI1
13
13
  *
14
+ * A (claim, source) pair may have several lines when one passage does not
15
+ * cover the whole claim. With `evidenceFirst` prompting the block comes
16
+ * before the answer instead; the parser accepts either position.
17
+ *
14
18
  * Quotes are single-line, with `\n`, `\"` and `\\` escapes.
19
+ *
20
+ * The parser is lenient about how the appendix is framed (see
21
+ * `parseEvi1Appendix`), strict about the evidence lines themselves.
15
22
  */
16
23
  import { collapseWhitespace } from '../match/normalize.js';
17
24
  export const EVI1_START = 'EVI1';
18
25
  export const EVI1_END = 'END_EVI1';
19
- const EVIDENCE_LINE = /^(c\d+)\|(\d+)\|"([\s\S]*)"$/;
26
+ const EVIDENCE_LINE = /^(c\d+)\s*\|\s*(\d+)\s*\|\s*"([\s\S]*)"$/;
20
27
  const CLAIM_MARKER = /\{c(\d+)\}/g;
21
28
  const CITATION_GROUP_BEFORE_CLAIM = /((?:\[\d+\])+)$/;
29
+ // Models and gateways garble the appendix slightly: "**EVI1**", "EVI1:",
30
+ // "EVI1 c1|2|...", a code fence around it, END_EVI11 or no END_EVI1 at all.
31
+ // The lookahead keeps a sentence about the EVI1 gene from opening an appendix.
32
+ const START_LINE = /^[\s*_`>#]*EVI1[\s*_`:]*(?=$|c\d+\s*\|)/;
33
+ const END_LINE = /^[\s*_`]*END_EVI1/;
34
+ const EVIDENCE_PREFIX = /^\s*c\d+\s*\|\s*\d+\s*\|/;
35
+ // Without END_EVI1, the appendix runs as long as lines look like evidence,
36
+ // malformed ones included (they get a warning, not the answer body).
37
+ const EVIDENCE_LIKE = /^\s*c\d+\s*\|/;
38
+ const FENCE_LINE = /^\s*```\s*\w*\s*$/;
39
+ // While streaming, the last line may be the beginning of an EVI1, evidence or END_EVI1 line.
40
+ const PARTIAL_START = /^[\s*_`>#]*(?:E(?:V(?:I(?:1[\s*_`:]*(?:c\d*)?)?)?)?)?$|^[\s*_`]*EN(?:D(?:_(?:E(?:V(?:I1?)?)?)?)?)?$|^\s*c\d*(?:\s*\|\s*\d*)?\s*$/;
41
+ const PARTIAL_MARKER = /\{(?:c\d*)?$/;
22
42
  /** Unescape an EVI1 quote payload (`\\`, `\n`, `\"`) in a single pass. */
23
43
  function unescapeQuote(s) {
24
44
  return s.replace(/\\(.)/g, (_, c) => (c === 'n' ? '\n' : c));
@@ -27,34 +47,103 @@ function unescapeQuote(s) {
27
47
  function escapeQuote(s) {
28
48
  return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\r?\n/g, '\\n');
29
49
  }
30
- function locateAppendix(lines) {
50
+ const isBlank = (line) => !line.trim();
51
+ /**
52
+ * Whether the EVI1 line at `start` really opens the appendix: the next
53
+ * non-blank line is evidence, or END_EVI1 follows somewhere.
54
+ * A heading "## EVI1" followed by prose does not.
55
+ */
56
+ function opensAppendix(lines, start) {
57
+ if (lines[start].replace(START_LINE, '').trim())
58
+ return true; // "EVI1 c1|…"
59
+ let i = start + 1;
60
+ while (i < lines.length && (isBlank(lines[i]) || FENCE_LINE.test(lines[i])))
61
+ i++;
62
+ if (EVIDENCE_PREFIX.test(lines[i] ?? ''))
63
+ return true;
64
+ return lines.slice(i).some((l) => END_LINE.test(l));
65
+ }
66
+ /**
67
+ * Start of the appendix: the last EVI1 line, or else a run of evidence lines
68
+ * that ends the text. -1 if there is none.
69
+ */
70
+ function findAppendixStart(lines) {
31
71
  // Scan from the end so answer text that merely mentions "EVI1" is ignored.
32
- for (let end = lines.length - 1; end >= 0; end--) {
33
- if (lines[end].trim() !== EVI1_END)
34
- continue;
35
- for (let start = end - 1; start >= 0; start--) {
36
- if (lines[start].trim() === EVI1_START)
37
- return { startLine: start, endLine: end };
38
- }
72
+ for (let i = lines.length - 1; i >= 0; i--) {
73
+ if (START_LINE.test(lines[i]) && opensAppendix(lines, i))
74
+ return i;
75
+ }
76
+ let i = lines.length - 1;
77
+ while (i >= 0 && (isBlank(lines[i]) || END_LINE.test(lines[i]) || FENCE_LINE.test(lines[i])))
78
+ i--;
79
+ const last = i;
80
+ while (i >= 0 && EVIDENCE_PREFIX.test(lines[i]))
81
+ i--;
82
+ return i < last ? i + 1 : -1;
83
+ }
84
+ function locateAppendix(lines) {
85
+ const start = findAppendixStart(lines);
86
+ if (start < 0)
39
87
  return null;
88
+ const headerRest = lines[start].replace(START_LINE, '');
89
+ let endLine = END_LINE.test(headerRest) ? start : -1;
90
+ for (let i = start + 1; endLine < 0 && i < lines.length; i++) {
91
+ if (END_LINE.test(lines[i]))
92
+ endLine = i;
93
+ }
94
+ let stop = endLine >= 0 ? endLine : start + 1;
95
+ if (endLine < 0) {
96
+ while (stop < lines.length && (isBlank(lines[stop]) || FENCE_LINE.test(lines[stop]) || EVIDENCE_LIKE.test(lines[stop])))
97
+ stop++;
98
+ // Blank lines before the answer that follows belong to the answer.
99
+ if (stop < lines.length)
100
+ while (stop > start + 1 && isBlank(lines[stop - 1]))
101
+ stop--;
102
+ }
103
+ const body = endLine === start ? [] : [headerRest, ...lines.slice(start + 1, stop)];
104
+ // A fence the model opened around the appendix goes with it, but not one
105
+ // that closes an earlier code block.
106
+ let cutStart = start;
107
+ let openedFence = /^\s*```/.test(lines[start]);
108
+ let before = start - 1;
109
+ while (before >= 0 && isBlank(lines[before]))
110
+ before--;
111
+ if (!openedFence && before >= 0 && FENCE_LINE.test(lines[before])) {
112
+ const fences = lines.slice(0, before + 1).filter((l) => FENCE_LINE.test(l)).length;
113
+ if (fences % 2 === 1) {
114
+ cutStart = before;
115
+ openedFence = true;
116
+ }
117
+ }
118
+ let cutEnd = endLine < 0 ? stop : endLine + 1;
119
+ if (openedFence && endLine >= 0 && !/```/.test(lines[endLine])) {
120
+ let after = cutEnd;
121
+ while (after < lines.length && isBlank(lines[after]))
122
+ after++;
123
+ if (after < lines.length && FENCE_LINE.test(lines[after]))
124
+ cutEnd = after + 1;
40
125
  }
41
- return null;
126
+ return { cutStart, cutEnd, body };
42
127
  }
43
128
  /**
44
129
  * Parse the EVI1 appendix of a raw model answer.
45
130
  * Returns the evidence items plus warnings for malformed lines;
46
- * `null` when no complete appendix is present.
131
+ * `null` when no appendix is present.
132
+ *
133
+ * Tolerant of common deviations: a decorated start line (`**EVI1**`,
134
+ * `EVI1:`, `EVI1 c1|…`), a code fence around the appendix, a missing or
135
+ * garbled `END_EVI1`, and a missing `EVI1` line when the answer ends in
136
+ * evidence lines.
47
137
  */
48
138
  export function parseEvi1Appendix(answer) {
49
- const lines = String(answer).split('\n');
50
- const loc = locateAppendix(lines);
139
+ const loc = locateAppendix(String(answer).split('\n'));
51
140
  if (!loc)
52
141
  return null;
53
142
  const items = [];
54
143
  const warnings = [];
55
- for (let i = loc.startLine + 1; i < loc.endLine; i++) {
56
- const line = lines[i].trim();
57
- if (!line)
144
+ for (const raw of loc.body) {
145
+ const line = raw.trim();
146
+ if (!line || FENCE_LINE.test(line))
58
147
  continue;
59
148
  const m = line.match(EVIDENCE_LINE);
60
149
  if (!m) {
@@ -70,17 +159,52 @@ export function parseEvi1Appendix(answer) {
70
159
  }
71
160
  return { items, warnings };
72
161
  }
162
+ function cutAppendix(lines, loc) {
163
+ const head = lines.slice(0, loc.cutStart);
164
+ const tail = lines.slice(loc.cutEnd);
165
+ // An evidence-first block leaves blank lines before the answer.
166
+ if (head.every(isBlank)) {
167
+ head.length = 0;
168
+ while (tail.length && isBlank(tail[0]))
169
+ tail.shift();
170
+ }
171
+ return head.concat(tail).join('\n').trimEnd();
172
+ }
73
173
  /** Remove the EVI1 appendix from a raw answer; returns the answer body. */
74
174
  export function stripEvi1Appendix(answer) {
75
175
  const lines = String(answer).split('\n');
76
176
  const loc = locateAppendix(lines);
77
- if (!loc)
78
- return answer;
79
- return lines
80
- .slice(0, loc.startLine)
81
- .concat(lines.slice(loc.endLine + 1))
82
- .join('\n')
83
- .trimEnd();
177
+ return loc ? cutAppendix(lines, loc) : answer;
178
+ }
179
+ /** Whether the last line may be the beginning of an appendix (but not a fence closing a code block). */
180
+ function isPartialStart(lines) {
181
+ const last = lines[lines.length - 1];
182
+ if (isBlank(last) || !PARTIAL_START.test(last))
183
+ return false;
184
+ return !/```/.test(last) || lines.filter((l) => /^\s*```/.test(l)).length % 2 === 1;
185
+ }
186
+ /**
187
+ * The answer as a reader should see it, also while it is still streaming:
188
+ * the appendix (complete or not) is cut, as is a last line that may be the
189
+ * beginning of one (`E`, `EV`, `EVI`, `EVI1`, `c1|…`), and all `{cX}`
190
+ * markers are removed, including a half-streamed `{c…` at the end.
191
+ * `[n]` citation markers are kept.
192
+ */
193
+ export function stripForDisplay(text) {
194
+ let lines = String(text).split('\n');
195
+ const popBlank = () => {
196
+ while (lines.length && isBlank(lines[lines.length - 1]))
197
+ lines.pop();
198
+ };
199
+ popBlank();
200
+ while (lines.length && isPartialStart(lines)) {
201
+ lines.pop();
202
+ popBlank();
203
+ }
204
+ const loc = locateAppendix(lines);
205
+ if (loc)
206
+ lines = cutAppendix(lines, loc).split('\n');
207
+ return stripClaimMarkers(lines.join('\n').replace(PARTIAL_MARKER, '')).trimEnd();
84
208
  }
85
209
  /** Serialize evidence items into an EVI1 appendix block. */
86
210
  export function serializeEvi1Appendix(items) {
@@ -150,21 +274,38 @@ export function parseAnswer(answer) {
150
274
  warnings.push(...appendix.warnings);
151
275
  const body = stripEvi1Appendix(answer);
152
276
  const { claims, warnings: claimWarnings } = extractClaims(body);
153
- warnings.push(...claimWarnings);
277
+ // A claim marker without its [n] group still names its sources in the
278
+ // appendix; take them from there instead of losing the claim's evidence.
279
+ const noGroup = new Set();
280
+ for (const c of claims) {
281
+ if (c.sourceIndexes.length)
282
+ continue;
283
+ const fromAppendix = [...new Set(evidence.filter((e) => e.claimId === c.id).map((e) => e.sourceIndex))];
284
+ if (!fromAppendix.length)
285
+ continue;
286
+ c.sourceIndexes = fromAppendix;
287
+ noGroup.add(`Claim ${c.id}: no citation group directly before marker.`);
288
+ }
289
+ warnings.push(...claimWarnings.map((w) => noGroup.has(w) ? w.replace(/\.$/, '; sources taken from the EVI1 appendix.') : w));
154
290
  const cited = new Set(claims.flatMap((c) => c.sourceIndexes.map((n) => `${c.id}|${n}`)));
291
+ // Several lines for one (claim, source) pair are allowed: a claim may need
292
+ // two passages of the same source. Only repeated quotes are dropped.
155
293
  const evidenced = new Set();
294
+ const seenLines = new Set();
156
295
  const dedupedEvidence = [];
157
296
  for (const it of evidence) {
158
297
  const key = `${it.claimId}|${it.sourceIndex}`;
159
- if (evidenced.has(key)) {
160
- warnings.push(`EVI1: duplicate evidence for ${key}; keeping first occurrence.`);
298
+ const line = `${key}|${collapseWhitespace(it.quote)}`;
299
+ if (seenLines.has(line)) {
300
+ warnings.push(`EVI1: repeated quote for ${key}; keeping first occurrence.`);
161
301
  continue;
162
302
  }
163
- evidenced.add(key);
303
+ seenLines.add(line);
164
304
  dedupedEvidence.push(it);
165
- if (!cited.has(key)) {
305
+ if (!evidenced.has(key) && !cited.has(key)) {
166
306
  warnings.push(`EVI1: evidence for ${key} has no matching citation in the answer.`);
167
307
  }
308
+ evidenced.add(key);
168
309
  }
169
310
  for (const key of cited) {
170
311
  if (!evidenced.has(key)) {
@@ -1 +1 @@
1
- {"version":3,"file":"evi1.js","sourceRoot":"","sources":["../../src/protocol/evi1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evi1.js","sourceRoot":"","sources":["../../src/protocol/evi1.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,12 @@ export interface CitationPromptOptions {
12
12
  quoteLengthRange?: [number, number];
13
13
  /** Minimum quote length in characters (with stated exceptions). Default 60. */
14
14
  minQuoteLength?: number;
15
+ /**
16
+ * Put the EVI1 block before the answer: the model selects its passages
17
+ * first, then writes only what they support. The parser accepts either
18
+ * position; a streaming client shows nothing until END_EVI1. Default false.
19
+ */
20
+ evidenceFirst?: boolean;
15
21
  }
16
22
  /** Build the EVI1 citation instruction block for the answering model. */
17
23
  export declare function buildCitationInstructions(options?: CitationPromptOptions): string;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/protocol/prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAgFrF"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/protocol/prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA2GrF"}
@@ -5,7 +5,22 @@
5
5
  */
6
6
  /** Build the EVI1 citation instruction block for the answering model. */
7
7
  export function buildCitationInstructions(options = {}) {
8
- const { maxCitedClaims = 15, maxCitationsPerClaim = 2, quoteLengthRange = [80, 240], minQuoteLength = 60, } = options;
8
+ const { maxCitedClaims = 15, maxCitationsPerClaim = 2, quoteLengthRange = [80, 240], minQuoteLength = 60, evidenceFirst = false, } = options;
9
+ const appendixIntro = evidenceFirst
10
+ ? `Before you write the answer, output the evidence block. Select the passages
11
+ you will rely on first, one line per planned claim and source, then write the
12
+ answer so that every cited sentence states only what its lines support.`
13
+ : 'After you finish the answer, append an appendix:';
14
+ const afterBlock = evidenceFirst
15
+ ? '- After END_EVI1, write the user-facing answer. The claim ids {cX} in the answer must be the ones used in the block.'
16
+ : '- Do NOT output anything after END_EVI1.';
17
+ const important = evidenceFirst
18
+ ? `- The user-facing answer starts AFTER END_EVI1. Nothing but the block comes before it.
19
+ - The block is required only when you use citations. If you use no
20
+ citations, do NOT output EVI1/END_EVI1.`
21
+ : `- The user-facing answer must end BEFORE the EVI1 appendix starts.
22
+ - The appendix is required only when you used citations. If you used no
23
+ citations, do NOT output EVI1/END_EVI1.`;
9
24
  return `
10
25
  [CITATION BUDGET]
11
26
  - Keep citations sparse. Only cite new, load-bearing information.
@@ -32,17 +47,20 @@ export function buildCitationInstructions(options = {}) {
32
47
  Example: "...water expands when freezing.[2][5]{c1}"
33
48
  Bad: "...freezing.[2] {c1}"
34
49
  Bad: "...freezing.[2].{c1}"
35
- - Every sentence OR bullet that contains citations MUST end with exactly ONE claim marker {cX}.
50
+ - Every sentence OR bullet that contains citations MUST end with exactly ONE claim marker {cX},
51
+ directly after its [n] group. Never write {cX} without the [n] group, even though the
52
+ appendix names the source as well.
36
53
  - X starts at 1 and increases by 1 for each new cited sentence/bullet in THIS answer.
37
54
  - Do NOT place {cX} anywhere else. Uncited sentences get no claim marker.
38
55
 
39
- [QUOTE-BASED EVIDENCE APPENDIX (MANDATORY)]
40
- After you finish the answer, append an appendix:
56
+ [QUOTE-BASED EVIDENCE ${evidenceFirst ? 'BLOCK' : 'APPENDIX'} (MANDATORY)]
57
+ ${appendixIntro}
41
58
  - Start with a line containing exactly: EVI1
42
59
  - Then output one line per (claim, source) pair in this exact format:
43
60
  cX|n|"QUOTE"
61
+ If one passage does not cover the claim, add further lines for the same pair.
44
62
  - End with a line containing exactly: END_EVI1
45
- - Do NOT output anything after END_EVI1.
63
+ ${afterBlock}
46
64
  - Do NOT wrap EVI1..END_EVI1 in code fences or markdown.
47
65
 
48
66
  [COMPLETENESS RULES (MANDATORY)]
@@ -53,10 +71,19 @@ After you finish the answer, append an appendix:
53
71
  - If you cannot provide a verbatim quote for a citation, REMOVE that citation
54
72
  from the answer. Never leave a citation unverified.
55
73
 
74
+ [SUFFICIENCY RULES (MANDATORY)]
75
+ - The quotes of a cited sentence must together contain EVERY detail it states:
76
+ each number, population, time frame, place, condition, comparison and hedge.
77
+ - If one passage does not cover everything, add another line for the same claim
78
+ (same or other cited source). Otherwise remove the unquoted detail from the
79
+ sentence. Never add detail that no quote contains.
80
+
56
81
  Rules for QUOTE:
57
82
  - QUOTE must be copied verbatim from the provided source TEXT (not paraphrased).
58
- - QUOTE must be sufficient to support the claim; prefer the shortest quote that
59
- still supports it (typically ${quoteLengthRange[0]}-${quoteLengthRange[1]} characters).
83
+ - Prefer the shortest quote that still covers its part of the claim
84
+ (typically ${quoteLengthRange[0]}-${quoteLengthRange[1]} characters).
85
+ - Copy one contiguous passage per line. Do NOT shorten a quote with "..." and do
86
+ NOT join separate passages into one quote; write each passage on its own line.
60
87
  - QUOTE must be at least ${minQuoteLength} characters unless it contains a numeric result or is
61
88
  a complete standalone sentence that uniquely supports the claim.
62
89
  - QUOTE must be a single line: escape newlines as \\n and double quotes as \\".
@@ -74,9 +101,7 @@ Rules for QUOTE:
74
101
  claim; when only conclusions are visible, use cautious language.
75
102
 
76
103
  IMPORTANT:
77
- - The user-facing answer must end BEFORE the EVI1 appendix starts.
78
- - The appendix is required only when you used citations. If you used no
79
- citations, do NOT output EVI1/END_EVI1.
104
+ ${important}
80
105
  `.trim();
81
106
  }
82
107
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/protocol/prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,yEAAyE;AACzE,MAAM,UAAU,yBAAyB,CAAC,UAAiC,EAAE;IAC3E,MAAM,EACJ,cAAc,GAAG,EAAE,EACnB,oBAAoB,GAAG,CAAC,EACxB,gBAAgB,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAC5B,cAAc,GAAG,EAAE,GACpB,GAAG,OAAO,CAAC;IAEZ,OAAO;;;qCAG4B,cAAc;iDACF,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA8CpC,gBAAgB,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;2BAChD,cAAc;;;;;;;;;;;;;;;;;;;;CAoBxC,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/protocol/prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,yEAAyE;AACzE,MAAM,UAAU,yBAAyB,CAAC,UAAiC,EAAE;IAC3E,MAAM,EACJ,cAAc,GAAG,EAAE,EACnB,oBAAoB,GAAG,CAAC,EACxB,gBAAgB,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAC5B,cAAc,GAAG,EAAE,EACnB,aAAa,GAAG,KAAK,GACtB,GAAG,OAAO,CAAC;IAEZ,MAAM,aAAa,GAAG,aAAa;QACjC,CAAC,CAAC;;wEAEkE;QACpE,CAAC,CAAC,kDAAkD,CAAC;IACvD,MAAM,UAAU,GAAG,aAAa;QAC9B,CAAC,CAAC,sHAAsH;QACxH,CAAC,CAAC,0CAA0C,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa;QAC7B,CAAC,CAAC;;0CAEoC;QACtC,CAAC,CAAC;;0CAEoC,CAAC;IAEzC,OAAO;;;qCAG4B,cAAc;iDACF,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4B7C,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;EAC1D,aAAa;;;;;;EAMb,UAAU;;;;;;;;;;;;;;;;;;;;;eAqBG,gBAAgB,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;;;2BAG9B,cAAc;;;;;;;;;;;;;;;;;EAiBvC,SAAS;CACV,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAGV,eAAe,EAEf,cAAc,EACd,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,yEAAyE;IACzE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,6CAA6C;AAC7C,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2EtF"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAGV,eAAe,EAEf,cAAc,EACd,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,yEAAyE;IACzE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,6CAA6C;AAC7C,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0FtF"}
package/dist/report.js CHANGED
@@ -12,32 +12,52 @@ export async function verifyAnswer(options) {
12
12
  const parsed = parseAnswer(answer);
13
13
  const warnings = [...parsed.warnings];
14
14
  const claimById = new Map(parsed.claims.map((c) => [c.id, c]));
15
- const citations = [];
15
+ // One citation per (claim, source) pair; a pair may carry several quotes.
16
+ const pairs = new Map();
16
17
  for (const item of parsed.evidence) {
17
- const claim = claimById.get(item.claimId);
18
- const source = sources[item.sourceIndex - 1];
18
+ const key = `${item.claimId}|${item.sourceIndex}`;
19
+ const pair = pairs.get(key) ?? { claimId: item.claimId, sourceIndex: item.sourceIndex, quotes: [] };
20
+ pair.quotes.push(item.quote);
21
+ pairs.set(key, pair);
22
+ }
23
+ const citations = [];
24
+ for (const [key, pair] of pairs) {
25
+ const source = sources[pair.sourceIndex - 1];
19
26
  if (!source) {
20
- warnings.push(`EVI1: evidence ${item.claimId}|${item.sourceIndex} references a source that was not provided.`);
27
+ warnings.push(`EVI1: evidence ${key} references a source that was not provided.`);
21
28
  continue;
22
29
  }
23
- const textMatch = matchQuoteAgainstSource(item.quote, source, match);
30
+ const parts = pair.quotes.map((quote) => ({ quote, textMatch: matchQuoteAgainstSource(quote, source, match) }));
31
+ const textMatch = combineMatches(parts.map((p) => p.textMatch));
32
+ for (const cue of textMatch.omittedCues ?? []) {
33
+ warnings.push(`Citation ${key}: the ellipsis in the quote leaves out "${cue}".`);
34
+ }
24
35
  citations.push({
25
- claimId: item.claimId,
26
- sourceIndex: item.sourceIndex,
27
- claimText: claim?.text ?? '',
28
- quote: item.quote,
36
+ claimId: pair.claimId,
37
+ sourceIndex: pair.sourceIndex,
38
+ claimText: claimById.get(pair.claimId)?.text ?? '',
39
+ quote: pair.quotes.join(' […] '),
29
40
  textMatch,
41
+ ...(parts.length > 1 ? { parts } : {}),
30
42
  score: textMatch.score,
31
43
  });
32
44
  }
33
45
  if (judge) {
34
46
  const judgeable = citations.filter((c) => c.claimText && c.quote);
35
- const inputs = judgeable.map((c) => ({
36
- id: `${c.claimId}|${c.sourceIndex}`,
37
- claim: c.claimText,
38
- quote: c.quote,
39
- context: contextWindow(sources[c.sourceIndex - 1], c.textMatch, contextWindowChars),
40
- }));
47
+ const inputs = judgeable.map((c) => {
48
+ const source = sources[c.sourceIndex - 1];
49
+ const parts = c.parts ?? [{ quote: c.quote, textMatch: c.textMatch }];
50
+ return {
51
+ id: `${c.claimId}|${c.sourceIndex}`,
52
+ claim: c.claimText,
53
+ // An ellipsis must not hide what it left out (a "not", a qualifier):
54
+ // the judge rates the passage as the source has it.
55
+ quote: parts
56
+ .map((p) => (p.textMatch.method === 'elided' ? matchedText(source, p.textMatch) ?? p.quote : p.quote))
57
+ .join(' […] '),
58
+ context: parts.map((p) => contextWindow(source, p.textMatch, contextWindowChars)).join(' […] '),
59
+ };
60
+ });
41
61
  const results = await judge.judge(inputs, { signal });
42
62
  if (results.length !== inputs.length) {
43
63
  warnings.push(`Judge returned ${results.length} results for ${inputs.length} items; missing items marked as errors.`);
@@ -68,6 +88,23 @@ export async function verifyAnswer(options) {
68
88
  summary: summarize(citations, Boolean(judge)),
69
89
  };
70
90
  }
91
+ /** Several quotes for one pair count as their weakest match, carrying every cue. */
92
+ function combineMatches(matches) {
93
+ if (matches.length === 1)
94
+ return matches[0];
95
+ const weakest = matches.reduce((a, b) => (b.score < a.score ? b : a));
96
+ const cues = [...new Set(matches.flatMap((m) => m.omittedCues ?? []))];
97
+ const { omittedCues: _, ...rest } = weakest;
98
+ return cues.length ? { ...rest, omittedCues: cues } : rest;
99
+ }
100
+ /** The matched region of the source field, if its offsets are known. */
101
+ function matchedText(source, m) {
102
+ if (!source || m.start === undefined || m.end === undefined)
103
+ return undefined;
104
+ const extra = /^extraTexts\[(\d+)\]$/.exec(m.field);
105
+ const text = extra ? source.extraTexts?.[Number(extra[1])] : source.text;
106
+ return text?.slice(m.start, m.end);
107
+ }
71
108
  /** Source text around the matched region, for judge disambiguation. */
72
109
  function contextWindow(source, matchResult, windowChars) {
73
110
  const text = source?.text ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -52,6 +52,13 @@ export type MatchMethod =
52
52
  'exact'
53
53
  /** Substring after Unicode/typography normalization and case folding. */
54
54
  | 'normalized'
55
+ /**
56
+ * The quote omits text, marked with an ellipsis ("…", "...", "[…]"): every
57
+ * fragment occurs literally, in order and close together. `start`/`end`
58
+ * cover the whole passage, omitted text included, and that passage is what
59
+ * the judge sees.
60
+ */
61
+ | 'elided'
55
62
  /** Best fuzzy window by character-trigram Dice similarity. */
56
63
  | 'fuzzy'
57
64
  /** No window reached the fuzzy score threshold. */
@@ -60,8 +67,9 @@ export type MatchMethod =
60
67
  export interface QuoteMatch {
61
68
  method: MatchMethod;
62
69
  /**
63
- * Similarity in [0, 1]. `1` only for exact/normalized hits; fuzzy scores
64
- * are capped at 0.99 so a perfect score always implies a literal hit.
70
+ * Similarity in [0, 1]. `1` only for exact/normalized hits; elided and
71
+ * fuzzy scores are capped at 0.99 so a perfect score always implies a
72
+ * literal hit.
65
73
  */
66
74
  score: number;
67
75
  /** Start offset of the matched region in the original source field, if known. */
@@ -70,6 +78,12 @@ export interface QuoteMatch {
70
78
  end?: number;
71
79
  /** Which source field matched: `"text"` or `"extraTexts[i]"`. */
72
80
  field: string;
81
+ /**
82
+ * `elided` only: words in the omitted text that can reverse or limit a
83
+ * statement ("not", "except", "only", "however", …). A hint, not a verdict:
84
+ * the judge sees the full passage and decides.
85
+ */
86
+ omittedCues?: string[];
73
87
  }
74
88
  /** Qualitative entailment classes produced by the LLM judge. */
75
89
  export type EntailmentClass = 'entailed' | 'partially_entailed' | 'overstated' | 'insufficient' | 'contradicted';
@@ -108,8 +122,15 @@ export interface CitationVerification {
108
122
  claimId: string;
109
123
  sourceIndex: number;
110
124
  claimText: string;
125
+ /** The quote; several quotes for the same (claim, source) pair are joined with " […] ". */
111
126
  quote: string;
127
+ /** The match of the quote; with several quotes, the weakest one (cues of all of them). */
112
128
  textMatch: QuoteMatch;
129
+ /** One entry per quote, present only when the pair has more than one. */
130
+ parts?: {
131
+ quote: string;
132
+ textMatch: QuoteMatch;
133
+ }[];
113
134
  /** Absent when verification ran without a judge. */
114
135
  entailment?: EntailmentResult;
115
136
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,WAAW,KAAK;IACpB,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,iDAAiD;IACjD,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,MAAM,WAAW;AACrB,sDAAsD;AACpD,OAAO;AACT,yEAAyE;GACvE,YAAY;AACd;;;;;GAKG;GACD,QAAQ;AACV,8DAA8D;GAC5D,OAAO;AACT,mDAAmD;GACjD,WAAW,CAAC;AAEhB,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,oBAAoB,GACpB,YAAY,GACZ,cAAc,GACd,cAAc,CAAC;AAEnB,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;IACjC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CAClG;AAED,qEAAqE;AACrE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,SAAS,EAAE,UAAU,CAAC;IACtB,yEAAyE;IACzE,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IACnD,oDAAoD;IACpD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wDAAwD;IACxD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veriquote",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "description": "Deterministic + semantic verification of quote-grounded LLM citations (EVI1 protocol): fuzzy verbatim-quote matching and an LLM entailment judge for transparent, per-claim hallucination detection.",
5
5
  "keywords": [
6
6
  "llm",
@@ -20,7 +20,7 @@
20
20
  "author": "NavigNine (https://navignine.com)",
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "https://github.com/rickintoplace/veriquote.git"
23
+ "url": "git+https://github.com/rickintoplace/veriquote.git"
24
24
  },
25
25
  "homepage": "https://github.com/rickintoplace/veriquote#readme",
26
26
  "bugs": {
@@ -30,7 +30,7 @@
30
30
  "main": "./dist/index.js",
31
31
  "types": "./dist/index.d.ts",
32
32
  "bin": {
33
- "veriquote": "./bin/veriquote.mjs"
33
+ "veriquote": "bin/veriquote.mjs"
34
34
  },
35
35
  "exports": {
36
36
  ".": {