8 GET endpoints under /api/v1 for health, personas, cases, vector search, juror context, and hybrid search. Includes QueryService composing SubgraphQuery + VectorIndex + GraphDB, Pydantic response models, error handlers, and `serve` CLI mode via uvicorn. 20 new tests, 190 total, zero regressions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
"""Pydantic v2 response models for the query API."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class PersonaInfo(BaseModel):
|
|
name: str
|
|
anchor_nodes: list[str]
|
|
edge_types: list[str]
|
|
chunk_types: list[str]
|
|
|
|
|
|
class CaseSummary(BaseModel):
|
|
mnc: str
|
|
court: str = ""
|
|
date: str = ""
|
|
jurisdiction: str = ""
|
|
matter_type: str = ""
|
|
verdict: str = ""
|
|
|
|
|
|
class ChunkResult(BaseModel):
|
|
chunk_id: str
|
|
text: str | None = None
|
|
metadata: dict = Field(default_factory=dict)
|
|
distance: float | None = None
|
|
|
|
|
|
class JurorContextResponse(BaseModel):
|
|
persona: str
|
|
case_mnc: str
|
|
context_text: str
|
|
source_chunk_ids: list[str]
|
|
total_tokens: int
|
|
|
|
|
|
class CaseGraphNode(BaseModel):
|
|
node_id: str
|
|
label: str
|
|
properties: dict = Field(default_factory=dict)
|
|
|
|
|
|
class CaseGraphRelationship(BaseModel):
|
|
rel_id: str
|
|
from_id: str
|
|
to_id: str
|
|
rel_type: str
|
|
properties: dict = Field(default_factory=dict)
|
|
|
|
|
|
class CaseGraphSummary(BaseModel):
|
|
case: CaseGraphNode
|
|
judges: list[CaseGraphNode] = Field(default_factory=list)
|
|
charges: list[CaseGraphNode] = Field(default_factory=list)
|
|
rulings: list[CaseGraphNode] = Field(default_factory=list)
|
|
witnesses: list[CaseGraphNode] = Field(default_factory=list)
|
|
chunks: list[CaseGraphNode] = Field(default_factory=list)
|
|
relationships: list[CaseGraphRelationship] = Field(default_factory=list)
|
|
|
|
|
|
class HybridResult(BaseModel):
|
|
case_mnc: str
|
|
chunks: list[ChunkResult] = Field(default_factory=list)
|
|
juror_context: JurorContextResponse | None = None
|
|
|
|
|
|
class HealthResponse(BaseModel):
|
|
status: str
|
|
nodes: int
|
|
edges: int
|
|
cases: int
|
|
chunks: int
|