package com.emoon.openplatform.domain.dto.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * SSE流式响应请求参数
 * 
 * @author destiny
 * @date 2025/12/10
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SseRequest {
    
    /**
     * 模型名称（必填）
     */
    @NotEmpty(message = "model不能为空")
    private String model;
    
    /**
     * 消息列表（必填，使用Map接收嵌套的JSON结构）
     */
    @NotEmpty(message = "messages不能为空")
    private List<Map<String, Object>> messages;
    
    /**
     * 是否流式响应（默认false）
     */
    private Boolean stream;
    
    /**
     * 温度参数（0.0-2.0）
     */
    private Double temperature;
    
    /**
     * RAG知识库ID（可选）
     */
    @JsonProperty("rag_id")
    private String ragId;
    
    /**
     * MCP Agent配置ID（可选）
     */
    @JsonProperty("mcp_id")
    private String mcpId;
    
    /**
     * Prompt模板ID（可选）
     */
    @JsonProperty("prompt_template_id")
    private String promptTemplateId;
    
    /**
     * 网络环境（private/public）（可选）
     */
    private String network;
    
    /**
     * 业务负载数据（JSON字符串格式）（可选）
     */
    private String payload;
    
    /**
     * 响应类型（可选）
     * sse - SSE流式响应（默认）
     * http - HTTP普通JSON响应
     * audio - 语音二进制响应
     * image - 图片二进制响应
     */
    private String responseType;
}

