From e3e910df2cedbb4335a4a06b500e2aac5fd3b9b2 Mon Sep 17 00:00:00 2001 From: Shivering Ocelot Date: Fri, 5 Jun 2026 00:05:50 -0500 Subject: [PATCH] fix: chat agent integration, llama inference bug --- backend/src/agent.py | 14 +++++++++++--- backend/src/inference.py | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/backend/src/agent.py b/backend/src/agent.py index 87b84ed..59deec2 100644 --- a/backend/src/agent.py +++ b/backend/src/agent.py @@ -2,6 +2,7 @@ import re import json import inspect import time +import asyncio from temporary import generate_tmp_id from stream import Stream @@ -79,12 +80,13 @@ class Agent: await self.run(run) - async def on_output_event(data): + async def on_output_event(stream): + print("[agent] run output " + repr(stream)) new_message = await self.app.send_chat_message( sender=self.id, chat_id=message.chat_id, thread_id=message.thread_id, - content=data.stream, + content=stream, ) run.emit_event('chat-message', { 'messageId': new_message['id'], @@ -92,7 +94,7 @@ class Agent: 'threadId': message.thread_id, }) - run.on('output', on_output_event) + await run.on_async('output', on_output_event) return run def _role_for_message(self, message): @@ -180,6 +182,12 @@ class AgentRun: for event in self.events: if event["name"] == event_name: callback(event["data"]) + + async def on_async(self, event_name, callback): + event_loop = asyncio.get_event_loop() + def new_callback(data): + event_loop.create_task(callback(data)) + self.on(event_name, new_callback) def emit_event(self, event_name, data=None): """Record an event and notify existing listeners. diff --git a/backend/src/inference.py b/backend/src/inference.py index ace4239..b430506 100644 --- a/backend/src/inference.py +++ b/backend/src/inference.py @@ -71,7 +71,7 @@ def build_messages(system_prompt="", instruction=None, input=None, messages=None raise Exception("Unsupported message type: " + repr(type(message))) # shouldn't be necessary. maybe an assert instead? - messages = [normalize(msg) for msg in messages] + messages = [normalize(msg) for msg in messages or []] # default user message prompt = input @@ -141,7 +141,7 @@ async def chat_completion(app, # llama.cpp async def local_chat_completion(app, messages, model, tools=[], opts={}, agent_run=None): if agent_run: - content_stream = agent_run.stream + content_stream = agent_run.get_output_stream() else: content_stream = Stream(app)