Skip to content

Multi tenancy rag

MultiTenancyRAGPack #

Bases: BaseLlamaPack

Source code in llama-index-packs/llama-index-packs-multi-tenancy-rag/llama_index/packs/multi_tenancy_rag/base.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class MultiTenancyRAGPack(BaseLlamaPack):
    def __init__(self) -> None:
        llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1)
        service_context = ServiceContext.from_defaults(llm=llm)
        self.llm = llm
        self.index = VectorStoreIndex.from_documents(
            documents=[], service_context=service_context
        )

    def get_modules(self) -> Dict[str, Any]:
        """Get modules."""
        return {"llm": self.llm, "index": self.index}

    def add(self, documents: List[Document], user: Any) -> None:
        """Insert Documents of a user into index."""
        # Add metadata to documents
        for document in documents:
            document.metadata["user"] = user
        # Create Nodes using IngestionPipeline
        pipeline = IngestionPipeline(
            transformations=[
                SentenceSplitter(chunk_size=512, chunk_overlap=20),
            ]
        )
        nodes = pipeline.run(documents=documents, num_workers=4)
        # Insert nodes into the index
        self.index.insert_nodes(nodes)

    def run(self, query_str: str, user: Any, **kwargs: Any) -> Any:
        """Run the pipeline."""
        # Define retriever to filter out nodes for user and query
        retriever = VectorIndexRetriever(
            index=self.index,
            filters=MetadataFilters(
                filters=[
                    ExactMatchFilter(
                        key="user",
                        value=user,
                    )
                ]
            ),
            **kwargs
        )
        # Define response synthesizer
        response_synthesizer = get_response_synthesizer(response_mode="compact")
        # Define Query Engine
        query_engine = RetrieverQueryEngine(
            retriever=retriever, response_synthesizer=response_synthesizer
        )
        return query_engine.query(query_str)

get_modules #

get_modules() -> Dict[str, Any]

Get modules.

Source code in llama-index-packs/llama-index-packs-multi-tenancy-rag/llama_index/packs/multi_tenancy_rag/base.py
23
24
25
def get_modules(self) -> Dict[str, Any]:
    """Get modules."""
    return {"llm": self.llm, "index": self.index}

add #

add(documents: List[Document], user: Any) -> None

Insert Documents of a user into index.

Source code in llama-index-packs/llama-index-packs-multi-tenancy-rag/llama_index/packs/multi_tenancy_rag/base.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def add(self, documents: List[Document], user: Any) -> None:
    """Insert Documents of a user into index."""
    # Add metadata to documents
    for document in documents:
        document.metadata["user"] = user
    # Create Nodes using IngestionPipeline
    pipeline = IngestionPipeline(
        transformations=[
            SentenceSplitter(chunk_size=512, chunk_overlap=20),
        ]
    )
    nodes = pipeline.run(documents=documents, num_workers=4)
    # Insert nodes into the index
    self.index.insert_nodes(nodes)

run #

run(query_str: str, user: Any, **kwargs: Any) -> Any

Run the pipeline.

Source code in llama-index-packs/llama-index-packs-multi-tenancy-rag/llama_index/packs/multi_tenancy_rag/base.py
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
def run(self, query_str: str, user: Any, **kwargs: Any) -> Any:
    """Run the pipeline."""
    # Define retriever to filter out nodes for user and query
    retriever = VectorIndexRetriever(
        index=self.index,
        filters=MetadataFilters(
            filters=[
                ExactMatchFilter(
                    key="user",
                    value=user,
                )
            ]
        ),
        **kwargs
    )
    # Define response synthesizer
    response_synthesizer = get_response_synthesizer(response_mode="compact")
    # Define Query Engine
    query_engine = RetrieverQueryEngine(
        retriever=retriever, response_synthesizer=response_synthesizer
    )
    return query_engine.query(query_str)