@askalf/deepdive 0.4.0 → 0.6.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.
- package/README.md +33 -2
- package/dist/agent.d.ts +24 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +32 -3
- package/dist/agent.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +95 -8
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/plan.d.ts +4 -3
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +8 -4
- package/dist/plan.js.map +1 -1
- package/dist/pricing.d.ts +26 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +118 -0
- package/dist/pricing.js.map +1 -0
- package/dist/synthesize.d.ts +2 -1
- package/dist/synthesize.d.ts.map +1 -1
- package/dist/synthesize.js +9 -5
- package/dist/synthesize.js.map +1 -1
- package/dist/verify.d.ts +26 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +174 -0
- package/dist/verify.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -120,6 +120,33 @@ Bare `--deep` = 2 extra rounds. `--deep=5` = up to 5. `--deep=0` is explicit sin
|
|
|
120
120
|
|
|
121
121
|
---
|
|
122
122
|
|
|
123
|
+
## Citation verification
|
|
124
|
+
|
|
125
|
+
After every synthesis, deepdive checks each `[N]` citation in the answer against the extracted text of source N. This is a cheap, deterministic, lexical pass — no second LLM call — that catches the dominant failure mode of cited-answer tools: the model writing a confident sentence with a `[3]` whose source 3 doesn't actually contain the claim.
|
|
126
|
+
|
|
127
|
+
For each sentence with a citation, the verifier tokenizes the claim into content tokens (lowercased, stop-words dropped, numbers preserved) and scores recall against each cited source's tokens. A multi-cite sentence like `"X happened in 2024 [1][3]"` is supported only when **every** cited source clears the threshold — a bogus `[3]` buried in an otherwise-true sentence is still flagged.
|
|
128
|
+
|
|
129
|
+
When something fails, deepdive prints a small `## Citation health` footer at the end of the answer and surfaces the offending sentences in `--verbose`. Clean runs stay clean: no footer, no noise. Use `--strict-cites` in scripts to fail the run with a non-zero exit code.
|
|
130
|
+
|
|
131
|
+
What this is not: a semantic judge. Lexical recall flags hallucinated names, numbers, and dates with high precision, but a paraphrased-but-truthful sentence can score below threshold and a topic-aligned-but-incorrect sentence can score above. Treat the report as a sanity check and a reading guide, not a proof of correctness. To dial the strictness, raise `--cite-min-recall` above the default `0.4`; to disable entirely, pass `--no-verify-cites`.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Cost telemetry
|
|
136
|
+
|
|
137
|
+
Every run prints a one-line summary on stderr at the end:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
cost · ~$0.0085 · 412 in / 234 out · 4 LLM calls · claude-sonnet-4-6
|
|
141
|
+
(≈ at API list price; $0 on Claude Max via dario)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Token counts come straight from the Anthropic API responses. The dollar amount is computed against a small built-in price table covering the headline Claude models — see `src/pricing.ts` for current values; verify against [docs.anthropic.com/en/docs/about-claude/pricing](https://docs.anthropic.com/en/docs/about-claude/pricing) before relying on it for billing decisions. Unknown models render as `$?`; tokens are always shown.
|
|
145
|
+
|
|
146
|
+
The "$0 on Claude Max via dario" hint only appears when `--base-url` matches dario's default port (`http://localhost:3456`) — pointing at a different endpoint suppresses it automatically. Self-hosted or unfamiliar models can plug in their own pricing via `DEEPDIVE_PRICE_INPUT_PER_MTOK` and `DEEPDIVE_PRICE_OUTPUT_PER_MTOK` (per million tokens). Suppress the line entirely with `--no-cost` or `DEEPDIVE_NO_COST=1`. The same numbers also appear in `--json` output as `cost` and `usage.{llm,estimatedCostUsd}` for piping into your own dashboards.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
123
150
|
## Common flags
|
|
124
151
|
|
|
125
152
|
Run `deepdive --help` for the full list. The ones you'll reach for:
|
|
@@ -131,9 +158,13 @@ Run `deepdive --help` for the full list. The ones you'll reach for:
|
|
|
131
158
|
| `--search=<adapter>` | `duckduckgo` | `searxng` for privacy, `brave` for quality, `tavily` or `exa` for research-tuned results. |
|
|
132
159
|
| `--max-sources=<n>` | `12` per round | Upper bound. Deep mode accumulates across rounds, capped each round. |
|
|
133
160
|
| `--concurrency=<n>` | `4` | Parallel fetches. Bump on a fast connection. |
|
|
134
|
-
| `--
|
|
161
|
+
| `--strict-cites` | off | Exit non-zero if any citation in the answer fails lexical verification. |
|
|
162
|
+
| `--cite-min-recall=<0..1>` | `0.4` | Citation-support threshold. Lower = more permissive. |
|
|
163
|
+
| `--no-verify-cites` | off | Skip the citation-verification pass entirely. |
|
|
164
|
+
| `--no-cost` | off | Suppress the end-of-run cost summary on stderr. |
|
|
165
|
+
| `--json` | markdown | Emit `{question, plan, rounds, sources, answer, verification, cost, usage}` for piping. |
|
|
135
166
|
| `--out=<path>` | — | Save to file. |
|
|
136
|
-
| `--verbose`, `-v` | — | Stream plan / search / fetch / critique events to stderr. |
|
|
167
|
+
| `--verbose`, `-v` | — | Stream plan / search / fetch / critique / verify events to stderr. |
|
|
137
168
|
|
|
138
169
|
Every flag mirrors a `DEEPDIVE_*` env var. CLI flags win over env.
|
|
139
170
|
|
package/dist/agent.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { SearchAdapter } from "./search.js";
|
|
|
3
3
|
import { type Plan, type Critique } from "./plan.js";
|
|
4
4
|
import { type BrowserOptions, type FetchedPage } from "./browser.js";
|
|
5
5
|
import { type Source } from "./citations.js";
|
|
6
|
+
import { type VerificationReport } from "./verify.js";
|
|
7
|
+
import { type CostEstimate } from "./pricing.js";
|
|
6
8
|
import type { PageCache } from "./cache.js";
|
|
7
9
|
import { type RobotsCache } from "./robots.js";
|
|
8
10
|
export interface BrowserLike {
|
|
@@ -24,6 +26,9 @@ export interface AgentConfig {
|
|
|
24
26
|
respectRobots?: boolean;
|
|
25
27
|
robotsUserAgent?: string;
|
|
26
28
|
robotsCache?: RobotsCache;
|
|
29
|
+
verifyCitations?: boolean;
|
|
30
|
+
citeMinRecall?: number;
|
|
31
|
+
env?: Record<string, string | undefined>;
|
|
27
32
|
onEvent?: (event: AgentEvent) => void;
|
|
28
33
|
onSynthesizeToken?: (chunk: string, round: number) => void;
|
|
29
34
|
}
|
|
@@ -73,6 +78,15 @@ export type AgentEvent = {
|
|
|
73
78
|
type: "critique.done";
|
|
74
79
|
round: number;
|
|
75
80
|
critique: Critique;
|
|
81
|
+
} | {
|
|
82
|
+
type: "verify.done";
|
|
83
|
+
report: VerificationReport;
|
|
84
|
+
} | {
|
|
85
|
+
type: "llm.call";
|
|
86
|
+
phase: "plan" | "synth" | "critique";
|
|
87
|
+
round: number;
|
|
88
|
+
inputTokens: number;
|
|
89
|
+
outputTokens: number;
|
|
76
90
|
};
|
|
77
91
|
export interface RoundTrace {
|
|
78
92
|
round: number;
|
|
@@ -89,12 +103,22 @@ export interface AgentResult {
|
|
|
89
103
|
answer: string;
|
|
90
104
|
markdown: string;
|
|
91
105
|
rounds: RoundTrace[];
|
|
106
|
+
verification?: VerificationReport;
|
|
107
|
+
cost: CostEstimate;
|
|
92
108
|
usage: {
|
|
93
109
|
queries: number;
|
|
94
110
|
fetched: number;
|
|
95
111
|
kept: number;
|
|
96
112
|
rounds: number;
|
|
97
113
|
cacheHits: number;
|
|
114
|
+
citationsTotal: number;
|
|
115
|
+
citationsSupported: number;
|
|
116
|
+
llm: {
|
|
117
|
+
inputTokens: number;
|
|
118
|
+
outputTokens: number;
|
|
119
|
+
calls: number;
|
|
120
|
+
};
|
|
121
|
+
estimatedCostUsd: number;
|
|
98
122
|
};
|
|
99
123
|
}
|
|
100
124
|
export declare function runAgent(question: string, config: AgentConfig, signal?: AbortSignal): Promise<AgentResult>;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -13,11 +13,26 @@ import { BrowserSession } from "./browser.js";
|
|
|
13
13
|
import { extractContent } from "./extract.js";
|
|
14
14
|
import { buildSourceTable, renderAnswerMarkdown } from "./citations.js";
|
|
15
15
|
import { synthesize } from "./synthesize.js";
|
|
16
|
+
import { verifyCitations as runVerify, DEFAULT_CITE_MIN_RECALL, } from "./verify.js";
|
|
17
|
+
import { estimateCost } from "./pricing.js";
|
|
16
18
|
import { runConcurrent } from "./concurrency.js";
|
|
17
19
|
import { canFetch, DEFAULT_USER_AGENT, } from "./robots.js";
|
|
18
20
|
export async function runAgent(question, config, signal) {
|
|
21
|
+
const llmTotals = { inputTokens: 0, outputTokens: 0, calls: 0 };
|
|
22
|
+
const usageSinkFor = (phase, round) => (u) => {
|
|
23
|
+
llmTotals.inputTokens += u.input_tokens ?? 0;
|
|
24
|
+
llmTotals.outputTokens += u.output_tokens ?? 0;
|
|
25
|
+
llmTotals.calls += 1;
|
|
26
|
+
emit(config, {
|
|
27
|
+
type: "llm.call",
|
|
28
|
+
phase,
|
|
29
|
+
round,
|
|
30
|
+
inputTokens: u.input_tokens ?? 0,
|
|
31
|
+
outputTokens: u.output_tokens ?? 0,
|
|
32
|
+
});
|
|
33
|
+
};
|
|
19
34
|
emit(config, { type: "plan.start", question });
|
|
20
|
-
const plan = await planQueries(question, config.llm, signal);
|
|
35
|
+
const plan = await planQueries(question, config.llm, signal, usageSinkFor("plan", 0));
|
|
21
36
|
emit(config, { type: "plan.done", plan });
|
|
22
37
|
const seenUrls = new Set();
|
|
23
38
|
const allCandidates = [];
|
|
@@ -93,7 +108,7 @@ export async function runAgent(question, config, signal) {
|
|
|
93
108
|
const tokenSink = config.onSynthesizeToken
|
|
94
109
|
? (chunk) => config.onSynthesizeToken(chunk, round)
|
|
95
110
|
: undefined;
|
|
96
|
-
answer = await synthesize(question, keptSources, config.llm, signal, tokenSink);
|
|
111
|
+
answer = await synthesize(question, keptSources, config.llm, signal, tokenSink, usageSinkFor("synth", round));
|
|
97
112
|
emit(config, { type: "synthesize.done", round });
|
|
98
113
|
const roundTrace = {
|
|
99
114
|
round,
|
|
@@ -105,7 +120,7 @@ export async function runAgent(question, config, signal) {
|
|
|
105
120
|
const isLastPossibleRound = round === maxRoundsTotal - 1;
|
|
106
121
|
if (!isLastPossibleRound && keptSources.length < config.maxSources) {
|
|
107
122
|
emit(config, { type: "critique.start", round });
|
|
108
|
-
const crit = await critique(question, answer, allQueries, config.llm, signal);
|
|
123
|
+
const crit = await critique(question, answer, allQueries, config.llm, signal, usageSinkFor("critique", round));
|
|
109
124
|
emit(config, { type: "critique.done", round, critique: crit });
|
|
110
125
|
roundTrace.critique = crit;
|
|
111
126
|
rounds.push(roundTrace);
|
|
@@ -129,6 +144,14 @@ export async function runAgent(question, config, signal) {
|
|
|
129
144
|
keptSources[i].id = sourceTable[i].id;
|
|
130
145
|
}
|
|
131
146
|
const markdown = renderAnswerMarkdown(question, answer, keptSources);
|
|
147
|
+
let verification;
|
|
148
|
+
if (config.verifyCitations !== false && answer) {
|
|
149
|
+
verification = runVerify(answer, keptSources, {
|
|
150
|
+
threshold: config.citeMinRecall ?? DEFAULT_CITE_MIN_RECALL,
|
|
151
|
+
});
|
|
152
|
+
emit(config, { type: "verify.done", report: verification });
|
|
153
|
+
}
|
|
154
|
+
const cost = estimateCost(llmTotals, config.llm.model, config.env);
|
|
132
155
|
return {
|
|
133
156
|
question,
|
|
134
157
|
plan,
|
|
@@ -136,12 +159,18 @@ export async function runAgent(question, config, signal) {
|
|
|
136
159
|
answer,
|
|
137
160
|
markdown,
|
|
138
161
|
rounds,
|
|
162
|
+
verification,
|
|
163
|
+
cost,
|
|
139
164
|
usage: {
|
|
140
165
|
queries: allQueries.length,
|
|
141
166
|
fetched: rounds.reduce((sum, r) => sum + r.fetched, 0),
|
|
142
167
|
kept: keptSources.length,
|
|
143
168
|
rounds: rounds.length,
|
|
144
169
|
cacheHits: config.cache?.hits ?? 0,
|
|
170
|
+
citationsTotal: verification?.totalCitations ?? 0,
|
|
171
|
+
citationsSupported: verification?.supportedCitations ?? 0,
|
|
172
|
+
llm: { ...llmTotals },
|
|
173
|
+
estimatedCostUsd: cost.amountUsd,
|
|
145
174
|
},
|
|
146
175
|
};
|
|
147
176
|
}
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,uDAAuD;AACvD,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAI/E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAA4B,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAe,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { type CLIFlags } from "./config.js";
|
|
3
|
+
import type { VerificationReport } from "./verify.js";
|
|
4
|
+
import { type CostEstimate } from "./pricing.js";
|
|
3
5
|
interface ParsedArgs {
|
|
4
6
|
question?: string;
|
|
5
7
|
outPath?: string;
|
|
@@ -7,6 +9,8 @@ interface ParsedArgs {
|
|
|
7
9
|
help: boolean;
|
|
8
10
|
}
|
|
9
11
|
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
12
|
+
export declare function renderCostSummary(cost: CostEstimate, model: string, baseUrl: string): string;
|
|
13
|
+
export declare function renderCitationHealthFooter(report: VerificationReport | undefined): string;
|
|
10
14
|
export declare function safeErrorMessage(err: unknown): string;
|
|
11
15
|
export {};
|
|
12
16
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AA4DtB,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwHpD;AA4ED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAIR;AAKD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,MAAM,CASR;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIrD"}
|
package/dist/cli.js
CHANGED
|
@@ -16,6 +16,7 @@ import { resolveSearchAdapter } from "./search.js";
|
|
|
16
16
|
import { runAgent } from "./agent.js";
|
|
17
17
|
import { createCache } from "./cache.js";
|
|
18
18
|
import { renderSourcesMarkdown } from "./citations.js";
|
|
19
|
+
import { formatCostLine, looksLikeDario, } from "./pricing.js";
|
|
19
20
|
import { runDoctor, renderDoctorText, renderDoctorJson, exitCodeFor, scrubPath, } from "./doctor.js";
|
|
20
21
|
const USAGE = `deepdive — local research agent
|
|
21
22
|
|
|
@@ -45,6 +46,10 @@ Flags:
|
|
|
45
46
|
--no-cache Disable the on-disk page cache (default: enabled)
|
|
46
47
|
--cache-ttl-ms=<ms> Page cache TTL. Default: 3600000 (1 hour)
|
|
47
48
|
--ignore-robots Bypass robots.txt checks (default: respect them)
|
|
49
|
+
--no-verify-cites Skip lexical citation verification (default: on)
|
|
50
|
+
--strict-cites Exit non-zero if any citation is unsupported
|
|
51
|
+
--cite-min-recall=<0..1> Threshold for citation support. Default: 0.4
|
|
52
|
+
--no-cost Suppress the end-of-run cost summary on stderr
|
|
48
53
|
--json Emit a JSON result to stdout instead of markdown
|
|
49
54
|
--out=<path> Write the output (markdown or json) to a file too
|
|
50
55
|
--verbose, -v Stream progress events to stderr
|
|
@@ -59,7 +64,9 @@ Environment:
|
|
|
59
64
|
DEEPDIVE_MAX_SOURCES, DEEPDIVE_FETCH_TIMEOUT_MS, DEEPDIVE_HEADED,
|
|
60
65
|
DEEPDIVE_DEEP_ROUNDS, DEEPDIVE_CONCURRENCY, DEEPDIVE_NO_CACHE,
|
|
61
66
|
DEEPDIVE_CACHE_DIR, DEEPDIVE_CACHE_TTL_MS, DEEPDIVE_JSON, DEEPDIVE_VERBOSE,
|
|
62
|
-
DEEPDIVE_LLM_TIMEOUT_MS, DEEPDIVE_LLM_ATTEMPTS
|
|
67
|
+
DEEPDIVE_LLM_TIMEOUT_MS, DEEPDIVE_LLM_ATTEMPTS,
|
|
68
|
+
DEEPDIVE_NO_VERIFY_CITES, DEEPDIVE_STRICT_CITES, DEEPDIVE_CITE_MIN_RECALL,
|
|
69
|
+
DEEPDIVE_NO_COST, DEEPDIVE_PRICE_INPUT_PER_MTOK, DEEPDIVE_PRICE_OUTPUT_PER_MTOK
|
|
63
70
|
`;
|
|
64
71
|
// Exported for unit tests.
|
|
65
72
|
export function parseArgs(argv) {
|
|
@@ -84,6 +91,18 @@ export function parseArgs(argv) {
|
|
|
84
91
|
flags.ignoreRobots = true;
|
|
85
92
|
continue;
|
|
86
93
|
}
|
|
94
|
+
if (a === "--no-verify-cites") {
|
|
95
|
+
flags.noVerifyCites = true;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (a === "--strict-cites") {
|
|
99
|
+
flags.strictCites = true;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (a === "--no-cost") {
|
|
103
|
+
flags.noCost = true;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
87
106
|
if (a === "--json") {
|
|
88
107
|
flags.json = true;
|
|
89
108
|
continue;
|
|
@@ -143,6 +162,9 @@ export function parseArgs(argv) {
|
|
|
143
162
|
case "cache-ttl-ms":
|
|
144
163
|
flags.cacheTtlMs = parsePositiveInt(value);
|
|
145
164
|
break;
|
|
165
|
+
case "cite-min-recall":
|
|
166
|
+
flags.citeMinRecall = parseUnitFloat(value);
|
|
167
|
+
break;
|
|
146
168
|
case "out":
|
|
147
169
|
outPath = value;
|
|
148
170
|
break;
|
|
@@ -174,6 +196,12 @@ function parseNonNegativeInt(s) {
|
|
|
174
196
|
const n = Number(s);
|
|
175
197
|
return Number.isFinite(n) && n >= 0 ? n : undefined;
|
|
176
198
|
}
|
|
199
|
+
function parseUnitFloat(s) {
|
|
200
|
+
if (!/^\d+(\.\d+)?$|^\.\d+$/.test(s))
|
|
201
|
+
return undefined;
|
|
202
|
+
const n = Number(s);
|
|
203
|
+
return Number.isFinite(n) && n >= 0 && n <= 1 ? n : undefined;
|
|
204
|
+
}
|
|
177
205
|
function renderEvent(e) {
|
|
178
206
|
switch (e.type) {
|
|
179
207
|
case "plan.start":
|
|
@@ -202,11 +230,50 @@ function renderEvent(e) {
|
|
|
202
230
|
return e.critique.done
|
|
203
231
|
? ` critic answer complete (${e.critique.reasoning || "no reasoning given"})`
|
|
204
232
|
: ` critic ${e.critique.queries.length} follow-up quer${e.critique.queries.length === 1 ? "y" : "ies"}`;
|
|
233
|
+
case "verify.done": {
|
|
234
|
+
const r = e.report;
|
|
235
|
+
if (r.unsupported.length === 0) {
|
|
236
|
+
return ` verify ${r.supportedCitations}/${r.totalCitations} citations supported`;
|
|
237
|
+
}
|
|
238
|
+
const lines = [
|
|
239
|
+
` verify ⚠ ${r.totalCitations - r.supportedCitations}/${r.totalCitations} citations weak (threshold ${r.threshold})`,
|
|
240
|
+
];
|
|
241
|
+
for (const c of r.unsupported) {
|
|
242
|
+
const worst = c.unsupportedIds
|
|
243
|
+
.map((id) => `[${id}] ${c.recallByCite[id].toFixed(2)}`)
|
|
244
|
+
.join(", ");
|
|
245
|
+
lines.push(` ⚠ "${ellipsize(c.sentence, 80)}" — ${worst}`);
|
|
246
|
+
}
|
|
247
|
+
return lines.join("\n");
|
|
248
|
+
}
|
|
249
|
+
case "llm.call":
|
|
250
|
+
return ` llm ${e.phase.padEnd(8)} ${e.inputTokens} in / ${e.outputTokens} out`;
|
|
205
251
|
}
|
|
206
252
|
}
|
|
207
253
|
function ellipsize(s, max) {
|
|
208
254
|
return s.length <= max ? s : s.slice(0, max - 1) + "…";
|
|
209
255
|
}
|
|
256
|
+
// Renders the end-of-run cost summary line for stderr. Two-line variant
|
|
257
|
+
// when the LLM endpoint looks like dario (the "$0 on Max" hint applies),
|
|
258
|
+
// one-line otherwise. Exported for unit tests.
|
|
259
|
+
export function renderCostSummary(cost, model, baseUrl) {
|
|
260
|
+
const head = "cost · " + formatCostLine(cost, model);
|
|
261
|
+
if (!looksLikeDario(baseUrl))
|
|
262
|
+
return head;
|
|
263
|
+
return head + "\n (≈ at API list price; $0 on Claude Max via dario)";
|
|
264
|
+
}
|
|
265
|
+
// Renders a small markdown footer when the verification report has any
|
|
266
|
+
// unsupported citations. Returns "" otherwise so clean runs stay clean.
|
|
267
|
+
// Exported for unit tests.
|
|
268
|
+
export function renderCitationHealthFooter(report) {
|
|
269
|
+
if (!report || report.unsupported.length === 0)
|
|
270
|
+
return "";
|
|
271
|
+
const weak = report.totalCitations - report.supportedCitations;
|
|
272
|
+
return (`\n## Citation health\n\n` +
|
|
273
|
+
`⚠ ${weak} of ${report.totalCitations} citations have low lexical support ` +
|
|
274
|
+
`in their cited source (threshold ${report.threshold}). ` +
|
|
275
|
+
`Run with \`--verbose\` to see which.\n`);
|
|
276
|
+
}
|
|
210
277
|
// Exported for unit tests. User-facing error rendering at the CLI boundary.
|
|
211
278
|
// Runs the error message through scrubPath so the user's home directory can
|
|
212
279
|
// never end up in a bug report.
|
|
@@ -277,6 +344,9 @@ async function main(argv) {
|
|
|
277
344
|
concurrency: config.concurrency,
|
|
278
345
|
cache,
|
|
279
346
|
respectRobots: config.respectRobots,
|
|
347
|
+
verifyCitations: config.verifyCitations,
|
|
348
|
+
citeMinRecall: config.citeMinRecall,
|
|
349
|
+
env: process.env,
|
|
280
350
|
onEvent: (e) => {
|
|
281
351
|
if (config.verbose)
|
|
282
352
|
process.stderr.write(renderEvent(e) + "\n");
|
|
@@ -288,20 +358,31 @@ async function main(argv) {
|
|
|
288
358
|
}
|
|
289
359
|
: undefined,
|
|
290
360
|
}, ac.signal);
|
|
361
|
+
const citeFooter = renderCitationHealthFooter(result.verification);
|
|
362
|
+
const strictFail = config.strictCitations &&
|
|
363
|
+
(result.verification?.unsupported.length ?? 0) > 0;
|
|
364
|
+
// Cost summary lands on stderr regardless of stdout mode (suppressed by
|
|
365
|
+
// --no-cost / DEEPDIVE_NO_COST=1, and skipped for --json since the data
|
|
366
|
+
// is in the JSON envelope already).
|
|
367
|
+
const costLine = config.costEnabled && !config.jsonOutput
|
|
368
|
+
? renderCostSummary(result.cost, config.llm.model, config.llm.baseUrl)
|
|
369
|
+
: "";
|
|
291
370
|
if (streaming && streamed) {
|
|
292
371
|
// Streaming mode already wrote the header + answer tokens. Close with
|
|
293
|
-
// the sources block and (if
|
|
294
|
-
// output file too.
|
|
295
|
-
const tail = "\n\n" + renderSourcesMarkdown(result.sources);
|
|
372
|
+
// the sources block, optional citation-health footer, and (if
|
|
373
|
+
// requested) write the full markdown to the output file too.
|
|
374
|
+
const tail = "\n\n" + renderSourcesMarkdown(result.sources) + citeFooter;
|
|
296
375
|
process.stdout.write(tail);
|
|
297
376
|
if (!tail.endsWith("\n"))
|
|
298
377
|
process.stdout.write("\n");
|
|
299
378
|
if (parsed.outPath) {
|
|
300
379
|
const path = resolve(parsed.outPath);
|
|
301
|
-
writeFileSync(path, result.markdown, "utf-8");
|
|
380
|
+
writeFileSync(path, result.markdown + citeFooter, "utf-8");
|
|
302
381
|
process.stderr.write(`\nwrote ${path}\n`);
|
|
303
382
|
}
|
|
304
|
-
|
|
383
|
+
if (costLine)
|
|
384
|
+
process.stderr.write(costLine + "\n");
|
|
385
|
+
return strictFail ? 1 : 0;
|
|
305
386
|
}
|
|
306
387
|
const output = config.jsonOutput
|
|
307
388
|
? JSON.stringify({
|
|
@@ -315,16 +396,22 @@ async function main(argv) {
|
|
|
315
396
|
fetchedAt: s.fetchedAt,
|
|
316
397
|
})),
|
|
317
398
|
answer: result.answer,
|
|
399
|
+
verification: result.verification,
|
|
400
|
+
cost: result.cost,
|
|
318
401
|
usage: result.usage,
|
|
319
402
|
}, null, 2) + "\n"
|
|
320
|
-
: result.markdown +
|
|
403
|
+
: result.markdown +
|
|
404
|
+
(result.markdown.endsWith("\n") ? "" : "\n") +
|
|
405
|
+
citeFooter;
|
|
321
406
|
process.stdout.write(output);
|
|
322
407
|
if (parsed.outPath) {
|
|
323
408
|
const path = resolve(parsed.outPath);
|
|
324
409
|
writeFileSync(path, output, "utf-8");
|
|
325
410
|
process.stderr.write(`\nwrote ${path}\n`);
|
|
326
411
|
}
|
|
327
|
-
|
|
412
|
+
if (costLine)
|
|
413
|
+
process.stderr.write(costLine + "\n");
|
|
414
|
+
return strictFail ? 1 : 0;
|
|
328
415
|
}
|
|
329
416
|
catch (err) {
|
|
330
417
|
process.stderr.write(`deepdive: ${safeErrorMessage(err)}\n`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,sBAAsB;AACtB,EAAE;AACF,mDAAmD;AACnD,0EAA0E;AAC1E,mDAAmD;AACnD,oBAAoB;AACpB,EAAE;AACF,6EAA6E;AAC7E,mEAAmE;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Cb,CAAC;AASF,2BAA2B;AAC3B,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAA4B,CAAC;IACjC,IAAI,OAA2B,CAAC;IAChC,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YACxB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,UAAU;oBACb,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;oBACtB,MAAM;gBACR,KAAK,SAAS;oBACZ,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;oBACrB,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBACpB,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,QAAQ;oBACX,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM;gBACR,KAAK,mBAAmB;oBACtB,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,aAAa;oBAChB,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,sBAAsB;oBACzB,KAAK,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,gBAAgB;oBACnB,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,cAAc;oBACjB,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,aAAa;oBAChB,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,cAAc;oBACjB,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,KAAK;oBACR,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,2CAA2C,CAAC,gBAAgB,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAS;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,CAAa;IAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,uCAAuC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5E,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,cAAc,CAAC;QAC1D,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxI,KAAK,cAAc;YACjB,OAAO,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAClE,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5D,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxG,KAAK,eAAe;YAClB,OAAO,sBAAsB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QACpD,KAAK,kBAAkB;YACrB,OAAO,mBAAmB,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,WAAW,UAAU,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjG,KAAK,iBAAiB;YACpB,OAAO,mBAAmB,CAAC,CAAC,KAAK,OAAO,CAAC;QAC3C,KAAK,gBAAgB;YACnB,OAAO,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;QAChD,KAAK,eAAe;YAClB,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACpB,CAAC,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,oBAAoB,GAAG;gBAC/E,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAChH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,GAAW;IACvC,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACzD,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,gCAAgC;AAChC,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC;IACtE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,gBAAgB,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU;YAC3B,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC1B,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO;QAChC,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnE,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE9B,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,2BAA2B;IAC3B,MAAM,SAAS,GACb,MAAM,CAAC,aAAa;QACpB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,IAAI,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,MAAM,CAAC,QAAQ,EACf;YACE,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK;YACL,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACb,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAClE,CAAC;YACD,iBAAiB,EAAE,SAAS;gBAC1B,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;oBACR,QAAQ,GAAG,IAAI,CAAC;oBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,EACD,EAAE,CAAC,MAAM,CACV,CAAC;QAEF,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,sEAAsE;YACtE,sEAAsE;YACtE,mBAAmB;YACnB,MAAM,IAAI,GAAG,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU;YAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,CACZ;gBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,CAAC,CAAC;gBACH,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;YACV,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,2CAA2C;AAC3C,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IAC7B,CAAC,GAAG,EAAE;QACJ,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AAEP,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -15,6 +15,10 @@ export interface RuntimeConfig {
|
|
|
15
15
|
ttlMs: number;
|
|
16
16
|
};
|
|
17
17
|
respectRobots: boolean;
|
|
18
|
+
verifyCitations: boolean;
|
|
19
|
+
citeMinRecall: number;
|
|
20
|
+
strictCitations: boolean;
|
|
21
|
+
costEnabled: boolean;
|
|
18
22
|
jsonOutput: boolean;
|
|
19
23
|
streamEnabled: boolean;
|
|
20
24
|
verbose: boolean;
|
|
@@ -36,6 +40,10 @@ export interface CLIFlags {
|
|
|
36
40
|
noCache?: boolean;
|
|
37
41
|
cacheTtlMs?: number;
|
|
38
42
|
ignoreRobots?: boolean;
|
|
43
|
+
noVerifyCites?: boolean;
|
|
44
|
+
strictCites?: boolean;
|
|
45
|
+
citeMinRecall?: number;
|
|
46
|
+
noCost?: boolean;
|
|
39
47
|
json?: boolean;
|
|
40
48
|
noStream?: boolean;
|
|
41
49
|
verbose?: boolean;
|
|
@@ -43,4 +51,5 @@ export interface CLIFlags {
|
|
|
43
51
|
export declare function resolveConfig(flags: CLIFlags, env: Record<string, string | undefined>): RuntimeConfig;
|
|
44
52
|
export declare function parsePositiveInt(s: string | undefined): number | undefined;
|
|
45
53
|
export declare function parseNonNegativeInt(s: string | undefined): number | undefined;
|
|
54
|
+
export declare function parseUnitFloat(s: string | undefined): number | undefined;
|
|
46
55
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,aAAa,CAwHf;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO1E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO7E;AAID,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOxE"}
|
package/dist/config.js
CHANGED
|
@@ -61,6 +61,12 @@ export function resolveConfig(flags, env) {
|
|
|
61
61
|
parsePositiveInt(env.DEEPDIVE_CACHE_TTL_MS) ??
|
|
62
62
|
DEFAULTS.cacheTtlMs;
|
|
63
63
|
const respectRobots = !(flags.ignoreRobots ?? env.DEEPDIVE_IGNORE_ROBOTS === "1");
|
|
64
|
+
const verifyCitations = !(flags.noVerifyCites ?? env.DEEPDIVE_NO_VERIFY_CITES === "1");
|
|
65
|
+
const strictCitations = flags.strictCites ?? env.DEEPDIVE_STRICT_CITES === "1";
|
|
66
|
+
const citeMinRecall = flags.citeMinRecall ??
|
|
67
|
+
parseUnitFloat(env.DEEPDIVE_CITE_MIN_RECALL) ??
|
|
68
|
+
0.4;
|
|
69
|
+
const costEnabled = !(flags.noCost ?? env.DEEPDIVE_NO_COST === "1");
|
|
64
70
|
const jsonOutput = flags.json ?? env.DEEPDIVE_JSON === "1";
|
|
65
71
|
const streamOptOut = flags.noStream ?? env.DEEPDIVE_NO_STREAM === "1";
|
|
66
72
|
// Streaming is on by default but gets auto-disabled for:
|
|
@@ -92,6 +98,10 @@ export function resolveConfig(flags, env) {
|
|
|
92
98
|
concurrency,
|
|
93
99
|
cache: { enabled: cacheEnabled, dir: cacheDir, ttlMs: cacheTtlMs },
|
|
94
100
|
respectRobots,
|
|
101
|
+
verifyCitations,
|
|
102
|
+
citeMinRecall,
|
|
103
|
+
strictCitations,
|
|
104
|
+
costEnabled,
|
|
95
105
|
jsonOutput,
|
|
96
106
|
streamEnabled,
|
|
97
107
|
verbose,
|
|
@@ -121,4 +131,17 @@ export function parseNonNegativeInt(s) {
|
|
|
121
131
|
return undefined;
|
|
122
132
|
return n;
|
|
123
133
|
}
|
|
134
|
+
// Exported for unit tests. Parses a float in [0, 1] — the citation-recall
|
|
135
|
+
// threshold. Returns undefined for non-numeric or out-of-range input.
|
|
136
|
+
export function parseUnitFloat(s) {
|
|
137
|
+
if (!s)
|
|
138
|
+
return undefined;
|
|
139
|
+
const trimmed = s.trim();
|
|
140
|
+
if (!/^\d+(\.\d+)?$|^\.\d+$/.test(trimmed))
|
|
141
|
+
return undefined;
|
|
142
|
+
const n = Number(trimmed);
|
|
143
|
+
if (!Number.isFinite(n) || n < 0 || n > 1)
|
|
144
|
+
return undefined;
|
|
145
|
+
return n;
|
|
146
|
+
}
|
|
124
147
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,4EAA4E;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export { retry, backoffDelay, type RetryOptions } from "./retry.js";
|
|
|
11
11
|
export { resolveConfig, type RuntimeConfig, type CLIFlags } from "./config.js";
|
|
12
12
|
export { createCache, cacheKey, type PageCache, type CacheOptions } from "./cache.js";
|
|
13
13
|
export { runConcurrent } from "./concurrency.js";
|
|
14
|
+
export { priceFor, estimateCost, formatCostLine, formatUsd, formatTokens, looksLikeDario, PRICE_TABLE, DARIO_DEFAULT_BASE_URL, type ModelPrice, type TokenUsage, type CostEstimate, } from "./pricing.js";
|
|
15
|
+
export { verifyCitations, splitSentences, extractCiteIds, contentTokens, recall, stripSourcesBlock, DEFAULT_CITE_MIN_RECALL, type CitationCheck, type VerificationReport, type VerifyOptions, } from "./verify.js";
|
|
14
16
|
export { trimTrailingSlashes, stripHashFragment, dedupeKey } from "./url-util.js";
|
|
15
17
|
export { runDoctor, renderDoctorText, renderDoctorJson, exitCodeFor, scrubPath, formatBytes, formatDuration, classifyFetchError, nodeMeetsMinimum, type CheckResult, type CheckStatus, type DoctorReport, type DoctorOptions, } from "./doctor.js";
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,EACb,KAAK,IAAI,EACT,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,MAAM,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,EACb,KAAK,IAAI,EACT,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,MAAM,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,8 @@ export { retry, backoffDelay } from "./retry.js";
|
|
|
12
12
|
export { resolveConfig } from "./config.js";
|
|
13
13
|
export { createCache, cacheKey } from "./cache.js";
|
|
14
14
|
export { runConcurrent } from "./concurrency.js";
|
|
15
|
+
export { priceFor, estimateCost, formatCostLine, formatUsd, formatTokens, looksLikeDario, PRICE_TABLE, DARIO_DEFAULT_BASE_URL, } from "./pricing.js";
|
|
16
|
+
export { verifyCitations, splitSentences, extractCiteIds, contentTokens, recall, stripSourcesBlock, DEFAULT_CITE_MIN_RECALL, } from "./verify.js";
|
|
15
17
|
export { trimTrailingSlashes, stripHashFragment, dedupeKey } from "./url-util.js";
|
|
16
18
|
export { runDoctor, renderDoctorText, renderDoctorJson, exitCodeFor, scrubPath, formatBytes, formatDuration, classifyFetchError, nodeMeetsMinimum, } from "./doctor.js";
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACL,QAAQ,GAMT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,GAGd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAyB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,oBAAoB,GAIrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACL,QAAQ,GAMT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,GAGd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAyB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,oBAAoB,GAIrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,sBAAsB,GAIvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,uBAAuB,GAIxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,aAAa,CAAC"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type LLMConfig } from "./llm.js";
|
|
1
|
+
import { type LLMConfig, type LLMResult } from "./llm.js";
|
|
2
|
+
export type UsageSink = (usage: NonNullable<LLMResult["usage"]>) => void;
|
|
2
3
|
export interface Plan {
|
|
3
4
|
queries: string[];
|
|
4
5
|
reasoning: string;
|
|
@@ -8,8 +9,8 @@ export interface Critique {
|
|
|
8
9
|
reasoning: string;
|
|
9
10
|
queries: string[];
|
|
10
11
|
}
|
|
11
|
-
export declare function planQueries(question: string, config: LLMConfig, signal?: AbortSignal): Promise<Plan>;
|
|
12
|
+
export declare function planQueries(question: string, config: LLMConfig, signal?: AbortSignal, onUsage?: UsageSink): Promise<Plan>;
|
|
12
13
|
export declare function parsePlan(raw: string): Plan;
|
|
13
|
-
export declare function critique(question: string, draftAnswer: string, priorQueries: string[], config: LLMConfig, signal?: AbortSignal): Promise<Critique>;
|
|
14
|
+
export declare function critique(question: string, draftAnswer: string, priorQueries: string[], config: LLMConfig, signal?: AbortSignal, onUsage?: UsageSink): Promise<Critique>;
|
|
14
15
|
export declare function parseCritique(raw: string): Critique;
|
|
15
16
|
//# sourceMappingURL=plan.d.ts.map
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAaD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiB3C;AAqBD,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,QAAQ,CAAC,CAenB;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsBnD"}
|
package/dist/plan.js
CHANGED
|
@@ -15,8 +15,10 @@ Rules:
|
|
|
15
15
|
|
|
16
16
|
Output FORMAT (strict): one JSON object, no prose before or after, matching:
|
|
17
17
|
{"reasoning": "<1-2 sentences on your decomposition>", "queries": ["q1", "q2", ...]}`;
|
|
18
|
-
export async function planQueries(question, config, signal) {
|
|
19
|
-
const { text } = await callLLM([{ role: "user", content: question }], PLANNER_SYSTEM, config, signal);
|
|
18
|
+
export async function planQueries(question, config, signal, onUsage) {
|
|
19
|
+
const { text, usage } = await callLLM([{ role: "user", content: question }], PLANNER_SYSTEM, config, signal);
|
|
20
|
+
if (usage && onUsage)
|
|
21
|
+
onUsage(usage);
|
|
20
22
|
return parsePlan(text);
|
|
21
23
|
}
|
|
22
24
|
// Exported for unit tests.
|
|
@@ -58,13 +60,15 @@ Rules:
|
|
|
58
60
|
|
|
59
61
|
Output FORMAT (strict): one JSON object, no prose before or after, matching:
|
|
60
62
|
{"done": bool, "reasoning": "<1-2 sentences>", "queries": ["q1", "q2", ...]}`;
|
|
61
|
-
export async function critique(question, draftAnswer, priorQueries, config, signal) {
|
|
63
|
+
export async function critique(question, draftAnswer, priorQueries, config, signal, onUsage) {
|
|
62
64
|
const userMessage = `Question: ${question}\n\n` +
|
|
63
65
|
`Draft answer:\n${draftAnswer}\n\n` +
|
|
64
66
|
`Queries already run (${priorQueries.length}):\n` +
|
|
65
67
|
priorQueries.map((q) => `- ${q}`).join("\n") +
|
|
66
68
|
`\n\nReview the draft and propose follow-up queries if needed.`;
|
|
67
|
-
const { text } = await callLLM([{ role: "user", content: userMessage }], CRITIC_SYSTEM, config, signal);
|
|
69
|
+
const { text, usage } = await callLLM([{ role: "user", content: userMessage }], CRITIC_SYSTEM, config, signal);
|
|
70
|
+
if (usage && onUsage)
|
|
71
|
+
onUsage(usage);
|
|
68
72
|
return parseCritique(text);
|
|
69
73
|
}
|
|
70
74
|
// Exported for unit tests.
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4DAA4D;AAC5D,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,0DAA0D;AAE1D,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ModelPrice {
|
|
2
|
+
inputPerMTok: number;
|
|
3
|
+
outputPerMTok: number;
|
|
4
|
+
}
|
|
5
|
+
export interface TokenUsage {
|
|
6
|
+
inputTokens: number;
|
|
7
|
+
outputTokens: number;
|
|
8
|
+
}
|
|
9
|
+
export interface CostEstimate {
|
|
10
|
+
amountUsd: number;
|
|
11
|
+
knownModel: boolean;
|
|
12
|
+
inputTokens: number;
|
|
13
|
+
outputTokens: number;
|
|
14
|
+
calls: number;
|
|
15
|
+
}
|
|
16
|
+
export declare const PRICE_TABLE: Record<string, ModelPrice>;
|
|
17
|
+
export declare const DARIO_DEFAULT_BASE_URL = "http://localhost:3456";
|
|
18
|
+
export declare function priceFor(model: string, env?: Record<string, string | undefined>): ModelPrice | undefined;
|
|
19
|
+
export declare function estimateCost(usage: TokenUsage & {
|
|
20
|
+
calls: number;
|
|
21
|
+
}, model: string, env?: Record<string, string | undefined>): CostEstimate;
|
|
22
|
+
export declare function formatCostLine(estimate: CostEstimate, model: string): string;
|
|
23
|
+
export declare function looksLikeDario(baseUrl: string): boolean;
|
|
24
|
+
export declare function formatUsd(amount: number): string;
|
|
25
|
+
export declare function formatTokens(n: number): string;
|
|
26
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAIlD,CAAC;AAKF,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAK9D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,UAAU,GAAG,SAAS,CAUxB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,YAAY,CAqBd;AAOD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AASD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhD;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C"}
|
package/dist/pricing.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// Cost telemetry — pure pricing math + a small registry of public list
|
|
2
|
+
// prices for well-known Anthropic models.
|
|
3
|
+
//
|
|
4
|
+
// Every LLM call in deepdive returns input/output token counts. We sum
|
|
5
|
+
// those across a run and turn them into an estimated dollar cost so the
|
|
6
|
+
// end-of-run summary shows what the same workload would have cost at API
|
|
7
|
+
// list prices — the cost-arbitrage angle the README leans on.
|
|
8
|
+
//
|
|
9
|
+
// This module is pure: no LLM, no network, no disk. Pricing constants
|
|
10
|
+
// live here as a hardcoded table. Drift is intentional: a PR is the right
|
|
11
|
+
// way to update prices, because that's also when we audit them. Users
|
|
12
|
+
// running unknown models can override via env vars.
|
|
13
|
+
// Anthropic public list pricing as of release. Verify against
|
|
14
|
+
// docs.anthropic.com/en/docs/about-claude/pricing before bumping.
|
|
15
|
+
export const PRICE_TABLE = {
|
|
16
|
+
"claude-sonnet-4-6": { inputPerMTok: 3, outputPerMTok: 15 },
|
|
17
|
+
"claude-opus-4-7": { inputPerMTok: 15, outputPerMTok: 75 },
|
|
18
|
+
"claude-haiku-4-5": { inputPerMTok: 0.8, outputPerMTok: 4 },
|
|
19
|
+
};
|
|
20
|
+
// dario's default listening port — auto-detected to print the
|
|
21
|
+
// "$0 on Claude Max via dario" hint without claiming it for unrelated
|
|
22
|
+
// endpoints.
|
|
23
|
+
export const DARIO_DEFAULT_BASE_URL = "http://localhost:3456";
|
|
24
|
+
// Returns the price for `model`, or — if unknown — falls back to a pair
|
|
25
|
+
// of env-var overrides for self-hosted / unknown-named endpoints. Returns
|
|
26
|
+
// undefined when neither is available.
|
|
27
|
+
export function priceFor(model, env) {
|
|
28
|
+
const known = PRICE_TABLE[model];
|
|
29
|
+
if (known)
|
|
30
|
+
return known;
|
|
31
|
+
if (!env)
|
|
32
|
+
return undefined;
|
|
33
|
+
const inputStr = env.DEEPDIVE_PRICE_INPUT_PER_MTOK;
|
|
34
|
+
const outputStr = env.DEEPDIVE_PRICE_OUTPUT_PER_MTOK;
|
|
35
|
+
const input = parseDollars(inputStr);
|
|
36
|
+
const output = parseDollars(outputStr);
|
|
37
|
+
if (input === undefined || output === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
return { inputPerMTok: input, outputPerMTok: output };
|
|
40
|
+
}
|
|
41
|
+
export function estimateCost(usage, model, env) {
|
|
42
|
+
const price = priceFor(model, env);
|
|
43
|
+
if (!price) {
|
|
44
|
+
return {
|
|
45
|
+
amountUsd: 0,
|
|
46
|
+
knownModel: false,
|
|
47
|
+
inputTokens: usage.inputTokens,
|
|
48
|
+
outputTokens: usage.outputTokens,
|
|
49
|
+
calls: usage.calls,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const amountUsd = (usage.inputTokens * price.inputPerMTok) / 1_000_000 +
|
|
53
|
+
(usage.outputTokens * price.outputPerMTok) / 1_000_000;
|
|
54
|
+
return {
|
|
55
|
+
amountUsd,
|
|
56
|
+
knownModel: model in PRICE_TABLE,
|
|
57
|
+
inputTokens: usage.inputTokens,
|
|
58
|
+
outputTokens: usage.outputTokens,
|
|
59
|
+
calls: usage.calls,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// Renders the one-line cost summary for the CLI. Two flavors:
|
|
63
|
+
// ~$0.034 · 12.1k in / 4.2k out · 4 LLM calls · claude-sonnet-4-6
|
|
64
|
+
// $? · 12.1k in / 4.2k out · 4 LLM calls · my-self-hosted
|
|
65
|
+
// $0.000 · 0 in / 0 out · 0 LLM calls · claude-sonnet-4-6
|
|
66
|
+
// Caller appends the dario hint separately when relevant.
|
|
67
|
+
export function formatCostLine(estimate, model) {
|
|
68
|
+
const cost = estimate.knownModel || estimate.amountUsd > 0
|
|
69
|
+
? "~" + formatUsd(estimate.amountUsd)
|
|
70
|
+
: "$?";
|
|
71
|
+
const inK = formatTokens(estimate.inputTokens);
|
|
72
|
+
const outK = formatTokens(estimate.outputTokens);
|
|
73
|
+
const callsLabel = estimate.calls === 1 ? "1 LLM call" : `${estimate.calls} LLM calls`;
|
|
74
|
+
return `${cost} · ${inK} in / ${outK} out · ${callsLabel} · ${model}`;
|
|
75
|
+
}
|
|
76
|
+
// True when `baseUrl` points at the dario default. Used by the CLI to
|
|
77
|
+
// decide whether the "$0 on Claude Max via dario" hint is relevant.
|
|
78
|
+
export function looksLikeDario(baseUrl) {
|
|
79
|
+
return trim(baseUrl) === DARIO_DEFAULT_BASE_URL;
|
|
80
|
+
}
|
|
81
|
+
function trim(s) {
|
|
82
|
+
let end = s.length;
|
|
83
|
+
while (end > 0 && s[end - 1] === "/")
|
|
84
|
+
end--;
|
|
85
|
+
return s.slice(0, end);
|
|
86
|
+
}
|
|
87
|
+
// Exported for tests.
|
|
88
|
+
export function formatUsd(amount) {
|
|
89
|
+
if (amount === 0)
|
|
90
|
+
return "$0.000";
|
|
91
|
+
if (amount < 0.01)
|
|
92
|
+
return "$" + amount.toFixed(4);
|
|
93
|
+
if (amount < 1)
|
|
94
|
+
return "$" + amount.toFixed(3);
|
|
95
|
+
return "$" + amount.toFixed(2);
|
|
96
|
+
}
|
|
97
|
+
// Exported for tests.
|
|
98
|
+
export function formatTokens(n) {
|
|
99
|
+
if (n < 1000)
|
|
100
|
+
return String(n);
|
|
101
|
+
if (n < 10_000)
|
|
102
|
+
return (n / 1000).toFixed(2) + "k";
|
|
103
|
+
if (n < 1_000_000)
|
|
104
|
+
return (n / 1000).toFixed(1) + "k";
|
|
105
|
+
return (n / 1_000_000).toFixed(2) + "M";
|
|
106
|
+
}
|
|
107
|
+
function parseDollars(s) {
|
|
108
|
+
if (!s)
|
|
109
|
+
return undefined;
|
|
110
|
+
const trimmed = s.trim();
|
|
111
|
+
if (!/^\d+(\.\d+)?$|^\.\d+$/.test(trimmed))
|
|
112
|
+
return undefined;
|
|
113
|
+
const n = Number(trimmed);
|
|
114
|
+
if (!Number.isFinite(n) || n < 0)
|
|
115
|
+
return undefined;
|
|
116
|
+
return n;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/synthesize.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type LLMConfig } from "./llm.js";
|
|
2
2
|
import type { Source } from "./citations.js";
|
|
3
|
+
import type { UsageSink } from "./plan.js";
|
|
3
4
|
export interface SourceWithContent extends Source {
|
|
4
5
|
content: string;
|
|
5
6
|
}
|
|
6
|
-
export declare function synthesize(question: string, sources: SourceWithContent[], config: LLMConfig, signal?: AbortSignal, onToken?: (text: string) => void): Promise<string>;
|
|
7
|
+
export declare function synthesize(question: string, sources: SourceWithContent[], config: LLMConfig, signal?: AbortSignal, onToken?: (text: string) => void, onUsage?: UsageSink): Promise<string>;
|
|
7
8
|
export declare function buildSourcePacket(sources: SourceWithContent[]): string;
|
|
8
9
|
//# sourceMappingURL=synthesize.d.ts.map
|
package/dist/synthesize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../src/synthesize.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../src/synthesize.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,SAAS,EAAkB,MAAM,UAAU,CAAC;AAEnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,iBAAkB,SAAQ,MAAM;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAChC,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAGD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAOtE"}
|
package/dist/synthesize.js
CHANGED
|
@@ -21,7 +21,7 @@ Rules:
|
|
|
21
21
|
- If the sources do not answer the question, say so — do not hallucinate.
|
|
22
22
|
- Do not include a "Sources" section yourself — the caller appends it.
|
|
23
23
|
- Length: match the complexity of the question. A one-line question can get a paragraph; a comparison question may need headers and a table.`;
|
|
24
|
-
export async function synthesize(question, sources, config, signal, onToken) {
|
|
24
|
+
export async function synthesize(question, sources, config, signal, onToken, onUsage) {
|
|
25
25
|
if (sources.length === 0) {
|
|
26
26
|
return "_No sources could be fetched or extracted. Unable to answer._";
|
|
27
27
|
}
|
|
@@ -30,12 +30,16 @@ export async function synthesize(question, sources, config, signal, onToken) {
|
|
|
30
30
|
`Sources (${sources.length}):\n\n${packet}\n\n` +
|
|
31
31
|
`Write the cited markdown answer now.`;
|
|
32
32
|
const messages = [{ role: "user", content: userMessage }];
|
|
33
|
+
let result;
|
|
33
34
|
if (onToken) {
|
|
34
|
-
|
|
35
|
-
return text;
|
|
35
|
+
result = await callLLMStream(messages, SYNTH_SYSTEM, config, { onToken }, signal);
|
|
36
36
|
}
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
else {
|
|
38
|
+
result = await callLLM(messages, SYNTH_SYSTEM, config, signal);
|
|
39
|
+
}
|
|
40
|
+
if (result.usage && onUsage)
|
|
41
|
+
onUsage(result.usage);
|
|
42
|
+
return result.text;
|
|
39
43
|
}
|
|
40
44
|
// Exported for unit tests.
|
|
41
45
|
export function buildSourcePacket(sources) {
|
package/dist/synthesize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.js","sourceRoot":"","sources":["../src/synthesize.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAE3E,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"synthesize.js","sourceRoot":"","sources":["../src/synthesize.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAE3E,OAAO,EAAE,OAAO,EAAkC,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;6IAcwH,CAAC;AAE9I,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,OAA4B,EAC5B,MAAiB,EACjB,MAAoB,EACpB,OAAgC,EAChC,OAAmB;IAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,+DAA+D,CAAC;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,WAAW,GACf,aAAa,QAAQ,MAAM;QAC3B,YAAY,OAAO,CAAC,MAAM,SAAS,MAAM,MAAM;QAC/C,sCAAsC,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,IAAI,MAAiB,CAAC;IACtB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,aAAa,CAC1B,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,EAAE,OAAO,EAAE,EACX,MAAM,CACP,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,YAAY,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACjE,OAAO,GAAG,MAAM,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,aAAa,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/verify.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SourceWithContent } from "./synthesize.js";
|
|
2
|
+
export declare const DEFAULT_CITE_MIN_RECALL = 0.4;
|
|
3
|
+
export interface CitationCheck {
|
|
4
|
+
sentence: string;
|
|
5
|
+
citedIds: number[];
|
|
6
|
+
unsupportedIds: number[];
|
|
7
|
+
recallByCite: Record<number, number>;
|
|
8
|
+
supported: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface VerificationReport {
|
|
11
|
+
threshold: number;
|
|
12
|
+
totalCitations: number;
|
|
13
|
+
supportedCitations: number;
|
|
14
|
+
checks: CitationCheck[];
|
|
15
|
+
unsupported: CitationCheck[];
|
|
16
|
+
}
|
|
17
|
+
export interface VerifyOptions {
|
|
18
|
+
threshold?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function verifyCitations(answer: string, sources: SourceWithContent[], opts?: VerifyOptions): VerificationReport;
|
|
21
|
+
export declare function stripSourcesBlock(answer: string): string;
|
|
22
|
+
export declare function splitSentences(text: string): string[];
|
|
23
|
+
export declare function extractCiteIds(sentence: string): number[];
|
|
24
|
+
export declare function contentTokens(text: string): string[];
|
|
25
|
+
export declare function recall(claim: string[], source: Set<string>): number;
|
|
26
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAAE,EAC5B,IAAI,GAAE,aAAkB,GACvB,kBAAkB,CAkDpB;AAKD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAerD;AAOD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAWzD;AA4BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBpD;AASD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAMnE"}
|
package/dist/verify.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// Citation verifier — lexical sanity check on the synthesized answer.
|
|
2
|
+
//
|
|
3
|
+
// After the synthesizer produces a draft, every sentence that contains an
|
|
4
|
+
// inline [N] reference is checked against the extracted text of source N.
|
|
5
|
+
// If too few of the sentence's content tokens appear in the cited source,
|
|
6
|
+
// the citation is flagged as weak — the most common signature of a
|
|
7
|
+
// hallucinated reference.
|
|
8
|
+
//
|
|
9
|
+
// Multi-cite rule: a sentence with [1][3] is supported only when BOTH cites
|
|
10
|
+
// individually clear the recall threshold. A bogus cite buried inside an
|
|
11
|
+
// otherwise-true sentence is still a problem worth surfacing.
|
|
12
|
+
//
|
|
13
|
+
// This module is pure: no LLM, no network, no disk. All five helpers are
|
|
14
|
+
// exported for unit tests.
|
|
15
|
+
export const DEFAULT_CITE_MIN_RECALL = 0.4;
|
|
16
|
+
export function verifyCitations(answer, sources, opts = {}) {
|
|
17
|
+
const threshold = opts.threshold ?? DEFAULT_CITE_MIN_RECALL;
|
|
18
|
+
const body = stripSourcesBlock(answer);
|
|
19
|
+
const sentences = splitSentences(body);
|
|
20
|
+
const sourceTokens = new Map();
|
|
21
|
+
for (const s of sources) {
|
|
22
|
+
sourceTokens.set(s.id, new Set(contentTokens(s.content)));
|
|
23
|
+
}
|
|
24
|
+
const checks = [];
|
|
25
|
+
let totalCitations = 0;
|
|
26
|
+
let supportedCitations = 0;
|
|
27
|
+
for (const sentence of sentences) {
|
|
28
|
+
const citedIds = extractCiteIds(sentence);
|
|
29
|
+
if (citedIds.length === 0)
|
|
30
|
+
continue;
|
|
31
|
+
const claimTokens = contentTokens(sentence);
|
|
32
|
+
const recallByCite = {};
|
|
33
|
+
const unsupportedIds = [];
|
|
34
|
+
for (const id of citedIds) {
|
|
35
|
+
const tokens = sourceTokens.get(id);
|
|
36
|
+
const r = tokens ? recall(claimTokens, tokens) : 0;
|
|
37
|
+
recallByCite[id] = r;
|
|
38
|
+
totalCitations += 1;
|
|
39
|
+
if (r >= threshold) {
|
|
40
|
+
supportedCitations += 1;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
unsupportedIds.push(id);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
checks.push({
|
|
47
|
+
sentence: sentence.trim(),
|
|
48
|
+
citedIds,
|
|
49
|
+
unsupportedIds,
|
|
50
|
+
recallByCite,
|
|
51
|
+
supported: unsupportedIds.length === 0,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
threshold,
|
|
56
|
+
totalCitations,
|
|
57
|
+
supportedCitations,
|
|
58
|
+
checks,
|
|
59
|
+
unsupported: checks.filter((c) => !c.supported),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// Strips an appended "## Sources" block (and anything after it) from the
|
|
63
|
+
// answer. The synthesizer is told not to emit this section, but the agent
|
|
64
|
+
// appends one — defend against either case.
|
|
65
|
+
export function stripSourcesBlock(answer) {
|
|
66
|
+
const m = /(^|\n)##\s+Sources\b/i.exec(answer);
|
|
67
|
+
return m ? answer.slice(0, m.index).trimEnd() : answer;
|
|
68
|
+
}
|
|
69
|
+
// Splits text into sentences. Handles `.!?` followed by whitespace, leaves
|
|
70
|
+
// the trailing fragment (no terminal punctuation) intact, and is permissive
|
|
71
|
+
// about edge cases — false-positives just produce shorter sentence chunks
|
|
72
|
+
// which still get checked.
|
|
73
|
+
export function splitSentences(text) {
|
|
74
|
+
const out = [];
|
|
75
|
+
// Walk by line first so headers and list items each become their own
|
|
76
|
+
// sentence boundary — a heading like "## 5-hour bucket" should not be
|
|
77
|
+
// glued onto the prose below it.
|
|
78
|
+
for (const line of text.split(/\r?\n/)) {
|
|
79
|
+
const trimmed = line.trim();
|
|
80
|
+
if (!trimmed)
|
|
81
|
+
continue;
|
|
82
|
+
const parts = trimmed.split(/(?<=[.!?])\s+(?=[A-Z\[(])/);
|
|
83
|
+
for (const p of parts) {
|
|
84
|
+
const piece = p.trim();
|
|
85
|
+
if (piece)
|
|
86
|
+
out.push(piece);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
// Pulls every numeric citation id out of a sentence.
|
|
92
|
+
// "[1]" → [1]
|
|
93
|
+
// "[1][3]" → [1, 3]
|
|
94
|
+
// "[1, 3]" → [1, 3]
|
|
95
|
+
// "[citation needed]" → []
|
|
96
|
+
export function extractCiteIds(sentence) {
|
|
97
|
+
const ids = [];
|
|
98
|
+
const re = /\[([0-9]+(?:\s*,\s*[0-9]+)*)\]/g;
|
|
99
|
+
let m;
|
|
100
|
+
while ((m = re.exec(sentence)) !== null) {
|
|
101
|
+
for (const part of m[1].split(",")) {
|
|
102
|
+
const n = parseInt(part.trim(), 10);
|
|
103
|
+
if (Number.isFinite(n) && n > 0)
|
|
104
|
+
ids.push(n);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return ids;
|
|
108
|
+
}
|
|
109
|
+
// Stop words: a small list of common English words that carry no signal
|
|
110
|
+
// for citation matching. Numbers and proper nouns survive automatically
|
|
111
|
+
// because we filter by length and case-fold rather than by a vocabulary
|
|
112
|
+
// allow-list.
|
|
113
|
+
const STOP_WORDS = new Set([
|
|
114
|
+
"the", "and", "for", "are", "but", "not", "you", "all", "any", "can",
|
|
115
|
+
"had", "her", "was", "one", "our", "out", "day", "get", "has", "him",
|
|
116
|
+
"his", "how", "man", "new", "now", "old", "see", "two", "way", "who",
|
|
117
|
+
"boy", "did", "its", "let", "put", "say", "she", "too", "use", "this",
|
|
118
|
+
"that", "with", "have", "from", "they", "will", "been", "than", "them",
|
|
119
|
+
"were", "what", "when", "your", "into", "some", "more", "very", "also",
|
|
120
|
+
"such", "only", "like", "over", "most", "other", "their", "there",
|
|
121
|
+
"these", "those", "which", "would", "could", "should", "about", "after",
|
|
122
|
+
"before", "because", "between", "during", "while", "where", "without",
|
|
123
|
+
"within", "across", "through", "based", "using", "used", "make", "made",
|
|
124
|
+
"does", "doing", "done", "each", "both", "many", "much", "same", "just",
|
|
125
|
+
"still", "even", "well", "well-",
|
|
126
|
+
]);
|
|
127
|
+
// Tokenize text into citation-relevant content tokens.
|
|
128
|
+
//
|
|
129
|
+
// - lowercase
|
|
130
|
+
// - split on non-alphanumeric runs (so "5-hour" → ["5","hour"])
|
|
131
|
+
// - drop pure stop-words
|
|
132
|
+
// - drop tokens shorter than 3 chars UNLESS they're pure numeric
|
|
133
|
+
// (so "5h", "7d", "2024", "429", "5", "7" all survive)
|
|
134
|
+
export function contentTokens(text) {
|
|
135
|
+
const out = [];
|
|
136
|
+
// Pre-split digit/letter boundaries so "5h" → "5 h", "version2" → "version 2".
|
|
137
|
+
// This way numeric anchors survive even when a claim writes them tightly
|
|
138
|
+
// bound to a unit ("5h", "7d") while the source spells them out ("5-hour",
|
|
139
|
+
// "seven days").
|
|
140
|
+
const normalized = text
|
|
141
|
+
.toLowerCase()
|
|
142
|
+
.replace(/([0-9])([a-z])/g, "$1 $2")
|
|
143
|
+
.replace(/([a-z])([0-9])/g, "$1 $2");
|
|
144
|
+
const raw = normalized.split(/[^a-z0-9]+/);
|
|
145
|
+
for (const t of raw) {
|
|
146
|
+
if (!t)
|
|
147
|
+
continue;
|
|
148
|
+
if (STOP_WORDS.has(t))
|
|
149
|
+
continue;
|
|
150
|
+
const isNumeric = /^[0-9]+$/.test(t);
|
|
151
|
+
if (!isNumeric && t.length < 3)
|
|
152
|
+
continue;
|
|
153
|
+
out.push(t);
|
|
154
|
+
}
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
// Token recall: fraction of distinct claim tokens present in the source.
|
|
158
|
+
//
|
|
159
|
+
// recall = |claim_set ∩ source_set| / |claim_set|
|
|
160
|
+
//
|
|
161
|
+
// An empty claim is vacuously supported (returns 1) — there is nothing to
|
|
162
|
+
// disprove. This only happens for sentences that consist entirely of
|
|
163
|
+
// stop-words and a citation; benign in practice.
|
|
164
|
+
export function recall(claim, source) {
|
|
165
|
+
const claimSet = new Set(claim);
|
|
166
|
+
if (claimSet.size === 0)
|
|
167
|
+
return 1;
|
|
168
|
+
let hit = 0;
|
|
169
|
+
for (const t of claimSet)
|
|
170
|
+
if (source.has(t))
|
|
171
|
+
hit += 1;
|
|
172
|
+
return hit / claimSet.size;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askalf/deepdive",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "A local research agent. One command, cited answer. Routes every LLM call through your own proxy (dario, Anthropic-compat, OpenAI-compat). Headless browser + pluggable search + multi-provider LLM — zero hosted dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|