File size: 810 Bytes
da21448
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import logging

from pydantic import ValidationError

from techdocs_graphrag.models import Chunk, GraphExtraction
from techdocs_graphrag.ports import LanguageModel
from techdocs_graphrag.prompts import EXTRACTION_SYSTEM_PROMPT

logger = logging.getLogger(__name__)


class GraphExtractor:
    def __init__(self, llm: LanguageModel) -> None:
        self._llm = llm

    def extract(self, chunk: Chunk) -> GraphExtraction:
        payload = self._llm.complete(EXTRACTION_SYSTEM_PROMPT, chunk.text, json_mode=True)
        try:
            return GraphExtraction.model_validate_json(payload)
        except ValidationError as error:
            logger.warning(
                "Graph extraction rejected for chunk %s (%s errors)", chunk.id, error.error_count()
            )
            return GraphExtraction()