CodeMonarchs.OpenAISharp.Client 0.0.1-beta

This is a prerelease version of CodeMonarchs.OpenAISharp.Client.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package CodeMonarchs.OpenAISharp.Client --version 0.0.1-beta
NuGet\Install-Package CodeMonarchs.OpenAISharp.Client -Version 0.0.1-beta
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CodeMonarchs.OpenAISharp.Client" Version="0.0.1-beta" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add CodeMonarchs.OpenAISharp.Client --version 0.0.1-beta
#r "nuget: CodeMonarchs.OpenAISharp.Client, 0.0.1-beta"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install CodeMonarchs.OpenAISharp.Client as a Cake Addin
#addin nuget:?package=CodeMonarchs.OpenAISharp.Client&version=0.0.1-beta&prerelease

// Install CodeMonarchs.OpenAISharp.Client as a Cake Tool
#tool nuget:?package=CodeMonarchs.OpenAISharp.Client&version=0.0.1-beta&prerelease

OpenAISharp

A <b>.NET Standard 2.1</b> C# class library created to easily interface with the the Open AI API.

Supported Versions of .NET and .NET Core
.NET Core 3.0 .NET Core 3.1 .NET 5.0 .NET 6.0 .NET 7.0

Getting Started - Web API (.NET/.NET Core)

  1. Install the NuGet package from <a href="#">CodeMonarchs.OpenAISharp</a>:
    • dotnet add package CodeMonarchs.OpenAISharp
  2. Open your appsettings.json file and add the following key/value pair:
    {
        ...omitted for brevity
        "OpenAI": {
            "ApiKey": "<your-api-key>",
            "OrganizationId": "<your-organization-id>"
        }
    } 
    
  3. Replace <your-api-key> with your <b>Open AI API Key</b> from here:
  4. Replace <your-organizatin-key> with your <b>Open AI Organization Id</b> from here:
  5. Add <b>required dependencies</b> to the Program.cs file:
    builder.Services.AddHttpClient();
    builder.Services.AddScoped<IOpenAIClient, OpenAIClient>();
    builder.Services.Configure<OpenAIClientOptions>(builder.Configuration.GetSection("OpenAI"));
    
    Currently, the OpenAIClient class depends on IHttpClientFactory so you have to AddHttpClient() to your project for the dependencies to resolve properly.
  6. Add any the API specifc service classes you want to utilize to the Program.cs file:
     builder.Services.AddScoped<ICompletionService, CompletionService>();
     builder.Services.AddScoped<IEditService, EditService>();
     builder.Services.AddScoped<IEmbeddingService, EmbeddingService>();
     builder.Services.AddScoped<IFileService, FileService>();
     builder.Services.AddScoped<IFineTuneService, FineTuneService>();
     builder.Services.AddScoped<IImageService, ImageService>();
     builder.Services.AddScoped<IModelService, ModelService>();
     builder.Services.AddScoped<IModerationService, ModerationService>();
    
  7. <b>That's it!</b> Now you can consume any of the services in this repository as you normally would with regular old dependency injection.

<i><b>Note: </b>If you add the base package CodeMonarchs.OpenAISharp it will include all of the packages listed above. If you are only interested in a particular endpoint (such as the Completion API) from Open AI then just install the package related to that endpoint you're interested in. Example: </i> dotnet add package CodeMonarchs.OpenAISharp.Completion

Usage

CompletionService
// Create Completion
var request = new CreateCompletionRequest("model-name") { Prompt = "Say this is cool" };
var response = await service.CreateCompletionAsync(request);
EditService
// Create Edit
var request = new CreateEditRequest(KnownModelNames.TextDavinciEdit001, "Translate this to Spanish") { Input = "Hey" };
var response = await service.CreateEditAsync(request);
EmbeddingService
// Create Embedding
var request = new CreateEmbeddingRequest(KnownModelNames.TextEmbeddingAda002, "The car was super fast and...");
var response = await service.CreateEmbeddingAsync(request);
FileService
// List Files
var response = await service.ListFilesAsync();
// Upload File (JsonL string in memory)
var fileContent = FileUtility.ToJsonL(new List<FilePromptAndCompletion>
{
    new FilePromptAndCompletion("How old is Ryan Tunis?", "35"),
    new FilePromptAndCompletion("How old is Lourdes Palacios?", "29"),
    new FilePromptAndCompletion("How old is Enzo Tunis?", "That's a trick question. As of Jan 2023 he hasn't been born yet. Expeceted May 7th 2023." ),
    new FilePromptAndCompletion("How old is Chris Doherty?", "49. But for a mountain, he has only begun in years." )
});
var response = await service.UploadFileAsync(new UploadFileRequest("test-file.jsonl", fileContent, false));
// Upload File (JsonL from file)
var response = await service.UploadFileAsync(new UploadFileRequest("test-file.jsonl", @"C:\path\to\file.jsonl", true));
// Retrieve File
var response = await service.RetrieveFileAsync("file-id");
// Delete File
var response = await service.DeleteFileAsync("file-id");
// Retrieve File Content
var response = await service.RetrieveFileContentAsync("file-id");
FineTuneService
// List FineTunes
var response = await service.ListFineTunesAsync();
// Create FineTunes
var request = new CreateFineTuneRequest("file-id");
var response = await service.CreateFineTuneAsync(request);
// Retrieve FineTune
var response = await service.RetrieveFineTuneAsync("fine-tune-id");
// Cancel FineTune
var response = await service.CancelFineTuneAsync("fine-tune-id");
// Delete FineTune Model
var response = await service.DeleteFineTuneModelAsync("model-id");
// List FineTune Events
var response = await service.ListFineTuneEventsAsync("fine-tune-id");
ImageService
// Create Image
var request = new CreateImageRequest("Draw Etzio from Assassin's Creed");
var response = await service.CreateImageAsync(request);
// Create Image Edit
var request = new CreateImageEditRequest("test_image_rgba.png", @"C:\path\to\image.png", "Make me something random.", true);
var response = await service.CreateImageEditAsync(request);
// Create Image Variation
var request = new CreateImageVariationRequest("test_image_rgba.png",  @"C:\path\to\image.png", true);
var response = await service.CreateImageVariationAsync(request);
ModelService
// List Models
var response = await service.ListModelsAsync();
// Retrieve Model
var response = await service.RetrieveModelAsync(KnownModelNames.Ada);
ModerationService
// List Models
var request = new CreateModerationRequest("is this a bad word");
var response = await service.CreateModerationAsync(request);
Examples
  1. .NET/.NET Core Web API
  2. Blazor WebAssembly
  3. Blazor Server
  4. Azure Functions v4
NuGet Packages
  1. CodeMonarchs.OpenAISharp
    • <small>Includes all of the below packages.</small>
    • <small><a href="#">NuGet Package</a></small>
  2. CodeMonarchs.OpenAISharp.Completion
  3. CodeMonarchs.OpenAISharp.Edit
  4. CodeMonarchs.OpenAISharp.Embedding
  5. CodeMonarchs.OpenAISharp.File
  6. CodeMonarchs.OpenAISharp.FineTune
  7. CodeMonarchs.OpenAISharp.Image
  8. CodeMonarchs.OpenAISharp.Model
  9. CodeMonarchs.OpenAISharp.Moderation
  10. CodeMonarchs.OpenAISharp.Client
    • <small>An abstraction layer specific to sending HTTP requests to the Open AI API. You don't need to include this by itself.</small>
    • <small><a href="#">NuGet Package</a></small>
  11. CodeMonarchs.OpenAISharp.Utilities
    • <small>A utility library that contains an implementation of the <a href="https://beta.openai.com/tokenizer?view=bpe">Tokenizer Tool</a> for GPT-3.</small>
    • <small><a href="#">NuGet Package</a></small>
Integration Testing Setup (OpenAISharp.IntegrationTests)
  1. Retrieve your Apikey and OrganizationId from the Open AI Api.
  2. Run the powershell script located in OpenAISharp.IntegrationTests to set environment variables with your ApiKey and OrganizationId from the Open AI API:
    • .\set-openai-credentials.ps1 -ApiKey <your-api-key> -OrganizationId <your-organization-id>
  3. That's it!

<i><b>Note: </b>If you have Visual Studio open while you set these environment variables you need to restart it as Visual Studio does not detect when the environment variables change.</i>

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.0.2-beta 1 1/27/2023
0.0.1-beta 1 1/26/2023