fix: support vision prompt modes
This commit is contained in:
@@ -6,6 +6,7 @@ from collections import defaultdict, deque
|
||||
from copy import deepcopy
|
||||
from typing import Any
|
||||
|
||||
from models import VISION_PROMPT_MODES
|
||||
from services.message_policy import (
|
||||
MESSAGE_COMPLETION_POLICIES,
|
||||
MESSAGE_CONFIRMATION,
|
||||
@@ -199,6 +200,11 @@ def _normalize_agent_data(data: dict[str, Any]) -> None:
|
||||
data["stateVariableNames"] = list(
|
||||
dict.fromkeys(str(name) for name in state_names or [] if str(name))
|
||||
)
|
||||
legacy_prompt = str(data.pop("visionFocusPrompt", "") or "").strip()
|
||||
if "visionPrompt" not in data:
|
||||
data["visionPrompt"] = legacy_prompt
|
||||
if "visionPromptMode" not in data:
|
||||
data["visionPromptMode"] = "guided" if legacy_prompt else "runtime"
|
||||
if "inheritGlobalConfig" not in data:
|
||||
has_node_overrides = any(
|
||||
(
|
||||
@@ -207,7 +213,7 @@ def _normalize_agent_data(data: dict[str, Any]) -> None:
|
||||
data.get("ttsResourceId"),
|
||||
data.get("visionEnabled"),
|
||||
data.get("visionModelResourceId"),
|
||||
data.get("visionFocusPrompt"),
|
||||
data.get("visionPrompt"),
|
||||
data.get("knowledgeBaseId"),
|
||||
data.get("toolIds"),
|
||||
)
|
||||
@@ -268,7 +274,10 @@ def _normalize_settings(settings: dict[str, Any], *, global_prompt: str = "") ->
|
||||
settings.setdefault("defaultTtsResourceId", "")
|
||||
settings.setdefault("visionEnabled", False)
|
||||
settings.setdefault("visionModelResourceId", "")
|
||||
settings.setdefault("visionFocusPrompt", "")
|
||||
legacy_prompt = str(settings.pop("visionFocusPrompt", "") or "").strip()
|
||||
settings.setdefault("visionPrompt", legacy_prompt)
|
||||
if "visionPromptMode" not in settings:
|
||||
settings["visionPromptMode"] = "guided" if legacy_prompt else "runtime"
|
||||
settings.setdefault("toolIds", [])
|
||||
settings.setdefault("knowledgeBaseId", "")
|
||||
settings.setdefault("knowledgeMode", "automatic")
|
||||
@@ -471,6 +480,20 @@ def validate_graph(graph: dict[str, Any]) -> list[str]:
|
||||
not isinstance(name, str) for name in state_names
|
||||
):
|
||||
errors.append(f"Agent 节点 {node_id} 的状态变量授权必须是列表")
|
||||
source = settings if data.get("inheritGlobalConfig", True) else data
|
||||
vision_prompt_mode = str(source.get("visionPromptMode") or "runtime")
|
||||
if vision_prompt_mode not in VISION_PROMPT_MODES:
|
||||
errors.append(
|
||||
f"Agent 节点 {node_id} 的视觉提示词模式无效:{vision_prompt_mode}"
|
||||
)
|
||||
if (
|
||||
source.get("visionEnabled")
|
||||
and vision_prompt_mode in {"fixed", "guided"}
|
||||
and not str(source.get("visionPrompt") or "").strip()
|
||||
):
|
||||
errors.append(
|
||||
f"Agent 节点 {node_id} 的固定或引导模式必须填写视觉提示词"
|
||||
)
|
||||
if runtime_mode == "realtime":
|
||||
if data.get("contextPolicy", "inherit") != "inherit":
|
||||
errors.append(
|
||||
@@ -487,7 +510,6 @@ def validate_graph(graph: dict[str, Any]) -> list[str]:
|
||||
errors.append(
|
||||
f"Realtime Agent 节点 {node_id} 不支持节点级模型、语音或交互策略覆盖"
|
||||
)
|
||||
source = settings if data.get("inheritGlobalConfig", True) else data
|
||||
if (
|
||||
source.get("knowledgeBaseId")
|
||||
and source.get("knowledgeMode") != "on_demand"
|
||||
|
||||
Reference in New Issue
Block a user