Build lightweight AI agent admin

This commit is contained in:
Codex
2026-06-08 18:14:59 +08:00
commit e164840f43
2530 changed files with 435693 additions and 0 deletions
+238
View File
@@ -0,0 +1,238 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Data Source Schema - 数据源数据验证模式
"""
from datetime import datetime
from typing import Optional, List, Any, Dict
from pydantic import BaseModel, ConfigDict, Field
from app.base_schema import CSTDatetime
class DataSourceBase(BaseModel):
"""数据源基础Schema"""
application_id: Optional[str] = Field(None, description="所属应用ID")
name: str = Field(..., description="数据源名称")
code: str = Field(..., pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="数据源编码(字母开头,只能包含字母、数字和下划线)")
source_type: str = Field(default='static', description="数据源类型: api/sql/static")
description: str = Field(default='', description="描述说明")
status: bool = Field(default=True, description="是否启用")
# API 配置
api_url: str = Field(default='', description="API地址")
api_method: str = Field(default='GET', description="请求方法: GET/POST/PUT/DELETE/PATCH")
api_headers: Dict[str, str] = Field(default_factory=dict, description="请求头")
api_query_params: List[Dict[str, Any]] = Field(default_factory=list, description="Query参数列表")
api_body_type: str = Field(default='none', description="请求体类型: none/json/form-data/x-www-form-urlencoded/raw")
api_body: Dict[str, Any] = Field(default_factory=dict, description="请求体模板")
api_content_type: str = Field(default='', description="Content-Typeraw模式时使用")
api_timeout: int = Field(default=30, description="超时时间")
api_data_path: str = Field(default='', description="响应数据路径")
# API 认证配置
api_auth_type: str = Field(default='none', description="认证类型: none/bearer_token/basic_auth/api_key")
api_auth_config: Dict[str, Any] = Field(default_factory=dict, description="认证配置")
# API 高级配置
api_retry_count: int = Field(default=0, description="重试次数")
api_retry_interval: int = Field(default=1, description="重试间隔(秒)")
api_success_condition: Dict[str, Any] = Field(default_factory=dict, description="成功条件")
api_proxy: str = Field(default='', description="代理地址")
api_follow_redirects: bool = Field(default=True, description="是否跟随重定向")
api_verify_ssl: bool = Field(default=True, description="是否验证SSL证书")
# SQL 配置
sql_content: str = Field(default='', description="SQL语句")
db_connection: str = Field(default='default', description="数据库连接")
# 静态数据
static_data: List[Any] = Field(default_factory=list, description="静态数据")
# 参数定义
params: List[Dict[str, Any]] = Field(default_factory=list, description="参数定义")
# 结果处理
result_type: str = Field(default='list', description="结果类型")
tree_config: Dict[str, Any] = Field(default_factory=dict, description="树形配置")
field_mapping: Dict[str, str] = Field(default_factory=dict, description="字段映射")
chart_config: Dict[str, Any] = Field(default_factory=dict, description="图表配置")
# 缓存配置
cache_enabled: bool = Field(default=False, description="是否启用缓存")
cache_ttl: int = Field(default=300, description="缓存时间")
class DataSourceCreate(DataSourceBase):
"""数据源创建Schema"""
pass
class DataSourceUpdate(BaseModel):
"""数据源更新Schema"""
application_id: Optional[str] = None
name: Optional[str] = None
code: Optional[str] = Field(None, pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="数据源编码(字母开头,只能包含字母、数字和下划线)")
source_type: Optional[str] = None
description: Optional[str] = None
status: Optional[bool] = None
api_url: Optional[str] = None
api_method: Optional[str] = None
api_headers: Optional[Dict[str, str]] = None
api_query_params: Optional[List[Dict[str, Any]]] = None
api_body_type: Optional[str] = None
api_body: Optional[Dict[str, Any]] = None
api_content_type: Optional[str] = None
api_timeout: Optional[int] = None
api_data_path: Optional[str] = None
api_auth_type: Optional[str] = None
api_auth_config: Optional[Dict[str, Any]] = None
api_retry_count: Optional[int] = None
api_retry_interval: Optional[int] = None
api_success_condition: Optional[Dict[str, Any]] = None
api_proxy: Optional[str] = None
api_follow_redirects: Optional[bool] = None
api_verify_ssl: Optional[bool] = None
sql_content: Optional[str] = None
db_connection: Optional[str] = None
static_data: Optional[List[Any]] = None
params: Optional[List[Dict[str, Any]]] = None
result_type: Optional[str] = None
tree_config: Optional[Dict[str, Any]] = None
field_mapping: Optional[Dict[str, str]] = None
chart_config: Optional[Dict[str, Any]] = None
cache_enabled: Optional[bool] = None
cache_ttl: Optional[int] = None
class DataSourceResponse(DataSourceBase):
"""数据源响应Schema"""
id: str
sort: int = 0
is_deleted: bool = False
sys_create_datetime: Optional[CSTDatetime] = None
sys_update_datetime: Optional[CSTDatetime] = None
model_config = ConfigDict(from_attributes=True)
class DataSourceSimpleOut(BaseModel):
"""数据源简单输出(用于下拉选择)"""
id: str
application_id: Optional[str] = None
name: str
code: str
source_type: str
result_type: str = "list"
description: str = ""
model_config = ConfigDict(from_attributes=True)
class DataSourcePreviewRequest(BaseModel):
"""数据源预览请求"""
params: Dict[str, Any] = Field(default_factory=dict)
limit: int = Field(default=100, ge=1, le=1000)
class DataSourceExecuteRequest(BaseModel):
"""数据源执行请求"""
params: Dict[str, Any] = Field(default_factory=dict)
class DataSourceTestRequest(BaseModel):
"""数据源测试请求(临时配置)"""
source_type: str
# API 配置
api_url: str = ""
api_method: str = "GET"
api_headers: Dict[str, str] = Field(default_factory=dict)
api_query_params: List[Dict[str, Any]] = Field(default_factory=list)
api_body_type: str = "none"
api_body: Dict[str, Any] = Field(default_factory=dict)
api_content_type: str = ""
api_timeout: int = 30
api_data_path: str = ""
# API 认证
api_auth_type: str = "none"
api_auth_config: Dict[str, Any] = Field(default_factory=dict)
# API 高级
api_retry_count: int = 0
api_retry_interval: int = 1
api_success_condition: Dict[str, Any] = Field(default_factory=dict)
api_proxy: str = ""
api_follow_redirects: bool = True
api_verify_ssl: bool = True
# SQL 配置
sql_content: str = ""
db_connection: str = "default"
# 静态数据
static_data: List[Any] = Field(default_factory=list)
# 参数
params_def: List[Dict[str, Any]] = Field(default_factory=list)
params: Dict[str, Any] = Field(default_factory=dict)
# 结果处理
result_type: str = "list"
tree_config: Dict[str, Any] = Field(default_factory=dict)
field_mapping: Dict[str, str] = Field(default_factory=dict)
chart_config: Dict[str, Any] = Field(default_factory=dict)
class DataSourceCopyRequest(BaseModel):
"""数据源复制请求"""
new_code: str = Field(..., description="新编码")
new_name: str = Field(default="", description="新名称")
class DataSourceImportCheckIn(BaseModel):
"""数据源导入预检查请求"""
code: str = Field(..., description="数据源编码")
class DataSourceImportCheckOut(BaseModel):
"""数据源导入预检查结果"""
code_exists: bool = Field(..., description="数据源编码是否已存在")
can_import: bool = Field(..., description="是否可以直接导入(编码不冲突)")
class DataSourceImportIn(DataSourceBase):
"""数据源配置导入"""
pass
class TableRelation(BaseModel):
"""表关系定义"""
id: str = Field(default="", description="关系ID")
sourceTable: str = Field(..., description="源表名")
sourceField: str = Field(..., description="源字段名")
targetTable: str = Field(..., description="目标表名")
targetField: str = Field(..., description="目标字段名")
relationType: str = Field(default="many-to-one", description="关系类型")
class AIGenerateSqlRequest(BaseModel):
"""AI 生成 SQL 请求"""
model_config = ConfigDict(protected_namespaces=())
user_question: str = Field(..., description="用户问题(自然语言描述)")
db_connection: str = Field(default="default", description="数据库连接名称")
database: str = Field(default="", description="数据库名")
schema_name: str = Field(default="", description="Schema 名称")
selected_tables: List[str] = Field(default_factory=list, description="选中的表名列表")
table_fields: Dict[str, List[Dict[str, Any]]] = Field(default_factory=dict, description="表字段信息")
table_relations: List[TableRelation] = Field(default_factory=list, description="表关系列表")
include_table_relations: bool = Field(default=True, description="是否包含表关系信息")
model_id: str = Field(..., description="LLM 模型 ID")
class AIGenerateSqlResponse(BaseModel):
"""AI 生成 SQL 响应"""
sql: str = Field(..., description="生成的 SQL 语句")
thought: str = Field(default="", description="生成思路")
params: List[Dict[str, Any]] = Field(default_factory=list, description="推荐的参数定义")