fix(workflow): prevent fixed speech continuation
This commit is contained in:
@@ -30,6 +30,7 @@ from services.brains.dify_llm import (
|
||||
normalize_api_base,
|
||||
)
|
||||
from services.brains.workflow_brain import ConfiguredFlowManager, WorkflowBrain
|
||||
from services.fixed_speech import FIXED_SPEECH_CONTEXT_MARKER
|
||||
from services.runtime_variables import prepare_dynamic_config
|
||||
from services.action_runtime import ActionOutcome, ActionStatus
|
||||
from services.workflow.models import (
|
||||
@@ -1723,7 +1724,10 @@ class WorkflowBrainTests(unittest.IsolatedAsyncioTestCase):
|
||||
{
|
||||
"id": "agent1",
|
||||
"type": "agent",
|
||||
"data": {"prompt": "收集基本信息"},
|
||||
"data": {
|
||||
"prompt": "收集基本信息",
|
||||
"entryMode": "generate",
|
||||
},
|
||||
},
|
||||
{
|
||||
"id": "middle",
|
||||
@@ -1846,6 +1850,21 @@ class WorkflowBrainTests(unittest.IsolatedAsyncioTestCase):
|
||||
if manager.current_node == "agent1":
|
||||
break
|
||||
self.assertEqual(manager.current_node, "agent1")
|
||||
self.assertEqual(
|
||||
manager.configs[-1]["task_messages"],
|
||||
[
|
||||
{
|
||||
"role": "system",
|
||||
"content": f"{FIXED_SPEECH_CONTEXT_MARKER}\n欢迎使用。",
|
||||
}
|
||||
],
|
||||
)
|
||||
self.assertFalse(
|
||||
any(
|
||||
message["role"] == "assistant"
|
||||
for message in manager.configs[-1]["task_messages"]
|
||||
)
|
||||
)
|
||||
|
||||
# The user-turn processor must return while the second Message is
|
||||
# still waiting for its transport playback boundary.
|
||||
@@ -1868,8 +1887,13 @@ class WorkflowBrainTests(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertEqual(
|
||||
manager.configs[-1]["task_messages"],
|
||||
[
|
||||
{
|
||||
"role": "system",
|
||||
"content": (
|
||||
f"{FIXED_SPEECH_CONTEXT_MARKER}\n现在进入信息确认。"
|
||||
),
|
||||
},
|
||||
{"role": "user", "content": "基本信息已经收集完成"},
|
||||
{"role": "assistant", "content": "现在进入信息确认。"},
|
||||
],
|
||||
)
|
||||
|
||||
@@ -2550,7 +2574,14 @@ class WorkflowBrainTests(unittest.IsolatedAsyncioTestCase):
|
||||
for frame in worker.frames
|
||||
if isinstance(frame, LLMMessagesAppendFrame)
|
||||
and frame.messages
|
||||
== [{"role": "assistant", "content": "正在为你结束流程"}]
|
||||
== [
|
||||
{
|
||||
"role": "system",
|
||||
"content": (
|
||||
f"{FIXED_SPEECH_CONTEXT_MARKER}\n正在为你结束流程"
|
||||
),
|
||||
}
|
||||
]
|
||||
]
|
||||
self.assertTrue(transition_context_frames)
|
||||
transition_events = [
|
||||
|
||||
Reference in New Issue
Block a user