package com.sonic.cow.client.input.voicechat;

import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 文档说明：https://www.volcengine.com/docs/6348/1558163
 * @author mzc
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UpdateVoiceChatInput {
    @ApiModelProperty("你的音视频应用的唯一标志，参看创建 RTC 应用获取或创建 AppId。")
    @JSONField(name = "AppId")
    private String AppId;
    @ApiModelProperty("智能体与真人进行通话的房间的 ID，需与真人用户使用客户端 SDK 进房时的使用的 RoomId 保持一致")
    @JSONField(name = "RoomId")
    private String RoomId;
    @ApiModelProperty("智能体任务 ID。由你自行定义，用于标识任务，且后续更新或结束此任务也需要使用该 TaskId。参数定义规则参看参数赋值规范。\n" +
            "一个 AppId 的 RoomId 下 TaskId 是唯一的，AppId + RoomId + TaskId 共同构成一个全局唯一的任务标识，用来标识指定 AppId 下某个房间内正在运行的任务，从而能在此任务运行中进行更新或者停止此任务。\n" +
            "不同 AppId 或者不同 RoomId 下 TaskId可以重复。")
    @JSONField(name = "TaskId")
    private String TaskId;
    @ApiModelProperty("更新指令\n" +
            "\n" +
            "interrupt：打断智能体。\n" +
            "function：传回工具调用信息指令。\n" +
            "ExternalTextToSpeech ： 传入文本信息供 TTS 音频播放。使用方法参看自定义语音播放。\n" +
            "ExternalPromptsForLLM：传入自定义文本与用户问题拼接后送入 LLM。\n" +
            "ExternalTextToLLM：传入外部问题送入 LLM。根据你设定的优先级决定替代用户问题或增加新一轮对话。\n" +
            "FinishSpeechRecognition：触发新一轮对话。")
    @JSONField(name = "Command")
    private String Command;
//    @ApiModelProperty("工具调用信息指令。\n" +
//            "\n" +
//            "注意\n" +
//            "\n" +
//            "Command 取值为 function、ExternalTextToSpeech、ExternalPromptsForLLM和ExternalTextToLLM时，Message必填。\n" +
//            "当 Command 取值为 function时，Message 格式需为 Json 转译字符串，例如：\n" +
//            "\"{\\\"ToolCallID\\\":\\\"call_cx\\\",\\\"Content\\\":\\\"上海天气是台风\\\"}\"\n" +
//            "其他取值时格式为普通字符串，例如你刚才的故事讲的真棒。\"\n" +
//            "当 Command 取值为 ExternalTextToSpeech时，message 传入内容建议不超过 200 个字符。")
//    @JSONField(name = "Message")
//    private String Message;
//    @ApiModelProperty("传入文本信息或外部问题时，处理的优先级。\n" +
//            "\n" +
//            "1：高优先级。传入信息直接打断交互，进行处理。\n" +
//            "2：中优先级。等待当前交互结束后，进行处理。\n" +
//            "3：低优先级。如当前正在发生交互，直接丢弃 Message 传入的信息。\n")
//    @JSONField(name = "InterruptMode")
//    private Integer InterruptMode=1;
}