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 | |