Skip to content

Commit 498d767

Browse files
committed
Optimize the logic of some scenarios
1 parent fe44dbd commit 498d767

File tree

1 file changed

+32
-38
lines changed

1 file changed

+32
-38
lines changed

ollama_gui.py

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,6 @@
77

88
from tkinter import ttk, font
99
from threading import Thread
10-
from typing import Union, Generator
11-
from contextlib import contextmanager
12-
13-
14-
@contextmanager
15-
def widget_state_manager(self: "AIChatInterface"):
16-
try:
17-
self.chat_box.config(state=tk.NORMAL)
18-
self.send_button.state(["disabled"])
19-
yield
20-
except Exception: # noqa
21-
self.append_text_to_chat(tk.END, f"\nAI error!\n\n", ("Error",))
22-
finally:
23-
self.chat_box.config(state=tk.DISABLED)
24-
self.send_button.state(["!disabled"])
2510

2611

2712
class AIChatInterface:
@@ -50,10 +35,10 @@ def __init__(self, root):
5035
self.host_input.grid(row=0, column=4, padx=(5, 10))
5136
self.host_input.insert(0, self.api_url)
5237

53-
clear_button = ttk.Button(
38+
self.clear_button = ttk.Button(
5439
header_frame, text="Clear Chat", command=self.clear_chat
5540
)
56-
clear_button.grid(row=0, column=5)
41+
self.clear_button.grid(row=0, column=5)
5742

5843
# chat container
5944
chat_frame = ttk.Frame(root)
@@ -95,8 +80,10 @@ def __init__(self, root):
9580
self.refresh_models()
9681

9782
def append_text_to_chat(self, text, *args):
83+
self.chat_box.config(state=tk.NORMAL)
9884
self.chat_box.insert(tk.END, text, *args)
9985
self.chat_box.see(tk.END)
86+
self.chat_box.config(state=tk.DISABLED)
10087

10188
def handle_key_press(self, event):
10289
if event.keysym == "Return":
@@ -142,33 +129,39 @@ def show_error(self):
142129
def on_send_button(self, _=None):
143130
message = self.user_input.get("1.0", "end-1c").strip()
144131
if message:
145-
self.add_message_to_chat(message)
132+
self.append_text_to_chat(f"User: \n", ("Bold", "User"))
133+
self.append_text_to_chat(f"{message}\n\n")
146134
self.user_input.delete("1.0", "end")
135+
self.chat_history.append({"role": "user", "content": message})
147136

148137
Thread(
149-
target=self.add_message_to_chat,
150-
args=(self.generate_ai_response(),),
138+
target=self.generate_ai_response,
151139
daemon=True,
152140
).start()
153141

154-
def add_message_to_chat(self, message: Union[str, Generator]):
155-
with widget_state_manager(self):
156-
if isinstance(message, str):
157-
self.append_text_to_chat(f"User: \n", ("Bold", "User"))
158-
self.append_text_to_chat(f"{message}")
159-
self.chat_history.append({"role": "user", "content": message})
160-
else:
161-
self.append_text_to_chat(
162-
f"AI ({self.model_select.get()}): \n", ("Bold", "AI")
163-
)
164-
ai_message = ""
165-
for i in message:
166-
self.append_text_to_chat(f"{i}")
167-
ai_message += i
168-
self.chat_history.append({"role": "assistant", "content": ai_message})
142+
def generate_ai_response(self):
143+
self.send_button.state(["disabled"])
144+
self.refresh_button.state(["disabled"])
145+
self.clear_button.state(["disabled"])
146+
147+
try:
148+
self.append_text_to_chat(
149+
f"AI ({self.model_select.get()}): \n", ("Bold", "AI")
150+
)
151+
ai_message = ""
152+
for i in self._request_ollama():
153+
self.append_text_to_chat(f"{i}")
154+
ai_message += i
155+
self.chat_history.append({"role": "assistant", "content": ai_message})
169156
self.append_text_to_chat("\n\n")
157+
except Exception: # noqa
158+
self.append_text_to_chat(tk.END, f"\nAI error!\n\n", ("Error",))
159+
finally:
160+
self.send_button.state(["!disabled"])
161+
self.refresh_button.state(["!disabled"])
162+
self.clear_button.state(["!disabled"])
170163

171-
def generate_ai_response(self):
164+
def _request_ollama(self):
172165
request = urllib.request.Request(
173166
f"{self.api_url}/api/chat",
174167
data=json.dumps(
@@ -190,8 +183,9 @@ def generate_ai_response(self):
190183
yield data["message"]["content"]
191184

192185
def clear_chat(self):
193-
with widget_state_manager(self):
194-
self.chat_box.delete(1.0, tk.END)
186+
self.chat_box.config(state=tk.NORMAL)
187+
self.chat_box.delete(1.0, tk.END)
188+
self.chat_box.config(state=tk.DISABLED)
195189
self.chat_history.clear()
196190

197191

0 commit comments

Comments
 (0)