File size: 986 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
from techdocs_graphrag.models import Answer, RetrievalMode
from techdocs_graphrag.ports import LanguageModel
from techdocs_graphrag.prompts import ANSWER_SYSTEM_PROMPT, render_answer_prompt
from techdocs_graphrag.retrieval import HybridRetriever

NO_CONTEXT_ANSWER = (
    "Je ne trouve aucune information pertinente dans la base indexée. "
    "Indexe d'abord un corpus ou reformule la question."
)


class GraphRAGAssistant:
    def __init__(self, *, retriever: HybridRetriever, llm: LanguageModel) -> None:
        self._retriever = retriever
        self._llm = llm

    def ask(self, question: str, mode: RetrievalMode = RetrievalMode.GRAPH) -> Answer:
        context = self._retriever.retrieve(question, mode)
        text = (
            NO_CONTEXT_ANSWER
            if context.is_empty
            else self._llm.complete(ANSWER_SYSTEM_PROMPT, render_answer_prompt(question, context))
        )
        return Answer(question=question, text=text, mode=mode, context=context)