Whetstone.ChatGPT
1.3.0
See the version list below for details.
dotnet add package Whetstone.ChatGPT --version 1.3.0
NuGet\Install-Package Whetstone.ChatGPT -Version 1.3.0
<PackageReference Include="Whetstone.ChatGPT" Version="1.3.0" />
paket add Whetstone.ChatGPT --version 1.3.0
#r "nuget: Whetstone.ChatGPT, 1.3.0"
// Install Whetstone.ChatGPT as a Cake Addin #addin nuget:?package=Whetstone.ChatGPT&version=1.3.0 // Install Whetstone.ChatGPT as a Cake Tool #tool nuget:?package=Whetstone.ChatGPT&version=1.3.0
Whetstone.ChatGPT
A simple light-weight library that wraps the GPT-3 API with support for dependency injection.
Supported features include:
- Completions
- Edits
- Files
- Fine Tunes
- Images
- Embeddings
- Moderations
- Response streaming
Examples include:
- Command line bot
- Azure Function Twitter Webhook that responds to DMs
- Blazor UI
Dependency Injection Quickstart
services.Configure<ChatGPTCredentials>(options =>
{
options.ApiKey = "YOURAPIKEY";
options.Organization = "YOURORGANIZATIONID";
});
Use:
services.AddHttpClient();
OR:
services.AddHttpClient<IChatGPTClient, ChatGPTClient>();
Configure IChatGPTClient
service:
services.AddScoped<IChatGPTClient, ChatGPTClient>();
Completion
GPT-3 Completions use models to answer a wide variety of tasks, including but not limited to classification, sentiment analysis, answering questions, etc.
Completion Quickstart
This shows a direct useage of the text-davinci-003 model without any prompts.
using Whetstone.ChatGPT;
using Whetstone.ChatGPT.Models;
. . .
IChatGPTClient client = new ChatGPTClient("YOURAPIKEY");
var gptRequest = new ChatGPTCompletionRequest
{
Model = ChatGPTCompletionModels.Davinci,
Prompt = "How is the weather?"
};
var response = await client.CreateCompletionAsync(gptRequest);
Console.WriteLine(response.GetCompletionText());
GPT-3 is not deterministic. One of the test runs of the sample above returned:
The weather can vary greatly depending on location. In general, you can expect temperatures to be moderate and climate to be comfortable, but it is always best to check the forecast for your specific area.
Completion Code Sample
A C# console application that uses completions is available at:
Whetstone.ChatGPT.CommandLineBot (chatgpt-marv)
This sample includes:
- Authentication
- Created a completion request using a prompt
- Processing completion responses
Editing Quickstart
To use submit an edit completion request:
using Whetstone.ChatGPT;
using Whetstone.ChatGPT.Models;
. . .
IChatGPTClient client = new ChatGPTClient("YOURAPIKEY");
var gptEditRequest = new ChatGPTCreateEditRequest
{
Input = "What day of the wek is it?",
Instruction = "Fix spelling mistakes"
};
var response = await client.CreateEditAsync(gptEditRequest);
Console.WriteLine(response.GetEditedText());
One of the test runs returned:
What day of the week is it?
File Quickstart
How to create a upload a new fine tuning file.
List<ChatGPTFineTuneLine> tuningInput = new()
{
new ChatGPTFineTuneLine("<PROMPT>", "<COMPLETION>"),
new ChatGPTFineTuneLine("<PROMPT>", "<COMPLETION>"),
. . .
};
byte[] tuningText = tuningInput.ToJsonLBinary();
string fileName = "finetuningsample.jsonl";
ChatGPTUploadFileRequest? uploadRequest = new ChatGPTUploadFileRequest
{
File = new ChatGPTFileContent
{
FileName = fileName,
Content = tuningText
}
};
ChatGPTFileInfo? uploadedFileInfo;
using (IChatGPTClient client = new ChatGPTClient("YOURAPIKEY"))
{
uploadedFileInfo = await client.UploadFileAsync(uploadRequest);
}
Fine Tuning Quickstart
Once the file has been created, get the fileId, and reference it when creating a new fine tuning.
using (IChatGPTClient client = new ChatGPTClient("YOURAPIKEY"))
{
var fileList = await client.ListFilesAsync();
var foundFile = fileList.Data.First(x => x.Filename.Equals("finetuningsample.jsonl"));
ChatGPTCreateFineTuneRequest tuningRequest = new ChatGPTCreateFineTuneRequest
{
TrainingFileId = foundFile.Id
};
ChatGPTFineTuneJob? tuneResponse = await client.CreateFineTuneAsync(tuningRequest);
string fineTuneId = tuneResponse.Id;
}
Processing the fine tuning request will take some time. Once it finishes, the Status will report "succeeded" and it's ready to be used in a completion request.
using (IChatGPTClient client = new ChatGPTClient("YOURAPIKEY"))
{
ChatGPTFineTuneJob? tuneResponse = await client.RetrieveFineTuneAsync("FINETUNEID");
if(tuneResponse.Status.Equals("succeeded"))
{
var gptRequest = new ChatGPTCompletionRequest
{
Model = ChatGPTCompletionModels.Davinci,
Prompt = "How is the weather?"
};
var response = await client.CreateCompletionAsync(gptRequest);
Console.WriteLine(response.GetCompletionText());
}
}
Image Quickstart
Here's an example that generates a 1024x1024 image.
ChatGPTCreateImageRequest imageRequest = new()
{
Prompt = "A sail boat",
Size = CreatedImageSize.Size1024,
ResponseFormat = CreatedImageFormat.Base64
};
using (IChatGPTClient client = new ChatGPTClient("YOURAPIKEY"))
{
ChatGPTImageResponse? imageResponse = await client.CreateImageAsync(imageRequest);
var imageData = imageResponse?.Data[0];
if (imageData != null)
{
byte[] imageBytes = await client.DownloadImageAsync(imageData);
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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. |
-
.NETStandard 2.1
- Microsoft.Extensions.Options (>= 6.0.0)
- System.Text.Json (>= 6.0.0)
-
net6.0
- Microsoft.Extensions.Options (>= 6.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.8.2 | 121 | 10/15/2024 |
1.8.1 | 4,726 | 2/17/2024 |
1.8.0 | 164 | 1/21/2024 |
1.7.1 | 185 | 1/8/2024 |
1.7.0 | 782 | 12/17/2023 |
1.6.2 | 766 | 10/8/2023 |
1.6.1 | 1,170 | 7/8/2023 |
1.6.0 | 2,390 | 3/18/2023 |
1.5.0 | 300 | 3/12/2023 |
1.4.0 | 4,085 | 2/11/2023 |
1.3.0 | 633 | 1/21/2023 |
1.2.0 | 431 | 1/8/2023 |
1.1.0 | 327 | 1/7/2023 |
1.0.0 | 350 | 1/4/2023 |
# 1.3.0
- Added set-only Credentials property to IChatGPTClient so that credentials can be changed after instantiation.
- Moved Credentials validation from constructor to API invocation pre-flight checks.
- Started Blazor sample project.
# 1.2.0
- Added support for dependency injection
- Some ChatGPTClient constructors were removed
# 1.1.0
- Added IChatGPTClient interface method for:
- StreamFineTuneEventsAsync
- DownloadImageAsync
- Small updates from code analysis suggestions