Skip to content

Commit 8cb7f92

Browse files
committed
0.4.1
1 parent 8129954 commit 8cb7f92

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

src/gui/bubbles.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
QEasingCurve
1313
from PySide6.QtGui import QPixmap, QIcon, QTextCursor, QTextOption, Qt, QDesktopServices
1414

15+
from src.members.user import User
1516
# from interpreter import interpreter
1617
from src.plugins.openinterpreter.src import interpreter
1718

@@ -229,14 +230,24 @@ def send_message(
229230
self,
230231
message: str,
231232
role: str = 'user',
232-
as_member_id: str = '1',
233+
as_member_id: str = None, # '1',
234+
feed_back=False,
233235
clear_input=False,
234236
run_workflow=True
235237
): # todo default as_mem_id
236238
# check if threadpool is active
237239
if self.main.threadpool.activeThreadCount() > 0:
238240
return
239241

242+
if as_member_id is None: # todo
243+
members = self.workflow.members
244+
workflow_first_member = next(iter(sorted(members.values(), key=lambda x: x['loc_x'])), None)
245+
246+
if workflow_first_member:
247+
first_member_is_user = isinstance(workflow_first_member, User)
248+
if first_member_is_user: # todo de-dupe
249+
as_member_id = workflow_first_member.member_id
250+
240251
last_msg = self.workflow.message_history.messages[-1] if self.workflow.message_history.messages else None
241252
new_msg = self.workflow.save_message(role, message, member_id=as_member_id)
242253
if not new_msg:
@@ -267,34 +278,35 @@ def send_message(
267278
self.parent.workflow_settings.refresh_member_highlights()
268279

269280
if run_workflow:
270-
self.run_workflow(as_member_id)
281+
self.run_workflow(from_member_id=as_member_id, feed_back=feed_back) # as_member_id)
271282

272283
# def after_send_message(self, as_member_id: str):
273284
# self.run_workflow(as_member_id)
274285
#
275286

276-
def run_workflow(self, from_member_id=None):
287+
def run_workflow(self, from_member_id=None, feed_back=False):
277288
self.main.send_button.update_icon(is_generating=True)
278289

279290
# self.refresh_waiting_bar(set_visibility=False)
280291
# self.parent.workflow_settings.refresh_member_highlights()
281292

282-
runnable = self.RespondingRunnable(self, from_member_id)
293+
runnable = self.RespondingRunnable(self, from_member_id, feed_back)
283294
self.main.threadpool.start(runnable)
284295

285296
if self.parent.__class__.__name__ == 'Page_Chat':
286297
self.parent.try_generate_title()
287298

288299
class RespondingRunnable(QRunnable):
289-
def __init__(self, parent, from_member_id=None):
300+
def __init__(self, parent, from_member_id=None, feed_back=False):
290301
super().__init__()
291302
self.parent = parent
292303
self.main = parent.main
293304
self.from_member_id = from_member_id
305+
self.feed_back = feed_back # todo clean
294306

295307
def run(self):
296308
try:
297-
asyncio.run(self.parent.workflow.behaviour.start(self.from_member_id))
309+
asyncio.run(self.parent.workflow.behaviour.start(self.from_member_id, feed_back=self.feed_back))
298310
self.main.finished_signal.emit()
299311
except Exception as e:
300312
if os.environ.get('AP_DEV_MODE', False):
@@ -671,7 +683,7 @@ def rerun_msg(self):
671683

672684
oi_res = interpreter.computer.run(lang, code)
673685
output = next(r for r in oi_res if r['format'] == 'output').get('content', '')
674-
self.msg_container.parent.send_message(output, role='output', as_member_id=member_id, clear_input=False)
686+
self.msg_container.parent.send_message(output, role='output', as_member_id=member_id, feed_back=True, clear_input=False)
675687
elif bubble.role == 'tool':
676688
from src.system.base import manager
677689
parsed, tool_dict = try_parse_json(bubble.text)

src/members/workflow.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ def get_member_by_full_member_id(self, full_member_id: str) -> Optional[Member]:
369369
def save_message(
370370
self, role: str,
371371
content: str,
372-
member_id: str = '1',
372+
member_id: str = None, # '1',
373373
log_obj=None
374374
):
375375
"""Saves a message to the database and returns the message_id"""
@@ -457,11 +457,11 @@ def __init__(self, workflow):
457457
self.workflow: Workflow = workflow
458458
# self.tasks = []
459459

460-
async def start(self, from_member_id: int = None):
461-
async for key, chunk in self.receive(from_member_id):
460+
async def start(self, from_member_id: int = None, feed_back: bool = False):
461+
async for key, chunk in self.receive(from_member_id, feed_back):
462462
pass
463463

464-
async def receive(self, from_member_id: int = None):
464+
async def receive(self, from_member_id: int = None, feed_back: bool = False):
465465
processed_members = set()
466466

467467
def create_async_group_task(member_ids):
@@ -495,8 +495,14 @@ async def run_member_task(member): # todo dirty
495495
filter_role = self.workflow.config.get('config', {}).get('filter_role', 'All').lower()
496496
self.workflow.responding = True
497497
try:
498+
found_source = True if from_member_id is None else False
498499
for member in self.workflow.members.values():
499-
if member.turn_output is not None or member.member_id in processed_members:
500+
if not found_source and member.member_id == from_member_id:
501+
found_source = True
502+
if not found_source:
503+
continue # todo clean mechanism
504+
ignore_turn_output = feed_back and member.member_id == from_member_id
505+
if (member.turn_output is not None and not ignore_turn_output) or member.member_id in processed_members:
500506
continue
501507
if self.workflow.chat_page:
502508
self.workflow.chat_page.workflow_settings.refresh_member_highlights()

0 commit comments

Comments
 (0)