export declare const DEFAULT_GEMINI_VISION_QA_ENDPOINT = "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent"; /** Resolve the endpoint: explicit option → VCLAW_GEMINI_API_ENDPOINT → default. */ export declare function resolveVisionQaEndpoint(endpoint?: string): string; export declare function slideImageMimeType(imagePath: string): string; export declare function extractGeminiText(payload: unknown): string; /** * Parse the two-line `verdict:` / `reason:` reply against an allowed verdict * set. An unrecognized verdict value falls back to `'error'` with the full * reply text as the reason, exactly like the Python originals — so a refusal * or free-form answer is surfaced verbatim instead of being misclassified. */ export declare function parseTwoLineVerdict(text: string, allowed: readonly T[]): { verdict: T | 'error'; reason: string; }; export interface ClassifyImageInput { imagePath: string; prompt: string; allowedVerdicts: readonly T[]; /** Pre-resolved endpoint (see {@link resolveVisionQaEndpoint}). */ endpoint: string; /** Explicit API key — bypasses the env-backed key pool. */ keyOverride?: string; /** Injectable fetch for offline tests. */ fetcher?: typeof fetch; } /** * One Gemini-Vision classification call: read the image, POST prompt + * inlineData, parse the two-line reply. Failures (unreadable image, HTTP * error, network throw, refusal) degrade to `{verdict: 'error', reason}` — * the caller decides whether errors are advisory. Never throws. */ export declare function classifyImageWithGemini(input: ClassifyImageInput): Promise<{ verdict: T | 'error'; reason: string; }>; export interface ClassifyTwoImagesInput { /** Path to the reference image (posted FIRST). May be absent — then only the frame is posted. */ referencePath?: string; /** Path to the frame image to compare against the reference (posted SECOND). */ framePath: string; prompt: string; /** Pre-resolved endpoint (see {@link resolveVisionQaEndpoint}). */ endpoint: string; /** Explicit API key — bypasses the env-backed key pool. */ keyOverride?: string; /** Injectable fetch for offline tests. */ fetcher?: typeof fetch; } /** * A two-image Gemini-Vision call: post a reference image + a frame image (in * that order) alongside a free-form prompt and return the model's raw reply * text. The sibling of {@link classifyImageWithGemini} for comparisons that need * BOTH images in one call (e.g. "what appeared in the frame that is NOT in the * keyframe reference") and a richer multi-line reply than the fixed two-line * verdict ladder. Reuses the SAME transport — {@link fetchGeminiWithPool} key * pool, endpoint override, injectable fetcher. The reference image is optional; * when absent only the frame is posted (the prompt should be self-describing). * * Returns `{ text }` on success or `{ text: '', error }` on any failure * (unreadable image, HTTP error, network throw). Never throws — the caller * decides whether errors are advisory. */ export declare function classifyTwoImagesWithGemini(input: ClassifyTwoImagesInput): Promise<{ text: string; error?: string; }>; //# sourceMappingURL=gemini-vision-classify.d.ts.map