81 lines
2.0 KiB
Python
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
|