@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,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA End-to-End Smoke — ADR-133
|
|
3
|
+
*
|
|
4
|
+
* Wires gaia-agent.ts + gaia-judge.ts into a single end-to-end pipeline:
|
|
5
|
+
*
|
|
6
|
+
* for each question in SMOKE_FIXTURE:
|
|
7
|
+
* 1. runGaiaAgent(question) — Haiku agent loop, ≤8 turns
|
|
8
|
+
* 2. judgeAnswer(question, result.finalAnswer) — exact-match fast-path,
|
|
9
|
+
* Sonnet LLM-judge only if exact-match misses
|
|
10
|
+
*
|
|
11
|
+
* Reports: pass rate, total cost, mean turn count.
|
|
12
|
+
* Asserts: ≥ 3/5 questions pass (lenient — smoke fixture is not trivial).
|
|
13
|
+
*
|
|
14
|
+
* Cost discipline:
|
|
15
|
+
* - Agent: claude-haiku-4-5 at $0.25/$1.25 per M tokens
|
|
16
|
+
* - Judge: claude-sonnet-4-6 at $3/$15 per M tokens (only when needed)
|
|
17
|
+
* - Expected total for 5 questions × ~2 turns × Haiku + 1-2 Sonnet
|
|
18
|
+
* judge calls ≈ $0.02
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* ANTHROPIC_API_KEY=sk-ant-... npx tsx src/benchmarks/gaia-e2e-smoke.ts
|
|
22
|
+
*
|
|
23
|
+
* Refs: ADR-133, #2156
|
|
24
|
+
*/
|
|
25
|
+
declare function runE2ESmoke(): Promise<void>;
|
|
26
|
+
export { runE2ESmoke };
|
|
27
|
+
//# sourceMappingURL=gaia-e2e-smoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-e2e-smoke.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/gaia-e2e-smoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqDH,iBAAe,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0G1C;AAiBD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA End-to-End Smoke — ADR-133
|
|
3
|
+
*
|
|
4
|
+
* Wires gaia-agent.ts + gaia-judge.ts into a single end-to-end pipeline:
|
|
5
|
+
*
|
|
6
|
+
* for each question in SMOKE_FIXTURE:
|
|
7
|
+
* 1. runGaiaAgent(question) — Haiku agent loop, ≤8 turns
|
|
8
|
+
* 2. judgeAnswer(question, result.finalAnswer) — exact-match fast-path,
|
|
9
|
+
* Sonnet LLM-judge only if exact-match misses
|
|
10
|
+
*
|
|
11
|
+
* Reports: pass rate, total cost, mean turn count.
|
|
12
|
+
* Asserts: ≥ 3/5 questions pass (lenient — smoke fixture is not trivial).
|
|
13
|
+
*
|
|
14
|
+
* Cost discipline:
|
|
15
|
+
* - Agent: claude-haiku-4-5 at $0.25/$1.25 per M tokens
|
|
16
|
+
* - Judge: claude-sonnet-4-6 at $3/$15 per M tokens (only when needed)
|
|
17
|
+
* - Expected total for 5 questions × ~2 turns × Haiku + 1-2 Sonnet
|
|
18
|
+
* judge calls ≈ $0.02
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* ANTHROPIC_API_KEY=sk-ant-... npx tsx src/benchmarks/gaia-e2e-smoke.ts
|
|
22
|
+
*
|
|
23
|
+
* Refs: ADR-133, #2156
|
|
24
|
+
*/
|
|
25
|
+
import * as os from 'node:os';
|
|
26
|
+
import * as path from 'node:path';
|
|
27
|
+
import { SMOKE_FIXTURE, } from './gaia-loader.js';
|
|
28
|
+
import { runGaiaAgent, } from './gaia-agent.js';
|
|
29
|
+
import { judgeAnswer, } from './gaia-judge.js';
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Configuration
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/** Agent model — Haiku only for cost discipline. */
|
|
34
|
+
const AGENT_MODEL = 'claude-haiku-4-5';
|
|
35
|
+
/** Judge model — Sonnet for semantic judgments (only when exact-match fails). */
|
|
36
|
+
const JUDGE_MODEL = 'claude-sonnet-4-6';
|
|
37
|
+
/** Minimum pass rate for smoke to succeed. */
|
|
38
|
+
const MIN_PASS_RATE = 3 / 5;
|
|
39
|
+
// Haiku pricing ($/M tokens)
|
|
40
|
+
const HAIKU_IN = 0.25;
|
|
41
|
+
const HAIKU_OUT = 1.25;
|
|
42
|
+
// Sonnet pricing ($/M tokens)
|
|
43
|
+
const SONNET_IN = 3.0;
|
|
44
|
+
const SONNET_OUT = 15.0;
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Runner
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
async function runE2ESmoke() {
|
|
49
|
+
const hasKey = !!(process.env.ANTHROPIC_API_KEY?.trim());
|
|
50
|
+
if (!hasKey) {
|
|
51
|
+
console.error('ANTHROPIC_API_KEY is required for the end-to-end smoke.\n' +
|
|
52
|
+
'Set it with: export ANTHROPIC_API_KEY=sk-ant-...');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
const cacheDir = path.join(os.homedir(), '.cache', 'ruflo', 'gaia', 'judgments');
|
|
56
|
+
const judgeOpts = { judgeModel: JUDGE_MODEL, cacheDir };
|
|
57
|
+
const questions = SMOKE_FIXTURE;
|
|
58
|
+
const rows = [];
|
|
59
|
+
console.log(`\n=== GAIA End-to-End Smoke (${questions.length} questions) ===\n`);
|
|
60
|
+
console.log(`Agent: ${AGENT_MODEL} | Judge: ${JUDGE_MODEL}\n` +
|
|
61
|
+
`Questions: ${questions.length} | Min pass rate: ${(MIN_PASS_RATE * 100).toFixed(0)}%\n`);
|
|
62
|
+
for (const q of questions) {
|
|
63
|
+
process.stdout.write(`[${q.task_id}] "${q.question.slice(0, 60)}..." `);
|
|
64
|
+
// Run agent
|
|
65
|
+
const agentResult = await runGaiaAgent(q, { model: AGENT_MODEL });
|
|
66
|
+
// Judge
|
|
67
|
+
const judgeResult = await judgeAnswer({ id: q.task_id, expected: q.final_answer, questionText: q.question }, agentResult.finalAnswer, judgeOpts);
|
|
68
|
+
rows.push({ question: q, agentResult, judgeResult });
|
|
69
|
+
const verdict = judgeResult.passed ? '\x1b[32mPASS\x1b[0m' : '\x1b[31mFAIL\x1b[0m';
|
|
70
|
+
const path_ = judgeResult.scoringPath;
|
|
71
|
+
console.log(`${verdict} (turns=${agentResult.turns}, ` +
|
|
72
|
+
`answer="${agentResult.finalAnswer ?? 'null'}", ` +
|
|
73
|
+
`expected="${q.final_answer}", path=${path_})`);
|
|
74
|
+
}
|
|
75
|
+
// ── Summary ──
|
|
76
|
+
console.log('\n--- Summary ---\n');
|
|
77
|
+
const passed = rows.filter((r) => r.judgeResult.passed).length;
|
|
78
|
+
const total = rows.length;
|
|
79
|
+
const passRate = passed / total;
|
|
80
|
+
let totalAgentCostUsd = 0;
|
|
81
|
+
let totalJudgeCostUsd = 0;
|
|
82
|
+
let totalTurns = 0;
|
|
83
|
+
for (const row of rows) {
|
|
84
|
+
const { agentResult, judgeResult } = row;
|
|
85
|
+
totalTurns += agentResult.turns;
|
|
86
|
+
totalAgentCostUsd +=
|
|
87
|
+
(agentResult.totalInputTokens / 1_000_000) * HAIKU_IN +
|
|
88
|
+
(agentResult.totalOutputTokens / 1_000_000) * HAIKU_OUT;
|
|
89
|
+
totalJudgeCostUsd += judgeResult.judgeCostUsd ?? 0;
|
|
90
|
+
}
|
|
91
|
+
const totalCostUsd = totalAgentCostUsd + totalJudgeCostUsd;
|
|
92
|
+
const meanTurns = totalTurns / total;
|
|
93
|
+
console.log(`Pass rate : ${passed}/${total} (${(passRate * 100).toFixed(0)}%)`);
|
|
94
|
+
console.log(`Mean turns : ${meanTurns.toFixed(1)}`);
|
|
95
|
+
console.log(`Agent cost : $${totalAgentCostUsd.toFixed(5)} (Haiku)`);
|
|
96
|
+
console.log(`Judge cost : $${totalJudgeCostUsd.toFixed(5)} (Sonnet, only when needed)`);
|
|
97
|
+
console.log(`Total cost : $${totalCostUsd.toFixed(5)}`);
|
|
98
|
+
// ── Per-row detail ──
|
|
99
|
+
console.log('\n--- Per-question detail ---\n');
|
|
100
|
+
for (const row of rows) {
|
|
101
|
+
const { question, agentResult, judgeResult } = row;
|
|
102
|
+
const verdict = judgeResult.passed ? 'PASS' : 'FAIL';
|
|
103
|
+
console.log(` ${verdict} ${question.task_id} turns=${agentResult.turns} ` +
|
|
104
|
+
`path=${judgeResult.scoringPath} ` +
|
|
105
|
+
`answer="${agentResult.finalAnswer ?? 'null'}" ` +
|
|
106
|
+
`expected="${question.final_answer}"`);
|
|
107
|
+
if (judgeResult.judgeReason) {
|
|
108
|
+
console.log(` reason: ${judgeResult.judgeReason}`);
|
|
109
|
+
}
|
|
110
|
+
if (agentResult.error) {
|
|
111
|
+
console.log(` error : ${agentResult.error}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ── Assertion ──
|
|
115
|
+
console.log('');
|
|
116
|
+
if (passRate >= MIN_PASS_RATE) {
|
|
117
|
+
console.log(`\x1b[32mSmoke PASSED\x1b[0m — ${passed}/${total} ≥ ${(MIN_PASS_RATE * 100).toFixed(0)}% required.\n`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.error(`\x1b[31mSmoke FAILED\x1b[0m — ${passed}/${total} < ${(MIN_PASS_RATE * 100).toFixed(0)}% required.\n`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// Entry point
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
const isMain = process.argv[1] && (process.argv[1].endsWith('gaia-e2e-smoke.ts') ||
|
|
128
|
+
process.argv[1].endsWith('gaia-e2e-smoke.js'));
|
|
129
|
+
if (isMain) {
|
|
130
|
+
runE2ESmoke().catch((err) => {
|
|
131
|
+
console.error('E2E smoke failed:', err);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export { runE2ESmoke };
|
|
136
|
+
//# sourceMappingURL=gaia-e2e-smoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-e2e-smoke.js","sourceRoot":"","sources":["../../../src/benchmarks/gaia-e2e-smoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA Ensemble Pilot — ADR-139 5-question validation
|
|
3
|
+
*
|
|
4
|
+
* Runs 5 diverse GAIA L1 questions through the 2-model ensemble
|
|
5
|
+
* (claude-sonnet-4-6 + gemini-2.5-pro) and reports accuracy, cost, and
|
|
6
|
+
* projections. OpenRouter is skipped until credits are topped up.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* node dist/src/benchmarks/gaia-ensemble-pilot.js
|
|
10
|
+
* node dist/src/benchmarks/gaia-ensemble-pilot.js --models claude-sonnet-4-6,gemini-2.5-pro,openai/gpt-5
|
|
11
|
+
*
|
|
12
|
+
* Exit codes:
|
|
13
|
+
* 0 pilot passed (accuracy ≥ 3/5 AND projected 53Q cost ≤ $40)
|
|
14
|
+
* 1 pilot failed or cost exceeded
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=gaia-ensemble-pilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-ensemble-pilot.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/gaia-ensemble-pilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA Ensemble Pilot — ADR-139 5-question validation
|
|
3
|
+
*
|
|
4
|
+
* Runs 5 diverse GAIA L1 questions through the 2-model ensemble
|
|
5
|
+
* (claude-sonnet-4-6 + gemini-2.5-pro) and reports accuracy, cost, and
|
|
6
|
+
* projections. OpenRouter is skipped until credits are topped up.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* node dist/src/benchmarks/gaia-ensemble-pilot.js
|
|
10
|
+
* node dist/src/benchmarks/gaia-ensemble-pilot.js --models claude-sonnet-4-6,gemini-2.5-pro,openai/gpt-5
|
|
11
|
+
*
|
|
12
|
+
* Exit codes:
|
|
13
|
+
* 0 pilot passed (accuracy ≥ 3/5 AND projected 53Q cost ≤ $40)
|
|
14
|
+
* 1 pilot failed or cost exceeded
|
|
15
|
+
*/
|
|
16
|
+
import { runEnsemblePilot } from './gaia-ensemble.js';
|
|
17
|
+
import * as fs from 'node:fs';
|
|
18
|
+
import * as path from 'node:path';
|
|
19
|
+
import * as os from 'node:os';
|
|
20
|
+
const GAIA_CACHE = path.join(os.homedir(), '.cache', 'ruflo', 'gaia', 'level1-main.json');
|
|
21
|
+
const PILOT_QUESTION_IDS = [
|
|
22
|
+
'e1fc63a2-da7a-432f-be78-7c4a95598703', // marathon pace math
|
|
23
|
+
'8e867cd7-cff9-4e6c-867a-ff5ddc2550be', // discography lookup
|
|
24
|
+
'2d83110e-a098-4ebb-9987-066c06fa42d0', // reversed text encoding
|
|
25
|
+
'27d5d136-8563-469e-92bf-fd103c28b57c', // boolean logic formulas
|
|
26
|
+
'dc28cf18-6431-458b-83ef-64b3ce566c10', // recipe/cooking lookup
|
|
27
|
+
];
|
|
28
|
+
async function main() {
|
|
29
|
+
// Parse --models flag
|
|
30
|
+
const modelsArg = process.argv.find((a) => a.startsWith('--models='))?.split('=')[1];
|
|
31
|
+
const models = modelsArg ? modelsArg.split(',') : ['claude-sonnet-4-6', 'gemini-2.5-pro'];
|
|
32
|
+
console.error(`[pilot] Models: ${models.join(', ')}`);
|
|
33
|
+
console.error(`[pilot] Loading GAIA dataset from: ${GAIA_CACHE}`);
|
|
34
|
+
if (!fs.existsSync(GAIA_CACHE)) {
|
|
35
|
+
console.error('[pilot] ERROR: GAIA cache not found. Run a full benchmark first to populate cache.');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const allQuestions = JSON.parse(fs.readFileSync(GAIA_CACHE, 'utf-8'));
|
|
39
|
+
const pilotQuestions = allQuestions.filter((q) => PILOT_QUESTION_IDS.includes(q.task_id));
|
|
40
|
+
if (pilotQuestions.length !== PILOT_QUESTION_IDS.length) {
|
|
41
|
+
console.error(`[pilot] WARNING: Expected ${PILOT_QUESTION_IDS.length} questions, found ${pilotQuestions.length}`);
|
|
42
|
+
}
|
|
43
|
+
console.error(`[pilot] Running ${pilotQuestions.length} questions through ${models.length}-model ensemble...`);
|
|
44
|
+
const result = await runEnsemblePilot(pilotQuestions, {
|
|
45
|
+
models,
|
|
46
|
+
maxTurns: 10,
|
|
47
|
+
maxTokensPerTurn: 4096,
|
|
48
|
+
perTurnTimeoutMs: 90_000,
|
|
49
|
+
});
|
|
50
|
+
// Write JSON output to stdout
|
|
51
|
+
const output = {
|
|
52
|
+
pilotConfig: { models, questionCount: pilotQuestions.length },
|
|
53
|
+
result: {
|
|
54
|
+
correct: result.correct,
|
|
55
|
+
total: result.total,
|
|
56
|
+
accuracy: result.accuracy,
|
|
57
|
+
totalCostUsd: result.totalCostUsd,
|
|
58
|
+
projectedCost53Q: result.projectedCost53Q,
|
|
59
|
+
projectedCost300Q: result.projectedCost300Q,
|
|
60
|
+
meanWallMs: result.meanWallMs,
|
|
61
|
+
},
|
|
62
|
+
costGate: {
|
|
63
|
+
limit53Q: 40,
|
|
64
|
+
limit300Q: 250,
|
|
65
|
+
passes53Q: result.projectedCost53Q <= 40,
|
|
66
|
+
passes300Q: result.projectedCost300Q <= 250,
|
|
67
|
+
},
|
|
68
|
+
recommendation: buildRecommendation(result.correct, result.total, result.projectedCost53Q, result.projectedCost300Q),
|
|
69
|
+
perQuestion: result.perQuestion,
|
|
70
|
+
};
|
|
71
|
+
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
72
|
+
// Human-readable summary to stderr
|
|
73
|
+
console.error('\n=== ENSEMBLE PILOT SUMMARY ===');
|
|
74
|
+
console.error(`Accuracy: ${result.correct}/${result.total} (${(result.accuracy * 100).toFixed(1)}%)`);
|
|
75
|
+
console.error(`Total cost: $${result.totalCostUsd.toFixed(4)}`);
|
|
76
|
+
console.error(`Projected 53-Q cost: $${result.projectedCost53Q.toFixed(2)} (gate: $40)`);
|
|
77
|
+
console.error(`Projected 300-Q cost: $${result.projectedCost300Q.toFixed(2)} (gate: $250)`);
|
|
78
|
+
console.error(`Mean wall time: ${(result.meanWallMs / 1000).toFixed(1)}s/Q`);
|
|
79
|
+
console.error('');
|
|
80
|
+
for (const q of result.perQuestion) {
|
|
81
|
+
const status = q.correct ? 'CORRECT' : 'WRONG ';
|
|
82
|
+
console.error(` ${status} ${q.taskId.slice(0, 8)} | got="${q.got ?? 'null'}" exp="${q.expected}" [${q.aggregationMethod}]`);
|
|
83
|
+
}
|
|
84
|
+
console.error('\n=== VERDICT ===');
|
|
85
|
+
console.error(output.recommendation);
|
|
86
|
+
const passed = result.correct >= 4 && result.projectedCost53Q <= 40;
|
|
87
|
+
process.exit(passed ? 0 : 1);
|
|
88
|
+
}
|
|
89
|
+
function buildRecommendation(correct, total, cost53Q, cost300Q) {
|
|
90
|
+
const costOk = cost53Q <= 40;
|
|
91
|
+
if (correct >= 4 && costOk) {
|
|
92
|
+
return `PROCEED: ensemble viable. ${correct}/${total} accuracy (≥4/5) and cost $${cost53Q.toFixed(2)}/53Q (≤$40). Recommend iter 64 full 53-Q validation run.`;
|
|
93
|
+
}
|
|
94
|
+
if (correct >= 4 && !costOk) {
|
|
95
|
+
return `COST ISSUE: accuracy ${correct}/${total} good but projected 53-Q cost $${cost53Q.toFixed(2)} exceeds $40 gate. Reduce model count or use cheaper models.`;
|
|
96
|
+
}
|
|
97
|
+
if (correct < 4 && costOk) {
|
|
98
|
+
return `ACCURACY ISSUE: only ${correct}/${total} correct. Consider: (a) more models, (b) higher maxTurns, (c) OpenRouter credit top-up for GPT-5/DeepSeek. Do NOT proceed to full 53-Q.`;
|
|
99
|
+
}
|
|
100
|
+
return `BLOCKED: accuracy ${correct}/${total} below threshold AND cost $${cost53Q.toFixed(2)} above gate. Reassess architecture.`;
|
|
101
|
+
}
|
|
102
|
+
main().catch((err) => {
|
|
103
|
+
console.error('[pilot] FATAL:', err);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=gaia-ensemble-pilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-ensemble-pilot.js","sourceRoot":"","sources":["../../../src/benchmarks/gaia-ensemble-pilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAIA Ensemble Runner — ADR-139
|
|
3
|
+
*
|
|
4
|
+
* Runs a GAIA question through N models in parallel, aggregates answers via
|
|
5
|
+
* majority vote, with a judge-model tiebreak when no consensus is reached.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* 1. Each model runs independently using the full tool harness.
|
|
9
|
+
* 2. Answers are normalised (via normaliseAnswer from gaia-judge.ts).
|
|
10
|
+
* 3. Majority vote: if ≥2 models agree on normalised answer → that wins.
|
|
11
|
+
* 4. Tiebreak: when all answers differ (or N=2 with disagreement), the judge
|
|
12
|
+
* model picks the best answer with a brief rationale.
|
|
13
|
+
* 5. Abstain: if all models return null/timedOut → failed question.
|
|
14
|
+
*
|
|
15
|
+
* Supported models:
|
|
16
|
+
* - Claude (claude-sonnet-4-6, etc.) via Anthropic API (gaia-agent.ts)
|
|
17
|
+
* - Gemini (gemini-2.5-pro, etc.) via Google AI API (gaia-agent-gemini.js compiled)
|
|
18
|
+
* - OpenRouter (gpt-5, deepseek-v3.2, kimi-k2, etc.) via OpenAI-compatible API
|
|
19
|
+
* NOTE: OpenRouter requires funded account — returns 402 when credits exhausted.
|
|
20
|
+
*
|
|
21
|
+
* CLI integration:
|
|
22
|
+
* gaia-bench run --mode=ensemble --models=claude-sonnet-4-6,gemini-2.5-pro,openai/gpt-5
|
|
23
|
+
*
|
|
24
|
+
* Cost model (per question, typical L1 ~10k input + ~3k output tokens):
|
|
25
|
+
* claude-sonnet-4-6: ~$0.075
|
|
26
|
+
* gemini-2.5-pro: ~$0.043
|
|
27
|
+
* openai/gpt-5 (OR): ~$0.043
|
|
28
|
+
* 3-model total: ~$0.161 (53-Q: ~$8.54, 300-Q: ~$48.30)
|
|
29
|
+
*
|
|
30
|
+
* Refs: ADR-139, ADR-133, ADR-135, #2156
|
|
31
|
+
*/
|
|
32
|
+
import { GaiaQuestion } from './gaia-loader.js';
|
|
33
|
+
export interface ModelRunResult {
|
|
34
|
+
model: string;
|
|
35
|
+
finalAnswer: string | null;
|
|
36
|
+
normalisedAnswer: string;
|
|
37
|
+
turns: number;
|
|
38
|
+
totalInputTokens: number;
|
|
39
|
+
totalOutputTokens: number;
|
|
40
|
+
wallMs: number;
|
|
41
|
+
estimatedCostUsd: number;
|
|
42
|
+
timedOut?: boolean;
|
|
43
|
+
error?: string;
|
|
44
|
+
}
|
|
45
|
+
export type AggregationMethod = 'majority' | 'judge-tiebreak' | 'abstain';
|
|
46
|
+
export interface EnsembleResult {
|
|
47
|
+
questionId: string;
|
|
48
|
+
finalAnswer: string | null;
|
|
49
|
+
aggregationMethod: AggregationMethod;
|
|
50
|
+
/** Rationale from the judge tiebreak (only set when method is 'judge-tiebreak'). */
|
|
51
|
+
judgeRationale?: string;
|
|
52
|
+
models: ModelRunResult[];
|
|
53
|
+
totalInputTokens: number;
|
|
54
|
+
totalOutputTokens: number;
|
|
55
|
+
estimatedCostUsd: number;
|
|
56
|
+
wallMs: number;
|
|
57
|
+
}
|
|
58
|
+
export interface EnsembleOptions {
|
|
59
|
+
/** Models to use (provider inferred from model ID). */
|
|
60
|
+
models?: string[];
|
|
61
|
+
/** Judge model for tiebreak (default: claude-sonnet-4-6). */
|
|
62
|
+
judgeModel?: string;
|
|
63
|
+
/** Anthropic API key (resolved from env/gcloud if not supplied). */
|
|
64
|
+
anthropicApiKey?: string;
|
|
65
|
+
/** Google AI API key (resolved from env/gcloud if not supplied). */
|
|
66
|
+
geminiApiKey?: string;
|
|
67
|
+
/** OpenRouter API key (resolved from env/gcloud if not supplied). */
|
|
68
|
+
openrouterApiKey?: string;
|
|
69
|
+
/** Per-model max turns (default: 8). */
|
|
70
|
+
maxTurns?: number;
|
|
71
|
+
/** Per-model max tokens per turn (default: 2048). */
|
|
72
|
+
maxTokensPerTurn?: number;
|
|
73
|
+
/** Per-turn timeout in ms (default: 60 000). */
|
|
74
|
+
perTurnTimeoutMs?: number;
|
|
75
|
+
}
|
|
76
|
+
export declare function runEnsembleQuestion(question: GaiaQuestion, options?: EnsembleOptions): Promise<EnsembleResult>;
|
|
77
|
+
export interface EnsemblePilotResult {
|
|
78
|
+
correct: number;
|
|
79
|
+
total: number;
|
|
80
|
+
accuracy: number;
|
|
81
|
+
perQuestion: Array<{
|
|
82
|
+
taskId: string;
|
|
83
|
+
question: string;
|
|
84
|
+
expected: string;
|
|
85
|
+
got: string | null;
|
|
86
|
+
correct: boolean;
|
|
87
|
+
aggregationMethod: AggregationMethod;
|
|
88
|
+
judgeRationale?: string;
|
|
89
|
+
costUsd: number;
|
|
90
|
+
wallMs: number;
|
|
91
|
+
perModel: Array<{
|
|
92
|
+
model: string;
|
|
93
|
+
answer: string | null;
|
|
94
|
+
costUsd: number;
|
|
95
|
+
}>;
|
|
96
|
+
}>;
|
|
97
|
+
totalCostUsd: number;
|
|
98
|
+
projectedCost53Q: number;
|
|
99
|
+
projectedCost300Q: number;
|
|
100
|
+
meanWallMs: number;
|
|
101
|
+
}
|
|
102
|
+
export declare function runEnsemblePilot(questions: GaiaQuestion[], options?: EnsembleOptions): Promise<EnsemblePilotResult>;
|
|
103
|
+
//# sourceMappingURL=gaia-ensemble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-ensemble.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/gaia-ensemble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmDhD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAmVD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAiGzB;AAkBD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5E,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAiD9B"}
|