feat: organize tools and enable qwen realtime calls
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import (
|
||||
CheckConstraint,
|
||||
JSON,
|
||||
Boolean,
|
||||
DateTime,
|
||||
@@ -175,6 +176,7 @@ class Assistant(Base):
|
||||
# ---- 瘦类型专属字段(真列,稀疏:按 type 用其中几列) ----
|
||||
prompt: Mapped[str] = mapped_column(Text, default="") # prompt / opencode
|
||||
dynamic_variable_definitions: Mapped[dict] = mapped_column(JSON, default=dict)
|
||||
built_in_tools: Mapped[dict] = mapped_column(JSONB, default=dict)
|
||||
analysis_config: Mapped[dict] = mapped_column(JSONB, default=dict)
|
||||
api_url: Mapped[str] = mapped_column(String(512), default="") # dify / fastgpt / opencode
|
||||
api_key: Mapped[str] = mapped_column(String(512), default="") # dify / fastgpt / opencode(打码/哨兵)
|
||||
@@ -245,6 +247,10 @@ class Tool(Base):
|
||||
"remote_tool_name",
|
||||
name="uq_tools_mcp_server_remote_name",
|
||||
),
|
||||
CheckConstraint(
|
||||
"type IN ('http', 'mcp', 'client')",
|
||||
name="ck_tools_external_type",
|
||||
),
|
||||
)
|
||||
|
||||
id: Mapped[str] = mapped_column(String(40), primary_key=True)
|
||||
@@ -273,7 +279,7 @@ class Tool(Base):
|
||||
|
||||
|
||||
class AssistantToolBinding(Base):
|
||||
"""Prompt assistant to reusable tool many-to-many binding."""
|
||||
"""Assistant reference to a reusable tool plus Prompt usage config."""
|
||||
|
||||
__tablename__ = "assistant_tool_bindings"
|
||||
|
||||
@@ -288,6 +294,7 @@ class AssistantToolBinding(Base):
|
||||
primary_key=True,
|
||||
index=True,
|
||||
)
|
||||
config: Mapped[dict] = mapped_column(JSONB, default=dict)
|
||||
created_at: Mapped[datetime] = mapped_column(
|
||||
DateTime(timezone=True), server_default=func.now()
|
||||
)
|
||||
|
||||
+8
-30
@@ -10,7 +10,6 @@ import json
|
||||
|
||||
import settings
|
||||
from services.interface_catalog import INTERFACE_DEFINITIONS
|
||||
from services.system_tools import SYSTEM_TOOL_SPECS
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy.ext.asyncio import (
|
||||
AsyncSession,
|
||||
@@ -43,39 +42,19 @@ async def sync_interface_definitions() -> None:
|
||||
"interface_type": definition["interface_type"],
|
||||
"name": definition["name"],
|
||||
"capability": definition["capability"],
|
||||
"field_schema": json.dumps({"fields": definition["fields"]}),
|
||||
"field_schema": json.dumps(
|
||||
{
|
||||
"fields": definition["fields"],
|
||||
"features": definition.get("features", {}),
|
||||
}
|
||||
),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
async def sync_default_tools() -> None:
|
||||
"""Ensure system-provided reusable tools exist without overwriting edits."""
|
||||
default_system_tools = []
|
||||
for kind, spec in SYSTEM_TOOL_SPECS.items():
|
||||
config: dict[str, object] = {"kind": kind}
|
||||
if kind == "end_conversation":
|
||||
config.update(
|
||||
{
|
||||
"message_type": "none",
|
||||
"custom_message": "",
|
||||
"capture_reason": True,
|
||||
"allow_end_interruption": False,
|
||||
}
|
||||
)
|
||||
default_system_tools.append(
|
||||
{
|
||||
**spec,
|
||||
"type": "system",
|
||||
"definition": {
|
||||
"schema_version": 1,
|
||||
"type": "system",
|
||||
"config": config,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
"""Ensure workspace-owned reusable external tools exist."""
|
||||
default_tools = [
|
||||
*default_system_tools,
|
||||
{
|
||||
"id": "tool_show_message_default",
|
||||
"name": "显示确认消息",
|
||||
@@ -83,7 +62,7 @@ async def sync_default_tools() -> None:
|
||||
"type": "client",
|
||||
"description": "向用户显示必须主动确认的重要消息弹窗。",
|
||||
"definition": {
|
||||
"schema_version": 1,
|
||||
"schema_version": 2,
|
||||
"type": "client",
|
||||
"config": {
|
||||
"allow_interruptions": False,
|
||||
@@ -121,7 +100,6 @@ async def sync_default_tools() -> None:
|
||||
"required": False,
|
||||
},
|
||||
],
|
||||
"dynamic_variable_assignments": {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user