Files
X-Financial/server/src/app/schemas/agent_asset.py

200 lines
5.7 KiB
Python
Raw Normal View History

2026-05-11 03:51:24 +00:00
from __future__ import annotations
from datetime import datetime
from typing import Any
from pydantic import BaseModel, ConfigDict, Field
from app.core.agent_enums import (
AgentAssetContentType,
AgentAssetDomain,
AgentAssetStatus,
AgentAssetType,
AgentReviewStatus,
)
class AgentAssetCreate(BaseModel):
asset_type: AgentAssetType
code: str = Field(min_length=1, max_length=100)
name: str = Field(min_length=1, max_length=200)
description: str = ""
domain: AgentAssetDomain
scenario_json: list[Any] = Field(default_factory=list)
owner: str = Field(min_length=1, max_length=100)
reviewer: str | None = Field(default=None, max_length=100)
status: AgentAssetStatus = AgentAssetStatus.DRAFT
config_json: dict[str, Any] = Field(default_factory=dict)
class AgentAssetUpdate(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=200)
description: str | None = None
domain: AgentAssetDomain | None = None
scenario_json: list[Any] | None = None
owner: str | None = Field(default=None, min_length=1, max_length=100)
reviewer: str | None = Field(default=None, max_length=100)
status: AgentAssetStatus | None = None
current_version: str | None = Field(default=None, max_length=30)
published_version: str | None = Field(default=None, max_length=30)
working_version: str | None = Field(default=None, max_length=30)
2026-05-11 03:51:24 +00:00
config_json: dict[str, Any] | None = None
class AgentAssetVersionCreate(BaseModel):
version: str = Field(min_length=1, max_length=30)
content: Any
content_type: AgentAssetContentType
change_note: str | None = None
created_by: str = Field(min_length=1, max_length=100)
class RuleMarkdownUpdate(BaseModel):
version: str = Field(min_length=1, max_length=30)
content: str
change_note: str | None = None
created_by: str = Field(min_length=1, max_length=100)
class AgentAssetReviewCreate(BaseModel):
version: str = Field(min_length=1, max_length=30)
reviewer: str = Field(min_length=1, max_length=100)
review_status: AgentReviewStatus
review_note: str | None = None
class AgentAssetReviewRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
asset_id: str
version: str
reviewer: str
review_status: str
review_note: str | None
reviewed_at: datetime | None
created_at: datetime
class AgentAssetOnlyOfficeConfigRead(BaseModel):
documentServerUrl: str
config: dict[str, Any] = Field(default_factory=dict)
class AgentAssetOnlyOfficeCallbackRead(BaseModel):
error: int = 0
class AgentAssetOnlyOfficeCallbackWrite(BaseModel):
model_config = ConfigDict(extra="allow")
status: int = Field(description="ONLYOFFICE 回调状态码。")
url: str | None = Field(default=None, description="文档下载地址,状态为 2 或 6 时使用。")
users: list[str] = Field(default_factory=list, description="当前编辑用户列表。")
class AgentAssetRuleJsonWrite(BaseModel):
payload: dict[str, Any] = Field(default_factory=dict)
class AgentAssetRuleJsonRead(BaseModel):
file_name: str
rule_code: str
name: str
description: str = ""
evaluator: str = ""
ontology_signal: str | None = None
flow_diagram_svg: str | None = None
inputs: dict[str, Any] = Field(default_factory=dict)
outcomes: dict[str, Any] = Field(default_factory=dict)
payload: dict[str, Any] = Field(default_factory=dict)
class AgentAssetRiskRuleGenerateRequest(BaseModel):
business_domain: AgentAssetDomain = AgentAssetDomain.EXPENSE
risk_level: str = Field(default="medium", pattern="^(low|medium|high)$")
natural_language: str = Field(min_length=8, max_length=2000)
class AgentAssetVersionTimelineItemRead(BaseModel):
event_type: str
version: str
actor: str
event_time: datetime
title: str
description: str = ""
note: str | None = None
source_version: str | None = None
class AgentAssetSpreadsheetDiffCellRead(BaseModel):
sheet_name: str
cell: str
change_type: str
before_value: Any | None = None
after_value: Any | None = None
class AgentAssetSpreadsheetDiffSheetRead(BaseModel):
sheet_name: str
change_type: str
class AgentAssetSpreadsheetChangeRecordRead(BaseModel):
id: str
actor: str
changed_at: datetime
summary: str
sheet_changes: list[AgentAssetSpreadsheetDiffSheetRead] = Field(default_factory=list)
cell_changes: list[AgentAssetSpreadsheetDiffCellRead] = Field(default_factory=list)
changed_sheet_count: int = 0
changed_cell_count: int = 0
2026-05-11 03:51:24 +00:00
class AgentAssetVersionRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
asset_id: str
version: str
content: Any
content_type: str
change_note: str | None
created_by: str
created_at: datetime
is_current: bool = False
is_published: bool = False
is_working: bool = False
lifecycle_state: str = "history"
2026-05-11 03:51:24 +00:00
class AgentAssetListItem(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
asset_type: str
code: str
name: str
description: str
domain: str
scenario_json: list[Any]
owner: str
reviewer: str | None
status: str
current_version: str | None
published_version: str | None
working_version: str | None
2026-05-11 03:51:24 +00:00
config_json: dict[str, Any]
change_count: int = 0
modified_by: str | None = None
2026-05-11 03:51:24 +00:00
created_at: datetime
updated_at: datetime
class AgentAssetRead(AgentAssetListItem):
current_version_content: Any | None = None
current_version_content_type: str | None = None
current_version_change_note: str | None = None
recent_versions: list[AgentAssetVersionRead] = Field(default_factory=list)
latest_review: AgentAssetReviewRead | None = None