Files
agent/app/schemas/chat.py
2026-02-25 14:47:19 +03:00

81 lines
2.0 KiB
Python

from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field, HttpUrl
from app.schemas.changeset import ChangeItem
from app.schemas.common import ErrorPayload
class AttachmentType(str, Enum):
CONFLUENCE_URL = "confluence_url"
class ChatMode(str, Enum):
AUTO = "auto"
PROJECT_QA = "project_qa"
PROJECT_EDITS = "project_edits"
DOCS_GENERATION = "docs_generation"
# Legacy alias preserved for backward compatibility.
CODE_CHANGE = "code_change"
# Legacy alias preserved for backward compatibility.
ANALYTICS_REVIEW = "analytics_review"
QA = "qa"
class Attachment(BaseModel):
type: AttachmentType
url: HttpUrl
class ChatFileContext(BaseModel):
path: str = Field(min_length=1)
content: str
content_hash: str = Field(min_length=1)
class ChatMessageRequest(BaseModel):
mode: ChatMode = ChatMode.AUTO
dialog_session_id: str | None = Field(default=None, min_length=1)
rag_session_id: str | None = Field(default=None, min_length=1)
session_id: str | None = Field(default=None, min_length=1)
project_id: str | None = Field(default=None, min_length=1)
message: str = Field(min_length=1)
attachments: list[Attachment] = Field(default_factory=list)
files: list[ChatFileContext] = Field(default_factory=list)
class TaskQueuedResponse(BaseModel):
task_id: str
status: str
class TaskStatus(str, Enum):
QUEUED = "queued"
RUNNING = "running"
DONE = "done"
ERROR = "error"
class TaskResultType(str, Enum):
ANSWER = "answer"
CHANGESET = "changeset"
class TaskResultResponse(BaseModel):
task_id: str
status: TaskStatus
result_type: Optional[TaskResultType] = None
answer: Optional[str] = None
changeset: list[ChangeItem] = Field(default_factory=list)
error: Optional[ErrorPayload] = None
class DialogCreateRequest(BaseModel):
rag_session_id: str = Field(min_length=1)
class DialogCreateResponse(BaseModel):
dialog_session_id: str
rag_session_id: str