-
Notifications
You must be signed in to change notification settings - Fork 0
/
utility.py
227 lines (179 loc) · 7.16 KB
/
utility.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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# Serve per stampare le scritte colorate
from colorama import init, Fore, Back, Style
init()
import os
# Vado a verificare se la cartella chat e se il file history_chat esistono già
# Se non esistono li creo
def initial_checks():
if not os.path.exists("chat"):
os.makedirs("chat")
path = './chat/chats_name.txt'
if not os.path.isfile(path):
with open(path, 'w') as file:
file.write("landing_chat")
# ------------------------------------------------------------------------------------------
# Carico la vecchia history-chat
def upload_old_chat(chat_name, chat):
path = "./chat/" + chat_name + ".txt"
if not os.path.isfile(path):
with open(path, 'w') as file:
file.write("$$$init: My history-chat " + str(chat_name) + " by @merendamattia\n")
with open(path, 'r') as file:
question = ""
answer = ""
for line in file:
if line.startswith("$$$question:"):
# Se la riga inizia con "$$$question:" allora memorizziamo la domanda
question = line[len("$$$question:"):].strip()
elif line.startswith("$$$answer:"):
# Se la riga inizia con "$$$answer:" allora memorizziamo la risposta
answer += line[len("$$$answer:"):].strip()
if question and answer:
# Se abbiamo sia la domanda che la risposta, allora aggiungiamo la coppia alla lista e resettiamo le variabili
answer = answer.replace("${$endl}", '\n')
answer = answer.replace("${$tab}", '\t')
chat.append({"question": question, "answer": answer})
question = ""
answer = ""
# Se è presente un'ultima coppia domanda-risposta, l'aggiungiamo all'array
if question and answer:
chat.append({"question": question, "answer": answer})
# ------------------------------------------------------------------------------------------
# Esecuzione iterazione GPT-4
def main(chat_name, chat, you):
# Messaggio iniziale
print(Fore.RED + "#chatbot model GPT-4 (`q`: to quit)" + Fore.MAGENTA + " - Chat: " + chat_name + Fore.RESET)
# Mi serve per aggiornare poi la history-chat
output = ""
while True:
# Leggo la domanda in input
prompt = input(Fore.GREEN + "You - " + chat_name + ": " + Fore.RESET)
# Serve per uscire dalla chat
if prompt == 'q':
break
# Calcolo la risposta
response = you.Completion.create(
prompt=prompt,
chat=chat,
detailed=True)
# Mi copio la risposta
answer = response.text
# Stampo la risposta
print(Fore.BLUE + "Bot - " + chat_name + ":" + Fore.RESET, answer)
# Inserisco domanda e risposta nella history-chat
chat.append({"question": prompt, "answer": response.text})
# Preparo la risposta per essere scritta su file
answer_log = answer.replace('\n', "${$endl}")
answer_log = answer_log.replace('\t', "${$tab}")
# Inserisco domanda e risposta nella history-chat da scrivere poi sul file
output += "$$$question: " + prompt + "\n"
output += "$$$answer: " + answer_log + "\n"
return output
# ------------------------------------------------------------------------------------------
# Aggiorno la history-chat
def update_chat_log(chat_name, output):
path = "./chat/" + chat_name + ".txt"
# Leggo il vecchio contenuto della history-chat
old = ""
with open(path, 'r') as file:
old = file.read()
# Scrivo la nuova history-chat aggiornata
with open(path, 'w') as file:
file.write(old + output)
# ------------------------------------------------------------------------------------------
# Permette di scegliere quale chat utilizzare
def choose_chat():
path = './chat/chats_name.txt'
if not os.path.isfile(path):
with open(path, 'w') as file:
file.write("landing_chat")
return 'landing_chat'
c = 0 # conta le righe
res = 0
# Stampo la lista delle chat e faccio scegliere quale eliminare
while res < 1 or res > c:
# Stampo le chat esistenti
with open(path, 'r') as file:
output = ""
for line in file:
line = line.replace('\n', '')
c = c + 1
output += str(c) + '. ' + line + '\n'
if c > 1:
print(Fore.MAGENTA + "Scegli la chat:")
print(output)
res = int(input(Fore.RESET + "Scelta: "))
else:
res = 1
with open(path, 'r') as file:
c = 0 # conta le righe
for line in file:
c = c + 1
if c == res:
return str(line)
# ------------------------------------------------------------------------------------------
# Menu
def menu():
res = -1
while res < 0 or res > 3:
print(Fore.YELLOW + "\nMenù GPT-4")
print("1. Avvia chatbot")
print("2. Crea nuova chat")
print("3. Elimina chat")
print("0. Terminazione programma" + Fore.RESET)
res = int(input("Scelta: "))
return res
# ------------------------------------------------------------------------------------------
# Aggiungo una nuova chat
def add_chat_name():
new_name = input("Inserisci il nome della nuova chat: ")
path = "./chat/chats_name.txt"
# Se non esiste l'elenco delle chat lo creo vuoto
if not os.path.isfile(path):
with open(path, 'w') as file:
file.write(new_name)
else:
# Leggo il vecchio contenuto della chats_name
old = ""
with open(path, 'r') as file:
old = file.read()
new = old + "\n" + new_name
# Scrivo la nuova chats_name aggiornata
with open(path, 'w') as file:
file.write(new)
print('Chat "' + new_name + '" creata con successo!')
# ------------------------------------------------------------------------------------------
# Elimino una chat
def delete_chat():
path = './chat/chats_name.txt'
c = 0 # conta le righe
res = 0
# Stampo la lista delle chat e faccio scegliere quale eliminare
while res < 1 or res > c:
print(Fore.RED + "Scegli la chat da eliminare:")
with open(path, 'r') as file:
for line in file:
line = line.replace('\n', '')
c = c + 1
print(str(c) + '. ' + line)
# print(Fore.RESET)
res = int(input(Fore.RESET + "Scelta: "))
new_chats = ""
old_chat = ""
# Elimino la chat interessata
with open(path, 'r') as file:
c = 0 # conta le righe
for line in file:
c = c + 1
if c != res:
new_chats += line
else:
old_chat = line.replace('\n', '')
# Scrivo il nuovo elenco delle chat
with open(path, 'w') as file:
file.write(new_chats)
# Rimuovo il file contenente la chat
path = './chat/' + old_chat + '.txt'
if os.path.isfile(path):
os.remove(path)
print('Chat "' + old_chat + '" eliminata con successo!')