import { AskExpertsServer } from "../server/AskExpertsServer.js";
import { ExpertQuote, ExpertReply, ExpertReplies, Prompt, ExpertPrice } from "../common/types.js";
import { OpenaiInterface } from "../openai/index.js";
/**
 * OpenAI Expert implementation for NIP-174
 * Provides direct access to OpenAI models with pricing based on token usage
 */
export declare class OpenaiProxyExpertBase {
    #private;
    /**
     * AskExpertsServer instance
     */
    readonly server: AskExpertsServer;
    /**
     * OpenAI client
     */
    readonly openai: OpenaiInterface;
    /**
     * Creates a new OpenaiExpert instance
     *
     * @param options - Configuration options
     */
    constructor(options: {
        server: AskExpertsServer;
        openai: OpenaiInterface;
        model: string;
        onGetContext?: (prompt: Prompt) => Promise<string>;
        onGetSystemPrompt?: (prompt: Prompt) => Promise<string>;
    });
    /**
     * Starts the expert
     */
    start(): Promise<void>;
    /**
     * Gets the model ID used by this expert
     *
     * @returns The model ID
     */
    get model(): string;
    get onGetContext(): ((prompt: Prompt) => Promise<string>) | undefined;
    set onGetContext(value: ((prompt: Prompt) => Promise<string>) | undefined);
    get onGetSystemPrompt(): ((prompt: Prompt) => Promise<string>) | undefined;
    set onGetSystemPrompt(value: ((prompt: Prompt) => Promise<string>) | undefined);
    /**
     * Handles prompt events
     *
     * @param prompt - The prompt event
     * @returns Promise resolving to a quote
     */
    /**
     * Count tokens using gpt-tokenizer
     *
     * @param text - Text to count tokens for
     * @returns Token count
     */
    private countTokens;
    /**
     * Callback that fetches the system prompt and context for
     * this prompt and estimates it's price. Made public to be
     * reusable.
     * @param prompt - prompt
     * @returns - expert price
     */
    /**
     * Creates ChatCompletionCreateParams from a prompt
     *
     * @param prompt - The prompt to create params for
     * @returns ChatCompletionCreateParams object
     */
    private createChatCompletionCreateParams;
    onPromptPrice(prompt: Prompt): Promise<ExpertPrice>;
    private produceReplies;
    /**
     * Executes prompts after the quote was paid
     *
     * @param prompt - The prompt event
     * @param quote - The quote
     * @returns Promise resolving to the expert's reply
     */
    onPromptPaid(prompt: Prompt, quote: ExpertQuote): Promise<ExpertReply | ExpertReplies>;
    /**
     * Disposes of resources when the expert is no longer needed
     */
    [Symbol.asyncDispose](): Promise<void>;
}
