dashscope-sdk

dashscope-sdk

An unofficial DashScope SDK for .NET maintained by Cnblogs.

Stars: 77

Visit
 screenshot

DashScope SDK for .NET is an unofficial SDK maintained by Cnblogs, providing various APIs for text embedding, generation, multimodal generation, image synthesis, and more. Users can interact with the SDK to perform tasks such as text completion, chat generation, function calls, file operations, and more. The project is under active development, and users are advised to check the Release Notes before upgrading.

README:

English | 简体中文

NuGet Version NuGet Version

DashScope SDK for .NET

An unofficial DashScope SDK maintained by Cnblogs.

Warning: this project is under active development, Breaking Changes may introduced without notice or major version change. Make sure you read the Release Notes before upgrading.

Quick Start

Console App

Install Cnblogs.DashScope.Sdk package.

var client = new DashScopeClient("your-api-key");
var completion = await client.GetQWenCompletionAsync(QWenLlm.QWenMax, prompt);
Console.WriteLine(completion.Output.Text);

ASP.NET Core

Install the Cnblogs.DashScope.AspNetCore package.

Program.cs

builder.AddDashScopeClient(builder.Configuration);

appsettings.json

{
    "DashScope": {
        "ApiKey": "your-api-key"
    }
}

Usage

public class YourService(IDashScopeClient client)
{
    public async Task<string> CompletePromptAsync(string prompt)
    {
       var completion = await client.GetQWenCompletionAsync(QWenLlm.QWenMax, prompt);
       return completion.Output.Text;
    }
}

Supported APIs

  • Text Embedding API - dashScopeClient.GetTextEmbeddingsAsync()
  • Text Generation API(qwen-turbo, qwen-max, etc.) - dashScopeClient.GetQwenCompletionAsync() and dashScopeClient.GetQWenCompletionStreamAsync()
  • BaiChuan Models - Use dashScopeClient.GetBaiChuanTextCompletionAsync()
  • LLaMa2 Models - dashScopeClient.GetLlama2TextCompletionAsync()
  • Multimodal Generation API(qwen-vl-max, etc.) - dashScopeClient.GetQWenMultimodalCompletionAsync() and dashScopeClient.GetQWenMultimodalCompletionStreamAsync()
  • Wanx Models(Image generation, background generation, etc)
    • Image Synthesis - CreateWanxImageSynthesisTaskAsync() and GetWanxImageSynthesisTaskAsync()
    • Image Generation - CreateWanxImageGenerationTaskAsync() and GetWanxImageGenerationTaskAsync()
    • Background Image Generation - CreateWanxBackgroundGenerationTaskAsync() and GetWanxBackgroundGenerationTaskAsync()
  • File API that used by Qwen-Long - dashScopeClient.UploadFileAsync() and dashScopeClient.DeleteFileAsync

Examples

Visit tests for more usage of each api.

Single Text Completion

var prompt = "hello"
var completion = await client.GetQWenCompletionAsync(QWenLlm.QWenMax, prompt);
Console.WriteLine(completion.Output.Text);

Multi-round chat

var history = new List<ChatMessage>
{
    new("user", "Please remember this number, 42"),
    new("assistant", "I have remembered this number."),
    new("user", "What was the number I metioned before?")
}
var parameters = new TextGenerationParameters()
{
    ResultFormat = ResultFormats.Message
};
var completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenMax, history, parameters);
Console.WriteLine(completion.Output.Choices[0].Message.Content); // The number is 42

Function Call

Creates a function with parameters

string GetCurrentWeather(GetCurrentWeatherParameters parameters)
{
    // actual implementation should be different.
    return "Sunny, 14" + parameters.Unit switch
    {
        TemperatureUnit.Celsius => "",
        TemperatureUnit.Fahrenheit => ""
    };
}

public record GetCurrentWeatherParameters(
    [property: Required]
    [property: Description("The city and state, e.g. San Francisco, CA")]
    string Location,
    [property: JsonConverter(typeof(EnumStringConverter<TemperatureUnit>))]
    TemperatureUnit Unit = TemperatureUnit.Celsius);

public enum TemperatureUnit
{
    Celsius,
    Fahrenheit
}

Append tool information to chat messages.

var tools = new List<ToolDefinition>()
{
    new(
        ToolTypes.Function,
        new FunctionDefinition(
            nameof(GetCurrentWeather),
            "Get the weather abount given location",
            new JsonSchemaBuilder().FromType<GetCurrentWeatherParameters>().Build()))
};

var history = new List<ChatMessage>
{
    new("user", "What is the weather today in C.A?")
};

var parameters = new TextGenerationParamters()
{
    ResultFormat = ResultFormats.Message,
    Tools = tools
};

// send question with available tools.
var completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenMax, history, parameters);
history.Add(completion.Output.Choice[0].Message);

// model responding with tool calls.
Console.WriteLine(completion.Output.Choice[0].Message.ToolCalls[0].Function.Name); // GetCurrentWeather

// calling tool that model requests and append result into history.
var result = GetCurrentWeather(JsonSerializer.Deserialize<GetCurrentWeatherParameters>(completion.Output.Choice[0].Message.ToolCalls[0].Function.Arguments));
history.Add(new("tool", result, nameof(GetCurrentWeather)));

// get back answers.
completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenMax, history, parameters);
Console.WriteLine(completion.Output.Choice[0].Message.Content);

Append the tool calling result with tool role, then model will generate answers based on tool calling result.

QWen-Long with files

Upload file first.

var file = new FileInfo("test.txt");
var uploadedFile = await dashScopeClient.UploadFileAsync(file.OpenRead(), file.Name);

Using uploaded file id in messages.

var history = new List<ChatMessage>
{
    new(uploadedFile.Id),   // use array for multiple files, e.g. [file1.Id, file2.Id]
    new("user", "Summarize the content of file.")
}
var parameters = new TextGenerationParameters()
{
    ResultFormat = ResultFormats.Message
};
var completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenLong, history, parameters);
Console.WriteLine(completion.Output.Choices[0].Message.Content);

Delete file if needed

var deletionResult = await dashScopeClient.DeleteFileAsync(uploadedFile.Id);

For Tasks:

Click tags to check more tools for each tasks

For Jobs:

Alternative AI tools for dashscope-sdk

Similar Open Source Tools

For similar tasks

For similar jobs