/** * Vision routing — look-at-image turns go through a same-family * `call_agent` child (backend=vision), then the child's result is * appended onto the parent prompt. The parent model stays on its * text SKU and never receives image bytes. * * This is a router, not a prompt heuristic: the parent LLM does not * decide whether to spawn. Disable with AGIM_VISION_ROUTE=off. */ import { callAgentByName } from '../../../core/a2a.js'; import { resolveSubagentSpawn } from '../../../core/subagent.js'; import type { AgentSendOpts } from '../../../core/types.js'; export declare const VISION_ROUTE_RESULT_START = "\u3010\u8BC6\u56FE\u7ED3\u679C\u3011"; export declare const VISION_ROUTE_RESULT_END = "\u3010\u8BC6\u56FE\u7ED3\u675F\u3011"; export interface VisionRouteInput { prompt: string; modelId: string; callerAgent: string; opts?: AgentSendOpts; signal?: AbortSignal; } export interface VisionRouteResult { /** Prompt the parent harness should send (original + child analysis). */ parentPrompt: string; ok: boolean; error?: string; } export interface VisionRouteDeps { resolveSpawn?: typeof resolveSubagentSpawn; callAgent?: typeof callAgentByName; } export declare function isVisionRouteEnabled(): boolean; /** Dedicated vision SKUs still receive image bytes; everyone else routes. */ export declare function isDedicatedVisionModel(modelId: string | undefined | null): boolean; export declare function shouldRouteVision(modelId: string, prompt: string): boolean; export declare function applyVisionResultToPrompt(prompt: string, body: string): string; export declare function stripImageContentBlocks(messages: T[]): T[]; export declare function runVisionRoute(input: VisionRouteInput, deps?: VisionRouteDeps): Promise; //# sourceMappingURL=vision-route.d.ts.map