Add dynamic variable support to Assistant model and related components

- Introduce dynamic variable definitions in AssistantConfig and Assistant models, allowing for flexible prompt customization.
- Implement validation for dynamic variable names and types in the schema.
- Update backend services and routes to handle dynamic variables in assistant configurations and runtime processing.
- Enhance frontend components to support dynamic variable definitions, including a new editor for managing variables.
- Add tests to ensure proper functionality and validation of dynamic variables in various scenarios.
This commit is contained in:
Xin Wang
2026-07-12 23:42:56 +08:00
parent 7c9a18c806
commit deaf3d7730
21 changed files with 1396 additions and 12 deletions

View File

@@ -17,6 +17,7 @@ from loguru import logger
from models import AssistantConfig
from services.auth import require_admin_websocket
from services.config_resolver import resolve_runtime_config
from services.runtime_variables import prepare_dynamic_config
from starlette.websockets import WebSocketDisconnect
# pipecat 重依赖,惰性导入(见 voice_webrtc.py 说明)
@@ -28,12 +29,24 @@ async def _resolve_start_config(raw: str) -> tuple[AssistantConfig, str | None]:
data = json.loads(raw)
if data.get("assistant_id"):
async with SessionLocal() as session:
cfg = await resolve_runtime_config(session, data["assistant_id"])
return (
await resolve_runtime_config(session, data["assistant_id"]),
prepare_dynamic_config(
cfg,
data.get("dynamic_variables"),
assistant_id=data["assistant_id"],
),
data["assistant_id"],
)
if data.get("inline_config"):
return AssistantConfig(**data["inline_config"]), None
return (
prepare_dynamic_config(
AssistantConfig(**data["inline_config"]),
data.get("dynamic_variables"),
assistant_id=None,
),
None,
)
raise ValueError("启动参数缺少 assistant_id 或 inline_config")