ChatResponse.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. namespace OASystem.API.OAMethodLib.TokenHubAI.Models;
  2. /// <summary>
  3. /// TokenHub AI 聊天响应
  4. /// </summary>
  5. public class ChatResponse
  6. {
  7. // ============ 响应标识 ============
  8. /// <summary>
  9. /// 响应 ID
  10. /// </summary>
  11. public string? Id { get; set; }
  12. /// <summary>
  13. /// 使用的模型
  14. /// </summary>
  15. public string? Model { get; set; }
  16. /// <summary>
  17. /// 对象类型
  18. /// </summary>
  19. public string? Object { get; set; }
  20. /// <summary>
  21. /// 创建时间戳
  22. /// </summary>
  23. public long? Created { get; set; }
  24. // ============ 响应内容 ============
  25. /// <summary>
  26. /// 回复内容
  27. /// </summary>
  28. public string? Content { get; set; }
  29. /// <summary>
  30. /// 完整的选择列表
  31. /// </summary>
  32. public List<Choice>? Choices { get; set; }
  33. /// <summary>
  34. /// Token 使用统计
  35. /// </summary>
  36. public TokenUsage? Usage { get; set; }
  37. // ============ 工具调用 ============
  38. /// <summary>
  39. /// 工具调用列表(Function Calling)
  40. /// </summary>
  41. public List<ToolCall>? ToolCalls { get; set; }
  42. // ============ 状态信息 ============
  43. /// <summary>
  44. /// 是否成功
  45. /// </summary>
  46. public bool IsSuccess { get; set; }
  47. /// <summary>
  48. /// 错误信息(如有)
  49. /// </summary>
  50. public string? ErrorMessage { get; set; }
  51. /// <summary>
  52. /// 完成原因
  53. /// </summary>
  54. /// <remarks>
  55. /// - stop:正常结束
  56. /// - length:达到最大长度
  57. /// - content_filter:内容被过滤
  58. /// - tool_calls:工具调用
  59. /// </remarks>
  60. public string? FinishReason { get; set; }
  61. /// <summary>
  62. /// 原始响应 JSON(调试用)
  63. /// </summary>
  64. public string? RawJson { get; set; }
  65. // ============ 工厂方法 ============
  66. /// <summary>
  67. /// 创建成功响应
  68. /// </summary>
  69. public static ChatResponse Success(string content, string? model = null)
  70. {
  71. return new ChatResponse
  72. {
  73. IsSuccess = true,
  74. Content = content,
  75. Model = model,
  76. FinishReason = "stop"
  77. };
  78. }
  79. /// <summary>
  80. /// 创建失败响应
  81. /// </summary>
  82. public static ChatResponse Failure(string errorMessage)
  83. {
  84. return new ChatResponse
  85. {
  86. IsSuccess = false,
  87. ErrorMessage = errorMessage
  88. };
  89. }
  90. }
  91. /// <summary>
  92. /// 选择项
  93. /// </summary>
  94. public class Choice
  95. {
  96. /// <summary>
  97. /// 索引
  98. /// </summary>
  99. public int Index { get; set; }
  100. /// <summary>
  101. /// 消息
  102. /// </summary>
  103. public ChatMessage? Message { get; set; }
  104. /// <summary>
  105. /// 增量消息(流式)
  106. /// </summary>
  107. public ChatMessage? Delta { get; set; }
  108. /// <summary>
  109. /// 完成原因
  110. /// </summary>
  111. public string? FinishReason { get; set; }
  112. /// <summary>
  113. /// 日志概率
  114. /// </summary>
  115. public object? LogProbs { get; set; }
  116. }
  117. /// <summary>
  118. /// Token 使用统计
  119. /// </summary>
  120. public class TokenUsage
  121. {
  122. /// <summary>
  123. /// 输入 Token 数
  124. /// </summary>
  125. public int PromptTokens { get; set; }
  126. /// <summary>
  127. /// 输出 Token 数
  128. /// </summary>
  129. public int CompletionTokens { get; set; }
  130. /// <summary>
  131. /// 总 Token 数
  132. /// </summary>
  133. public int TotalTokens { get; set; }
  134. /// <summary>
  135. /// 获取使用详情
  136. /// </summary>
  137. public override string ToString()
  138. {
  139. return $"输入: {PromptTokens}, 输出: {CompletionTokens}, 总计: {TotalTokens}";
  140. }
  141. }