import logging

from langchain.chains import RetrievalQA

from neogpt.prompts.prompt import get_prompt


def local_retriever(db, llm, persona="default"):
    """
    Fn: local_retriever
    Description: The function sets up the local retrieval-based question-answering system.
    Args:
        db (object): The database object
        llm (object): The LLM model object
    return:
        chain (object): The chain object
    """
    try:
        prompt, memory = get_prompt(persona=persona)
        # Create a retriever object
        local_retriever = db.as_retriever()
        chain = RetrievalQA.from_chain_type(
            llm=llm,
            retriever=local_retriever,
            chain_type="stuff",
            chain_type_kwargs={"prompt": prompt, "memory": memory},
            return_source_documents=True,
        )
        logging.info("Loaded Local Retriever Successfully 🔍")
    except Exception as e:
        logging.info(f"Error {e}")

    return chain

langchain.chains.RetrievalQA.from_chain_type
[((466, 493), 'neogpt.prompts.prompt.get_prompt', 'get_prompt', ([], {'persona': 'persona'}), '(persona=persona)\n', (476, 493), False, 'from neogpt.prompts.prompt import get_prompt\n'), ((590, 768), 'langchain.chains.RetrievalQA.from_chain_type', 'RetrievalQA.from_chain_type', ([], {'llm': 'llm', 'retriever': 'local_retriever', 'chain_type': '"""stuff"""', 'chain_type_kwargs': "{'prompt': prompt, 'memory': memory}", 'return_source_documents': '(True)'}), "(llm=llm, retriever=local_retriever, chain_type=\n    'stuff', chain_type_kwargs={'prompt': prompt, 'memory': memory},\n    return_source_documents=True)\n", (617, 768), False, 'from langchain.chains import RetrievalQA\n'), ((839, 892), 'logging.info', 'logging.info', (['"""Loaded Local Retriever Successfully 🔍"""'], {}), "('Loaded Local Retriever Successfully 🔍')\n", (851, 892), False, 'import logging\n'), ((928, 954), 'logging.info', 'logging.info', (['f"""Error {e}"""'], {}), "(f'Error {e}')\n", (940, 954), False, 'import logging\n')]