File size: 2,753 Bytes
9844436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from pydantic import BaseModel, Field
from typing import Dict, List, Any, Optional

class CaseAnalysisRequest(BaseModel):
    caseText: str = Field(..., description="The legal case text to analyze", min_length=10)
    useQueryGeneration: bool = Field(default=True, description="Whether to use Gemini for query generation in RAG")

class CaseAnalysisResponse(BaseModel):
    initialVerdict: str = Field(..., description="Initial verdict from LegalBERT model")
    initialConfidence: float = Field(..., description="Confidence score of initial verdict")
    finalVerdict: Optional[str] = Field(None, description="Final verdict after Gemini evaluation")
    verdictChanged: bool = Field(default=False, description="Whether the verdict was changed by Gemini")
    searchQuery: str = Field(..., description="Query used for RAG retrieval")
    geminiExplanation: Optional[str] = Field(None, description="Detailed explanation from Gemini AI")
    supportingSources: Dict[str, List[Any]] = Field(default_factory=dict, description="Retrieved supporting legal documents")
    analysisLogs: Dict[str, Any] = Field(default_factory=dict, description="Detailed analysis logs")

class HealthResponse(BaseModel):
    status: str = Field(..., description="Overall health status")
    services: Dict[str, bool] = Field(default_factory=dict, description="Status of individual services")
    error: Optional[str] = Field(None, description="Error message if unhealthy")

class VerdictPrediction(BaseModel):
    verdict: str = Field(..., description="Predicted verdict (guilty/not guilty)")
    confidence: float = Field(..., description="Confidence score between 0 and 1")

class RAGRetrievalResult(BaseModel):
    query: str = Field(..., description="Query used for retrieval")
    supportChunks: Dict[str, List[Any]] = Field(..., description="Retrieved chunks by category")
    logs: Dict[str, Any] = Field(default_factory=dict, description="Retrieval logs")

class GeminiEvaluationRequest(BaseModel):
    inputText: str = Field(..., description="Original case text")
    modelVerdict: str = Field(..., description="Initial model verdict")
    confidence: float = Field(..., description="Confidence of initial verdict")
    support: Dict[str, List[Any]] = Field(..., description="Supporting legal documents")
    searchQuery: Optional[str] = Field(None, description="Search query used")

class GeminiEvaluationResponse(BaseModel):
    finalVerdict: Optional[str] = Field(None, description="Final verdict from Gemini")
    verdictChanged: str = Field(..., description="Whether verdict was changed")
    explanation: str = Field(..., description="Detailed legal explanation")
    relevantLaws: List[str] = Field(default_factory=list, description="Relevant laws identified")