import { BaseLLMConfig, ToolDefinition, BaseLLMProvider, BaseMessage, GenerateOptions, GenerateResponse, PartialReturn } from '@agenite/llm';

/**
 * Available GPT model versions
 */
type OpenAIModel = "gpt-4-turbo-preview" | "gpt-4-0125-preview" | "gpt-4-1106-preview" | "gpt-4" | "gpt-4-32k" | "gpt-3.5-turbo" | "gpt-3.5-turbo-16k";
/**
 * OpenAI-specific configuration options
 */
interface OpenAIConfig extends BaseLLMConfig {
    apiKey: string;
    model?: OpenAIModel;
    /**
     * Response format for completions
     */
    responseFormat?: "text" | "json_object";
    /**
     * Tool definitions in OpenAI format
     */
    tools?: ToolDefinition[];
    /**
     * Forces the model to use a specific tool
     */
    forceTool?: string;
    /**
     * System prompt to be prepended to all messages
     */
    systemPrompt?: string;
}

declare class OpenAIProvider extends BaseLLMProvider {
    private client;
    private model;
    readonly name = "OpenAI";
    readonly version = "1.0";
    constructor(config: OpenAIConfig);
    generate(input: string | BaseMessage[], options?: Partial<GenerateOptions>): Promise<GenerateResponse>;
    stream(input: string | BaseMessage[], options?: Partial<GenerateOptions>): AsyncGenerator<PartialReturn, GenerateResponse, unknown>;
}

export { type OpenAIConfig, type OpenAIModel, OpenAIProvider };
