Skip to content

Latest commit

 

History

History
108 lines (89 loc) · 3.87 KB

README.md

File metadata and controls

108 lines (89 loc) · 3.87 KB

LangSmith SDK for .NET

Nuget package dotnet License: MIT Discord

Features 🔥

  • Fully generated C# SDK based on official OpenAPI specification using AutoSDK
  • Automatic releases of new preview versions if there was an update to the OpenAPI specification
  • Source generator to define tools natively through C# interfaces
  • All modern .NET features - nullability, trimming, NativeAOT, etc.
  • Support .Net Framework/.Net Standard 2.0

Usage

Initializing

using var api = new LangSmithApi();
using var openAiApi = new OpenAiApi();

api.JsonSerializerContext = new SpecialJsonSerializerContext(OpenAI.SourceGenerationContext.Default);

// This can be a user input to your app
var question = "Can you summarize this morning's meetings?";

// This can be retrieved in a retrieval step
const string context = "During this morning's meeting, we solved all world conflict.";
var messages = new[]
{
    "You are a helpful assistant. Please respond to the user's request only based on the given context."
        .AsSystemMessage(),
    $"Question: {question}\\nContext: {context}",
};

// Create parent run
var parentRunId = Guid.NewGuid();
await api.Run.CreateRunAsync(
    name: "Chat Pipeline",
    runType: CreateRunRequestRunType.Chain,
    id: parentRunId,
    inputs: new CreateRunRequestInputs
    {
        AdditionalProperties = new Dictionary<string, object>
        {
            ["question"] = question,
        },
    });

// Create child run
var childRunId = Guid.NewGuid();
await api.Run.CreateRunAsync(
    name: "OpenAI Call",
    runType: CreateRunRequestRunType.Llm,
    id: childRunId,
    parentRunId: parentRunId,
    inputs: new CreateRunRequestInputs
    {
        AdditionalProperties = new Dictionary<string, object>
        {
            ["messages"] = messages,
        },
    });

// Generate a completion
var chatCompletion = await openAiApi.Chat.CreateChatCompletionAsync(
    model: CreateChatCompletionRequestModel.Gpt35Turbo,
    messages: messages);

// End runs
await api.Run.UpdateRunAsync(
    runId: childRunId,
    outputs: new UpdateRunRequestOutputs
    {
        AdditionalProperties = new Dictionary<string, object>
        {
            ["chatCompletion"] = chatCompletion,
        },
    },
    endTime: DateTime.UtcNow.ToString("O"));
await api.Run.UpdateRunAsync(
    runId: parentRunId,
    outputs: new UpdateRunRequestOutputs
    {
        AdditionalProperties = new Dictionary<string, object>
        {
            ["answer"] = chatCompletion.Choices[0].Message.Content ?? string.Empty,
        },
    },
    endTime: DateTime.UtcNow.ToString("O"));

Support

Priority place for bugs: https://github.com/tryAGI/LangSmith/issues
Priority place for ideas and general questions: https://github.com/tryAGI/LangSmith/discussions
Discord: https://discord.gg/Ca2xhfBf3v

Acknowledgments

JetBrains logo

This project is supported by JetBrains through the Open Source Support Program.

CodeRabbit logo

This project is supported by CodeRabbit through the Open Source Support Program.