Pure file moves. No behavior change. inference.ts retains createInferenceRunner public surface; new files are internal to services/inference/. - budget.ts: resolveToolBudget - sentinels.ts: detectDoomLoop (re-exported through inference.ts), isCapHitSentinel, isDoomLoopSentinel, isAnySentinel - xml-parser.ts: parseXmlToolCall, partialXmlOpenerStart First of four refactor batches preparing inference.ts for the v1.13 AI SDK migration. inference.ts goes from 1780 LoC to ~1620.
21 lines
928 B
TypeScript
21 lines
928 B
TypeScript
import type { Agent } from '../../types/api.js';
|
|
import { READ_ONLY_TOOL_NAMES } from '../tools.js';
|
|
|
|
// v1.8.2: tool-call budget defaults. Resolved per-turn by resolveToolBudget.
|
|
// - Agent with explicit max_tool_calls: that value.
|
|
// - Agent with read-only-only tools: BUDGET_READ_ONLY (30).
|
|
// - Agent with any non-read-only tool: BUDGET_NON_READ_ONLY (10).
|
|
// - No agent (raw chat): BUDGET_NO_AGENT (15).
|
|
export const BUDGET_READ_ONLY = 30;
|
|
export const BUDGET_NON_READ_ONLY = 10;
|
|
export const BUDGET_NO_AGENT = 15;
|
|
|
|
const READ_ONLY_SET: ReadonlySet<string> = new Set(READ_ONLY_TOOL_NAMES);
|
|
|
|
export function resolveToolBudget(agent: Agent | null): number {
|
|
if (agent?.max_tool_calls != null) return agent.max_tool_calls;
|
|
if (!agent) return BUDGET_NO_AGENT;
|
|
const allReadOnly = agent.tools.every((t) => READ_ONLY_SET.has(t));
|
|
return allReadOnly ? BUDGET_READ_ONLY : BUDGET_NON_READ_ONLY;
|
|
}
|