feat: organize tools and enable qwen realtime calls

This commit is contained in:
Xin Wang
2026-08-14 00:15:00 +08:00
parent eb111a3890
commit 5be21f5ccc
71 changed files with 5771 additions and 2026 deletions
+19 -6
View File
@@ -10,7 +10,8 @@ from __future__ import annotations
from typing import Literal
from pydantic import BaseModel, Field
from pydantic import BaseModel, ConfigDict, Field
from pydantic.alias_generators import to_camel
RuntimeMode = Literal["pipeline", "realtime"]
VisionPromptMode = Literal["fixed", "runtime", "guided"]
@@ -42,6 +43,17 @@ class RuntimeTool(BaseModel):
mcp_server: RuntimeMcpServer | None = None
class RuntimeToolBinding(BaseModel):
"""One assistant/stage-specific use of a reusable external tool."""
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
tool_id: str
argument_bindings: dict = Field(default_factory=dict)
template_bindings: dict = Field(default_factory=dict)
result_assignments: dict[str, str] = Field(default_factory=dict)
class RuntimeModelResource(BaseModel):
id: str
name: str = ""
@@ -112,13 +124,12 @@ class AssistantConfig(BaseModel):
turnConfig: dict = Field(default_factory=dict)
startup: dict = Field(default_factory=dict)
analysis_config: dict = Field(default_factory=dict)
built_in_tools: dict = Field(default_factory=dict)
# ``tools`` is the complete runtime pool (conversation + lifecycle actions).
# ``llm_tool_ids`` limits which tools are advertised to a Prompt model. None
# preserves compatibility for inline/test configs that historically exposed
# every item in ``tools``.
# ``tools`` is the reusable resource pool. Bindings define per-use inputs
# and result mappings; platform built-ins are configured separately.
tools: list[RuntimeTool] = Field(default_factory=list)
llm_tool_ids: list[str] | None = None
tool_bindings: list[RuntimeToolBinding] = Field(default_factory=list)
knowledge_base_id: str | None = None
knowledge_base_name: str = ""
knowledge_base_description: str = ""
@@ -168,3 +179,5 @@ class SignalingOffer(BaseModel):
inline_config: AssistantConfig | None = None
vision_enabled: bool = False
dynamic_variables: dict = Field(default_factory=dict)
client_tool_names: list[str] = Field(default_factory=list)
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)