package cn.teammodel.model.dto.ai.deepseek;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.List;

/**
 *  接收DeepSeek响应的json 格式来设计响应体 用来响应体字符串
 */
@Data
public class DeepSeekChatResponse {
    /**
     * 响应码
      */
    private int code;
    /**
     * 响应内容
     */
    private String msg;
    /**
     * 思考项目
     */
    private long  wasteTime;
    /**
     * 会话id
     */
    private String id;
    /**
     * 对象的类型, 其值为 chat.completion
     */
    private String object;

    /**
     * 创建聊天完成时的 Unix 时间戳（以秒为单位）。
     */
    private long created;
    /**
     * 生成该 completion 的模型名。
     */
    private String model;

    /**
     * 返回内容
     */
    private List<Choice> choices;

    /**
     * 该对话补全请求的用量信息。
     */
    private Usage usage;

    private String system_fingerprint;

    /**
     * 模型生成的 completion 的选择列表。
     */
    @Data
    @AllArgsConstructor
    public static class Choice {
        /**
         * 该 completion 在模型生成的 completion 的选择列表中的索引。
         */
        private int index;
        //内容
        private DeepSeekMessage message;
        //private String logprobs;
        private  String finish_reason;
    }

    /**
     * 该对话补全请求的用量信息。
     */
    @Data
    public static class Usage{
        //用户 prompt 所包含的 token 数。该值等于 prompt_cache_hit_tokens + prompt_cache_miss_tokens
        private int prompt_tokens;
        //模型 completion 产生的 token 数。
        private int completion_tokens;
        //该请求中，所有 token 的数量（prompt + completion）。
        private int total_tokens;
        private Prompt_Tokens_Details prompt_tokens_details;
        //用户 prompt 中，命中上下文缓存的 token 数。
        private int prompt_cache_hit_tokens;
        //用户 prompt 中，未命中上下文缓存的 token 数。
        private int prompt_cache_miss_tokens;
    }

    /**
     * completion tokens 的详细信息。
     */
    @Data
    public static class Prompt_Tokens_Details {
        //推理模型所产生的思维链 token 数量
        private int cached_tokens;
    }

    /**
     * 聊天内容
     */
    @Data
    public static class DeepSeekMessage{

        /**
         * 角色
         */
        private String role;

        /**
         * 该 completion 的内容。
         */
        private String  content;
    }
}
