@claude-flow/cli 3.10.4 → 3.10.6
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/dist/src/benchmarks/capability-tasks.d.ts +126 -0
- package/dist/src/benchmarks/capability-tasks.d.ts.map +1 -0
- package/dist/src/benchmarks/capability-tasks.js +147 -0
- package/dist/src/benchmarks/capability-tasks.js.map +1 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts +53 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.js +177 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.js.map +1 -0
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts +51 -0
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-agent-gemini.js +352 -0
- package/dist/src/benchmarks/gaia-agent-gemini.js.map +1 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts +18 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.js +253 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-agent.d.ts +198 -0
- package/dist/src/benchmarks/gaia-agent.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-agent.js +651 -0
- package/dist/src/benchmarks/gaia-agent.js.map +1 -0
- package/dist/src/benchmarks/gaia-causal-memory.d.ts +133 -0
- package/dist/src/benchmarks/gaia-causal-memory.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-causal-memory.js +281 -0
- package/dist/src/benchmarks/gaia-causal-memory.js.map +1 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts +22 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.js +300 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.d.ts +105 -0
- package/dist/src/benchmarks/gaia-claude-p.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.js +269 -0
- package/dist/src/benchmarks/gaia-claude-p.js.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.js +168 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent-runner.py +556 -0
- package/dist/src/benchmarks/gaia-codeagent.d.ts +129 -0
- package/dist/src/benchmarks/gaia-codeagent.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent.js +590 -0
- package/dist/src/benchmarks/gaia-codeagent.js.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts +33 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.js +241 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-convergence.d.ts +138 -0
- package/dist/src/benchmarks/gaia-convergence.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-convergence.js +260 -0
- package/dist/src/benchmarks/gaia-convergence.js.map +1 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.d.ts +19 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.js +246 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-critic.d.ts +123 -0
- package/dist/src/benchmarks/gaia-critic.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-critic.js +312 -0
- package/dist/src/benchmarks/gaia-critic.js.map +1 -0
- package/dist/src/benchmarks/gaia-critic.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-critic.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-critic.smoke.js +327 -0
- package/dist/src/benchmarks/gaia-critic.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts +22 -0
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-dag-pilot.js +158 -0
- package/dist/src/benchmarks/gaia-dag-pilot.js.map +1 -0
- package/dist/src/benchmarks/gaia-dag.d.ts +110 -0
- package/dist/src/benchmarks/gaia-dag.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-dag.js +658 -0
- package/dist/src/benchmarks/gaia-dag.js.map +1 -0
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-dag.smoke.js +290 -0
- package/dist/src/benchmarks/gaia-dag.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-decomposer.d.ts +125 -0
- package/dist/src/benchmarks/gaia-decomposer.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-decomposer.js +350 -0
- package/dist/src/benchmarks/gaia-decomposer.js.map +1 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.js +228 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.d.ts +27 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.js +136 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts +17 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.js +106 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.js.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble.d.ts +103 -0
- package/dist/src/benchmarks/gaia-ensemble.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble.js +462 -0
- package/dist/src/benchmarks/gaia-ensemble.js.map +1 -0
- package/dist/src/benchmarks/gaia-extract.smoke.d.ts +45 -0
- package/dist/src/benchmarks/gaia-extract.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-extract.smoke.js +242 -0
- package/dist/src/benchmarks/gaia-extract.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts +17 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.js +168 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.js.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/features.d.ts +46 -0
- package/dist/src/benchmarks/gaia-hardness/features.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/features.js +170 -0
- package/dist/src/benchmarks/gaia-hardness/features.js.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.d.ts +105 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.js +260 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.js.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js +235 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts +51 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.js +179 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.js.map +1 -0
- package/dist/src/benchmarks/gaia-judge.d.ts +88 -0
- package/dist/src/benchmarks/gaia-judge.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-judge.js +437 -0
- package/dist/src/benchmarks/gaia-judge.js.map +1 -0
- package/dist/src/benchmarks/gaia-loader.d.ts +87 -0
- package/dist/src/benchmarks/gaia-loader.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-loader.js +326 -0
- package/dist/src/benchmarks/gaia-loader.js.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.d.ts +67 -0
- package/dist/src/benchmarks/gaia-mode-router.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.js +126 -0
- package/dist/src/benchmarks/gaia-mode-router.js.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts +15 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.js +131 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/file_read.d.ts +35 -0
- package/dist/src/benchmarks/gaia-tools/file_read.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/file_read.js +403 -0
- package/dist/src/benchmarks/gaia-tools/file_read.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts +126 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.js +225 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts +24 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js +276 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts +45 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.js +222 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts +24 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js +169 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/index.d.ts +32 -0
- package/dist/src/benchmarks/gaia-tools/index.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/index.js +36 -0
- package/dist/src/benchmarks/gaia-tools/index.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts +27 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.js +226 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts +31 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.js +94 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts +13 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js +98 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/types.d.ts +62 -0
- package/dist/src/benchmarks/gaia-tools/types.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/types.js +12 -0
- package/dist/src/benchmarks/gaia-tools/types.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts +52 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js +304 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts +61 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.js +217 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts +26 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js +152 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_search.d.ts +30 -0
- package/dist/src/benchmarks/gaia-tools/web_search.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_search.js +210 -0
- package/dist/src/benchmarks/gaia-tools/web_search.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts +24 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js +311 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts +25 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js +304 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-voting.d.ts +88 -0
- package/dist/src/benchmarks/gaia-voting.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-voting.js +297 -0
- package/dist/src/benchmarks/gaia-voting.js.map +1 -0
- package/dist/src/benchmarks/gaia-voting.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-voting.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-voting.smoke.js +332 -0
- package/dist/src/benchmarks/gaia-voting.smoke.js.map +1 -0
- package/dist/src/commands/gaia-bench.d.ts +40 -0
- package/dist/src/commands/gaia-bench.d.ts.map +1 -0
- package/dist/src/commands/gaia-bench.js +597 -0
- package/dist/src/commands/gaia-bench.js.map +1 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +2 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +41 -4
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/performance-capability.d.ts +30 -0
- package/dist/src/commands/performance-capability.d.ts.map +1 -0
- package/dist/src/commands/performance-capability.js +349 -0
- package/dist/src/commands/performance-capability.js.map +1 -0
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +9 -0
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +25 -6
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +9 -4
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +25 -2
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +20 -3
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +12 -1
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +34 -0
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Smoke tests for extractFinalAnswer + buildUserMessage (iter 53a T2 narrowed).
|
|
4
|
+
*
|
|
5
|
+
* Iter 53a changes vs iter 52 T2:
|
|
6
|
+
* - Stage 2/3 (prose fallback) REMOVED — extractFinalAnswer is Stage 1 only.
|
|
7
|
+
* - Commitment prompt no longer has "FINAL_ANSWER: unknown" surrender instruction.
|
|
8
|
+
* - Reversed-text preprocessor PRESERVED (not the source of regressions).
|
|
9
|
+
*
|
|
10
|
+
* Anti-regression suite (7 cases):
|
|
11
|
+
* These are the exact failure modes from iter 52 T2 that must not regress.
|
|
12
|
+
* They test that the extraction logic is stable and correct for the 7 questions
|
|
13
|
+
* where iter 52 broke but iter 51 was correct.
|
|
14
|
+
*
|
|
15
|
+
* Run (after build):
|
|
16
|
+
* node dist/benchmarks/gaia-extract.smoke.js
|
|
17
|
+
*
|
|
18
|
+
* Exit 0 on all pass, 1 on any failure.
|
|
19
|
+
*
|
|
20
|
+
* Refs: ADR-133, ADR-135, iter 52 T2, iter 53a, #2156
|
|
21
|
+
*/
|
|
22
|
+
// Dynamic import so this file can run either as TS source (tsx) or compiled JS.
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
let _extractFinalAnswer;
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
+
let _buildUserMessage;
|
|
27
|
+
function makeResp(text) {
|
|
28
|
+
return {
|
|
29
|
+
id: 'test',
|
|
30
|
+
model: 'test',
|
|
31
|
+
stop_reason: 'end_turn',
|
|
32
|
+
content: [{ type: 'text', text }],
|
|
33
|
+
usage: { input_tokens: 0, output_tokens: 0 },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const CASES = [
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Stage 1: primary FINAL_ANSWER: pattern (iter 53a: this is the ONLY stage)
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
{
|
|
41
|
+
label: 'Stage1 basic FINAL_ANSWER:',
|
|
42
|
+
input: 'I searched and found the capital.\nFINAL_ANSWER: Paris',
|
|
43
|
+
expected: 'Paris',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: 'Stage1 case-insensitive final_answer:',
|
|
47
|
+
input: 'The result is known.\nfinal_answer: 42',
|
|
48
|
+
expected: '42',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: 'Stage1 with leading whitespace',
|
|
52
|
+
input: 'Done.\n FINAL_ANSWER: Tokyo ',
|
|
53
|
+
expected: 'Tokyo',
|
|
54
|
+
},
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Prose-only outputs with no FINAL_ANSWER: tag — must return null (iter 53a).
|
|
57
|
+
// These were previously handled by Stage 2/3 (iter 52 T2).
|
|
58
|
+
// In iter 53a, we rely on the agent committing with the tag instead.
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
{
|
|
61
|
+
label: 'Prose-only "The answer is X" — null in iter 53a (no Stage 2)',
|
|
62
|
+
input: 'After analysis, the answer is Right.',
|
|
63
|
+
expected: null,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
label: 'Prose-only "Therefore X" — null in iter 53a (no Stage 2)',
|
|
67
|
+
input: 'Based on the clues, therefore the answer is Berlin.',
|
|
68
|
+
expected: null,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
label: 'Prose-only "Answer: X" — null in iter 53a (no Stage 2)',
|
|
72
|
+
input: 'Let me compute this.\nAnswer: 17',
|
|
73
|
+
expected: null,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
label: 'Prose-only all-caps last line — null in iter 53a (no Stage 3)',
|
|
77
|
+
input: 'I computed the value based on many steps.\nRIGHT',
|
|
78
|
+
expected: null,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: 'Prose-only numeric last line — null in iter 53a (no Stage 3)',
|
|
82
|
+
input: 'The final calculation gives us:\n346',
|
|
83
|
+
expected: null,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
label: 'Prose-only short-phrase last line — null in iter 53a (no Stage 3)',
|
|
87
|
+
input: 'After extensive research, the result is:\nBerlin, Germany',
|
|
88
|
+
expected: null,
|
|
89
|
+
},
|
|
90
|
+
// Null case: no answer extractable (verbose prose, no commitment)
|
|
91
|
+
{
|
|
92
|
+
label: 'Null case: only tool-call reasoning, no commitment',
|
|
93
|
+
input: 'I tried searching but could not find the specific information requested.',
|
|
94
|
+
expected: null,
|
|
95
|
+
},
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Reversed text pre-processor (buildUserMessage) — PRESERVED in iter 53a
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
{
|
|
100
|
+
label: 'Reversed text: adds decoded hint',
|
|
101
|
+
input: '.rewsna eht sa "tfel" drow eht fo etisoppo eht etirw ,ecnetnes siht dnatsrednu uoy fI',
|
|
102
|
+
expected: '[NOTE:',
|
|
103
|
+
isUserMsg: true,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
label: 'Normal text: no hint added',
|
|
107
|
+
input: 'What is the capital of France?',
|
|
108
|
+
expected: 'What is the capital of France?',
|
|
109
|
+
isUserMsg: true,
|
|
110
|
+
},
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Anti-regression suite (iter 53a) — 7 cases for iter 52 regressions.
|
|
113
|
+
//
|
|
114
|
+
// These represent the exact regression patterns from iter 52 T2:
|
|
115
|
+
// a1e91b78: agent surrendered with "unknown" (commitment prompt over-trigger)
|
|
116
|
+
// 935e2cff: agent gave empty answer (Stage 2/3 failed after extraction)
|
|
117
|
+
// 305ac316: agent gave empty answer (Stage 2/3 failed after extraction)
|
|
118
|
+
// 7673d772: agent gave empty answer (Stage 2/3 failed after extraction)
|
|
119
|
+
// 3f57289b: Stage 3 grabbed wrong number from prose
|
|
120
|
+
// 50ec8903: Stage 3 grabbed markdown fragment instead of correct answer
|
|
121
|
+
// 5a0c1adf: Stage 3 grabbed "Claus Peter" instead of correct "Claus"
|
|
122
|
+
//
|
|
123
|
+
// Each test constructs a synthetic response that mimics the failure mode
|
|
124
|
+
// and asserts the correct Stage 1 extraction behavior.
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
// AR-1: a1e91b78 — agent used to surrender with "FINAL_ANSWER: unknown"
|
|
127
|
+
// In iter 52, system prompt said to output "FINAL_ANSWER: unknown" if unsure.
|
|
128
|
+
// With that instruction removed, the agent reasons further and finds the answer.
|
|
129
|
+
// This test verifies: if the agent DOES output a correct FINAL_ANSWER, we extract it.
|
|
130
|
+
{
|
|
131
|
+
label: 'AR-1 (a1e91b78): Stage1 extracts correct answer — not "unknown"',
|
|
132
|
+
input: 'I found the video. The maximum number of bird species seen together is 3.\nFINAL_ANSWER: 3',
|
|
133
|
+
expected: '3',
|
|
134
|
+
},
|
|
135
|
+
// AR-2: 935e2cff — agent had the answer but Stage 2 produced empty string
|
|
136
|
+
// In iter 53a, agent should output FINAL_ANSWER: Research correctly.
|
|
137
|
+
{
|
|
138
|
+
label: 'AR-2 (935e2cff): Stage1 extracts "Research" correctly',
|
|
139
|
+
input: 'After reviewing the policy document, R stands for Research.\nFINAL_ANSWER: Research',
|
|
140
|
+
expected: 'Research',
|
|
141
|
+
},
|
|
142
|
+
// AR-3: 305ac316 — agent had "Wojciech" but extraction failed
|
|
143
|
+
{
|
|
144
|
+
label: 'AR-3 (305ac316): Stage1 extracts Polish name correctly',
|
|
145
|
+
input: 'The actor played Wojciech in the movie.\nFINAL_ANSWER: Wojciech',
|
|
146
|
+
expected: 'Wojciech',
|
|
147
|
+
},
|
|
148
|
+
// AR-4: 7673d772 — agent had "inference" but extraction failed
|
|
149
|
+
{
|
|
150
|
+
label: 'AR-4 (7673d772): Stage1 extracts legal term correctly',
|
|
151
|
+
input: 'The fifth section of the federal rule uses the word "inference".\nFINAL_ANSWER: inference',
|
|
152
|
+
expected: 'inference',
|
|
153
|
+
},
|
|
154
|
+
// AR-5: 3f57289b — Stage 3 grabbed wrong number (525 instead of 519)
|
|
155
|
+
// The regression was caused by Stage 3 picking a wrong number from prose.
|
|
156
|
+
// With Stage 3 removed, Stage 1 is the only source — agent must use the tag.
|
|
157
|
+
{
|
|
158
|
+
label: 'AR-5 (3f57289b): Stage1 extracts correct at-bat count',
|
|
159
|
+
input: 'Reggie Jackson had 525 at-bats but the player with most walks had 519.\nFINAL_ANSWER: 519',
|
|
160
|
+
expected: '519',
|
|
161
|
+
},
|
|
162
|
+
// AR-6: 50ec8903 — Stage 3 grabbed "- Orange-Green edge →" (markdown fragment)
|
|
163
|
+
// With Stage 3 removed, only FINAL_ANSWER: tag is extracted.
|
|
164
|
+
{
|
|
165
|
+
label: 'AR-6 (50ec8903): Stage1 extracts Rubik cube colors correctly',
|
|
166
|
+
input: 'After solving the cube configuration, the answer is green, white.\nFINAL_ANSWER: green, white',
|
|
167
|
+
expected: 'green, white',
|
|
168
|
+
},
|
|
169
|
+
// AR-7: 5a0c1adf — Stage 3 grabbed "Claus Peter" (too many words)
|
|
170
|
+
// With Stage 3 removed, only FINAL_ANSWER: tag is extracted.
|
|
171
|
+
{
|
|
172
|
+
label: 'AR-7 (5a0c1adf): Stage1 extracts first name only, not "Claus Peter"',
|
|
173
|
+
input: 'The conductor\'s full name is Claus Peter Flor, but his first name is Claus.\nFINAL_ANSWER: Claus',
|
|
174
|
+
expected: 'Claus',
|
|
175
|
+
},
|
|
176
|
+
];
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
// Runner
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
async function main() {
|
|
181
|
+
// Import at runtime to work with both tsx and compiled JS.
|
|
182
|
+
const mod = await import('./gaia-agent.js');
|
|
183
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
184
|
+
const m = mod;
|
|
185
|
+
_extractFinalAnswer = m._extractFinalAnswerForTest;
|
|
186
|
+
_buildUserMessage = m._buildUserMessageForTest;
|
|
187
|
+
if (typeof _extractFinalAnswer !== 'function' || typeof _buildUserMessage !== 'function') {
|
|
188
|
+
console.error('ERROR: _extractFinalAnswerForTest / _buildUserMessageForTest not exported from gaia-agent.' +
|
|
189
|
+
'\nAdd `export { extractFinalAnswer as _extractFinalAnswerForTest, ' +
|
|
190
|
+
'buildUserMessage as _buildUserMessageForTest }` to gaia-agent.ts.');
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
let failures = 0;
|
|
194
|
+
const PASS = '\x1b[32mPASS\x1b[0m';
|
|
195
|
+
const FAIL = '\x1b[31mFAIL\x1b[0m';
|
|
196
|
+
console.log('\n=== gaia-extract smoke (iter 53a T2 narrowed) ===\n');
|
|
197
|
+
console.log('Suite: 12 original + 7 anti-regression = 19 cases\n');
|
|
198
|
+
for (const tc of CASES) {
|
|
199
|
+
let actual;
|
|
200
|
+
if (tc.isUserMsg) {
|
|
201
|
+
actual = _buildUserMessage(tc.input);
|
|
202
|
+
// For user message tests, check startsWith instead of exact equality.
|
|
203
|
+
const pass = tc.expected === null
|
|
204
|
+
? actual === null
|
|
205
|
+
: actual !== null && (tc.expected === actual || actual.startsWith(tc.expected));
|
|
206
|
+
if (pass) {
|
|
207
|
+
console.log(` ${PASS} ${tc.label}`);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
console.log(` ${FAIL} ${tc.label}`);
|
|
211
|
+
console.log(` expected starts-with: ${JSON.stringify(tc.expected)}`);
|
|
212
|
+
console.log(` actual: ${JSON.stringify((actual ?? '').slice(0, 80))}`);
|
|
213
|
+
failures++;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
actual = _extractFinalAnswer(makeResp(tc.input));
|
|
218
|
+
const pass = tc.expected === null
|
|
219
|
+
? actual === null
|
|
220
|
+
: actual !== null && actual === tc.expected;
|
|
221
|
+
if (pass) {
|
|
222
|
+
console.log(` ${PASS} ${tc.label}`);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
console.log(` ${FAIL} ${tc.label}`);
|
|
226
|
+
console.log(` expected: ${JSON.stringify(tc.expected)}`);
|
|
227
|
+
console.log(` actual: ${JSON.stringify(actual)}`);
|
|
228
|
+
failures++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const total = CASES.length;
|
|
233
|
+
const passed = total - failures;
|
|
234
|
+
console.log(`\n=== ${failures === 0 ? 'ALL PASSED' : `${failures} FAILED`} (${passed}/${total} cases) ===\n`);
|
|
235
|
+
if (failures > 0)
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
main().catch((err) => {
|
|
239
|
+
console.error('Smoke crashed:', err);
|
|
240
|
+
process.exit(2);
|
|
241
|
+
});
|
|
242
|
+
//# sourceMappingURL=gaia-extract.smoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-extract.smoke.js","sourceRoot":"","sources":["../../../src/benchmarks/gaia-extract.smoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA Phase 2 — Gemini 2.5 Pro Thinking 5-Question Pilot
|
|
3
|
+
*
|
|
4
|
+
* Runs 5 diverse questions through the Gemini adapter to evaluate:
|
|
5
|
+
* - Per-question cost vs $0.12 gate
|
|
6
|
+
* - Pass rate vs 3/5 gate
|
|
7
|
+
*
|
|
8
|
+
* If both gates pass, authorizes full 53Q run.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* npx tsx src/benchmarks/gaia-gemini-pilot.ts
|
|
12
|
+
* node dist/benchmarks/gaia-gemini-pilot.js
|
|
13
|
+
*
|
|
14
|
+
* Refs: ADR-133, #2156 Phase 2
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=gaia-gemini-pilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-gemini-pilot.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/gaia-gemini-pilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA Phase 2 — Gemini 2.5 Pro Thinking 5-Question Pilot
|
|
3
|
+
*
|
|
4
|
+
* Runs 5 diverse questions through the Gemini adapter to evaluate:
|
|
5
|
+
* - Per-question cost vs $0.12 gate
|
|
6
|
+
* - Pass rate vs 3/5 gate
|
|
7
|
+
*
|
|
8
|
+
* If both gates pass, authorizes full 53Q run.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* npx tsx src/benchmarks/gaia-gemini-pilot.ts
|
|
12
|
+
* node dist/benchmarks/gaia-gemini-pilot.js
|
|
13
|
+
*
|
|
14
|
+
* Refs: ADR-133, #2156 Phase 2
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'node:fs';
|
|
17
|
+
import * as os from 'node:os';
|
|
18
|
+
import * as path from 'node:path';
|
|
19
|
+
import { runGeminiAgent, isGeminiAnswerCorrect, DEFAULT_GEMINI_MODEL } from './gaia-agent-gemini.js';
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Cost gate constants
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
const COST_GATE_PER_Q_USD = 0.12;
|
|
24
|
+
const PASS_RATE_GATE = 3; // out of 5
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Load pilot questions from cache
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
const PILOT_IDS = [
|
|
29
|
+
'9318445f-fe6a-4e1b-acbf-c68228c9906a', // PNG image: fractions worksheet
|
|
30
|
+
'7bd855d8-463d-4ed5-93ca-5fe35145f733', // XLSX: fast-food sales
|
|
31
|
+
'5188369a-3bbe-43d8-8b94-11558f909a08', // Retrieval: Merriam-Webster word-of-day writer
|
|
32
|
+
'5d0080cb-90d7-4712-bc33-848150e917d3', // Calculation: fish bag volume
|
|
33
|
+
'840bfca7-4f7b-481a-8794-c560c340185d', // Retrieval: NASA contract number
|
|
34
|
+
];
|
|
35
|
+
function loadPilotQuestions() {
|
|
36
|
+
const cacheDir = path.join(os.homedir(), '.cache', 'ruflo', 'gaia');
|
|
37
|
+
const dataPath = path.join(cacheDir, 'level1-main.json');
|
|
38
|
+
if (!fs.existsSync(dataPath)) {
|
|
39
|
+
throw new Error(`GAIA cache not found at ${dataPath}. Run a full bench first.`);
|
|
40
|
+
}
|
|
41
|
+
const data = JSON.parse(fs.readFileSync(dataPath, 'utf-8'));
|
|
42
|
+
const byId = new Map(data.map((q) => [q.task_id, q]));
|
|
43
|
+
const questions = [];
|
|
44
|
+
for (const id of PILOT_IDS) {
|
|
45
|
+
const q = byId.get(id);
|
|
46
|
+
if (!q)
|
|
47
|
+
throw new Error(`Pilot question ${id} not found in cache`);
|
|
48
|
+
// Resolve file_path from cache
|
|
49
|
+
if (q.file_name && !q.file_path) {
|
|
50
|
+
const fp = path.join(cacheDir, 'files', q.file_name);
|
|
51
|
+
if (fs.existsSync(fp)) {
|
|
52
|
+
q.file_path = fp;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
questions.push(q);
|
|
56
|
+
}
|
|
57
|
+
return questions;
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Main pilot runner
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
async function runPilot() {
|
|
63
|
+
console.log('');
|
|
64
|
+
console.log('=== GAIA Phase 2 Pilot — Gemini 2.5 Pro Thinking ===');
|
|
65
|
+
console.log(`Model: ${DEFAULT_GEMINI_MODEL}`);
|
|
66
|
+
console.log(`Questions: ${PILOT_IDS.length}`);
|
|
67
|
+
console.log(`Cost gate: $${COST_GATE_PER_Q_USD}/question`);
|
|
68
|
+
console.log(`Pass rate gate: ${PASS_RATE_GATE}/${PILOT_IDS.length}`);
|
|
69
|
+
console.log('');
|
|
70
|
+
const questions = loadPilotQuestions();
|
|
71
|
+
let passed = 0;
|
|
72
|
+
let totalCost = 0;
|
|
73
|
+
let totalInputTokens = 0;
|
|
74
|
+
let totalOutputTokens = 0;
|
|
75
|
+
let totalThinkingTokens = 0;
|
|
76
|
+
const perQResults = [];
|
|
77
|
+
for (let i = 0; i < questions.length; i++) {
|
|
78
|
+
const q = questions[i];
|
|
79
|
+
console.log(`[Q${i + 1}/5] ${q.task_id}`);
|
|
80
|
+
console.log(` Question: ${q.question.slice(0, 100)}${q.question.length > 100 ? '...' : ''}`);
|
|
81
|
+
console.log(` File: ${q.file_name ?? 'none'}`);
|
|
82
|
+
const result = await runGeminiAgent(q, {
|
|
83
|
+
model: DEFAULT_GEMINI_MODEL,
|
|
84
|
+
maxTurns: 12,
|
|
85
|
+
maxTokensPerTurn: 8192,
|
|
86
|
+
});
|
|
87
|
+
const correct = result.finalAnswer !== null &&
|
|
88
|
+
isGeminiAnswerCorrect(result.finalAnswer, q.final_answer);
|
|
89
|
+
if (correct)
|
|
90
|
+
passed++;
|
|
91
|
+
totalCost += result.estimatedCostUsd;
|
|
92
|
+
totalInputTokens += result.totalInputTokens;
|
|
93
|
+
totalOutputTokens += result.totalOutputTokens;
|
|
94
|
+
totalThinkingTokens += result.totalThinkingTokens;
|
|
95
|
+
perQResults.push({
|
|
96
|
+
taskId: q.task_id,
|
|
97
|
+
correct,
|
|
98
|
+
answer: result.finalAnswer,
|
|
99
|
+
expected: q.final_answer,
|
|
100
|
+
cost: result.estimatedCostUsd,
|
|
101
|
+
turns: result.turns,
|
|
102
|
+
thinkingTokens: result.totalThinkingTokens,
|
|
103
|
+
wallMs: result.wallMs,
|
|
104
|
+
});
|
|
105
|
+
const status = correct ? 'PASS' : 'FAIL';
|
|
106
|
+
console.log(` Expected: "${q.final_answer}"`);
|
|
107
|
+
console.log(` Got: "${result.finalAnswer ?? 'null'}"`);
|
|
108
|
+
console.log(` Status: ${status} | turns=${result.turns} | ` +
|
|
109
|
+
`input=${result.totalInputTokens.toLocaleString()} | ` +
|
|
110
|
+
`output=${result.totalOutputTokens.toLocaleString()} | ` +
|
|
111
|
+
`thinking=${result.totalThinkingTokens.toLocaleString()} | ` +
|
|
112
|
+
`cost=$${result.estimatedCostUsd.toFixed(4)} | ` +
|
|
113
|
+
`wall=${(result.wallMs / 1000).toFixed(1)}s`);
|
|
114
|
+
if (result.error)
|
|
115
|
+
console.log(` Error: ${result.error}`);
|
|
116
|
+
if (result.timedOut)
|
|
117
|
+
console.log(` TIMED OUT`);
|
|
118
|
+
console.log('');
|
|
119
|
+
}
|
|
120
|
+
const avgCost = totalCost / PILOT_IDS.length;
|
|
121
|
+
const passRate = passed / PILOT_IDS.length;
|
|
122
|
+
const costGatePasses = avgCost <= COST_GATE_PER_Q_USD;
|
|
123
|
+
const passRateGatePasses = passed >= PASS_RATE_GATE;
|
|
124
|
+
const bothGatesPass = costGatePasses && passRateGatePasses;
|
|
125
|
+
console.log('=== Pilot Results ===');
|
|
126
|
+
console.log(`Pass rate: ${passed}/${PILOT_IDS.length} (${(passRate * 100).toFixed(0)}%)`);
|
|
127
|
+
console.log(`Avg cost/Q: $${avgCost.toFixed(4)}`);
|
|
128
|
+
console.log(`Total cost: $${totalCost.toFixed(4)}`);
|
|
129
|
+
console.log(`Input tokens: ${totalInputTokens.toLocaleString()}`);
|
|
130
|
+
console.log(`Output tokens: ${totalOutputTokens.toLocaleString()}`);
|
|
131
|
+
console.log(`Thinking tokens: ${totalThinkingTokens.toLocaleString()}`);
|
|
132
|
+
console.log('');
|
|
133
|
+
console.log(`Cost gate ($${COST_GATE_PER_Q_USD}/Q): ${costGatePasses ? 'PASS' : 'FAIL'} (avg $${avgCost.toFixed(4)})`);
|
|
134
|
+
console.log(`Pass rate gate (${PASS_RATE_GATE}/5): ${passRateGatePasses ? 'PASS' : 'FAIL'} (${passed}/${PILOT_IDS.length})`);
|
|
135
|
+
console.log(`Gate verdict: ${bothGatesPass ? 'BOTH GATES PASS — authorize full 53Q run' : 'GATE FAILED — do NOT run full 53Q'}`);
|
|
136
|
+
console.log('');
|
|
137
|
+
// Emit machine-readable JSON artifact
|
|
138
|
+
const artifact = {
|
|
139
|
+
pilot: 'phase2-gemini-thinking',
|
|
140
|
+
model: DEFAULT_GEMINI_MODEL,
|
|
141
|
+
timestamp: new Date().toISOString(),
|
|
142
|
+
summary: {
|
|
143
|
+
passed,
|
|
144
|
+
total: PILOT_IDS.length,
|
|
145
|
+
passRate: (passRate * 100).toFixed(1),
|
|
146
|
+
avgCostUsd: avgCost,
|
|
147
|
+
totalCostUsd: totalCost,
|
|
148
|
+
totalInputTokens,
|
|
149
|
+
totalOutputTokens,
|
|
150
|
+
totalThinkingTokens,
|
|
151
|
+
costGate: { threshold: COST_GATE_PER_Q_USD, value: avgCost, passed: costGatePasses },
|
|
152
|
+
passRateGate: { threshold: PASS_RATE_GATE, value: passed, passed: passRateGatePasses },
|
|
153
|
+
bothGatesPass,
|
|
154
|
+
},
|
|
155
|
+
questions: perQResults,
|
|
156
|
+
};
|
|
157
|
+
const outPath = path.join(process.cwd(), 'docs/benchmarks/runs/gaia-l1-phase2-gemini-pilot.json');
|
|
158
|
+
fs.writeFileSync(outPath, JSON.stringify(artifact, null, 2));
|
|
159
|
+
console.log(`Artifact written to: ${outPath}`);
|
|
160
|
+
if (!bothGatesPass) {
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
runPilot().catch((err) => {
|
|
165
|
+
console.error('Pilot crashed:', err);
|
|
166
|
+
process.exit(2);
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=gaia-gemini-pilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-gemini-pilot.js","sourceRoot":"","sources":["../../../src/benchmarks/gaia-gemini-pilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA Hardness Predictor — Feature Extraction (ADR-136 Track Q)
|
|
3
|
+
*
|
|
4
|
+
* Extracts a 17-dimensional feature vector from a GaiaQuestion for use
|
|
5
|
+
* in the linear hardness classifier. Deliberately avoids external
|
|
6
|
+
* dependencies (no spacy, no heavy NLP) — all extraction is regex-based
|
|
7
|
+
* with O(1) per question.
|
|
8
|
+
*
|
|
9
|
+
* Feature vector layout (17 dims):
|
|
10
|
+
* [0] question length in characters (normalised / 500)
|
|
11
|
+
* [1] question length in words (normalised / 100)
|
|
12
|
+
* [2] sentence count (normalised / 5)
|
|
13
|
+
* [3] question word: "what" (0/1)
|
|
14
|
+
* [4] question word: "how" (0/1)
|
|
15
|
+
* [5] question word: "who/when/where" (0/1)
|
|
16
|
+
* [6] question word: "calculate/compute/how many/what percentage" (0/1)
|
|
17
|
+
* [7] has numeric token (0/1)
|
|
18
|
+
* [8] has year token (4-digit) (0/1)
|
|
19
|
+
* [9] has comparison keyword (0/1)
|
|
20
|
+
* [10] estimated named-entity count (normalised / 5)
|
|
21
|
+
* [11] digit-token count (normalised / 5)
|
|
22
|
+
* [12] multi-hop signal (0/1) — bridge/relative clause pattern
|
|
23
|
+
* [13] requires math (0/1) — "how many/much/percentage/calculate/compute"
|
|
24
|
+
* [14] temporal chain (0/1) — "before/after X happened / since / until"
|
|
25
|
+
* [15] tool implication count (normalised / 4) — PDF/image/video/URL markers
|
|
26
|
+
* [16] file attachment present (0/1)
|
|
27
|
+
*
|
|
28
|
+
* All continuous values are min-max normalised to [0, 1] using fixed
|
|
29
|
+
* divisors chosen so typical GAIA questions fall in [0.1, 0.9].
|
|
30
|
+
*
|
|
31
|
+
* Refs: ADR-136, #2156
|
|
32
|
+
*/
|
|
33
|
+
import type { GaiaQuestion } from '../gaia-loader.js';
|
|
34
|
+
export interface FeatureVector {
|
|
35
|
+
/** Raw 17-element array in [0, 1]. */
|
|
36
|
+
values: number[];
|
|
37
|
+
/** Human-readable labels matching values index. */
|
|
38
|
+
labels: string[];
|
|
39
|
+
}
|
|
40
|
+
export declare const FEATURE_LABELS: readonly string[];
|
|
41
|
+
/**
|
|
42
|
+
* Extract the 17-dimensional feature vector from a GaiaQuestion.
|
|
43
|
+
* All features are in [0, 1]. Never throws.
|
|
44
|
+
*/
|
|
45
|
+
export declare function extractFeatures(q: GaiaQuestion): FeatureVector;
|
|
46
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-hardness/features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtD,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAkBlC,CAAC;AA+CX;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,aAAa,CAmF9D"}
|