Legora / retrival /usage.py
sai-Rohan's picture
fixed bugs
5f6d20c
Raw
History Blame Contribute Delete
3.7 kB
from __future__ import annotations
from retrival.hybrid_retrieval import HybridRetriever
from retrival.judgments import KanoonClient
class LegalRetriever:
def __init__(self):
self.hybrid = HybridRetriever()
self.kanoon = KanoonClient()
# =====================================================
# BUILD CONTEXT
# =====================================================
def build_context(
self,
hybrid_result,
judgments
):
context = []
# -----------------------------------------
# Statutory Retrieval
# -----------------------------------------
context.append(
"===== STATUTORY LAW =====\n"
)
for point in hybrid_result[
"reranked_results"
]:
payload = point.payload
context.append(
f"""
DOCUMENT:
{payload.get('document')}
CHUNK:
{payload.get('chunk_id')}
TEXT:
{payload.get('text')}
"""
)
# -----------------------------------------
# Graph Expansion
# -----------------------------------------
context.append(
"\n===== KNOWLEDGE GRAPH =====\n"
)
for node_id, graph_data in (
hybrid_result[
"graph_context"
].items()
):
context.append(
f"\nNODE: {node_id}"
)
context.append(
f"""
Ancestors:
{graph_data['ancestors']}
Children:
{graph_data['children']}
References:
{graph_data['references']}
"""
)
# -----------------------------------------
# Judgments
# -----------------------------------------
context.append(
"\n===== JUDGMENTS =====\n"
)
for judgment in judgments:
context.append(
str(judgment)
)
return "\n".join(context)
# =====================================================
# RETRIEVE
# =====================================================
def retrieve(
self,
query: str,
vector_k: int = 30,
rerank_k: int = 5,
judgment_k: int = 5
):
# -----------------------------------------
# Hybrid Retrieval
# -----------------------------------------
hybrid_result = (
self.hybrid.retrieve(
query=query,
vector_k=vector_k,
rerank_k=rerank_k
)
)
# -----------------------------------------
# Kanoon Retrieval
# -----------------------------------------
judgments = (
self.kanoon.retrieve(
query=query,
top_k=judgment_k
)
)
# -----------------------------------------
# Final Context
# -----------------------------------------
final_context = (
self.build_context(
hybrid_result,
judgments
)
)
return {
"query":
query,
"statutory_results":
hybrid_result[
"reranked_results"
],
"graph_context":
hybrid_result[
"graph_context"
],
"judgments":
judgments,
"final_context":
final_context
}
if __name__=="__main__":
query="My bike was stolen from outside my house. What punishment can the offender face?"
retriver=LegalRetriever()
print(retriver.retrieve(query))