File size: 2,508 Bytes
93bc171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a624e23
 
93bc171
a624e23
 
93bc171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e4fd26
 
93bc171
 
 
 
 
 
 
 
 
 
 
 
 
87b6d59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""
 /*************************************************************************
 * 
 * CONFIDENTIAL
 * __________________
 * 
 *  Copyright (2023-2024) AI Labs, IronOne Technologies, LLC
 *  All Rights Reserved
 *
 *  Author  : Theekshana Samaradiwakara
 *  Description :Python Backend API to chat with private data  
 *  CreatedDate : 14/11/2023
 *  LastModifiedDate : 18/03/2024
 *************************************************************************/
 """

import os
import time
import logging
logger = logging.getLogger(__name__)
from dotenv import load_dotenv
from reggpt.chains.llmChain import get_qa_chain
from reggpt.output_parsers.output_parser import qa_chain_output_parser

from reggpt.configs.model import QA_MODEL_TYPE
from reggpt.utils.retriever import load_ensemble_retriever
load_dotenv()

verbose = os.environ.get('VERBOSE')

qa_model_type=QA_MODEL_TYPE
# retriever=load_faiss_retriever()
retriever=load_ensemble_retriever()
# retriever=load_multi_query_retriever(multi_query_model_type)
logger.info("retriever loaded:")

qa_chain= get_qa_chain(qa_model_type,retriever)

def run_qa_chain(query):
    try:
        logger.info(f"run_qa_chain : Question: {query}")
        # Get the answer from the chain
        start = time.time()
        # res = qa_chain(query)
        res = qa_chain.invoke({"question": query, "chat_history":""})
        if 'I dont know' in res["answer"] or "don't know" in res["answer"]:
            res['answer'] = "I currently do not have the information to answer this question. Please rephrase your question or ask another question." 
        # res = response
        # answer, docs = res['result'],res['source_documents']
        end = time.time()

        # log the result
        logger.info(f"Answer (took {round(end - start, 2)} s.) \n: {res}")

        return qa_chain_output_parser(res)
    
    except Exception as e:
        logger.exception(e)
        raise e

def run_qa_chain_answer_only(query):
    try:
        logger.info(f"run_qa_chain : Question: {query}")
        # Get the answer from the chain
        start = time.time()
        # res = qa_chain(query)
        res = qa_chain.invoke({"question": query, "chat_history":""})
        # res = response
        # answer, docs = res['result'],res['source_documents']
        end = time.time()

        # log the result
        logger.info(f"Answer (took {round(end - start, 2)} s.) \n: {res}")

        return res["answer"]
    
    except Exception as e:
        logger.exception(e)
        raise e