Ater.DeepSeek.Core
1.1.3
dotnet add package Ater.DeepSeek.Core --version 1.1.3
NuGet\Install-Package Ater.DeepSeek.Core -Version 1.1.3
<PackageReference Include="Ater.DeepSeek.Core" Version="1.1.3" />
paket add Ater.DeepSeek.Core --version 1.1.3
#r "nuget: Ater.DeepSeek.Core, 1.1.3"
// Install Ater.DeepSeek.Core as a Cake Addin #addin nuget:?package=Ater.DeepSeek.Core&version=1.1.3 // Install Ater.DeepSeek.Core as a Cake Tool #tool nuget:?package=Ater.DeepSeek.Core&version=1.1.3
DeepSeekSDK-NET
DeepSeek API SDK specifically for .NET developers
π Features
- List models
- Chat & Chat streaming
- Completions & Completions streaming (beta)
- User balance
- Local model support
- ASP.NET Core integration support
Usage Requirements
Usage
Please go to official website, register and apply for DeepSeek's ApiKey
Supported .NET version: .NET8
Install Nuget package
dotnet add package Ater.DeepSeek.Core
Instantiate DeepSeekClient
Two methods are provided for instantiation:
public DeepSeekClient(string apiKey);
public DeepSeekClient(HttpClient http, string apiKey);
The first type only requires providing the 'apiKey' to create an instance;
The second method provides a HttpClient
parameter, which is suitable for maintaining the HttpClient
through the HttpClientFactory
and then instance it.
[!NOTE] The default timeout for internal HttpClient is 120 seconds, which can be set before sending the request using the 'SetTimeout()' method, or by using the 'CancellationTokeSource' to set the timeout for specific requests.
[!TIP] If you want to call a local model, try customizing
HttpClient
and settingBaseAddress
to the local address.
Calling method
DeepSeekClient
class provides six asynchronous methods to call DeepSeek's API:
Task<ModelResponse?> ListModelsAsync(CancellationToken cancellationToken);
Task<ChatResponse?> ChatAsync(ChatRequest request, CancellationToken cancellationToken);
Task<IAsyncEnumerable<Choice>?> ChatStreamAsync(ChatRequest request, CancellationToken cancellationToken);
Task<ChatResponse?> CompletionsAsync(CompletionRequest request, CancellationToken cancellationToken);
Task<IAsyncEnumerable<Choice>?> CompletionsStreamAsync(CompletionRequest request, CancellationToken cancellationToken);
Task<UserResponse?> GetUserBalanceAsync(CancellationToken cancellationToken);
List Models Sample
// Create an instance using the apiKey
var client = new DeepSeekClient(apiKey);
var modelResponse = await client.ListModelsAsync(new CancellationToken());
if (modelResponse is null)
{
Console.WriteLine(client.ErrorMsg);
return;
}
foreach (var model in modelResponse.Data)
{
Console.WriteLine(model);
}
Chat Examples
// Create an instance using the apiKey
var client = new DeepSeekClient(apiKey);
// Construct the request body
var request = new ChatRequest
{
Messages = [
Message.NewSystemMessage("You are a language translator"),
Message.NewUserMessage("Please translate 'They are scared! ' into English!")
],
// Specify the model
Model = Constant.Model.ChatModel
};
var chatResponse = await client.ChatAsync(request, new CancellationToken());
if (chatResponse is null)
{
Console.WriteLine(client.ErrorMsg);
}
Console.WriteLine(chatResponse?.Choices.First().Message?.Content);
Chat Examples (Stream)
// Create an instance using the apiKey
var client = new DeepSeekClient(apiKey);
// Construct the request body
var request = new ChatRequest
{
Messages = [
Message.NewSystemMessage("You are a language translator"),
Message.NewUserMessage("Please translate 'They are scared! ' into English!")
],
// Specify the model
Model = Constant.Model.ChatModel
};
var choices = client.ChatStreamAsync(request, new CancellationToken());
if (choices is null)
{
Console.WriteLine(client.ErrorMsg);
return;
}
await foreach (var choice in choices)
{
Console.Write(choice.Delta?.Content);
}
Console.WriteLine();
Local Model Examples
// use local models api
var httpClient = new HttpClient
{
// set your local api address
BaseAddress = new Uri("http://localhost:5000"),
Timeout = TimeSpan.FromSeconds(300),
};
// if have api key
// httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + "your_token");
var localClient = new DeepSeekClient(httpClient);
localClient.SetChatEndpoint("/chat");
localClient.SetCompletionEndpoint("/completions");
var res = await localClient.ChatAsync(new ChatRequest
{
Messages = new List<Message>
{
Message.NewUserMessage("hello")
}
}, new CancellationToken());
return res?.Choices.First().Message?.Content;
[!TIP] More usage example
ASP.NET Core Integration
Install Ater.DeepSeek.AspNetCore
package
dotnet add package Ater.DeepSeek.AspNetCore
Usage in ASP.NET Core
using DeepSeek.AspNetCore;
using DeepSeek.Core;
using DeepSeek.Core.Models;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
var apiKey = builder.Configuration["DeepSeekApiKey"];
builder.Services.AddDeepSeek(option =>
{
option.BaseAddress = new Uri("https://api.deepseek.com");
option.Timeout = TimeSpan.FromSeconds(300);
option.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + apiKey);
});
var app = builder.Build();
app.MapGet("/test", async ([FromServices] DeepSeekClient client) =>
{
var res = await client.ChatAsync(new ChatRequest
{
Messages = new List<Message>
{
Message.NewUserMessage("Why dotnet is good?")
},
MaxTokens = 200
}, new CancellationToken());
return res?.Choices.First().Message?.Content;
});
app.Run();
Usage in ASP.NET Core (Stream)
app.MapGet("/chat", async (HttpContext context, [FromServices] DeepSeekClient client, CancellationToken token) =>
{
context.Response.ContentType = "text/text;charset=utf-8";
try
{
var choices = client.ChatStreamAsync(new ChatRequest
{
Messages = new List<Message>
{
Message.NewUserMessage("Why dotnet is good?")
},
MaxTokens = 200
}, token);
if (choices != null)
{
await foreach (var choice in choices)
{
await context.Response.WriteAsync(choice.Delta!.Content);
}
}
}
catch (Exception ex)
{
await context.Response.WriteAsync("ζζΆζ ζ³ζδΎζε‘" + ex.Message);
}
await context.Response.CompleteAsync();
});
[!TIP] More usage example
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Ater.DeepSeek.Core:
Package | Downloads |
---|---|
Ater.DeepSeek.AspNetCore
DeepSeek API SDK |
GitHub repositories
This package is not used by any popular GitHub repositories.
1. fix ChatRequest TopP Type