ChatGPT
A ChatGPT C# client for graphical user interface runs on MacOS, Windows, Linux, Android, iOS and Browser. Powered by Avalonia UI framework.
To make the app work, you need to set the OpenAI API key as the OPENAI_API_KEY
environment variable or set API key directly in app settings.
You can try client using browser version here.
Shortcuts
Main Window
- Ctrl+Shift+A - Toggle between transparent and acrylic blur window style.
- Ctrl+Shift+S - Toggle between visible and hidden window state.
Message Prompt
- Enter - Send prompt.
- Escape - Cancel edit.
- F2 - Edit prompt.
- Shift+Enter, Alt+Enter - Insert new line.
Overriding OpenAI api url
To override the OpenAI api url set `OPENAI_API_URL_CHAT_COMPLETIONS` environment variable or set API url directly in app settings.
OpenAI ChatGPT web version import
You can import OpenAI ChatGPT web version chats backup created using this script.
Build
- Install .NET 7.0
- Run
dotnet workload install ios android wasm-tools
command dotnet publish -c Release
command inside project directory (mobile/desktop) ordotnet run
for desktop to just run
Dependencies
- Avalonia
- Markdown.Avalonia
- Avalonia.HtmlRenderer
- CommunityToolkit.Mvvm
- Microsoft.Extensions.DependencyInjection
.NET tool
Install:
dotnet tool install --global ChatGPT.CLI --version 1.0.0-preview.17
Uninstall:
dotnet tool uninstall --global ChatGPT.CLI
- ChatGPT.CLI - An .NET ChatGPT tool.
Usage
ChatGPT.CLI:
An .NET ChatGPT tool.
Usage:
ChatGPT.CLI [options]
Options:
-f, --inputFiles <inputfiles> The relative or absolute path to the input files
-d, --inputDirectory <inputdirectory> The relative or absolute path to the input directory
-o, --outputDirectory <outputdirectory> The relative or absolute path to the output directory
--outputFiles <outputfiles> The relative or absolute path to the output files
-p, --pattern <pattern> The search string to match against the names of files in the input directory
-r, --recursive Recurse into subdirectories of input directory search
-e, --extension <extension> The output file extension
-s, --settingsFile <settingsfile> The relative or absolute path to the settings file
--temperature <temperature> What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.
--topP <topp> An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
--presencePenalty <presencepenalty> Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
--frequencyPenalty <frequencypenalty> Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
--maxTokens <maxtokens> The maximum number of tokens to generate in the chat completion.
--apiKey <apikey> Override OpenAI api key. By default OPENAI_API_KEY environment variable is used.
--apiUrl <apiUrl> Override OpenAI api url. By default OPENAI_API_URL_CHAT_COMPLETIONS environment variable is used.
--model <model> ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.
--directions <directions> The system message (directions) helps set the behavior of the assistant. Typically, a conversation is formatted with a system message first, followed by alternating user and assistant messages.
-t, --threads <threads> The number of parallel job threads
--quiet Set verbosity level to quiet
--version Show version information
-?, -h, --help Show help and usage information
Examples
- Using .NET tool
chatgpt
command:
C# to VB
chatgpt -d ./ -e vb -p *.cs --directions "You are C# to VB conversion expert. Convert input code from C# to VB. Write only converted code."
C# to F#
chatgpt -d ./ -e fs -p *.cs --directions "You are C# to F# conversion expert. Convert input code from C# to F#. Write only code."
Refactor C# code
chatgpt -d ./ -e cs -p *.cs --directions "You are C# expert. Refactor C# code to use fluent api. Write only code."
Write API documentation
chatgpt -d ./ -e md -p *.cs --directions "You are a technical documentation writer. Write API documentation for C# code. If XML docs are missing write them."
- Run from source
C# to VB
dotnet run -- -d ./ -e vb -p *.cs --directions "You are C# to VB conversion expert. Convert input code from C# to VB. Write only converted code."
C# to F#
dotnet run -- -d ./ -e fs -p *.cs --directions "You are C# to F# conversion expert. Convert input code from C# to F#. Write only code."
Write API documentation
dotnet run -- -d ./ -e md -p *.cs --directions "You are a technical documentation writer. Write API documentation for C# code. If XML docs are missing write them."
Settings file format
{
"temperature": 0.7,
"top_p": 1,
"presence_penalty": 0,
"frequency_penalty": 0,
"maxTokens": 2000,
"apiKey": "",
"model": "gpt-3.5-turbo",
"directions": "You are a helpful assistant.",
"apiUrl": ""
}
COM
In the build release directory ChatGPT\ChatGptCom\bin\Release\net462\
run following command to register ChatGptCom.dll
.
32-bit
c:\Windows\Microsoft.NET\Framework\v4.0.30319\regasmm.exe /codebase /tlb ChatGptCom.dll
64-bit
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /codebase /tlb ChatGptCom.dll
Microsoft Work 2010
Add ChatGPT\ChatGptCom\bin\Release\net462\ChatGptCom.tlb
to References
using Tools > References...
menu in Microsoft Visual Basic for Applications
.
Option Explicit
Private WithEvents m_translateSource As Chat
Private WithEvents m_demoSource As Chat
Dim OriginalSelection As Range
Sub TranslateSelection()
Set OriginalSelection = Selection.Range
Dim ProcessedText As String
ProcessedText = OriginalSelection.Text
m_translateSource.AskAsync "You are a professional translator to English. I will provide text and you will translate it to English.", ProcessedText
End Sub
Sub Translate_Initialize()
Set m_translateSource = New ChatGptCom.Chat
End Sub
Sub m_translateSource_OnSendCompleted()
OriginalSelection.Text = m_translateSource.Result
End Sub
Sub Chat_Initialize()
Set m_demoSource = New ChatGptCom.Chat
End Sub
Sub Chat_Send()
m_demoSource.AskAsync "You are a professional translator to English.", "To jest rewolucja szutcznej inteligencji! VBA na zawsze!"
End Sub
Sub m_demoSource_OnSendCompleted()
MsgBox m_demoSource.Result
End Sub
Sub ChatGpt()
Dim myObj As ChatGptCom.Chat
Set myObj = New ChatGptCom.Chat
myObj.AskAsync "You are a professional translato to English.", "Cześć, witamy z Office VBA"
End Sub
Sub GetEnvironmentVariable()
Dim envVarName As String
Dim envVarValue As String
envVarName = "OPENAI_API_KEY"
envVarValue = Environ(envVarName)
MsgBox "The value of the " & envVarName & " environment variable is:" & vbCrLf & envVarValue
End Sub
Chat form:
Option Explicit
Private WithEvents m_chatSource As Chat
Private Sub UserForm_Initialize()
Set m_chatSource = New ChatGptCom.Chat
m_chatSource.Create "You are a helpful assistant", 2000, "gpt-3.5-turbo"
End Sub
Private Sub SendButton_Click()
Dim MessageText As String
MessageText = MessageTextBox.Text
MessagesListBox.AddItem MessageText
MessageTextBox.Text = ""
m_chatSource.MessageAsync MessageText, "user", True
End Sub
Sub m_chatSource_OnSendCompleted()
Dim MessageText As String
MessageText = m_chatSource.Result
MessagesListBox.AddItem MessageText
End Sub
Chat form:
Option Explicit
Private WithEvents m_chatSource As Chat
Private Sub UserForm_Initialize()
Set m_chatSource = New ChatGptCom.Chat
m_chatSource.Create "You are a helpful assistant", 2000, "gpt-3.5-turbo"
End Sub
Private Sub SendButton_Click()
Dim MessageText As String
MessageText = MessageTextBox.Text
ChatTextBox.Text = ChatTextBox.Text & vbCrLf & MessageText
MessageTextBox.Text = ""
m_chatSource.MessageAsync MessageText, "user", True
End Sub
Sub m_chatSource_OnSendCompleted()
Dim MessageText As String
MessageText = m_chatSource.Result
ChatTextBox.Text = ChatTextBox.Text & vbCrLf & MessageText
End Sub
NuGet
- ChatGPT - An OpenAI api library for .NET.
- ChatGPT.Core - An OpenAI client core library for .NET.
- ChatGPT.UI - An OpenAI client user interface library for .NET.
- ChatGPT.CLI - An .NET ChatGPT tool.
- ChatGptCom - An OpenAI api library for .NET COM interop.
Docs
License
ChatGPT is licensed under the MIT license.