-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathai_chat.py
130 lines (102 loc) · 2.98 KB
/
ai_chat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import os
import openai
import logging
import datetime
import time
try:
openai.api_key = os.environ['OPENAI_API_KEY']
except KeyError:
print("""Please setup an OPENAI_API_KEY secret.
- get an openapi secret here:
https://platform.openai.com/account/api-keys
- see here on how to setup a secret:
https://docs.replit.com/programming-ide/workspace-features/storing-sensitive-information-environment-variables
""" )
exit(1)
defaultModel = "gpt-3.5-turbo"
class Ai:
def __init__(self):
global defaultModel
self._model = defaultModel
self._logger = logging.NullHandler
def listModels(self):
response = []
try:
response = openai.Model.list()
except Exception as e:
return [ "no-response" ]
models = []
for model in response["data"]:
models.append(model["id"])
return models
def getModel(self):
return self._model
def withModel(self, model):
models = self.listModels()
if model in models:
print("set model", model)
self._model = model
def createChat(self, name):
return AiChat(name)
class AiChat:
def __init__(self, name):
global defaultModel
self._name = name
self._messages = []
self._model = defaultModel
self._logger = logging.NullHandler
def withModel(self, model):
self._model = model
def withLogger(self, logger):
self._logger = logger
def talk(self, content):
self.addUserMessage(content)
return self.send()
def addInitialSystemMessage(self, content):
self.addMessage("system", content, "forever")
def addSystemMessage(self, content):
self.addMessage("system", content)
def addAssistantMessage(self, content):
self.addMessage("assistant", content)
def addUserMessage(self, content):
self.addMessage("user", content)
def addMessage(self, role, content, keep = "asLongAsPossible"):
self._messages.append({
"role": role,
"content": content,
"keep": keep
})
def send(self):
response = None
retryCount = 0
while retryCount < 5:
messages = []
for message in self._messages:
messages.append({
"role": message['role'],
"content": message['content']
})
try:
response = openai.ChatCompletion.create(
model = self._model,
messages = messages,
max_tokens = 200,
temperature = 0.9)
except openai.error.InvalidRequestError as e:
for index, message in enumerate(self._messages):
if message["keep"] == "asLongAsPossible":
self._messages.pop(index)
break
except Exception as e:
retryCount += 1
else:
break
if response is None:
return { "role": "assistant", "content": "No Response" }
message = response.choices[0].message.content
self._messages.append({
"role": "assistant",
"content": message,
"keep": "asLongAsPossible",
})
return message