import { Part, Content, Tool as GoogleTool, UsageMetadata } from "@google/genai";
import { ModelModality } from "./types";
import { GenericClient, CompletionOptions, CompletionResponse, EmbeddingOptions, EmbeddingResponse, Tool, Message, MessageContent, AudioTranscriptionOptions, AudioTranscriptionResponse, AudioGenerationOptions, AudioGenerationResponse, ImageGenerationOptions, ImageGenerationResponse, VideoGenerationOptions, VideoGenerationResponse, VideoStatusOptions, VideoStatusResponse, FileUploadOptions, FileUploadResponse, FileDownloadOptions, FileDownloadResponse } from "./types";
export declare class GenericGeminiClient implements GenericClient {
    private client;
    private apiKey?;
    constructor(apiKey?: string);
    setKey(apiKey: string): void;
    transformContentParts(content: string | MessageContent[]): Part[];
    transformMessages(messages: Message[]): {
        systemInstruction: string | undefined;
        contents: Content[];
    };
    private cleanSchemaForGemini;
    transformTools(tools?: Tool[]): GoogleTool[] | undefined;
    buildThinkingConfig(options: CompletionOptions): Record<string, unknown> | undefined;
    createChatCompletion(options: CompletionOptions): Promise<CompletionResponse>;
    pricesPerMillion(): Record<string, import("./pricing/google").GeminiModelPricing>;
    calculateCost(model: string, usage: UsageMetadata): number | undefined;
    getModels(modality?: ModelModality): Promise<{
        id: string;
    }[]>;
    createEmbedding(options: EmbeddingOptions): Promise<EmbeddingResponse>;
    createAudioTranscription(options: AudioTranscriptionOptions): Promise<AudioTranscriptionResponse>;
    createAudioGeneration(options: AudioGenerationOptions): Promise<AudioGenerationResponse>;
    createImageGeneration(options: ImageGenerationOptions): Promise<ImageGenerationResponse>;
    createVideoGeneration(options: VideoGenerationOptions): Promise<VideoGenerationResponse>;
    getVideoStatus(options: VideoStatusOptions): Promise<VideoStatusResponse>;
    downloadVideo(options: FileDownloadOptions): Promise<FileDownloadResponse>;
    uploadFile(options: FileUploadOptions): Promise<FileUploadResponse>;
    downloadFile(options: FileDownloadOptions): Promise<FileDownloadResponse>;
    getContextLimit(model: string): {
        contextLimit: number;
        threshold: number;
    } | undefined;
}
