Spaces:
Sleeping
Sleeping
| from data import Data | |
| ''' | |
| The BotWrapper class makes it so that different types of bots can be used in the same way. | |
| This is used in the Bots class to create a list of all bots and pass them to the frontend. | |
| ''' | |
| class BotWrapper: | |
| def __init__(self, bot): | |
| self.bot = bot | |
| def chat(self, *args, **kwargs): | |
| methods = ['chat', 'query'] | |
| for method in methods: | |
| if hasattr(self.bot, method): | |
| print(f"Calling {method} method") | |
| method_to_call = getattr(self.bot, method) | |
| return method_to_call(*args, **kwargs).response() | |
| raise AttributeError(f"'{self.bot.__class__.__name__}' object has none of the required methods: '{methods}'") | |
| def stream_chat(self, *args, **kwargs): | |
| methods = ['stream_chat', 'query'] | |
| for method in methods: | |
| if hasattr(self.bot, method): | |
| print(f"Calling {method} method") | |
| method_to_call = getattr(self.bot, method) | |
| return method_to_call(*args, **kwargs).response_gen | |
| raise AttributeError(f"'{self.bot.__class__.__name__}' object has none of the required methods: '{methods}'") | |
| ''' | |
| The Bots class creates the bots and passes them to the frontend. | |
| ''' | |
| class Bots: | |
| def __init__(self): | |
| self.data = Data() | |
| self.data.load_data() | |
| self.query_engine = None | |
| self.chat_agent = None | |
| self.all_bots = None | |
| self.create_bots() | |
| def create_query_engine_bot(self): | |
| if self.query_engine is None: | |
| self.query_engine = BotWrapper(self.data.index.as_query_engine()) | |
| return self.query_engine | |
| def create_chat_agent(self): | |
| if self.chat_agent is None: | |
| from llama_index.core.memory import ChatMemoryBuffer | |
| memory = ChatMemoryBuffer.from_defaults(token_limit=1500) | |
| self.chat_agent = BotWrapper(self.data.index.as_chat_engine( | |
| chat_mode="context", | |
| memory=memory, | |
| context_prompt=( | |
| "You are a chatbot, able to have normal interactions, as well as talk" | |
| " about the questions and answers you know about." | |
| "Here are the relevant documents for the context:\n" | |
| "{context_str}" | |
| "\nInstruction: Use the previous chat history, or the context above, to interact and help the user." | |
| ) | |
| )) | |
| return self.chat_agent | |
| def create_bots(self): | |
| self.create_query_engine_bot() | |
| self.create_chat_agent() | |
| self.all_bots = [self.query_engine, self.chat_agent] | |
| return self.all_bots | |
| def get_bots(self): | |
| return self.all_bots | |