import { default as OpenAI } from 'openai';
import { DashscopeCompletions } from './completions';

export declare namespace DashscopeChat {
    /**
     * https://help.aliyun.com/zh/dashscope/developer-reference/model-square
     */
    type ChatModel = DashscopeCompletions.CompletionModel;
    type ResponseFinish = 'stop' | 'length' | 'tool_calls' | 'content_filter' | 'function_call' | 'null';
    interface ChatCompletionParametersParam extends DashscopeCompletions.CompletionParametersParam {
        /**
         * 指定可供模型调用的工具列表
         *
         * 当输入多个工具时，模型会选择其中一个生成结果。
         *
         * 警告：
         *
         * - tools 暂时无法和 incremental_output 参数同时使用
         * - 使用 tools 时需要同时指定 result_format 为 message
         */
        tools?: OpenAI.ChatCompletionTool[];
    }
    interface ChatCompletionCreateParams {
        model: ({} & string) | ChatModel;
        input: {
            messages: OpenAI.ChatCompletionMessageParam[];
        };
        parameters?: ChatCompletionParametersParam;
    }
    namespace ChatCompletion {
        interface Output {
            text: string;
            finish_reason?: ResponseFinish;
            choices: OpenAI.ChatCompletion.Choice[];
        }
    }
    /**
     * 详见 [输入参数配置](https://help.aliyun.com/zh/dashscope/developer-reference/api-details)
     */
    interface ChatCompletion {
        request_id: string;
        usage: DashscopeCompletions.CompletionUsage;
        output: ChatCompletion.Output;
    }
}
