@claude-flow/cli 3.11.0 → 3.12.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/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +175 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/eject.d.ts +33 -0
- package/dist/src/commands/eject.d.ts.map +1 -0
- package/dist/src/commands/eject.js +195 -0
- package/dist/src/commands/eject.js.map +1 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +2 -1
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -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 +3 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/metaharness.d.ts +39 -0
- package/dist/src/commands/metaharness.d.ts.map +1 -0
- package/dist/src/commands/metaharness.js +194 -0
- package/dist/src/commands/metaharness.js.map +1 -0
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +4 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +1 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +2 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/metaharness-tools.d.ts +31 -0
- package/dist/src/mcp-tools/metaharness-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/metaharness-tools.js +372 -0
- package/dist/src/mcp-tools/metaharness-tools.js.map +1 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -1
- package/dist/src/plugins/store/discovery.js +3 -0
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +6 -1
- package/dist/src/plugins/store/types.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.js +37 -0
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/router-parallel-recorder.d.ts +127 -0
- package/dist/src/ruvector/router-parallel-recorder.d.ts.map +1 -0
- package/dist/src/ruvector/router-parallel-recorder.js +183 -0
- package/dist/src/ruvector/router-parallel-recorder.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/dist/src/benchmarks/capability-tasks.d.ts +0 -126
- package/dist/src/benchmarks/capability-tasks.d.ts.map +0 -1
- package/dist/src/benchmarks/capability-tasks.js +0 -147
- package/dist/src/benchmarks/capability-tasks.js.map +0 -1
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts +0 -53
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-agent-contrastive.js +0 -177
- package/dist/src/benchmarks/gaia-agent-contrastive.js.map +0 -1
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts +0 -51
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-agent-gemini.js +0 -352
- package/dist/src/benchmarks/gaia-agent-gemini.js.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.d.ts +0 -105
- package/dist/src/benchmarks/gaia-claude-p.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.js +0 -269
- package/dist/src/benchmarks/gaia-claude-p.js.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts +0 -20
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-claude-p.smoke.js +0 -168
- package/dist/src/benchmarks/gaia-claude-p.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent-runner.py +0 -556
- package/dist/src/benchmarks/gaia-codeagent.d.ts +0 -129
- package/dist/src/benchmarks/gaia-codeagent.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent.js +0 -590
- package/dist/src/benchmarks/gaia-codeagent.js.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts +0 -33
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-codeagent.smoke.js +0 -241
- package/dist/src/benchmarks/gaia-codeagent.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts +0 -22
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-dag-pilot.js +0 -158
- package/dist/src/benchmarks/gaia-dag-pilot.js.map +0 -1
- package/dist/src/benchmarks/gaia-dag.d.ts +0 -110
- package/dist/src/benchmarks/gaia-dag.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-dag.js +0 -658
- package/dist/src/benchmarks/gaia-dag.js.map +0 -1
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts +0 -21
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-dag.smoke.js +0 -290
- package/dist/src/benchmarks/gaia-dag.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts +0 -17
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble-pilot.js +0 -106
- package/dist/src/benchmarks/gaia-ensemble-pilot.js.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble.d.ts +0 -103
- package/dist/src/benchmarks/gaia-ensemble.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-ensemble.js +0 -462
- package/dist/src/benchmarks/gaia-ensemble.js.map +0 -1
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts +0 -17
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-gemini-pilot.js +0 -168
- package/dist/src/benchmarks/gaia-gemini-pilot.js.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.d.ts +0 -67
- package/dist/src/benchmarks/gaia-mode-router.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.js +0 -126
- package/dist/src/benchmarks/gaia-mode-router.js.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts +0 -15
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-mode-router.smoke.js +0 -131
- package/dist/src/benchmarks/gaia-mode-router.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts +0 -24
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js +0 -276
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts +0 -45
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.js +0 -222
- package/dist/src/benchmarks/gaia-tools/image_describe.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts +0 -24
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js +0 -169
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts +0 -27
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/pdf_read.js +0 -226
- package/dist/src/benchmarks/gaia-tools/pdf_read.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts +0 -31
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.js +0 -94
- package/dist/src/benchmarks/gaia-tools/python_exec.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts +0 -13
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js +0 -98
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts +0 -52
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js +0 -304
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts +0 -61
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.js +0 -217
- package/dist/src/benchmarks/gaia-tools/web_browse.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts +0 -26
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js +0 -152
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts +0 -24
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js +0 -311
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js.map +0 -1
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts +0 -25
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts.map +0 -1
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js +0 -304
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js.map +0 -1
- package/dist/src/commands/performance-capability.d.ts +0 -30
- package/dist/src/commands/performance-capability.d.ts.map +0 -1
- package/dist/src/commands/performance-capability.js +0 -349
- package/dist/src/commands/performance-capability.js.map +0 -1
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GAIA Agent — Gemini 2.5 Pro Thinking adapter (Phase 2 pilot)
|
|
3
|
-
*
|
|
4
|
-
* Adapts the existing GAIA tool catalogue to Google's generateContent API,
|
|
5
|
-
* translating Anthropic tool_use ↔ Gemini functionCall/functionResponse.
|
|
6
|
-
*
|
|
7
|
-
* Loop algorithm mirrors gaia-agent.ts:
|
|
8
|
-
* 1. Build initial contents array with system instruction + first user turn.
|
|
9
|
-
* 2. Call Gemini generateContent with functionDeclarations.
|
|
10
|
-
* 3. On functionCall parts: execute tools, append functionResponse, repeat.
|
|
11
|
-
* 4. On text-only response: scan for FINAL_ANSWER pattern.
|
|
12
|
-
* 5. On maxTurns: return timedOut result.
|
|
13
|
-
*
|
|
14
|
-
* Gemini 2.5 Pro pricing (2026-05-28, per million tokens):
|
|
15
|
-
* Input: $1.25 (≤200k tokens), $2.50 (>200k)
|
|
16
|
-
* Output: $10.00 (≤200k tokens), $15.00 (>200k)
|
|
17
|
-
* Thinking tokens are billed as output tokens.
|
|
18
|
-
*
|
|
19
|
-
* Cost gate for pilot: ≤$0.12 per question average.
|
|
20
|
-
* Expected per-question cost at ~10k input + ~2k output: ~$0.032 — well within gate.
|
|
21
|
-
*
|
|
22
|
-
* Refs: ADR-133, ADR-135, #2156 Phase 2
|
|
23
|
-
*/
|
|
24
|
-
import { execSync } from 'node:child_process';
|
|
25
|
-
import * as fs from 'node:fs';
|
|
26
|
-
import * as path from 'node:path';
|
|
27
|
-
import { createDefaultToolCatalogue, } from './gaia-tools/index.js';
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Constants
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
const GEMINI_API_BASE = 'https://generativelanguage.googleapis.com/v1beta/models';
|
|
32
|
-
export const DEFAULT_GEMINI_MODEL = 'gemini-2.5-pro';
|
|
33
|
-
const DEFAULT_MAX_TURNS = 12;
|
|
34
|
-
const DEFAULT_MAX_TOKENS_PER_TURN = 8192;
|
|
35
|
-
const DEFAULT_PER_TURN_TIMEOUT_MS = 120_000;
|
|
36
|
-
/** Gemini 2.5 Pro pricing (USD per million tokens, ≤200k bracket). */
|
|
37
|
-
const GEMINI_INPUT_COST_PER_M = 1.25;
|
|
38
|
-
const GEMINI_OUTPUT_COST_PER_M = 10.00;
|
|
39
|
-
const FINAL_ANSWER_RE = /FINAL_ANSWER:\s*(.+)/i;
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
// API key resolution
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
export function resolveGeminiApiKey(apiKey) {
|
|
44
|
-
if (apiKey && apiKey.trim())
|
|
45
|
-
return apiKey.trim();
|
|
46
|
-
const envKey = process.env['GOOGLE_AI_API_KEY'];
|
|
47
|
-
if (envKey && envKey.trim())
|
|
48
|
-
return envKey.trim();
|
|
49
|
-
try {
|
|
50
|
-
const out = execSync('gcloud secrets versions access latest --secret=GOOGLE_AI_API_KEY --project=ruv-dev 2>/dev/null', { encoding: 'utf-8', timeout: 10_000 }).trim();
|
|
51
|
-
if (out)
|
|
52
|
-
return out;
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
/* fall through */
|
|
56
|
-
}
|
|
57
|
-
throw new Error('GOOGLE_AI_API_KEY not found. Set the env var or store in GCP Secret Manager.');
|
|
58
|
-
}
|
|
59
|
-
function toGeminiType(anthropicType) {
|
|
60
|
-
const map = {
|
|
61
|
-
string: 'STRING',
|
|
62
|
-
number: 'NUMBER',
|
|
63
|
-
integer: 'INTEGER',
|
|
64
|
-
boolean: 'BOOLEAN',
|
|
65
|
-
array: 'ARRAY',
|
|
66
|
-
object: 'OBJECT',
|
|
67
|
-
};
|
|
68
|
-
return map[anthropicType.toLowerCase()] ?? 'STRING';
|
|
69
|
-
}
|
|
70
|
-
function translateToolDef(def) {
|
|
71
|
-
const props = {};
|
|
72
|
-
for (const [key, val] of Object.entries(def.input_schema.properties)) {
|
|
73
|
-
props[key] = { type: toGeminiType(val.type), description: val.description };
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
name: def.name,
|
|
77
|
-
description: def.description,
|
|
78
|
-
parameters: {
|
|
79
|
-
type: 'OBJECT',
|
|
80
|
-
properties: props,
|
|
81
|
-
required: def.input_schema.required ?? [],
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
// ---------------------------------------------------------------------------
|
|
86
|
-
// Single Gemini API call
|
|
87
|
-
// ---------------------------------------------------------------------------
|
|
88
|
-
async function callGemini(apiKey, model, contents, systemInstruction, functionDeclarations, maxTokens, timeoutMs) {
|
|
89
|
-
const url = `${GEMINI_API_BASE}/${model}:generateContent?key=${encodeURIComponent(apiKey)}`;
|
|
90
|
-
const requestBody = {
|
|
91
|
-
contents,
|
|
92
|
-
systemInstruction: { parts: [{ text: systemInstruction }] },
|
|
93
|
-
generationConfig: {
|
|
94
|
-
maxOutputTokens: maxTokens,
|
|
95
|
-
thinkingConfig: { thinkingBudget: 8192 },
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
if (functionDeclarations.length > 0) {
|
|
99
|
-
requestBody['tools'] = [{ functionDeclarations }];
|
|
100
|
-
requestBody['toolConfig'] = { functionCallingConfig: { mode: 'AUTO' } };
|
|
101
|
-
}
|
|
102
|
-
const controller = new AbortController();
|
|
103
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
104
|
-
let res;
|
|
105
|
-
try {
|
|
106
|
-
res = await fetch(url, {
|
|
107
|
-
method: 'POST',
|
|
108
|
-
headers: { 'Content-Type': 'application/json' },
|
|
109
|
-
body: JSON.stringify(requestBody),
|
|
110
|
-
signal: controller.signal,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
clearTimeout(timer);
|
|
115
|
-
}
|
|
116
|
-
if (!res.ok) {
|
|
117
|
-
const errText = await res.text().catch(() => '<unreadable>');
|
|
118
|
-
throw new Error(`Gemini API ${res.status}: ${errText.slice(0, 400)}`);
|
|
119
|
-
}
|
|
120
|
-
return (await res.json());
|
|
121
|
-
}
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
// Build initial contents (handles image attachments inline)
|
|
124
|
-
// ---------------------------------------------------------------------------
|
|
125
|
-
function buildInitialContents(question) {
|
|
126
|
-
const questionText = question.question;
|
|
127
|
-
const parts = [];
|
|
128
|
-
if (question.file_path) {
|
|
129
|
-
const ext = path.extname(question.file_path).toLowerCase();
|
|
130
|
-
const imageExts = ['.png', '.jpg', '.jpeg', '.gif', '.webp'];
|
|
131
|
-
if (imageExts.includes(ext)) {
|
|
132
|
-
try {
|
|
133
|
-
const buf = fs.readFileSync(question.file_path);
|
|
134
|
-
const mediaTypeMap = {
|
|
135
|
-
'.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
|
|
136
|
-
'.gif': 'image/gif', '.webp': 'image/webp',
|
|
137
|
-
};
|
|
138
|
-
parts.push({ text: questionText });
|
|
139
|
-
// Gemini inline image part
|
|
140
|
-
parts.push({
|
|
141
|
-
inlineData: {
|
|
142
|
-
mimeType: mediaTypeMap[ext] ?? 'image/png',
|
|
143
|
-
data: buf.toString('base64'),
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
parts.push({
|
|
149
|
-
text: questionText + `\n\nAttached file: ${question.file_path}. Call file_read to read it.`,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
parts.push({
|
|
155
|
-
text: questionText + `\n\nThis question has an attached file. Call file_read with path="${question.file_path}" to read it, then answer.`,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
parts.push({ text: questionText });
|
|
161
|
-
}
|
|
162
|
-
return [{ role: 'user', parts }];
|
|
163
|
-
}
|
|
164
|
-
// ---------------------------------------------------------------------------
|
|
165
|
-
// Extract FINAL_ANSWER from model response text
|
|
166
|
-
// ---------------------------------------------------------------------------
|
|
167
|
-
function extractFinalAnswer(candidate) {
|
|
168
|
-
if (!candidate?.content?.parts)
|
|
169
|
-
return null;
|
|
170
|
-
for (const part of candidate.content.parts) {
|
|
171
|
-
if (part.thought)
|
|
172
|
-
continue;
|
|
173
|
-
if (part.text) {
|
|
174
|
-
const match = FINAL_ANSWER_RE.exec(part.text);
|
|
175
|
-
if (match?.[1])
|
|
176
|
-
return match[1].trim();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
// ---------------------------------------------------------------------------
|
|
182
|
-
// Check if response has any functionCall parts
|
|
183
|
-
// ---------------------------------------------------------------------------
|
|
184
|
-
function getFunctionCalls(candidate) {
|
|
185
|
-
if (!candidate?.content?.parts)
|
|
186
|
-
return [];
|
|
187
|
-
return candidate.content.parts
|
|
188
|
-
.filter((p) => !!p.functionCall)
|
|
189
|
-
.map((p) => p.functionCall);
|
|
190
|
-
}
|
|
191
|
-
// ---------------------------------------------------------------------------
|
|
192
|
-
// Main agent loop
|
|
193
|
-
// ---------------------------------------------------------------------------
|
|
194
|
-
export async function runGeminiAgent(question, options = {}) {
|
|
195
|
-
const { model = DEFAULT_GEMINI_MODEL, maxTurns = DEFAULT_MAX_TURNS, maxTokensPerTurn = DEFAULT_MAX_TOKENS_PER_TURN, perTurnTimeoutMs = DEFAULT_PER_TURN_TIMEOUT_MS, apiKey: suppliedKey, catalogue: suppliedCatalogue, } = options;
|
|
196
|
-
const wallStart = Date.now();
|
|
197
|
-
const apiKey = resolveGeminiApiKey(suppliedKey);
|
|
198
|
-
const catalogue = suppliedCatalogue ?? createDefaultToolCatalogue();
|
|
199
|
-
const functionDeclarations = catalogue.map((t) => translateToolDef(t.definition));
|
|
200
|
-
const systemInstruction = [
|
|
201
|
-
'You are a precise question-answering agent. Answer the user\'s question using the tools available.',
|
|
202
|
-
'',
|
|
203
|
-
'RULES:',
|
|
204
|
-
'1. Use tools when you need information you do not have with certainty.',
|
|
205
|
-
'2. When you have a final answer, output it on its own line in this EXACT format:',
|
|
206
|
-
' FINAL_ANSWER: <your answer here>',
|
|
207
|
-
'3. Keep answers concise. For numbers, give just the number. For names, give just the name.',
|
|
208
|
-
'4. Do not include units unless the question specifically asks for them.',
|
|
209
|
-
'5. MANDATORY: You MUST ALWAYS end your final response with a FINAL_ANSWER line.',
|
|
210
|
-
'6. If the question text appears garbled or reversed, try to interpret it before concluding you cannot answer.',
|
|
211
|
-
].join('\n');
|
|
212
|
-
const toolCallsByName = {};
|
|
213
|
-
let totalInputTokens = 0;
|
|
214
|
-
let totalOutputTokens = 0;
|
|
215
|
-
let totalThinkingTokens = 0;
|
|
216
|
-
const contents = buildInitialContents(question);
|
|
217
|
-
let turns = 0;
|
|
218
|
-
for (let turn = 0; turn < maxTurns; turn++) {
|
|
219
|
-
turns = turn + 1;
|
|
220
|
-
let resp;
|
|
221
|
-
try {
|
|
222
|
-
resp = await callGemini(apiKey, model, contents, systemInstruction, functionDeclarations, maxTokensPerTurn, perTurnTimeoutMs);
|
|
223
|
-
}
|
|
224
|
-
catch (err) {
|
|
225
|
-
return {
|
|
226
|
-
questionId: question.task_id,
|
|
227
|
-
finalAnswer: null,
|
|
228
|
-
turns,
|
|
229
|
-
toolCallsByName,
|
|
230
|
-
totalInputTokens,
|
|
231
|
-
totalOutputTokens,
|
|
232
|
-
totalThinkingTokens,
|
|
233
|
-
wallMs: Date.now() - wallStart,
|
|
234
|
-
estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens),
|
|
235
|
-
error: err instanceof Error ? err.message : String(err),
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
if (resp.error) {
|
|
239
|
-
return {
|
|
240
|
-
questionId: question.task_id,
|
|
241
|
-
finalAnswer: null,
|
|
242
|
-
turns,
|
|
243
|
-
toolCallsByName,
|
|
244
|
-
totalInputTokens,
|
|
245
|
-
totalOutputTokens,
|
|
246
|
-
totalThinkingTokens,
|
|
247
|
-
wallMs: Date.now() - wallStart,
|
|
248
|
-
estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens),
|
|
249
|
-
error: `Gemini error ${resp.error.code}: ${resp.error.message}`,
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
// Accumulate token counts
|
|
253
|
-
const usage = resp.usageMetadata ?? {};
|
|
254
|
-
totalInputTokens += usage.promptTokenCount ?? 0;
|
|
255
|
-
totalOutputTokens += usage.candidatesTokenCount ?? 0;
|
|
256
|
-
totalThinkingTokens += usage.thoughtsTokenCount ?? 0;
|
|
257
|
-
const candidate = resp.candidates?.[0];
|
|
258
|
-
const functionCalls = getFunctionCalls(candidate);
|
|
259
|
-
if (functionCalls.length > 0) {
|
|
260
|
-
// Append model turn (with functionCall parts)
|
|
261
|
-
if (candidate?.content) {
|
|
262
|
-
contents.push({ role: 'model', parts: candidate.content.parts });
|
|
263
|
-
}
|
|
264
|
-
// Execute all function calls and build functionResponse parts
|
|
265
|
-
const responseParts = await Promise.all(functionCalls.map(async (call) => {
|
|
266
|
-
toolCallsByName[call.name] = (toolCallsByName[call.name] ?? 0) + 1;
|
|
267
|
-
const tool = catalogue.find((t) => t.name === call.name);
|
|
268
|
-
if (!tool) {
|
|
269
|
-
return {
|
|
270
|
-
functionResponse: {
|
|
271
|
-
name: call.name,
|
|
272
|
-
response: { error: `Unknown tool "${call.name}"` },
|
|
273
|
-
},
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
try {
|
|
277
|
-
const output = await tool.execute(call.args);
|
|
278
|
-
return {
|
|
279
|
-
functionResponse: {
|
|
280
|
-
name: call.name,
|
|
281
|
-
response: { output },
|
|
282
|
-
},
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
catch (err) {
|
|
286
|
-
return {
|
|
287
|
-
functionResponse: {
|
|
288
|
-
name: call.name,
|
|
289
|
-
response: { error: err instanceof Error ? err.message : String(err) },
|
|
290
|
-
},
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
}));
|
|
294
|
-
contents.push({ role: 'user', parts: responseParts });
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
// No function calls — extract final answer
|
|
298
|
-
const finalAnswer = extractFinalAnswer(candidate);
|
|
299
|
-
return {
|
|
300
|
-
questionId: question.task_id,
|
|
301
|
-
finalAnswer,
|
|
302
|
-
turns,
|
|
303
|
-
toolCallsByName,
|
|
304
|
-
totalInputTokens,
|
|
305
|
-
totalOutputTokens,
|
|
306
|
-
totalThinkingTokens,
|
|
307
|
-
wallMs: Date.now() - wallStart,
|
|
308
|
-
estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens + totalThinkingTokens),
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
// Exhausted maxTurns
|
|
312
|
-
return {
|
|
313
|
-
questionId: question.task_id,
|
|
314
|
-
finalAnswer: null,
|
|
315
|
-
turns,
|
|
316
|
-
toolCallsByName,
|
|
317
|
-
totalInputTokens,
|
|
318
|
-
totalOutputTokens,
|
|
319
|
-
totalThinkingTokens,
|
|
320
|
-
wallMs: Date.now() - wallStart,
|
|
321
|
-
estimatedCostUsd: estimateCost(totalInputTokens, totalOutputTokens + totalThinkingTokens),
|
|
322
|
-
timedOut: true,
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
function estimateCost(inputTokens, outputTokens) {
|
|
326
|
-
return ((inputTokens / 1_000_000) * GEMINI_INPUT_COST_PER_M +
|
|
327
|
-
(outputTokens / 1_000_000) * GEMINI_OUTPUT_COST_PER_M);
|
|
328
|
-
}
|
|
329
|
-
// ---------------------------------------------------------------------------
|
|
330
|
-
// Answer matching (same as gaia-agent.ts)
|
|
331
|
-
// ---------------------------------------------------------------------------
|
|
332
|
-
export function isGeminiAnswerCorrect(modelAnswer, expected) {
|
|
333
|
-
if (!modelAnswer)
|
|
334
|
-
return false;
|
|
335
|
-
const norm = (s) => s.trim().toLowerCase();
|
|
336
|
-
const normModel = norm(modelAnswer);
|
|
337
|
-
const normExpected = norm(expected);
|
|
338
|
-
if (normModel === normExpected)
|
|
339
|
-
return true;
|
|
340
|
-
if (normModel.includes(normExpected))
|
|
341
|
-
return true;
|
|
342
|
-
if (normExpected.includes(normModel))
|
|
343
|
-
return true;
|
|
344
|
-
const numModel = parseFloat(normModel.replace(/[^0-9.\-]/g, ''));
|
|
345
|
-
const numExpected = parseFloat(normExpected.replace(/[^0-9.\-]/g, ''));
|
|
346
|
-
if (!Number.isNaN(numModel) && !Number.isNaN(numExpected) &&
|
|
347
|
-
numExpected !== 0 &&
|
|
348
|
-
Math.abs((numModel - numExpected) / numExpected) < 0.01)
|
|
349
|
-
return true;
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
//# sourceMappingURL=gaia-agent-gemini.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gaia-agent-gemini.js","sourceRoot":"","sources":["../../../src/benchmarks/gaia-agent-gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GAIA Claude-p Wrapper — iter 54 (#2156)
|
|
3
|
-
*
|
|
4
|
-
* Delegates each GAIA question to `claude -p` (Claude Code headless mode),
|
|
5
|
-
* which gives us WebSearch, WebFetch, Read (multimodal incl. PDF/DOCX/images),
|
|
6
|
-
* and Bash (Python execution) for free — the same tools HAL uses.
|
|
7
|
-
*
|
|
8
|
-
* Why this approach over a native TS CodeAgent:
|
|
9
|
-
* - HAL gaps vs ruflo were: visit_webpage, file reading (PDF/DOCX/XLSX/images),
|
|
10
|
-
* Python execution. Claude Code's built-in tools solve ALL of these.
|
|
11
|
-
* - No wheel-reinvention: battle-tested tool infra, native multimodal, proper
|
|
12
|
-
* tool-budget management, Anthropic WebSearch API.
|
|
13
|
-
* - Baseline: 24/53 (45.3%). Target: ≥45/53 to surpass HAL's 82.07%.
|
|
14
|
-
*
|
|
15
|
-
* SECURITY NOTE on --dangerously-skip-permissions:
|
|
16
|
-
* This flag is ONLY used inside the GAIA harness context, which is a sandboxed
|
|
17
|
-
* benchmark evaluation environment. GAIA questions have no real-world
|
|
18
|
-
* side effects — they are read-only research questions. The flag lets Claude Code
|
|
19
|
-
* use its tools (WebSearch, WebFetch, Read, Bash) without per-tool permission
|
|
20
|
-
* prompts, which is required for unattended benchmark execution. It MUST NOT
|
|
21
|
-
* be used in production workflows where Claude Code could affect real systems.
|
|
22
|
-
*
|
|
23
|
-
* JSON output format from `claude -p --output-format json`:
|
|
24
|
-
* {
|
|
25
|
-
* type: "result",
|
|
26
|
-
* subtype: "success" | "error_max_budget_usd" | ...,
|
|
27
|
-
* is_error: boolean,
|
|
28
|
-
* result: string, // final assistant message text
|
|
29
|
-
* total_cost_usd: number,
|
|
30
|
-
* duration_ms: number,
|
|
31
|
-
* num_turns: number,
|
|
32
|
-
* ...
|
|
33
|
-
* }
|
|
34
|
-
*
|
|
35
|
-
* Refs: ADR-138 (reference, NOT implemented), iter 54, #2156
|
|
36
|
-
*/
|
|
37
|
-
import type { GaiaQuestion } from './gaia-loader.js';
|
|
38
|
-
/** Default model for claude -p GAIA runs. Sonnet for quality parity with HAL. */
|
|
39
|
-
export declare const CLAUDE_P_DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
40
|
-
/** Per-question budget cap (USD). HAL uses Sonnet 4.5 so $0.30 headroom is safe. */
|
|
41
|
-
export declare const CLAUDE_P_PER_QUESTION_BUDGET_USD = 0.3;
|
|
42
|
-
/** Subprocess timeout: 5 minutes per question. */
|
|
43
|
-
export declare const CLAUDE_P_TIMEOUT_MS: number;
|
|
44
|
-
export interface ClaudePResult {
|
|
45
|
-
/** The extracted answer, or null if extraction failed. */
|
|
46
|
-
finalAnswer: string | null;
|
|
47
|
-
/** Raw result text from claude -p. */
|
|
48
|
-
rawResult: string;
|
|
49
|
-
/** Whether claude -p exited with an error. */
|
|
50
|
-
isError: boolean;
|
|
51
|
-
/** claude -p's reported error message (if any). */
|
|
52
|
-
errorMessage?: string;
|
|
53
|
-
/** Actual cost reported by claude -p. */
|
|
54
|
-
costUsd: number;
|
|
55
|
-
/** Wall-clock time in ms. */
|
|
56
|
-
wallMs: number;
|
|
57
|
-
/** Number of turns claude -p used. */
|
|
58
|
-
numTurns: number;
|
|
59
|
-
/** claude -p stop reason. */
|
|
60
|
-
stopReason?: string;
|
|
61
|
-
}
|
|
62
|
-
export interface ClaudePOptions {
|
|
63
|
-
/** Model ID (default: CLAUDE_P_DEFAULT_MODEL). */
|
|
64
|
-
model?: string;
|
|
65
|
-
/** Per-question budget cap in USD (default: CLAUDE_P_PER_QUESTION_BUDGET_USD). */
|
|
66
|
-
budgetUsd?: number;
|
|
67
|
-
/** Timeout in ms (default: CLAUDE_P_TIMEOUT_MS). */
|
|
68
|
-
timeoutMs?: number;
|
|
69
|
-
/** Absolute path to the claude binary (default: resolved from $PATH). */
|
|
70
|
-
claudeBin?: string;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Build the prompt sent to claude -p for a GAIA question.
|
|
74
|
-
*
|
|
75
|
-
* Includes the question text, optional attachment path, and precise instructions
|
|
76
|
-
* for using available tools and producing FINAL_ANSWER: in the expected format.
|
|
77
|
-
*/
|
|
78
|
-
export declare function buildClaudePPrompt(question: GaiaQuestion): string;
|
|
79
|
-
/**
|
|
80
|
-
* Run a single GAIA question via `claude -p` headless mode.
|
|
81
|
-
*
|
|
82
|
-
* Spawns a subprocess, captures JSON output, extracts the final answer.
|
|
83
|
-
*/
|
|
84
|
-
export declare function runGaiaQuestionViaClaudeP(question: GaiaQuestion, options?: ClaudePOptions): Promise<ClaudePResult>;
|
|
85
|
-
/**
|
|
86
|
-
* Extract the FINAL_ANSWER value from claude -p's result text.
|
|
87
|
-
*
|
|
88
|
-
* Primary: regex match on `FINAL_ANSWER: <value>`
|
|
89
|
-
* Fallback: last non-empty line if no FINAL_ANSWER marker found.
|
|
90
|
-
*/
|
|
91
|
-
export declare function extractFinalAnswer(text: string): string | null;
|
|
92
|
-
export interface ClaudePBatchOptions extends ClaudePOptions {
|
|
93
|
-
/** Max parallel questions (default: 2 — claude -p uses significant local resources). */
|
|
94
|
-
concurrency?: number;
|
|
95
|
-
/** Callback for per-question progress logging. */
|
|
96
|
-
onProgress?: (idx: number, total: number, questionId: string, answer: string | null, costUsd: number) => void;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Run a batch of GAIA questions through the claude -p wrapper.
|
|
100
|
-
*
|
|
101
|
-
* Concurrency is limited (default 2) because each claude -p subprocess
|
|
102
|
-
* is heavyweight — it starts a full Claude Code session with LSP etc.
|
|
103
|
-
*/
|
|
104
|
-
export declare function runGaiaQuestionsBatchViaClaudeP(questions: GaiaQuestion[], options?: ClaudePBatchOptions): Promise<ClaudePResult[]>;
|
|
105
|
-
//# sourceMappingURL=gaia-claude-p.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gaia-claude-p.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/gaia-claude-p.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,oFAAoF;AACpF,eAAO,MAAM,gCAAgC,MAAO,CAAC;AAErD,kDAAkD;AAClD,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AASjD,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAiCjE;AAMD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAsFxB;AA4ED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB9D;AAMD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/G;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,aAAa,EAAE,CAAC,CAqB1B"}
|