Whetstone.ChatGPT
1.0.0
See the version list below for details.
dotnet add package Whetstone.ChatGPT --version 1.0.0
NuGet\Install-Package Whetstone.ChatGPT -Version 1.0.0
<PackageReference Include="Whetstone.ChatGPT" Version="1.0.0" />
paket add Whetstone.ChatGPT --version 1.0.0
#r "nuget: Whetstone.ChatGPT, 1.0.0"
// Install Whetstone.ChatGPT as a Cake Addin #addin nuget:?package=Whetstone.ChatGPT&version=1.0.0 // Install Whetstone.ChatGPT as a Cake Tool #tool nuget:?package=Whetstone.ChatGPT&version=1.0.0
Whetstone.ChatGPT
A simple light-weight library that wraps ChatGPT API completions.
This library includes quality of life improvements:
- including support for CancellationTokens
- documentation comments
- conversions of Unix Epoch time to DateTime, etc.
- IChatGPTClient interface for use with dependency injection
- Streaming completion responses and fine tune events
Supported features include:
- Completions
- Edits
- Files
- Fine Tunes
- Images
- Embeddings
- Moderations
Completion
ChatGPT 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());
ChatGPT 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);
Assert.NotNull(imageResponse);
Assert.NotNull(imageResponse.Data);
Assert.Single(imageResponse.Data);
Assert.NotNull(imageResponse.Data[0].Base64);
string? imageData = imageResponse.Data[0].Base64;
if (imageData != null)
{
byte[] imageBytes = Convert.FromBase64String(imageData);
Assert.True(imageBytes.Length > 0);
File.WriteAllBytes("sailboat.png", imageBytes);
}
}
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
- System.Text.Json (>= 6.0.0)
-
net6.0
- No dependencies.
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 | 146 | 10/15/2024 |
1.8.1 | 5,258 | 2/17/2024 |
1.8.0 | 170 | 1/21/2024 |
1.7.1 | 187 | 1/8/2024 |
1.7.0 | 796 | 12/17/2023 |
1.6.2 | 769 | 10/8/2023 |
1.6.1 | 1,174 | 7/8/2023 |
1.6.0 | 2,395 | 3/18/2023 |
1.5.0 | 302 | 3/12/2023 |
1.4.0 | 4,091 | 2/11/2023 |
1.3.0 | 637 | 1/21/2023 |
1.2.0 | 433 | 1/8/2023 |
1.1.0 | 329 | 1/7/2023 |
1.0.0 | 354 | 1/4/2023 |