import { SecretManager } from "@iyio/common";
import { ChatCompletionRequest } from "./convo-openai-types.js";
import { ConvoCompletionCtx, ConvoCompletionService, ConvoCompletionServiceFeatureSupport, ConvoEmbeddingsGenerationRequest, ConvoEmbeddingsGenerationResult, ConvoEmbeddingsGenerationSupportRequest, ConvoEmbeddingsService, ConvoModelInfo, ConvoTranscriptionRequest, ConvoTranscriptionResult, ConvoTranscriptionService, ConvoTranscriptionSupportRequest, ConvoTtsRequest, ConvoTtsResult, ConvoTtsService, FlatConvoConversationBase } from "./convo-types.js";
import { ChatCompletion } from './open-ai/resources/chat/index.js';
import { PromiseResultType, ResultType } from "./result-type.js";
export interface BaseOpenAiConvoCompletionServiceOptions {
    apiKey?: string;
    apiBaseUrl?: string;
    completionsEndpoint?: string;
    secretManager?: SecretManager;
    secretsName?: string;
    models?: ConvoModelInfo[];
    getModelsAsync?: () => Promise<ConvoModelInfo[]>;
    inputType: string;
    outputType: string;
    apiKeyHeader?: string;
    apiKeyHeaderValuePrefix?: string | null;
    headers?: Record<string, string>;
    updateRequest?: (requestBody: Record<string, any>, headers: Record<string, string | undefined>) => void;
    completeAsync?: (input: ChatCompletionRequest, flat: FlatConvoConversationBase, apiKey: string | undefined, url: string) => Promise<ChatCompletion | undefined>;
    isFallback?: boolean;
    serviceId: string;
    /** Whether to log HTTP requests and responses for debugging purposes */
    logRequests?: boolean;
    canComplete?: (model: string | undefined, flat: FlatConvoConversationBase) => boolean;
    supportsTranscription?: boolean;
    supportsTts?: boolean;
}
export declare class BaseOpenAiConvoCompletionService implements ConvoCompletionService<ChatCompletionRequest, ChatCompletion>, ConvoTranscriptionService, ConvoTtsService, ConvoEmbeddingsService {
    readonly serviceId: string;
    readonly inputType: string;
    readonly outputType: string;
    private readonly secretManager?;
    private readonly apiKey?;
    private readonly apiBaseUrl;
    private readonly completionsEndpoint;
    private readonly secretsName?;
    private readonly models?;
    private readonly apiKeyHeader;
    private readonly apiKeyHeaderValuePrefix?;
    private readonly headers;
    private readonly isFallback;
    private readonly logRequests;
    private readonly supportsTranscription;
    private readonly supportsTts;
    private readonly updateRequest?;
    private readonly completeAsync?;
    private readonly _getModelsAsync?;
    private readonly _canComplete?;
    constructor({ apiKey, secretManager, secretsName, apiBaseUrl, completionsEndpoint, inputType, outputType, models, isFallback, apiKeyHeader, apiKeyHeaderValuePrefix, headers, serviceId, logRequests, completeAsync, updateRequest, getModelsAsync, canComplete, supportsTranscription, supportsTts, }: BaseOpenAiConvoCompletionServiceOptions);
    getSupportAsync(modelName: string): Promise<ConvoCompletionServiceFeatureSupport>;
    canComplete(model: string | undefined, flat: FlatConvoConversationBase): boolean;
    private clientPromises;
    private getApiClientAsync;
    completeConvoAsync(input: ChatCompletionRequest, flat: FlatConvoConversationBase, ctx: ConvoCompletionCtx<ChatCompletionRequest, ChatCompletion>): Promise<ChatCompletion>;
    private mergeToolCallsAsync;
    getModelsAsync(): Promise<ConvoModelInfo[]>;
    protected maxSpeakerRefs: number;
    canTranscribe(request: ConvoTranscriptionSupportRequest): Promise<boolean>;
    protected canTranscribeAsync(request: ConvoTranscriptionSupportRequest): Promise<boolean>;
    transcribeAsync({ audio, labelSpeakers, includeSegments, speakerRefs, model, }: ConvoTranscriptionRequest): Promise<ConvoTranscriptionResult>;
    canConvertToSpeech(request: ConvoTtsRequest): Promise<boolean>;
    protected canConvertToSpeechAsync(request: ConvoTtsRequest): Promise<boolean>;
    convertToSpeechAsync(request: ConvoTtsRequest): Promise<ConvoTtsResult>;
    canGenerateEmbeddings(request: ConvoEmbeddingsGenerationSupportRequest): ResultType<boolean>;
    generateEmbeddingsAsync(request: ConvoEmbeddingsGenerationRequest): PromiseResultType<ConvoEmbeddingsGenerationResult>;
}
export interface OpenAIEmbeddingsResponse {
    object: string;
    data: Datum[];
    model: string;
    usage: Usage;
}
export interface Datum {
    object: string;
    index: number;
    embedding: number[];
}
export interface Usage {
    prompt_tokens: number;
    total_tokens: number;
}
