Build lightweight AI agent admin
This commit is contained in:
@@ -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-Type,raw模式时使用")
|
||||
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="推荐的参数定义")
|
||||
Reference in New Issue
Block a user