import pandas as pd import streamlit as st from streamlit.logger import get_logger import langchain from app_config import ENVIRON from utils.memory_utils import change_memories from models.model_seeds import seeds langchain.verbose = ENVIRON =="dev" logger = get_logger(__name__) # TODO: Include more variable and representative names DEFAULT_NAMES = ["Olivia", "Kit", "Abby", "Tom", "Carolyne", "Jessiny"] DEFAULT_NAMES_DF = pd.read_csv("./utils/names.csv") def get_random_name(gender="Neutral", ethnical_group="Neutral", names_df=None): if names_df is None: names_df = pd.DataFrame(DEFAULT_NAMES, columns=['name']) names_df["gender"] = "Neutral" names_df["ethnical_group"] = "Neutral" dfi = names_df if gender != "Neutral": dfi = dfi.query(f"gender=='{gender}'") if ethnical_group != "Neutral": dfi = dfi.query(f"ethnical_group=='{ethnical_group}'") if len(dfi) <=0 : dfi = names_df return dfi.sample(1)['name'].values[0] def divide_messages(str_memory, str_ai_prefix="texter", str_human_prefix="helper", include_colon=True): message_delimiter = "$%$" # Split str memory in messaages according to previous prefix and flatten list colon = ":" if include_colon else "" str_memory = f"{message_delimiter}{str_ai_prefix}{colon}".join(str_memory.split(f"{str_ai_prefix}{colon}")) str_memory = f"{message_delimiter}{str_human_prefix}{colon}".join(str_memory.split(f"{str_human_prefix}{colon}")) return str_memory.split(message_delimiter) def add_initial_message(issue, language, memory, str_ai_prefix="texter", str_human_prefix="helper", include_colon=True, texter_name="", counselor_name=""): initial_mem_str = seeds.get(issue, "GCT")['memory'].format(counselor_name=counselor_name, texter_name=texter_name) message_list = divide_messages(initial_mem_str, str_ai_prefix, str_human_prefix, include_colon) colon = ":" if include_colon else "" for i, message in enumerate(message_list): message = message.strip("\n") message = message.strip() if message is None or message == "": pass elif message.startswith(str_human_prefix): memory.chat_memory.add_user_message(message.lstrip(f"{str_human_prefix}{colon}").strip()) elif message.startswith(str_ai_prefix): memory.chat_memory.add_ai_message(message.lstrip(f"{str_ai_prefix}{colon}").strip()) def create_memory_add_initial_message(memories, issue, language, changed_source=False, texter_name="", counselor_name=""): change_memories(memories, language, changed_source=changed_source) for memory, _ in memories.items(): if len(st.session_state[memory].buffer_as_messages) < 1: add_initial_message(issue, language, st.session_state[memory], texter_name=texter_name, counselor_name=counselor_name)