网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using Markdig;
using Markdig.Syntax;

namespace Dpz.Core.Service.Network.Models;

/// <summary>
/// Chat Completion API 响应
/// </summary>
public class ChatCompletionResponse
{
    [JsonPropertyName("id")]
    public string Id { get; set; } = string.Empty;

    [JsonPropertyName("object")]
    public string Object { get; set; } = string.Empty;

    [JsonPropertyName("created")]
    public long Created { get; set; }

    [JsonPropertyName("model")]
    public string Model { get; set; } = string.Empty;

    [JsonPropertyName("provider")]
    public string? Provider { get; set; }

    [JsonPropertyName("choices")]
    public List<CompletionChoice> Choices { get; set; } = [];

    [JsonPropertyName("usage")]
    public Usage? Usage { get; set; }

    public ResponseResult<T?> Analyze<T>()
        where T : new()
    {
        var result = new ResponseResult<T?>();
        T? t = default;

        var content = Choices.Count > 0 ? Choices[0].Message.Content ?? "" : "";
        try
        {
            var pipeline = new MarkdownPipelineBuilder()
                .UseAutoLinks()
                .UsePipeTables()
                .UseTaskLists()
                .UseEmphasisExtras()
                .UseAutoIdentifiers()
                .Build();
            var document = Markdown.Parse(content, pipeline);
            var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };

            var codeBlocks = document.Descendants<CodeBlock>().ToList();
            if (codeBlocks.Count == 0)
            {
                JsonSerializer.Deserialize<T>(content, options);
            }
            foreach (var json in codeBlocks.Select(codeBlock => codeBlock.Lines.ToString()))
            {
                t = JsonSerializer.Deserialize<T>(json, options);
                break;
            }
        }
        catch (Exception e)
        {
            result.Arguments = [content];
            return result.FailResult(e.Message);
        }
        return result.SuccessResult(t);
    }
}
loading