c4f0c7ad49
- Introduce async priority queue service in ai-service; all /chat calls now route through it - Refactor chat router to separate execute_chat (core logic) from the HTTP handler - Add /queue endpoints (status, pause, resume, cancel) for queue management - Update ai-service config to use Pydantic v2 model_config style - Add STATUS.md files for backend, ai-service, doc-service, and frontend - Document STATUS.md workflow in CLAUDE.md - Update doc-service documents router and schemas; frontend DocumentsPage and API client Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, field_validator
|
|
|
|
from app.schemas.chat import ChatMessage, ChatResponse
|
|
|
|
|
|
class QueueRequest(BaseModel):
|
|
messages: list[ChatMessage]
|
|
max_tokens: int = 2048
|
|
temperature: float = 0.0
|
|
response_format: Literal["json", "text"] = "text"
|
|
priority: Literal["high", "normal", "low"] = "normal"
|
|
|
|
@field_validator("messages")
|
|
@classmethod
|
|
def messages_not_empty(cls, v: list) -> list:
|
|
if not v:
|
|
raise ValueError("messages must not be empty")
|
|
return v
|
|
|
|
|
|
class JobStatus(BaseModel):
|
|
id: str
|
|
status: str
|
|
priority: str
|
|
position: int | None = None # number of jobs ahead; None when not pending
|
|
created_at: datetime
|
|
started_at: datetime | None = None
|
|
finished_at: datetime | None = None
|
|
result: ChatResponse | None = None
|
|
error: str | None = None
|
|
|
|
|
|
class QueueStatus(BaseModel):
|
|
running: bool
|
|
paused: bool
|
|
queue_size: int
|
|
current_job_id: str | None = None
|