mirror of https://github.com/knrd1/chatgpt.git
first commit
This commit is contained in:
commit
10f72111ad
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 knrd1 <konrad@nygus.org>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,58 @@
|
||||||
|
# ChatGPT
|
||||||
|
ChatGPT is a simple IRC bot written in python using Open AI endpoints to answer questions.
|
||||||
|
|
||||||
|
ChatGPT uses official bindings from OpenAI to interact with the API through HTTP requests:
|
||||||
|
https://platform.openai.com/docs/api-reference
|
||||||
|
|
||||||
|
### Prerequisities:
|
||||||
|
|
||||||
|
Create an account and obtain your API key: https://platform.openai.com/account/api-keys
|
||||||
|
|
||||||
|
Install python3 and the official Python bindings:
|
||||||
|
```
|
||||||
|
apt install python3 (Debian/Ubuntu)
|
||||||
|
yum install python3 (RedHat/CentOS)
|
||||||
|
pip3 install openai
|
||||||
|
```
|
||||||
|
### Configuration:
|
||||||
|
|
||||||
|
Edit chatgpt.py and change variables to the file. Example configuration for IRCNet:
|
||||||
|
```
|
||||||
|
openai.api_key = "sk-XXXXXXXXXXXXXXXX"
|
||||||
|
server = "open.ircnet.net"
|
||||||
|
port = 6667
|
||||||
|
channel = "#irc"
|
||||||
|
nickname = "MyBot"
|
||||||
|
```
|
||||||
|
Optionally you can edit the engine, the list of compatible engines below:
|
||||||
|
```
|
||||||
|
engine="text-davinci-003",
|
||||||
|
```
|
||||||
|
IMPORTANT: When you specify "nickname", make sure you replace ALL occurences of ChatGPT in chatgpt.py file to the new nickname. For example, if your bot nick name is "MyBot", do:
|
||||||
|
```
|
||||||
|
$ sed -i 's/ChatGPT/MyBot/g' chatgpt.py
|
||||||
|
```
|
||||||
|
### Connecting bot to IRC server:
|
||||||
|
```
|
||||||
|
$ python3 chatgpt.py
|
||||||
|
```
|
||||||
|
### Interaction:
|
||||||
|
ChatGPT will interact only reply if you mention its nickname:
|
||||||
|
```
|
||||||
|
10:31:12 <@knrd1> ChatGPT: hello, how are you?
|
||||||
|
10:31:14 < ChatGPT> Hi there, I'm doing well, thank you. How about you?
|
||||||
|
```
|
||||||
|
### Model endpoint compatibility
|
||||||
|
|
||||||
|
ChatGPT uses endpoint /v1/completions. Following engines are compatible:
|
||||||
|
```
|
||||||
|
text-davinci-003
|
||||||
|
text-davinci-002
|
||||||
|
text-curie-001
|
||||||
|
text-babbage-001
|
||||||
|
text-ada-001
|
||||||
|
davinci
|
||||||
|
curie
|
||||||
|
babbage
|
||||||
|
ada
|
||||||
|
```
|
|
@ -0,0 +1,40 @@
|
||||||
|
import openai
|
||||||
|
import socket
|
||||||
|
import time
|
||||||
|
|
||||||
|
# Set up OpenAI API key
|
||||||
|
openai.api_key = ""
|
||||||
|
|
||||||
|
# Set up IRC connection settings
|
||||||
|
server = ""
|
||||||
|
port =
|
||||||
|
channel = ""
|
||||||
|
nickname = ""
|
||||||
|
|
||||||
|
# Connect to IRC server
|
||||||
|
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
irc.connect((server, port))
|
||||||
|
irc.send(bytes("USER " + nickname + " " + nickname + " " + nickname + " :ChatGPT\n", "UTF-8"))
|
||||||
|
irc.send(bytes("NICK " + nickname + "\n", "UTF-8"))
|
||||||
|
irc.send(bytes("JOIN " + channel + "\n", "UTF-8"))
|
||||||
|
|
||||||
|
# Listen for messages from users
|
||||||
|
while True:
|
||||||
|
message = irc.recv(2048).decode("UTF-8")
|
||||||
|
if message.find("PING") != -1:
|
||||||
|
# Respond to server PING requests
|
||||||
|
irc.send(bytes("PONG " + message.split()[1] + "\n", "UTF-8"))
|
||||||
|
elif message.find("PRIVMSG " + channel + " :" + nickname + ":") != -1:
|
||||||
|
question = message.split(nickname + ":")[1].strip()
|
||||||
|
response = openai.Completion.create(
|
||||||
|
engine="text-davinci-003",
|
||||||
|
prompt="Q: " + question + "\nA:",
|
||||||
|
temperature=1,
|
||||||
|
max_tokens=300,
|
||||||
|
top_p=1,
|
||||||
|
frequency_penalty=0,
|
||||||
|
presence_penalty=0
|
||||||
|
)
|
||||||
|
answer = response.choices[0].text.strip()
|
||||||
|
irc.send(bytes("PRIVMSG " + channel + " :" + answer + "\n", "UTF-8"))
|
||||||
|
time.sleep(1)
|
Loading…
Reference in New Issue