/** Deliberately separate from the stateful computer-use actor: one request, no tools or retries. */ export interface StudyAnalysisProviderRequest { model: string; instructions: string; evidence: string; images: { evidenceId: string; dataUrl: string; }[]; schema: Record; maxOutputTokens: number; timeoutMs: number; signal?: AbortSignal; } export interface StudyAnalysisTokenUsage { input: number; output: number; cachedInput?: number; cacheWriteInput?: number; } export interface StudyAnalysisProviderResult { status: "completed" | "incomplete" | "refused" | "failed" | "cancelled" | "timed_out"; /** Parsed output is still untrusted. The engine must validate its schema and evidence references. */ output: unknown; usage: StudyAnalysisTokenUsage | null; /** Dispatch does not imply a known charge. A failed request can still have consumed tokens. */ dispatched: boolean; errorCode: "invalid_request" | "provider_http_error" | "provider_network_error" | "invalid_response" | "provider_headers_timeout" | "provider_body_timeout" | "provider_connect_timeout" | "provider_connection_reset" | "provider_dns_error" | "response_too_large" | "output_incomplete" | "refusal" | "cancelled" | "timeout" | null; httpStatus?: number; } export type StudyAnalysisProvider = (request: StudyAnalysisProviderRequest) => Promise; /** Text and usage wire shapes reuse the captured closing-report contract; refusal fails closed. */ export declare function parseStudyAnalysisResponse(raw: unknown): StudyAnalysisProviderResult; /** No alternate endpoint or env-derived base URL: evidence and credentials have one destination. */ export declare function createStudyAnalysisProvider(options: { apiKey: string; fetchFn?: typeof fetch; }): StudyAnalysisProvider;