Skip to content

Commit 2f9a87f

Browse files
authored
Merge pull request #4 from Josh-XT/main
Add configurable OpenAI-API type model's base URL and model name
2 parents a383608 + 5ae13a5 commit 2f9a87f

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

app/llm.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,11 @@ class LLM:
6363

6464
def __init__(self):
6565
settings_dict: dict[str, str] = Settings().get_dict()
66-
if 'api_key' in settings_dict.keys() and settings_dict['api_key']:
67-
os.environ["OPENAI_API_KEY"] = settings_dict['api_key']
66+
67+
base_url = settings_dict.get('base_url', 'https://api.openai.com/v1/').rstrip('/') + '/'
68+
api_key = settings_dict.get('api_key')
69+
if api_key:
70+
os.environ["OPENAI_API_KEY"] = api_key
6871

6972
path_to_context_file = Path(__file__).resolve().parent.joinpath('resources', 'context.txt')
7073
with open(path_to_context_file, 'r') as file:
@@ -81,7 +84,11 @@ def __init__(self):
8184
self.context += f'\nCustom user-added info: {settings_dict["custom_llm_instructions"]}.'
8285

8386
self.client = OpenAI()
84-
self.model = 'gpt-4-vision-preview'
87+
88+
self.model = settings_dict.get('model')
89+
if not self.model:
90+
self.model = 'gpt-4-vision-preview'
91+
self.client = OpenAI(api_key=os.environ["OPENAI_API_KEY"], base_url=base_url)
8592

8693
def get_instructions_for_objective(self, original_user_request: str, step_num: int = 0) -> dict[str, Any]:
8794
message: list[dict[str, Any]] = self.create_message_for_llm(original_user_request, step_num)

app/ui.py

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,57 @@ def run(self) -> None:
2626
def display_current_status(self, text: str):
2727
self.main_window.update_message(text)
2828

29+
class AdvancedSettingsWindow(tk.Toplevel):
30+
"""
31+
Self-contained settings sub-window for the UI
32+
"""
33+
34+
def __init__(self, parent):
35+
super().__init__(parent)
36+
self.title('Advanced Settings')
37+
self.minsize(300, 300)
38+
self.create_widgets()
39+
self.settings = Settings()
40+
41+
# Populate UI
42+
settings_dict = self.settings.get_dict()
43+
44+
if 'base_url' in settings_dict:
45+
self.base_url_entry.insert(0, settings_dict['base_url'])
46+
if 'model' in settings_dict:
47+
self.model_entry.insert(0, settings_dict['model'])
48+
49+
def create_widgets(self) -> None:
50+
label_base_url = tk.Label(self, text='Custom OpenAI-Like API Model Base URL')
51+
label_base_url.pack(pady=10)
52+
53+
# Entry for Base URL
54+
self.base_url_entry = ttk.Entry(self, width=30)
55+
self.base_url_entry.pack()
56+
57+
# Model Label
58+
label_model = tk.Label(self, text='Custom Model Name:')
59+
label_model.pack(pady=10)
60+
61+
# Entry for Model
62+
self.model_entry = ttk.Entry(self, width=30)
63+
self.model_entry.pack()
64+
65+
# Save Button
66+
save_button = ttk.Button(self, text='Save Settings', command=self.save_button)
67+
save_button.pack(pady=20)
68+
69+
def save_button(self) -> None:
70+
base_url = self.base_url_entry.get().strip()
71+
model = self.model_entry.get().strip()
72+
settings_dict = {
73+
"base_url": base_url,
74+
"model": model,
75+
}
76+
77+
self.settings.save_settings_to_file(settings_dict)
78+
self.destroy()
79+
2980
class SettingsWindow(tk.Toplevel):
3081
"""
3182
Self-contained settings sub-window for the UI
@@ -86,7 +137,11 @@ def create_widgets(self) -> None:
86137

87138
# Save Button
88139
save_button = ttk.Button(self, text='Save Settings', command=self.save_button)
89-
save_button.pack(pady=20)
140+
save_button.pack(pady=(10, 0))
141+
142+
# Button to open Advanced Settings
143+
advanced_settings_button = ttk.Button(self, text='Advanced Settings', command=self.open_advanced_settings)
144+
advanced_settings_button.pack(pady=(0, 10))
90145

91146
# Hyperlink Label
92147
link_label = tk.Label(self, text='Instructions', fg='#499CE4')
@@ -111,6 +166,10 @@ def save_button(self) -> None:
111166
self.settings.save_settings_to_file(settings_dict)
112167
self.destroy()
113168

169+
def open_advanced_settings(self):
170+
# Open the advanced settings window
171+
UI.AdvancedSettingsWindow(self)
172+
114173
class MainWindow(tk.Tk):
115174
def __init__(self):
116175
super().__init__()

app/utils/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def get_dict(self) -> dict[str, str]:
1616
def save_settings_to_file(self, settings_dict) -> None:
1717
settings: dict[str, str] = {}
1818

19+
# Preserve previous settings in case new dict doesn't contain them
1920
if os.path.exists(self.settings_file_path):
2021
with open(self.settings_file_path, 'r') as file:
2122
try:

0 commit comments

Comments
 (0)