Spaces:
Running
Running
| from app_utils import * | |
| from state import State | |
| class StateManager: | |
| """ | |
| Manages the state of both single and dual chatbot interfaces. | |
| Attributes: | |
| single_bot (State): State object for the single chatbot interface | |
| dual_bot1 (State): State object for the first bot in dual interface | |
| dual_bot2 (State): State object for the second bot in dual interface | |
| single_current_category (str): Current category selected in single interface | |
| dual_current_category (str): Current category selected in dual interface | |
| """ | |
| def __init__(self, database): | |
| self.single_bot = State(MODELS[0], DEFAULT_TEMPERATURE_1, database, SINGLE_MODEL_BOT_EXAMPLE_SETTING, "single_model_bot") | |
| self.dual_bot1 = State(MODELS[0], DEFAULT_TEMPERATURE_1, database, DUAL_MODEL_BOT_1_EXAMPLE_SETTING, "dual_model_bot_1") | |
| self.dual_bot2 = State(MODELS[1], DEFAULT_TEMPERATURE_2, database, DUAL_MODEL_BOT_2_EXAMPLE_SETTING, "dual_model_bot_2") | |
| self.single_current_category = CATEGORIES[0] | |
| self.dual_current_category = CATEGORIES[0] | |
| self.initialize() | |
| def initialize(self): | |
| self.single_bot.initialize(self.single_current_category) | |
| self.dual_bot1.initialize(self.dual_current_category) | |
| self.dual_bot2.initialize(self.dual_current_category) | |
| def add_message_helper(self, message, bot): | |
| for x in message["files"]: | |
| bot.history.append({"role": "user", "content": {"path": x}}) | |
| if message["text"] is not None: | |
| bot.history.append({"role": "user", "content": message["text"]}) | |
| bot.test_entry["question"] = [{"role": "user", "content": message["text"]}] | |
| def add_message(self, message, target=None): | |
| if target is None: | |
| self.add_message_helper(message, self.single_bot) | |
| return self.single_bot.history, gr.MultimodalTextbox(value=None, interactive=False) | |
| if target in ["Model 1", "Both"]: | |
| print("Adding message to bot1: {message}") | |
| self.add_message_helper(message, self.dual_bot1) | |
| if target in ["Model 2", "Both"]: | |
| print("Adding message to bot2: {message}") | |
| self.add_message_helper(message, self.dual_bot2) | |
| return self.dual_bot1.history, self.dual_bot2.history, gr.MultimodalTextbox(value=None, interactive=False) | |
| def get_reponse_single(self): | |
| bot_generation = self.single_bot.response() | |
| while True: | |
| stop = True | |
| try: | |
| generation_history = next(bot_generation) | |
| stop = False | |
| yield generation_history | |
| except StopIteration: | |
| pass | |
| if stop: | |
| break | |
| def get_reponse_dual(self, target): | |
| if target != "Both": | |
| bot_generation = self.dual_bot1.response() if target == "Model 1" else self.dual_bot2.response() | |
| while True: | |
| stop = True | |
| try: | |
| generation_history = next(bot_generation) | |
| stop = False | |
| if target == "Model 1": | |
| yield generation_history, self.dual_bot2.history | |
| else: | |
| yield self.dual_bot1.history, generation_history | |
| except StopIteration: | |
| pass | |
| if stop: | |
| break | |
| else: | |
| bot1_generation = self.dual_bot1.response() | |
| bot2_generation = self.dual_bot2.response() | |
| while True: | |
| stop = True | |
| try: | |
| generation_history_1 = next(bot1_generation) | |
| stop = False | |
| except StopIteration: | |
| pass | |
| try: | |
| generation_history_2 = next(bot2_generation) | |
| stop = False | |
| except StopIteration: | |
| pass | |
| yield generation_history_1, generation_history_2 | |
| if stop: | |
| break | |
| def single_update_category_and_load_config(self, category): | |
| self.single_current_category = category | |
| self.single_bot.update_category_and_load_config(category) | |
| return category | |
| def dual_update_category_and_load_config(self, category): | |
| self.dual_current_category = category | |
| self.dual_bot1.update_category_and_load_config(category) | |
| self.dual_bot2.update_category_and_load_config(category) | |
| return category | |
| def single_load_example_and_update(self, example): | |
| model, temp, category, message = self.single_bot.load_example_and_update(example) | |
| return model, temp, category, message | |
| def dual_load_example_and_update(self, example): | |
| model_1, temp_1, category_1, message_1 = self.dual_bot1.load_example_and_update(example) | |
| model_2, temp_2, category_2, message_2 = self.dual_bot2.load_example_and_update(example) | |
| assert category_1 == category_2 | |
| assert message_1 == message_2 | |
| return model_1, temp_1, model_2, temp_2, category_1, message_1 | |