Skip to content

Helpers and Source generator to define OpenAI/Ollama/Anthropic/Gemini/LangChain tools natively through C# interfaces and without Reflection

License

Notifications You must be signed in to change notification settings

tryAGI/CSharpToJsonSchema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSharpToJsonSchema

Nuget package dotnet License: MIT Discord

Features 🔥

  • Source generator to define functions natively through C# interfaces and individual methods
  • Doesn't use Reflection
  • All modern .NET features - nullability, trimming, NativeAOT, etc.
  • Tested for compatibility with OpenAI/Ollama/Anthropic/LangChain/Gemini

Usage

Interface

using CSharpToJsonSchema;

public enum Unit
{
    Celsius,
    Fahrenheit,
}

public class Weather
{
    public string Location { get; set; } = string.Empty;
    public double Temperature { get; set; }
    public Unit Unit { get; set; }
    public string Description { get; set; } = string.Empty;
}

[GenerateJsonSchema(Strict = true)] // false by default. You can't use parameters with default values in Strict mode.
public interface IWeatherFunctions
{
    [Description("Get the current weather in a given location")]
    public Task<Weather> GetCurrentWeatherAsync(
        [Description("The city and state, e.g. San Francisco, CA")] string location,
        Unit unit,
        CancellationToken cancellationToken = default);
}

public class WeatherService : IWeatherFunctions
{
    public Task<Weather> GetCurrentWeatherAsync(string location, Unit unit = Unit.Celsius, CancellationToken cancellationToken = default)
    {
        return Task.FromResult(new Weather
        {
            Location = location,
            Temperature = 22.0,
            Unit = unit,
            Description = "Sunny",
        });
    }
}

var tools = service.AsTools();

Methods

[FunctionTool]
public Task<Weather> GetCurrentWeatherAsync(string location, Unit unit = Unit.Celsius, CancellationToken cancellationToken = default)
{
    return Task.FromResult(new Weather
    {
        Location = location,
        Temperature = 22.0,
        Unit = unit,
        Description = "Sunny",
    });
}

var tools = new Tools([GetCurrentWeatherAsync])

//Access list of CSharpToJsonSchema.Tool
var myTools = tools.AvailableTools

//Implicit Conversion to list of CSharpToJsonSchema.Tool
List<Tool> myTools = tools

Support

Priority place for bugs: https://github.com/tryAGI/CSharpToJsonSchema/issues
Priority place for ideas and general questions: https://github.com/tryAGI/CSharpToJsonSchema/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.