8000 add "stop response" feature · ag-python-qt/pyqt-openai@e0d5a3a · GitHub
[go: up one dir, main page]

Skip to content

Commit e0d5a3a

Browse files
committed
add "stop response" feature
1 parent cdd4574 commit e0d5a3a

File tree

3 files changed

+43
-11
lines changed

3 files changed

+43
-11
lines changed

pyqt_openai/chat_widget/prompt.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22

3-
from qtpy.QtCore import Qt
4-
from qtpy.QtWidgets import QVBoxLayout, QFileDialog, QToolButton, QMenu, QAction, QWidget, QHBoxLayout
3+
from qtpy.QtCore import Qt, Signal
4+
from qtpy.QtWidgets import QVBoxLayout, QPushButton, QFileDialog, QToolButton, QMenu, QAction, QWidget, QHBoxLayout
55

66
from pyqt_openai.chat_widget.textEditPropmtGroup import TextEditPropmtGroup
77
from pyqt_openai.propmt_command_completer.commandSuggestionWidget import CommandSuggestionWidget
@@ -11,6 +11,8 @@
1111

1212

1313
class Prompt(QWidget):
14+
onStoppedClicked = Signal()
15+
1416
def __init__(self, db: SqliteDatabase):
1517
super().__init__()
1618
self.__initVal(db)
@@ -26,6 +28,9 @@ def __initVal(self, db):
2628
self.__commandEnabled = False
2729

2830
def __initUi(self):
31+
self.__stopBtn = QPushButton('Stop')
32+
self.__stopBtn.clicked.connect(self.onStoppedClicked.emit)
33+
2934
# Create the command suggestion list
3035
self.__suggestionWidget = CommandSuggestionWidget()
3136
self.__suggestion_list = self.__suggestionWidget.getCommandList()
@@ -40,6 +45,7 @@ def __initUi(self):
4045
self.__suggestion_list.itemClicked.connect(self.executeCommand)
4146

4247
lay = QVBoxLayout()
48+
lay.addWidget(self.__stopBtn)
4349
lay.addWidget(self.__suggestionWidget)
4450
lay.addWidget(self.__textEditGroup)
4551
lay.setContentsMargins(0, 0 8000 , 0, 0)
@@ -97,8 +103,20 @@ def __initUi(self):
97103
lay.addWidget(rightWidget)
98104
lay.setContentsMargins(0, 0, 0, 0)
99105
lay.setSpacing(0)
106+
107+
bottomWidget = QWidget()
108+
bottomWidget.setLayout(lay)
109+
110+
lay = QVBoxLayout()
111+
lay.addWidget(self.__stopBtn)
112+
lay.addWidget(bottomWidget)
113+
lay.setContentsMargins(0, 0, 0, 0)
114+
lay.setSpacing(0)
115+
100116
self.setLayout(lay)
101117

118+
self.activateDuringGeneratingWidget(False)
119+
102120
self.__suggestionWidget.setVisible(False)
103121

104122
self.updateHeight()
@@ -169,6 +187,9 @@ def __sendKeysignalToSuggestion(self, key):
169187
elif key == 'enter':
170188
self.executeCommand(self.__suggestion_list.currentItem())
171189

190+
def activateDuringGeneratingWidget(self, f):
191+
self.__stopBtn.setVisible(f)
192+
172193
def executeCommand(self, item):
173194
self.__textEditGroup.executeCommand(item, self.__p_grp)
174195

pyqt_openai/openAiChatBotWidget.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ def __initVal(self):
4747
def __initUi(self):
4848
self.__leftSideBarWidget = LeftSideBar()
4949
self.__browser = ChatBrowser(self.__finish_reason)
50+
5051
self.__prompt = Prompt(self.__db)
52+
self.__prompt.onStoppedClicked.connect(self.__stopResponse)
53+
5154
self.__lineEdit = self.__prompt.getTextEdit()
5255
self.__aiPlaygroundWidget = AIPlaygroundWidget()
5356
self.__aiPlaygroundWidget.onDirectorySelected.connect(self.__llama_class.set_directory)
@@ -210,28 +213,35 @@ def __chat(self):
210213
else:
211214
self.__addConv()
212215

213-
self.__lineEdit.setEnabled(False)
214-
self.__leftSideBarWidget.setEnabled(False)
215-
216216
query_text = self.__prompt.getContent()
217-
218217
self.__browser.showLabel(query_text, True, False)
219-
self.__lineEdit.clear()
220218

221219
if is_llama_available:
222220
self.__t = LlamaOpenAIThread(self.__llama_class, openai_arg=openai_arg, query_text=query_text)
223221
else:
224222
self.__t = OpenAIThread(model, openai_arg)
223+
self.__t.started.connect(self.__beforeGenerated)
225224
self.__t.replyGenerated.connect(self.__browser.showLabel)
226225
self.__t.streamFinished.connect(self.__browser.streamFinished)
227226
self.__t.start()
228227
self.__t.finished.connect(self.__afterGenerated)
229228
except Exception as e:
230229
QMessageBox.critical(self, "Error", str(e))
231230

231+
def __stopResponse(self):
232+
self.__t.stop_streaming()
233+
234+
def __toggleWidgetWhileChatting(self, f):
235+
self.__lineEdit.setEnabled(f)
236+
self.__leftSideBarWidget.setEnabled(f)
237+
self.__prompt.activateDuringGeneratingWidget(not f)
238+
239+
def __beforeGenerated(self):
240+
self.__toggleWidgetWhileChatting(False)
241+
self.__lineEdit.clear()
242+
232243
def __afterGenerated(self):
233-
self.__lineEdit.setEnabled(True)
234-
self.__leftSideBarWidget.setEnabled(True)
244+
self.__toggleWidgetWhileChatting(True)
235245
self.__lineEdit.setFocus()
236246
if not self.isVisible():
237247
self.__notifierWidget = NotifierWidget(informative_text=LangClass.TRANSLATIONS['Response 👌'], detailed_text=LangClass.TRANSLATIONS['Click this!'])

pyqt_openai/openAiThread.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ def run(self):
3939
if inspect.isgenerator(response):
4040
for chunk in response:
4141
if self.__stop_streaming:
42-
finish_reason = chunk['choices'][0].get('finish_reason', 'stopped by user')
42+
finish_reason = 'stopped by user'
4343
self.streamFinished.emit(finish_reason)
44+
break
4445
else:
4546
delta = chunk['choices'][0]['delta']
4647
response_text = delta.get('content', '')
@@ -81,7 +82,7 @@ def run(self):
8182
if f:
8283
for response_text in resp.response_gen:
8384
if self.__stop_streaming:
84-
pass
85+
break
8586
else:
8687
self.replyGenerated.emit(response_text, False, f, 'stopped by user')
8788
self.streamFinished.emit('')

0 commit comments

Comments
 (0)
0