Repository navigation
Expand file tree
/
Copy pathsettings.py
More file actions
84 lines (81 loc) · 2.35 KB
/
Copy pathsettings.py
File metadata and controls
84 lines (81 loc) · 2.35 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
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
# Version 7 of the settings interface.
import json
import re
DefaultURL = "http://localhost:8080"
DefaultFile = "settings.json"
class Settings:
def __init__(self, file_name=DefaultFile, auto_load=True):
# Saved settings
self.token = ""
self.url = DefaultURL
self.prompt = ""
self.channels = set()
self.apiParams = {}
self.llmToken = ""
self.multiIO = False
self.multimodal = False
# Runtime settings
self.file_name = file_name
self.rendered_prompt = ""
if auto_load:
self.loadSafe()
self.renderPrompt()
def load(self):
with open(self.file_name, "r") as f:
data = {
"token": self.token,
"url": self.url,
"prompt": self.prompt,
"channels": list(self.channels),
"apiParams": self.apiParams,
"llmToken": self.llmToken,
"multiIO": self.multiIO,
"multimodal": self.multimodal
}
data.update(json.loads(f.read()))
self.token = data["token"]
self.url = data["url"]
self.prompt = data["prompt"]
self.channels = set(data["channels"])
self.apiParams = data["apiParams"]
self.llmToken = data["llmToken"]
self.multiIO = data["multiIO"]
self.multimodal = data["multimodal"]
def save(self):
data = {
"token": self.token,
"url": self.url,
"prompt": self.prompt,
"channels": list(self.channels),
"apiParams": self.apiParams,
"llmToken": self.llmToken,
"multiIO": self.multiIO,
"multimodal": self.multimodal
}
with open(self.file_name, "w") as f:
f.write(json.dumps(data, indent=2))
def loadSafe(self):
# Load settings or fill them in if we can't.
try:
self.load()
except FileNotFoundError:
self.token = input("Bot's Discord token: ")
self.url = input(f"OpenAI API endpoint [{DefaultURL}]: ")
if not self.url:
self.url = DefaultURL
self.prompt = input("Prompt to use for the LLM: ")
self.llmToken = input("LLM API token (optional): ")
self.save()
def renderPrompt(self):
# Replace `${filename}` references with `filename` contents.
def replace_file(match):
filename = match.group(1)
print(f"Including `{filename}` in prompt...")
with open(filename, 'r', encoding='utf-8') as f:
return f.read()
# Find all `${filename}` patterns and replace them.
self.rendered_prompt = re.sub(r'\$\{([^}]+)\}', replace_file, self.prompt)
def getPrompt(self):
if not self.rendered_prompt:
return self.renderPrompt()
return self.rendered_prompt