refactor: remove legacy assistant compatibility

This commit is contained in:
Xin Wang
2026-08-18 10:07:18 +08:00
parent abfcd4cd19
commit d003ee77a5
40 changed files with 505 additions and 729 deletions
+80 -35
View File
@@ -5,7 +5,7 @@ from types import SimpleNamespace
from models import AssistantConfig
from services.brains.base import RealtimeBrainRuntime
from services.node_specs import normalize_graph, validate_graph
from services.node_specs import validate_graph
from services.vision import (
VISION_SYSTEM_HINT,
resolve_vision_question,
@@ -16,6 +16,35 @@ from services.workflow_engine import WorkflowEngine
from services.workflow.realtime import WorkflowRealtimeController
def workflow_settings(**overrides):
settings = {
"runtimeMode": "pipeline",
"llmRoutingMode": "llm_router",
"globalPrompt": "",
"defaultRealtimeResourceId": "",
"defaultLlmResourceId": "",
"defaultAsrResourceId": "",
"defaultTtsResourceId": "",
"visionEnabled": False,
"visionModelResourceId": "",
"visionPromptMode": "runtime",
"visionPrompt": "",
"toolBindings": [],
"builtInTools": {},
"knowledgeBaseId": "",
"knowledgeMode": "disabled",
"knowledgeTopN": 5,
"knowledgeScoreThreshold": 0.0,
"enableInterrupt": True,
"turnConfig": {
"bargeIn": {"strategy": "vad"},
"turnDetection": {"strategy": "smart_turn"},
},
}
settings.update(overrides)
return settings
class VisionPromptModeTest(unittest.TestCase):
def test_fixed_mode_has_no_runtime_question_parameter(self):
description, properties, required = vision_tool_schema_parts(
@@ -80,12 +109,14 @@ class VisionPromptModeTest(unittest.TestCase):
class WorkflowVisionPromptModeTest(unittest.TestCase):
def test_workflow_resolves_global_and_node_modes(self):
graph = {
"specVersion": 3,
"settings": {
"visionEnabled": True,
"visionPromptMode": "fixed",
"visionPrompt": "全局固定问题",
},
"specVersion": 4,
"settings": workflow_settings(
**{
"visionEnabled": True,
"visionPromptMode": "fixed",
"visionPrompt": "全局固定问题",
}
),
"nodes": [
{
"id": "global-agent",
@@ -116,36 +147,37 @@ class WorkflowVisionPromptModeTest(unittest.TestCase):
self.assertEqual(custom_stage.vision_prompt_mode, "guided")
self.assertEqual(custom_stage.vision_prompt, "节点引导")
def test_legacy_focus_is_migrated_to_guided_mode(self):
normalized = normalize_graph(
{
"specVersion": 3,
"settings": {"visionFocusPrompt": "旧全局关注目标"},
"nodes": [],
"edges": [],
}
)
self.assertEqual(normalized["settings"]["visionPromptMode"], "guided")
self.assertEqual(normalized["settings"]["visionPrompt"], "旧全局关注目标")
self.assertNotIn("visionFocusPrompt", normalized["settings"])
def test_fixed_or_guided_mode_requires_prompt_when_vision_is_enabled(self):
graph = {
"specVersion": 3,
"settings": {
"visionEnabled": True,
"visionPromptMode": "fixed",
"visionPrompt": "",
},
"specVersion": 4,
"settings": workflow_settings(
**{
"visionEnabled": True,
"visionPromptMode": "fixed",
"visionPrompt": "",
}
),
"nodes": [
{"id": "start", "type": "start", "data": {}},
{
"id": "agent",
"type": "agent",
"data": {"name": "Agent", "prompt": "处理任务"},
"data": {
"name": "Agent",
"prompt": "处理任务",
"inheritGlobalConfig": True,
"entryMode": "wait_user",
},
}
],
"edges": [
{
"id": "begin",
"source": "start",
"target": "agent",
"data": {"mode": "always", "priority": 0},
}
],
"edges": [],
}
self.assertTrue(
@@ -154,16 +186,29 @@ class WorkflowVisionPromptModeTest(unittest.TestCase):
def test_invalid_mode_is_reported_instead_of_silently_rewritten(self):
graph = {
"specVersion": 3,
"settings": {"visionPromptMode": "unexpected"},
"specVersion": 4,
"settings": workflow_settings(visionPromptMode="unexpected"),
"nodes": [
{"id": "start", "type": "start", "data": {}},
{
"id": "agent",
"type": "agent",
"data": {"name": "Agent", "prompt": "处理任务"},
"data": {
"name": "Agent",
"prompt": "处理任务",
"inheritGlobalConfig": True,
"entryMode": "wait_user",
},
}
],
"edges": [
{
"id": "begin",
"source": "start",
"target": "agent",
"data": {"mode": "always", "priority": 0},
}
],
"edges": [],
}
self.assertTrue(
@@ -172,8 +217,8 @@ class WorkflowVisionPromptModeTest(unittest.TestCase):
def test_realtime_tool_contract_changes_with_mode(self):
graph = {
"specVersion": 3,
"settings": {},
"specVersion": 4,
"settings": workflow_settings(),
"nodes": [
{
"id": "fixed-agent",