-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathcontroller.py
More file actions
58 lines (50 loc) · 2.11 KB
/
Copy pathcontroller.py
File metadata and controls
58 lines (50 loc) · 2.11 KB
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
import json
from chatgpt import ChatGPT
from google_sql_connector import GoogleCloudSQL
import configparser
# Read the config file
config = configparser.ConfigParser()
config.read("config.ini")
# Access the config values
driver = config.get("database", "driver")
server = config.get("database", "server")
database = config.get("database", "database")
user = config.get("database", "user")
password = config.get("database", "password")
encrypt = config.get("database", "encrypt")
openai_api_key = config.get("openai", "api_key")
openai_org = config.get("openai", "org")
openai_model = config.get("openai", "model")
class Controller:
def __init__(self):
# initialise all the things
self.google_sql = GoogleCloudSQL(driver, server, database, user, password, encrypt)
self.google_sql.connect()
self.chatModel = ChatGPT(openai_api_key, openai_org, openai_model)
def run(self, message, sender, counter=0):
if (counter > 4):
return 'error: too many requests'
responseString = self.chatModel.message(message, sender)
try:
response = json.loads(responseString[:-1] if responseString.endswith('.') else responseString)
except ValueError:
return self.run("Please repeat that answer but use valid JSON only.", "SYSTEM", counter + 1)
match response["recipient"]:
case "USER":
return response["message"]
case "SERVER":
match response["action"]:
case "QUERY":
result = self.google_sql.execute_query(response["message"])
return self.run(result, None, counter + 1)
case "SCHEMA":
result = self.google_sql.execute_schema(response["message"])
return self.run(result, None, counter + 1)
case _:
print('error invalid action')
print(response)
case _:
print('error, invalid recipient')
print(response)
def reset(self):
self.chatModel.reset()