File size: 892 Bytes
300df0f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

from typing import Any, Optional

from src.config import NEO4J_PASSWORD, NEO4J_URI, NEO4J_USER
from src.contract.citations import LegalCitation
from src.embeddings.retriever import EmbeddingRetriever


class LegalContextAssembler:
    """Assembles Document -> Article -> Clause -> Point context for legal segment uids."""

    def __init__(self, retriever: Optional[EmbeddingRetriever] = None) -> None:
        self._retriever = retriever or EmbeddingRetriever(NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD)

    def close(self) -> None:
        self._retriever.close()

    def assemble(self, uid: str) -> Optional[dict[str, Any]]:
        return self._retriever.get_segment_context(uid)

    def citation_for(self, uid: str) -> Optional[LegalCitation]:
        context = self.assemble(uid)
        return LegalCitation.from_context(context) if context else None