MetaGPT
47 строк · 1.3 Кб
1"""Base retriever."""
2
3from abc import abstractmethod
4
5from llama_index.core.retrievers import BaseRetriever
6from llama_index.core.schema import BaseNode, NodeWithScore, QueryType
7
8from metagpt.utils.reflection import check_methods
9
10
11class RAGRetriever(BaseRetriever):
12"""Inherit from llama_index"""
13
14@abstractmethod
15async def _aretrieve(self, query: QueryType) -> list[NodeWithScore]:
16"""Retrieve nodes"""
17
18def _retrieve(self, query: QueryType) -> list[NodeWithScore]:
19"""Retrieve nodes"""
20
21
22class ModifiableRAGRetriever(RAGRetriever):
23"""Support modification."""
24
25@classmethod
26def __subclasshook__(cls, C):
27if cls is ModifiableRAGRetriever:
28return check_methods(C, "add_nodes")
29return NotImplemented
30
31@abstractmethod
32def add_nodes(self, nodes: list[BaseNode], **kwargs) -> None:
33"""To support add docs, must inplement this func"""
34
35
36class PersistableRAGRetriever(RAGRetriever):
37"""Support persistent."""
38
39@classmethod
40def __subclasshook__(cls, C):
41if cls is PersistableRAGRetriever:
42return check_methods(C, "persist")
43return NotImplemented
44
45@abstractmethod
46def persist(self, persist_dir: str, **kwargs) -> None:
47"""To support persist, must inplement this func"""
48