LegalApiBackendService / rag_service.py
negi2725's picture
Update rag_service.py
b70bde8 verified
Raw
History Blame Contribute Delete
2.41 kB
from model_loader import predictVerdict, getConfidence
from rag_loader import retrieve
from prompt_builder import buildPrompt
import os
from dotenv import load_dotenv
load_dotenv()
def evaluateCase(text: str) -> dict:
# Get LegalBERT prediction
verdictResult = predictVerdict(text)
confidenceScore = getConfidence(text)
# Single retrieval using only the original case text
supportChunks = retrieve(text, topK=5)
# Build prompt with confidence information
promptText = buildPrompt(text, verdictResult, confidenceScore, supportChunks)
geminiApiKey = os.getenv("GEMINI_API_KEY")
geminiResponse = ""
finalVerdict = verdictResult # Default to LegalBERT verdict
if geminiApiKey:
try:
import google.generativeai as genai
genai.configure(api_key=geminiApiKey)
geminiModel = genai.GenerativeModel("gemini-2.5-flash")
response = geminiModel.generate_content(promptText)
geminiResponse = response.text
# Extract final verdict from Gemini's response if confidence < 80%
if confidenceScore < 0.80:
# Check if Gemini changed the verdict in its response
responseLower = geminiResponse.lower()
if "not guilty" in responseLower and "verdict" in responseLower:
if responseLower.find("not guilty") < responseLower.find("guilty") or \
"**not guilty**" in responseLower:
finalVerdict = "not guilty"
elif "guilty" in responseLower and "verdict" in responseLower:
if "**guilty**" in responseLower and "not guilty" not in responseLower[:responseLower.find("**guilty**")]:
finalVerdict = "guilty"
except Exception as e:
geminiResponse = f"Gemini API call failed: {str(e)}"
else:
geminiResponse = "Gemini API key not configured. Using prompt only."
return {
"verdict": finalVerdict, # Final verdict (may be overridden by Gemini if confidence < 70%)
"legalBertVerdict": verdictResult, # Original LegalBERT prediction
"confidence": confidenceScore,
"explanation": geminiResponse if geminiResponse else promptText,
"retrievedChunks": supportChunks,
"prompt": promptText
}