UNPKG

@adaline/gateway

Version:
1,399 lines (1,381 loc) 741 kB
import { GatewayBaseError, ToolCallContentType, ToolResponseContentType } from '@adaline/types'; import { Context, Tracer, Meter } from '@opentelemetry/api'; import { z } from 'zod'; import { ChatModelV1, EmbeddingModelV1 } from '@adaline/provider'; import { AxiosInstance } from 'axios'; declare class GatewayError extends Error { status: number; data: unknown; constructor(message: string, status?: number, data?: unknown); } declare class GatewayTelemetryError extends GatewayBaseError { readonly info: string; readonly cause: unknown; constructor({ info, cause }: { info: string; cause: unknown; }); static isGatewayTelemetryError(error: unknown): error is GatewayTelemetryError; } type HttpClientOptions = { retry?: { maxAttempts: number; initialDelay: number; exponentialFactor: number; }; }; interface HttpClient { stream<T>(url: string, method: "get" | "post", data?: Record<string, unknown>, headers?: Record<string, string>, options?: { abortSignal?: AbortSignal; }, telemetryContext?: Context): AsyncGenerator<T, void, unknown>; get<T>(url: string, params?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; post<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; put<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; delete<T>(url: string, params?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; patch<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; } interface HttpClientResponse<T> { data: T; headers: Record<string, string>; status: { code: number; text: string; }; } declare class HttpClientError extends GatewayBaseError { readonly info: string; readonly cause: unknown; constructor({ info, cause }: { info: string; cause: unknown; }); static isHttpClientError(error: unknown): error is HttpClientError; } declare class HttpRequestError extends GatewayBaseError { readonly info: string; readonly cause: { status: number; headers: Record<string, string>; data: unknown; }; constructor(message: string, status: number | undefined, headers: Record<string, string>, data: unknown); static isHttpRequestError(error: unknown): error is HttpRequestError; } interface IsomorphicHttpClientConfig { timeoutInMilliseconds?: number; axiosInstance?: AxiosInstance; telemetryTracer?: Tracer; enableProxyAgent?: boolean; } declare class IsomorphicHttpClient implements HttpClient { private defaultTimeout?; private client; private httpProxyAgent?; private httpsProxyAgent?; private enableProxyAgent; constructor(config: IsomorphicHttpClientConfig); isNodeEnvironment: () => boolean; private makeRequest; stream<T>(url: string, method: "get" | "post", data?: Record<string, unknown>, headers?: Record<string, string>, options?: { abortSignal?: AbortSignal; }, telemetryContext?: Context): AsyncGenerator<T, void, unknown>; get<T>(url: string, params?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; post<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; put<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; delete<T>(url: string, params?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; patch<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>, options?: HttpClientOptions, telemetryContext?: Context): Promise<HttpClientResponse<T>>; } declare class QueueTaskTimeoutError extends GatewayBaseError { readonly info: string; readonly cause: unknown; constructor({ info, cause }: { info: string; cause: unknown; }); static isQueueTaskTimeoutError(error: unknown): error is QueueTaskTimeoutError; } interface Cache<T> { get(key: string): Promise<T | undefined>; set(key: string, value: T): Promise<void>; delete(key: string): Promise<void>; clear(): Promise<void>; } declare class LRUCache<T extends object> implements Cache<T> { private cache; constructor(maxEntries?: number); get(key: string): Promise<T | undefined>; set(key: string, value: T): Promise<void>; delete(key: string): Promise<void>; clear(): Promise<void>; } type QueueTask<Request, Response> = { id: string; request: Request; cache?: Cache<Response>; resolve: (value: Response) => void; reject: (error: any) => void; execute: (request: Request, context: Context) => Promise<Response>; telemetryContext: Context; }; interface Queue<Request, Response> { enqueue(task: QueueTask<Request, Response>): void; } declare const QueueOptions: z.ZodObject<{ maxConcurrentTasks: z.ZodNumber; retryCount: z.ZodNumber; timeout: z.ZodNumber; retry: z.ZodObject<{ initialDelay: z.ZodNumber; exponentialFactor: z.ZodNumber; }, "strip", z.ZodTypeAny, { initialDelay: number; exponentialFactor: number; }, { initialDelay: number; exponentialFactor: number; }>; }, "strip", z.ZodTypeAny, { timeout: number; retry: { initialDelay: number; exponentialFactor: number; }; maxConcurrentTasks: number; retryCount: number; }, { timeout: number; retry: { initialDelay: number; exponentialFactor: number; }; maxConcurrentTasks: number; retryCount: number; }>; type QueueOptionsType = z.infer<typeof QueueOptions>; declare class SimpleQueue<Request, Response> implements Queue<Request, Response> { private options; private activeTasks; private queue; constructor(options: QueueOptionsType); enqueue(task: QueueTask<Request, Response>): void; private executeWithTimeout; private executeWithRetry; private processQueue; } type AnalyticsNodeEnvironment = { node: { version: string; platform: string; architecture: string; }; }; type AnalyticsBrowserEnvironment = { browser: { version: string; userAgent: string; }; }; type AnalyticsEvent = { event: string; timestamp: string; dimensions: { [key: string]: any; }; status: string; eventVersion: string; gatewayVersion: string; environment: AnalyticsNodeEnvironment | AnalyticsBrowserEnvironment; userId?: string; }; interface AnalyticsRecorder { record(event: AnalyticsEvent["event"], status: AnalyticsEvent["status"], dimensions: AnalyticsEvent["dimensions"]): void; stopRecorder(): void; } declare class AnalyticsManager { private static analytics; static getAnalyticsRecorder(enableAnalytics: boolean): AnalyticsRecorder; } declare class PostAnalytics implements AnalyticsRecorder { private readonly eventVersion; private readonly gatewayVersion; private flushTimer; private flushInterval; private batchSize; private maxAttempts; private environment; private analyticsEndpointUrl; private events; constructor(); private startFlushTimer; private stopFlushTimer; record(event: AnalyticsEvent["event"], status: AnalyticsEvent["status"], dimensions: AnalyticsEvent["dimensions"]): void; private flushEvents; private sendEvents; stopRecorder(): void; } declare class NoOpAnalytics implements AnalyticsRecorder { record(event: AnalyticsEvent["event"], status: AnalyticsEvent["status"], dimensions: AnalyticsEvent["dimensions"]): void; stopRecorder(): void; } declare class TelemetryManager { static DEFAULT_TRACER_KEY: string; static DEFAULT_METER_KEY: string; private static tracer; private static meter; static setTracer(tracer: Tracer | undefined): void; static getTracer(): Tracer; static setMeter(meter: Meter | undefined): void; static getMeter(): Meter; } interface Logger { debug(message: string, ...params: any[]): void; info(message: string, ...params: any[]): void; warn(message: string, ...params: any[]): void; error(message: string, ...params: any[]): void; critical(message: string, ...params: any[]): void; } declare class LoggerManager { private static logger; static setLogger(logger: Logger | undefined): void; static getLogger(): Logger | undefined; } declare class ConsoleLogger implements Logger { debug(message: string, ...params: any[]): void; info(message: string, ...params: any[]): void; warn(message: string, ...params: any[]): void; error(message: string, ...params: any[]): void; critical(message: string, ...params: any[]): void; } declare const CompleteChatHandlerRequest: z.ZodObject<{ cache: z.ZodType<Cache<{ request: { config: Record<string, any>; messages: { role: "system" | "user" | "assistant" | "tool"; content: ({ modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; } | { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; } | { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; } | { value: string; modality: "text"; metadata?: undefined; } | { value: { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; } | { type: "url"; url: string; }; modality: "image"; detail: "low" | "medium" | "high" | "auto"; metadata?: undefined; } | { value: { type: "base64"; base64: string; } | { type: "url"; url: string; }; modality: "pdf"; file: { name: string; id: string; size?: number | undefined; }; metadata?: undefined; } | { id: string; name: string; modality: "tool-call"; index: number; arguments: string; metadata?: undefined; serverName?: string | undefined; thoughtSignature?: string | undefined; } | { value: { type: "thinking"; thinking: string; signature: string; } | { type: "redacted"; data: string; }; modality: "reasoning"; metadata?: undefined; })[]; metadata?: undefined; }[]; tools?: { type: "function"; definition: { schema: { name: string; description: string; strict?: boolean | undefined; parameters?: any; }; }; metadata?: any; request?: { type: "http"; url: string; method: "get" | "post"; query?: Record<string, string> | undefined; headers?: Record<string, string> | undefined; body?: Record<string, any> | undefined; proxyUrl?: string | undefined; proxyHeaders?: Record<string, string> | undefined; retry?: { maxAttempts: number; initialDelay: number; exponentialFactor: number; } | undefined; } | undefined; }[] | undefined; }; response: { messages: { role: "system" | "user" | "assistant" | "tool"; content: ({ modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; } | { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; } | { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; } | { value: string; modality: "text"; metadata?: undefined; } | { value: { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; } | { type: "url"; url: string; }; modality: "image"; detail: "low" | "medium" | "high" | "auto"; metadata?: undefined; } | { value: { type: "base64"; base64: string; } | { type: "url"; url: string; }; modality: "pdf"; file: { name: string; id: string; size?: number | undefined; }; metadata?: undefined; } | { modality: "tool-call"; name: string; id: string; index: number; arguments: string; metadata?: undefined; serverName?: string | undefined; thoughtSignature?: string | undefined; } | { value: { type: "thinking"; thinking: string; signature: string; } | { type: "redacted"; data: string; }; modality: "reasoning"; metadata?: undefined; })[]; metadata?: undefined; }[]; usage?: { promptTokens: number; completionTokens: number; totalTokens: number; } | undefined; logProbs?: { token: string; logProb: number; bytes: number[] | null; topLogProbs: { token: string; logProb: number; bytes: number[] | null; }[]; }[] | undefined; }; cached: boolean; latencyInMs: number; provider: { request?: any; response?: any; }; metadataForCallbacks?: any; }>, z.ZodTypeDef, Cache<{ request: { config: Record<string, any>; messages: { role: "system" | "user" | "assistant" | "tool"; content: ({ modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; } | { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; } | { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; } | { value: string; modality: "text"; metadata?: undefined; } | { value: { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; } | { type: "url"; url: string; }; modality: "image"; detail: "low" | "medium" | "high" | "auto"; metadata?: undefined; } | { value: { type: "base64"; base64: string; } | { type: "url"; url: string; }; modality: "pdf"; file: { name: string; id: string; size?: number | undefined; }; metadata?: undefined; } | { id: string; name: string; modality: "tool-call"; index: number; arguments: string; metadata?: undefined; serverName?: string | undefined; thoughtSignature?: string | undefined; } | { value: { type: "thinking"; thinking: string; signature: string; } | { type: "redacted"; data: string; }; modality: "reasoning"; metadata?: undefined; })[]; metadata?: undefined; }[]; tools?: { type: "function"; definition: { schema: { name: string; description: string; strict?: boolean | undefined; parameters?: any; }; }; metadata?: any; request?: { type: "http"; url: string; method: "get" | "post"; query?: Record<string, string> | undefined; headers?: Record<string, string> | undefined; body?: Record<string, any> | undefined; proxyUrl?: string | undefined; proxyHeaders?: Record<string, string> | undefined; retry?: { maxAttempts: number; initialDelay: number; exponentialFactor: number; } | undefined; } | undefined; }[] | undefined; }; response: { messages: { role: "system" | "user" | "assistant" | "tool"; content: ({ modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; } | { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; } | { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; } | { value: string; modality: "text"; metadata?: undefined; } | { value: { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; } | { type: "url"; url: string; }; modality: "image"; detail: "low" | "medium" | "high" | "auto"; metadata?: undefined; } | { value: { type: "base64"; base64: string; } | { type: "url"; url: string; }; modality: "pdf"; file: { name: string; id: string; size?: number | undefined; }; metadata?: undefined; } | { modality: "tool-call"; name: string; id: string; index: number; arguments: string; metadata?: undefined; serverName?: string | undefined; thoughtSignature?: string | undefined; } | { value: { type: "thinking"; thinking: string; signature: string; } | { type: "redacted"; data: string; }; modality: "reasoning"; metadata?: undefined; })[]; metadata?: undefined; }[]; usage?: { promptTokens: number; completionTokens: number; totalTokens: number; } | undefined; logProbs?: { token: string; logProb: number; bytes: number[] | null; topLogProbs: { token: string; logProb: number; bytes: number[] | null; }[]; }[] | undefined; }; cached: boolean; latencyInMs: number; provider: { request?: any; response?: any; }; metadataForCallbacks?: any; }>>; model: z.ZodType<ChatModelV1<{ name: string; description: string; roles: Partial<Record<"system" | "user" | "assistant" | "tool", string | undefined>>; modalities: ["text" | "error" | "image" | "pdf" | "tool-call" | "tool-response" | "reasoning" | "search-result", ...("text" | "error" | "image" | "pdf" | "tool-call" | "tool-response" | "reasoning" | "search-result")[]]; maxInputTokens: number; maxOutputTokens: number; config: { def: Record<string, { type: "multi-string"; param: string; title: string; description: string; max: number; } | { type: "object-schema"; param: string; title: string; description: string; objectSchema?: any; } | { type: "paired-select"; param: string; title: string; description: string; fields: [{ label: string; key: string; choices: { value: string; label: string; }[]; description?: string | undefined; }, { label: string; key: string; choices: { value: string; label: string; }[]; description?: string | undefined; }]; uniqueByField?: string | undefined; } | { type: "range"; param: string; title: string; description: string; max: number; default: number; min: number; step: number; } | { type: "select-boolean"; param: string; title: string; description: string; default: boolean | null; } | { type: "select-string"; param: string; title: string; description: string; default: string; choices: string[]; }>; schema: z.ZodObject<z.ZodRawShape, z.UnknownKeysParam, z.ZodTypeAny, unknown, unknown>; }; price: { modelName: string; currency: string; tokenRanges: { minTokens: number; prices: { base: { inputPricePerMillion: number; outputPricePerMillion: number; }; }; maxTokens?: number | null | undefined; }[]; }; maxReasoningTokens?: number | undefined; }>, z.ZodTypeDef, ChatModelV1<{ name: string; description: string; roles: Partial<Record<"system" | "user" | "assistant" | "tool", string | undefined>>; modalities: ["text" | "error" | "image" | "pdf" | "tool-call" | "tool-response" | "reasoning" | "search-result", ...("text" | "error" | "image" | "pdf" | "tool-call" | "tool-response" | "reasoning" | "search-result")[]]; maxInputTokens: number; maxOutputTokens: number; config: { def: Record<string, { type: "multi-string"; param: string; title: string; description: string; max: number; } | { type: "object-schema"; param: string; title: string; description: string; objectSchema?: any; } | { type: "paired-select"; param: string; title: string; description: string; fields: [{ label: string; key: string; choices: { value: string; label: string; }[]; description?: string | undefined; }, { label: string; key: string; choices: { value: string; label: string; }[]; description?: string | undefined; }]; uniqueByField?: string | undefined; } | { type: "range"; param: string; title: string; description: string; max: number; default: number; min: number; step: number; } | { type: "select-boolean"; param: string; title: string; description: string; default: boolean | null; } | { type: "select-string"; param: string; title: string; description: string; default: string; choices: string[]; }>; schema: z.ZodObject<z.ZodRawShape, z.UnknownKeysParam, z.ZodTypeAny, unknown, unknown>; }; price: { modelName: string; currency: string; tokenRanges: { minTokens: number; prices: { base: { inputPricePerMillion: number; outputPricePerMillion: number; }; }; maxTokens?: number | null | undefined; }[]; }; maxReasoningTokens?: number | undefined; }>>; config: z.ZodRecord<z.ZodString, z.ZodAny>; messages: z.ZodArray<z.ZodObject<{ role: z.ZodEnum<["system", "user", "assistant", "tool"]>; content: z.ZodArray<z.ZodDiscriminatedUnion<"modality", [z.ZodObject<{ modality: z.ZodLiteral<"text">; value: z.ZodString; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { value: string; modality: "text"; metadata?: undefined; }, { value: string; modality: "text"; metadata?: undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"image">; detail: z.ZodEnum<["low", "medium", "high", "auto"]>; value: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"base64">; base64: z.ZodString; mediaType: z.ZodEnum<["png", "jpeg", "webp", "gif"]>; }, "strip", z.ZodTypeAny, { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; }, { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; }>, z.ZodObject<{ type: z.ZodLiteral<"url">; url: z.ZodString; }, "strip", z.ZodTypeAny, { type: "url"; url: string; }, { type: "url"; url: string; }>]>; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { value: { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; } | { type: "url"; url: string; }; modality: "image"; detail: "low" | "medium" | "high" | "auto"; metadata?: undefined; }, { value: { type: "base64"; base64: string; mediaType: "png" | "jpeg" | "webp" | "gif"; } | { type: "url"; url: string; }; modality: "image"; detail: "low" | "medium" | "high" | "auto"; metadata?: undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"pdf">; value: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"base64">; base64: z.ZodString; }, "strip", z.ZodTypeAny, { type: "base64"; base64: string; }, { type: "base64"; base64: string; }>, z.ZodObject<{ type: z.ZodLiteral<"url">; url: z.ZodString; }, "strip", z.ZodTypeAny, { type: "url"; url: string; }, { type: "url"; url: string; }>]>; file: z.ZodObject<{ name: z.ZodString; id: z.ZodString; size: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { name: string; id: string; size?: number | undefined; }, { name: string; id: string; size?: number | undefined; }>; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { value: { type: "base64"; base64: string; } | { type: "url"; url: string; }; modality: "pdf"; file: { name: string; id: string; size?: number | undefined; }; metadata?: undefined; }, { value: { type: "base64"; base64: string; } | { type: "url"; url: string; }; modality: "pdf"; file: { name: string; id: string; size?: number | undefined; }; metadata?: undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"tool-call">; index: z.ZodNumber; id: z.ZodString; name: z.ZodString; arguments: z.ZodString; serverName: z.ZodOptional<z.ZodString>; thoughtSignature: z.ZodOptional<z.ZodString>; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { id: string; name: string; modality: "tool-call"; index: number; arguments: string; metadata?: undefined; serverName?: string | undefined; thoughtSignature?: string | undefined; }, { id: string; name: string; modality: "tool-call"; index: number; arguments: string; metadata?: undefined; serverName?: string | undefined; thoughtSignature?: string | undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"tool-response">; index: z.ZodNumber; id: z.ZodString; name: z.ZodString; data: z.ZodString; apiResponse: z.ZodOptional<z.ZodObject<{ statusCode: z.ZodNumber; }, "strip", z.ZodTypeAny, { statusCode: number; }, { statusCode: number; }>>; metadata: z.ZodTypeAny; }, "strip", z.ZodTypeAny, { modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; }, { modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"reasoning">; value: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"thinking">; thinking: z.ZodString; signature: z.ZodString; }, "strip", z.ZodTypeAny, { type: "thinking"; thinking: string; signature: string; }, { type: "thinking"; thinking: string; signature: string; }>, z.ZodObject<{ type: z.ZodLiteral<"redacted">; data: z.ZodString; }, "strip", z.ZodTypeAny, { type: "redacted"; data: string; }, { type: "redacted"; data: string; }>]>; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { value: { type: "thinking"; thinking: string; signature: string; } | { type: "redacted"; data: string; }; modality: "reasoning"; metadata?: undefined; }, { value: { type: "thinking"; thinking: string; signature: string; } | { type: "redacted"; data: string; }; modality: "reasoning"; metadata?: undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"error">; value: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"safety">; value: z.ZodObject<{ category: z.ZodString; probability: z.ZodString; blocked: z.ZodBoolean; message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; category: string; probability: string; blocked: boolean; }, { message: string; category: string; probability: string; blocked: boolean; }>; }, "strip", z.ZodTypeAny, { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }, { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }>]>; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; }, { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; }>, z.ZodObject<{ modality: z.ZodLiteral<"search-result">; value: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"google">; query: z.ZodString; responses: z.ZodArray<z.ZodObject<{ source: z.ZodString; url: z.ZodString; title: z.ZodString; snippet: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { url: string; source: string; title: string; snippet?: string | undefined; }, { url: string; source: string; title: string; snippet?: string | undefined; }>, "many">; references: z.ZodArray<z.ZodObject<{ text: z.ZodString; responseIndices: z.ZodArray<z.ZodNumber, "many">; startIndex: z.ZodOptional<z.ZodNumber>; endIndex: z.ZodOptional<z.ZodNumber>; confidenceScores: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>; }, "strip", z.ZodTypeAny, { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }, { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }, { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }>]>; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; }, { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; }>]>, "many">; metadata: z.ZodUndefined; }, "strip", z.ZodTypeAny, { role: "system" | "user" | "assistant" | "tool"; content: ({ modality: "tool-response"; name: string; id: string; data: string; index: number; metadata?: any; apiResponse?: { statusCode: number; } | undefined; } | { value: { type: "safety"; value: { message: string; category: string; probability: string; blocked: boolean; }; }; modality: "error"; metadata?: undefined; } | { value: { type: "google"; query: string; responses: { url: string; source: string; title: string; snippet?: string | undefined; }[]; references: { text: string; responseIndices: number[]; startIndex?: number | undefined; endIndex?: number | undefined; confidenceScores?: number[] | undefined; }[]; }; modality: "search-result"; metadata?: undefined; } | { v