Files
ai-ticket-platform/backend/apps/tickets/draft_schemas.py
2026-09-18 15:26:19 +08:00

102 lines
2.1 KiB
Python

from datetime import datetime
from ninja import Schema
class TicketDraftCreateIn(Schema):
source_text: str = ""
class TicketDraftPatchIn(Schema):
expected_revision: int
fields: dict
class TicketDraftActionIn(Schema):
expected_revision: int
class TicketDraftAnswerIn(Schema):
expected_revision: int
answer: str
question: str = ""
class TicketDraftMaterialOut(Schema):
id: str
file_name: str
material_type: str
extension: str
claimed_mime_type: str
mime_type: str
file_size: int
status: str
scan_status: str
scan_result: dict
parse_status: str
parse_error: str
parsed_text_length: int
# Compatibility schema name retained for the legacy images field.
TicketDraftImageOut = TicketDraftMaterialOut
class TicketDraftMessageOut(Schema):
role: str
content: str
round_number: int
created_at: datetime
class TicketDraftAgentProgressOut(Schema):
stage: str
message: str
current_step: str
total_steps: int
retry_count: int
elapsed_ms: int
slow: bool
class TicketDraftOut(Schema):
public_id: str
status: str
revision: int
source_text: str
problem_valid: bool | None = None
invalid_reason: str
fields: dict
last_ai_fields: dict
field_evidence: dict
message_timeline: list[dict]
missing_fields: list[str]
questions: list[str]
blocking_missing_fields: list[str]
blocking_questions: list[str]
guided_rounds: int
agent_run_public_id: str | None = None
agent_progress: TicketDraftAgentProgressOut
materials: list[TicketDraftMaterialOut]
images: list[TicketDraftMaterialOut]
messages: list[TicketDraftMessageOut]
decision: str
error_code: str
error_message: str
created_ticket: dict | None = None
confirmed_ticket: dict | None = None
created_at: datetime
updated_at: datetime
expires_at: datetime
class TicketDraftAvailabilityOut(Schema):
available: bool
reason: str
vision_available: bool
vision_reason: str
max_file_size: int
max_files: int
max_total_size: int
supported_extensions: list[str]