namespace OASystem.API.OAMethodLib.DoubaoAPI { public enum ReasoningEffort { Minimal, Low, Medium, High } public class DouBaoChatMessage { public DouBaoRole Role { get; set; } public string Content { get; set; } } public enum DouBaoRole { system, user, assistant } public class CompleteChatOptions { public thinkingOptions ThinkingOptions { get; set; } = new thinkingOptions() { IsThinking = false, ReasoningEffort = ReasoningEffort.Minimal }; } public class thinkingOptions { public bool IsThinking { get; set; } = false; public ReasoningEffort ReasoningEffort { get; set; } = ReasoningEffort.Minimal; } public class DoubaoResponse { public string id { get; set; } public string @object { get; set; } public long created { get; set; } public string model { get; set; } public string service_tier { get; set; } public List choices { get; set; } public Usage usage { get; set; } } public class Choice { public int index { get; set; } public string finish_reason { get; set; } public object logprobs { get; set; } // 可以是 null 或者详细概率结构 public Message message { get; set; } } public class Message { public string role { get; set; } public string content { get; set; } public string reasoning_content { get; set; } // 豆包特有字段 } public class Usage { public int completion_tokens { get; set; } public int prompt_tokens { get; set; } public int total_tokens { get; set; } public TokenDetails prompt_tokens_details { get; set; } public TokenDetails completion_tokens_details { get; set; } } public class TokenDetails { public int reasoning_tokens { get; set; } } public class DoubaoFileResponse { public string id { get; set; } public string @object { get; set; } public long bytes { get; set; } public long created_at { get; set; } public string filename { get; set; } public string purpose { get; set; } } public interface IDoubaoService { Task CompleteChatAsync(List messages, CompleteChatOptions? options = null); Task CompleteMultimodalChatAsync(List messages, CompleteMultimodalChatOptions? options); Task UploadFileAsync(Stream fileStream, string fileName, string purpose = "user_data"); Task ListFilesAsync(); Task DeleteFileAsync(string fileId); } public class DoubaoFileListResponse { public string @object { get; set; } public List data { get; set; } } #region 多模态 // 重命名:DoubaoContentItem → DoubaoMultimodalContentItem public class DoubaoMultimodalContentItem { [JsonProperty("type")] // 合法值:input_text(文本)/ input_image(图片)/ input_file(文件) public string Type { get; set; } [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] public string Text { get; set; } [JsonProperty("image_url", NullValueHandling = NullValueHandling.Ignore)] public DoubaoMultimodalImageUrl ImageUrl { get; set; } // 补充:文件类型需要的file_id字段 [JsonProperty("file_id", NullValueHandling = NullValueHandling.Ignore)] public string FileId { get; set; } } // 重命名:DoubaoImageUrl → DoubaoMultimodalImageUrl public class DoubaoMultimodalImageUrl { [JsonProperty("url")] public string Url { get; set; } } // 重命名:DoubaoMultimodalChatMessage(原已带Multimodal,保持但字段适配新类) public class DoubaoMultimodalChatMessage { public string Role { get; set; } // 值必须是 user/system/assistant(小写) public List Content { get; set; } = new List(); } // 重命名:CompleteChatOptions → CompleteMultimodalChatOptions public class CompleteMultimodalChatOptions { public DoubaoMultimodalThinkingOptions ThinkingOptions { get; set; } = new DoubaoMultimodalThinkingOptions(); public float Temperature { get; set; } = 0.7f; public int? MaxOutputTokens { get; set; } public string PreviousResponseId { get; set; } public long? ExpireAt { get; set; } } // 重命名:ThinkingOptions → DoubaoMultimodalThinkingOptions public class DoubaoMultimodalThinkingOptions { public bool IsThinking { get; set; } public string ReasoningEffort { get; set; } = "medium"; } // 重命名:DoubaoSetting → DoubaoMultimodalSetting public class DoubaoMultimodalSetting { public string ApiKey { get; set; } public string EndpointId { get; set; } public string BaseAddress { get; set; } } // 重命名:DoubaoResponse → DoubaoMultimodalResponse public class DoubaoMultimodalResponse { [JsonProperty("choices")] public List Choices { get; set; } = new List(); } // 重命名:DoubaoChoice → DoubaoMultimodalChoice public class DoubaoMultimodalChoice { [JsonProperty("message")] public DoubaoMultimodalResponseMessage Message { get; set; } } // 重命名:DoubaoResponseMessage → DoubaoMultimodalResponseMessage public class DoubaoMultimodalResponseMessage { [JsonProperty("content")] public List Content { get; set; } } #endregion }