Files
LawBot/api/schemas.py
T
2026-05-25 01:12:43 +03:00

93 lines
2.4 KiB
Python

from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field
class HealthResponse(BaseModel):
status: str
class IndexRequest(BaseModel):
source_ids: list[int] | None = None
law_types: list[str] | None = None
reset_collection: bool = True
batch_size: int | None = None
class IndexResponse(BaseModel):
indexed_chunks: int
indexed_sources: int
collection_name: str
class SearchRequest(BaseModel):
question: str
category: str | None = None
region: str | None = None
user_type: str | None = None
history: list[dict[str, str]] = Field(default_factory=list)
law_types: list[str] | None = None
top_k: int = 5
class RetrievedChunk(BaseModel):
chunk_id: int
source_id: int
source_title: str
source_url: str | None = None
law_type: str | None = None
article_number: str | None = None
article_title: str | None = None
chunk_text: str
metadata: dict[str, Any] = Field(default_factory=dict)
score: float
class ClassificationResult(BaseModel):
legal_domain: str
issue_type: str
jurisdiction: str = "RU"
region: str | None = None
needs_clarification: bool = False
clarification_questions: list[str] = Field(default_factory=list)
search_queries: list[str] = Field(default_factory=list)
filters: dict[str, Any] = Field(default_factory=dict)
class StructuredInitialAnswer(BaseModel):
short_conclusion: str
legal_points: list[str] = Field(default_factory=list)
action_steps: list[str] = Field(default_factory=list)
risks: list[str] = Field(default_factory=list)
class SearchResponse(BaseModel):
classification: ClassificationResult
generated_queries: list[str]
retrieved_chunks: list[RetrievedChunk]
class AnswerRequest(BaseModel):
user_id: int | None = None
consultation_id: int | None = None
save_history: bool = False
question: str
category: str | None = None
region: str | None = None
user_type: str | None = None
history: list[dict[str, str]] = Field(default_factory=list)
law_types: list[str] | None = None
top_k: int = 5
class AnswerResponse(BaseModel):
classification: ClassificationResult
generated_queries: list[str]
retrieved_chunks: list[RetrievedChunk]
answer: str
consultation_id: int | None = None
user_message_id: int | None = None
assistant_message_id: int | None = None