Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

DeepSeekHttpClientHelper.cs

using System.Text;
using Microsoft.Net.Http.Headers;
using Newtonsoft.Json;
using Nop.Core;
using Nop.Core.Domain.ArtificialIntelligence;

namespace Nop.Services.ArtificialIntelligence;

/// 
/// Represents the HTTP client helper to create DeepSeek requests
/// 
public partial class DeepSeekHttpClientHelper : IArtificialIntelligenceHttpClientHelper
{
    #region Methods

    /// 
    /// Configure client
    /// 
    /// HTTP client for configuration
    public virtual void ConfigureClient(HttpClient httpClient)
    {
        httpClient.BaseAddress = new Uri(ArtificialIntelligenceDefaults.DeepSeekBaseApiUrl);
    }

    /// 
    /// Create HTTP request
    /// 
    /// Artificial intelligence settings
    /// query to send into artificial intelligence host
    /// Created HttpRequestMessage
    public virtual HttpRequestMessage CreateRequest(ArtificialIntelligenceSettings settings, string query)
    {
        var request = new HttpRequestMessage { Method = HttpMethod.Post };
        request.Headers.TryAddWithoutValidation(HeaderNames.Authorization, $"Bearer {settings.DeepSeekApiKey}");

        var data = JsonConvert.SerializeObject(new
        {
            messages = new List> { new() { ["content"] = query, ["role"] = "system" } },
            model = ArtificialIntelligenceDefaults.DeepSeekApiModel
        });

        request.Content = new StringContent(data, Encoding.UTF8, MimeTypes.ApplicationJson);

        return request;
    }

    /// 
    /// Parse response
    /// 
    /// Response text to parse
    /// Generated text from artificial intelligence host
    public virtual string ParseResponse(string responseText)
    {
        var response = JsonConvert.DeserializeAnonymousType(responseText,
            new
            {
                choices = new[]
                {
                    new { message =  new { content = string.Empty  } }
                }
            });

        var result = response.choices.FirstOrDefault()?.message?.content;

        return result ?? string.Empty;
    }

    #endregion
}