feat(app):

1. Add new functional features to the agent;
2. Enhance the voice output;
3. Modify the end_user binding;
4. Delete and modify the tools.
This commit is contained in:
Timebomb2018
2026-03-16 18:00:09 +08:00
parent b62c40dba3
commit ea391dc44e
22 changed files with 832 additions and 184 deletions

View File

@@ -27,7 +27,7 @@ class ToolRepository:
from app.models.app_model import App
from app.models.workflow_model import WorkflowConfig
from app.models.workspace_model import Workspace
result = db.query(Workspace.tenant_id).join(
App, App.workspace_id == Workspace.id
).join(
@@ -35,7 +35,7 @@ class ToolRepository:
).filter(
WorkflowConfig.id == workflow_id
).first()
return result[0] if result else None
@staticmethod
@@ -67,18 +67,19 @@ class ToolRepository:
@staticmethod
def find_by_tenant(
db: Session,
tenant_id: uuid.UUID,
name: Optional[str] = None,
tool_type: Optional[ToolType] = None,
status: Optional[ToolStatus] = None,
is_enabled: Optional[bool] = None
db: Session,
tenant_id: uuid.UUID,
name: Optional[str] = None,
tool_type: Optional[ToolType] = None,
status: Optional[ToolStatus] = None,
is_enabled: Optional[bool] = None
) -> List[ToolConfig]:
"""根据租户查找工具"""
"""根据租户查找工具(只返回未删除的)"""
query = db.query(ToolConfig).filter(
ToolConfig.tenant_id == tenant_id
ToolConfig.tenant_id == tenant_id,
ToolConfig.is_active.is_(True)
)
if name:
query = query.filter(ToolConfig.name.ilike(f"%{name}%"))
if tool_type:
@@ -91,8 +92,17 @@ class ToolRepository:
return query.all()
@staticmethod
def find_by_id_and_tenant(db:Session, tool_id: uuid.UUID, tenant_id: uuid.UUID) -> Optional[ToolConfig]:
"""根据ID和租户查找工具"""
def find_by_id_and_tenant(db: Session, tool_id: uuid.UUID, tenant_id: uuid.UUID) -> Optional[ToolConfig]:
"""根据ID和租户查找工具(只返回未删除的)"""
return db.query(ToolConfig).filter(
ToolConfig.id == tool_id,
ToolConfig.tenant_id == tenant_id,
ToolConfig.is_active.is_(True)
).first()
@staticmethod
def find_by_id_and_tenant_all(db: Session, tool_id: uuid.UUID, tenant_id: uuid.UUID) -> Optional[ToolConfig]:
"""根据ID和租户查找工具返回所有工具包括删除的"""
return db.query(ToolConfig).filter(
ToolConfig.id == tool_id,
ToolConfig.tenant_id == tenant_id
@@ -100,29 +110,26 @@ class ToolRepository:
@staticmethod
def count_by_tenant(db: Session, tenant_id: uuid.UUID) -> int:
"""统计租户工具数量"""
"""统计租户工具数量(只统计未删除的)"""
return db.query(ToolConfig).filter(
ToolConfig.tenant_id == tenant_id
ToolConfig.tenant_id == tenant_id,
ToolConfig.is_active.is_(True)
).count()
@staticmethod
def get_status_statistics(db: Session, tenant_id: uuid.UUID) -> List[tuple]:
"""获取状态统计"""
return db.query(
ToolConfig.status,
func.count(ToolConfig.id).label('count')
).filter(
ToolConfig.tenant_id == tenant_id
return db.query(ToolConfig.status, func.count(ToolConfig.id).label('count')).filter(
ToolConfig.tenant_id == tenant_id,
ToolConfig.is_active.is_(True)
).group_by(ToolConfig.status).all()
@staticmethod
def get_type_statistics(db: Session, tenant_id: uuid.UUID) -> List[tuple]:
"""获取类型统计"""
return db.query(
ToolConfig.tool_type,
func.count(ToolConfig.id).label('count')
).filter(
ToolConfig.tenant_id == tenant_id
return db.query(ToolConfig.tool_type, func.count(ToolConfig.id).label('count')).filter(
ToolConfig.tenant_id == tenant_id,
ToolConfig.is_active.is_(True)
).group_by(ToolConfig.tool_type).all()
@staticmethod
@@ -130,6 +137,7 @@ class ToolRepository:
"""统计租户启用的工具数量"""
return db.query(ToolConfig).filter(
ToolConfig.tenant_id == tenant_id,
ToolConfig.is_active.is_(True),
ToolConfig.is_enabled == True
).count()
@@ -138,7 +146,8 @@ class ToolRepository:
"""检查租户是否已有内置工具"""
return db.query(ToolConfig).filter(
ToolConfig.tenant_id == tenant_id,
ToolConfig.tool_type == ToolType.BUILTIN.value
ToolConfig.tool_type == ToolType.BUILTIN.value,
ToolConfig.is_active.is_(True)
).count() > 0
@@ -194,10 +203,10 @@ class ToolExecutionRepository:
@staticmethod
def find_by_tool_and_tenant(
db: Session,
tool_id: uuid.UUID,
tenant_id: uuid.UUID,
limit: int = 100
db: Session,
tool_id: uuid.UUID,
tenant_id: uuid.UUID,
limit: int = 100
) -> List[ToolExecution]:
"""根据工具和租户查找执行记录"""
return db.query(ToolExecution).join(
@@ -205,4 +214,4 @@ class ToolExecutionRepository:
).filter(
ToolConfig.id == tool_id,
ToolConfig.tenant_id == tenant_id
).order_by(ToolExecution.started_at.desc()).limit(limit).all()
).order_by(ToolExecution.started_at.desc()).limit(limit).all()