mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 07:56:52 +08:00
fix(agent): emit web tool status immediately
This commit is contained in:
@@ -252,6 +252,20 @@ class _WebAgentStreamingHandler(StreamingHandler):
|
|||||||
"""
|
"""
|
||||||
self._on_emit = on_emit
|
self._on_emit = on_emit
|
||||||
|
|
||||||
|
def record_tool_call(
|
||||||
|
self,
|
||||||
|
tool_name: str,
|
||||||
|
tool_message: Optional[str] = None,
|
||||||
|
tool_kwargs: Optional[dict[str, Any]] = None,
|
||||||
|
) -> None:
|
||||||
|
"""记录并立即输出 Web 工具事件,避免汇总延迟到正文结束后。"""
|
||||||
|
super().record_tool_call(
|
||||||
|
tool_name=tool_name,
|
||||||
|
tool_message=tool_message,
|
||||||
|
tool_kwargs=tool_kwargs,
|
||||||
|
)
|
||||||
|
self.flush_pending_tool_summary()
|
||||||
|
|
||||||
def emit(self, token: str) -> str:
|
def emit(self, token: str) -> str:
|
||||||
"""追加 token 并同步通知 SSE 生产者。"""
|
"""追加 token 并同步通知 SSE 生产者。"""
|
||||||
emitted = super().emit(token)
|
emitted = super().emit(token)
|
||||||
|
|||||||
@@ -395,6 +395,25 @@ def test_web_agent_output_callback_receives_only_new_text():
|
|||||||
assert agent._streamed_output == "你好"
|
assert agent._streamed_output == "你好"
|
||||||
|
|
||||||
|
|
||||||
|
def test_web_agent_tool_summary_is_emitted_before_following_text():
|
||||||
|
"""Web 工具状态应在调用发生时输出,不能拖到正文结束后。"""
|
||||||
|
outputs = []
|
||||||
|
agent = _WebAgentMoviePilotAgent(
|
||||||
|
session_id="web-agent:tool-order",
|
||||||
|
user_id="7",
|
||||||
|
channel=MessageChannel.WebAgent.value,
|
||||||
|
source="web-agent",
|
||||||
|
username="admin",
|
||||||
|
replay_mode=ReplyMode.CAPTURE_ONLY,
|
||||||
|
output_callback=outputs.append,
|
||||||
|
)
|
||||||
|
|
||||||
|
agent.stream_handler.record_tool_call("query_download_tasks")
|
||||||
|
agent._handle_stream_text("查询完成。")
|
||||||
|
|
||||||
|
assert outputs == ["(查询了 1 次数据)\n\n", "查询完成。"]
|
||||||
|
|
||||||
|
|
||||||
def test_web_agent_channel_supports_streaming_and_attachments():
|
def test_web_agent_channel_supports_streaming_and_attachments():
|
||||||
"""WebAgent 渠道应声明流式、多媒体和文件发送能力。"""
|
"""WebAgent 渠道应声明流式、多媒体和文件发送能力。"""
|
||||||
assert ChannelCapabilityManager.supports_capability(
|
assert ChannelCapabilityManager.supports_capability(
|
||||||
|
|||||||
Reference in New Issue
Block a user