import { default as OpenAI } from 'openai';
import { Stream } from 'openai/streaming';
import { APIResource } from '../../../resource';

export declare class Completions extends APIResource {
    protected endpoints: Record<ChatModel, string>;
    /**
     * Creates a model response for the given chat conversation.
     *
     * 文心一言 由于分发在不同的平台，所以有不同的文档
     * 百度云的响应和 OpenAI 的比较类似，但授权没有 AI Studio 方便
     * 之前 AI Studio 的文档是有文档的，但现在不知道去哪了
     * 参考：
     * - https://cloud.baidu.com/doc/WENXINWORKSHOP/s/jlil56u11
     * - https://github.com/PaddlePaddle/ERNIE-Bot-SDK/blob/develop/erniebot/backends/aistudio.py
     */
    create(body: ChatCompletionCreateParamsNonStreaming, options?: OpenAI.RequestOptions): Promise<OpenAI.ChatCompletion>;
    create(body: ChatCompletionCreateParamsStreaming, options?: OpenAI.RequestOptions): Promise<Stream<OpenAI.ChatCompletionChunk>>;
    static buildCreateParams(params: ChatCompletionCreateParams): ChatCompletions.ChatCompletionCreateParams;
    static fromResponse(model: string, data: ChatCompletions.APIResponse): OpenAI.ChatCompletion;
    static fromOpenAIStream(model: string, stream: Stream<ChatCompletions.APIResponse>, controller: AbortController): Stream<OpenAI.ChatCompletionChunk>;
    /**
     * 构建错误
     *
     * @param code -
     * @param message -
     * @returns 错误
     */
    static makeAPIError(code: number, message: string): import('openai/error').APIError;
    /**
     * 如果 code 不为 0，抛出 APIError
     *
     * @param code -
     * @param message -
     */
    static assert(resp: ChatCompletions.APIResponse): void;
}
export interface ChatCompletionCreateParamsNonStreaming extends Pick<OpenAI.ChatCompletionCreateParamsNonStreaming, 'messages' | 'functions' | 'temperature' | 'top_p' | 'presence_penalty' | 'stream' | 'stop' | 'user'> {
    model: ChatModel;
    disable_search?: boolean | null;
    enable_citation?: boolean | null;
}
export interface ChatCompletionCreateParamsStreaming extends Pick<OpenAI.ChatCompletionCreateParamsStreaming, 'messages' | 'functions' | 'temperature' | 'top_p' | 'presence_penalty' | 'stream' | 'stop' | 'user'> {
    model: ChatModel;
    disable_search?: boolean | null;
    enable_citation?: boolean | null;
}
export type ChatCompletionCreateParams = ChatCompletionCreateParamsNonStreaming | ChatCompletionCreateParamsStreaming;
export type ChatModel = 'ernie-bot' | 'ernie-bot-turbo' | 'ernie-bot-4' | 'ernie-bot-8k';
export declare namespace ChatCompletions {
    interface ChatCompletionCreateParams {
        /**
         * 模型名称
         */
        model: ChatModel;
        /**
         * 是否强制关闭实时搜索功能，默认 false，表示不关闭
         *
         * @defaultValue false
         */
        disable_search?: boolean | null;
        /**
         * 是否开启上角标返回，说明：
         * （1）开启后，有概率触发搜索溯源信息search_info，search_info内容见响应参数介绍
         * （2）默认false，不开启
         *
         * @defaultValue false
         */
        enable_citation?: boolean | null;
        /**
         * 模型人设，主要用于人设设定，例如，你是xxx公司制作的AI助手，说明：
         * （1）长度限制1024个字符
         * （2）如果使用 functions 参数，不支持设定人设 system
         *
         * @remarks OpenAI 是通过 messages 的 role 来区分的
         */
        system?: string | null;
        /**
         * 聊天上下文信息
         *
         * @remarks 不支持 system 角色
         */
        messages: OpenAI.ChatCompletionCreateParams['messages'];
        /**
         * 一个可触发函数的描述列表
         */
        functions?: OpenAI.ChatCompletionCreateParams['functions'];
        /**
         * 内容随机性
         *
         * 说明：
         * （1）较高的数值会使输出更加随机，而较低的数值会使其更加集中和确定
         * （2）默认0.8，范围 (0, 1.0]，不能为0
         * （3）建议该参数和 top_p 只设置1个
         * （4）建议 top_p 和 temperature 不要同时更改
         */
        temperature?: number | null;
        /**
         * 生成文本的多样性
         *
         * 说明：
         * （1）影响输出文本的多样性，取值越大，生成文本的多样性越强
         * （2）默认0.8，取值范围 [0, 1.0]
         * （3）建议该参数和 temperature 只设置1个
         * （4）建议 top_p 和 temperature 不要同时更改
         */
        top_p?: number | null;
        /**
         *
         * 通过对已生成的token增加惩罚，减少重复生成的现象。说明：
         * （1）值越大表示惩罚越大
         * （2）默认1.0，取值范围：[1.0, 2.0]
         *
         * @remarks 在 OpenAI 中，参数名为 presence_penalty
         */
        penalty_score?: number | null;
        /**
         * 是否以流式接口的形式返回数据，默认 false
         */
        stream?: boolean | null;
        /**
         * 生成停止标识，当模型生成结果以stop中某个元素结尾时，停止文本生成。说明：
         * （1）每个元素长度不超过20字符
         * （2）最多4个元素
         */
        stop?: string | string[] | undefined;
        /**
         * 表示最终用户的唯一标识符，可以监视和检测滥用行为，防止接口恶意调用
         *
         * @remarks OpenAI 中是通过 user 区分
         */
        user_id?: string | undefined;
    }
    type ChatCompletion = {
        id: string;
        result: string;
        created: string;
        is_end: boolean;
        is_truncated: boolean;
        need_clear_history: boolean;
        usage: OpenAI.CompletionUsage;
    };
    type APIResponse = {
        errorCode: number;
        errorMsg: string;
        result: ChatCompletion;
    };
}
