from dotenv import load_dotenv import os class Config: # === General Environment Info === env_name = None num_respondents = None num_focus_groups = None # === Directories and Files === base_dir = None config_dir = None test_result_dir = None input_dir = None output_dir = None respondent_summary_file = None focus_group_summary_file = None respondent_details_file = None data_dictionary_file = None personality_question_file = None personality_scoring_file = None style_tone_question_file = None interview_question_file = None survey_question_file = None interview_validation_files = None hugging_face_excel_file = None # === Respondent Agent Configs === respondent_agent_host = None respondent_agent_model = None respondent_agent_api_key = None respondent_agent_url = None respondent_agent_temperature = None respondent_agent_top_p = None respondent_agent_frequency_penalty = None respondent_agent_presence_penalty = None # === Processing Agent Configs === processing_agent_host = None processing_agent_model = None processing_agent_api_key = None processing_agent_url = None processing_agent_temperature = None processing_agent_top_p = None processing_agent_frequency_penalty = None processing_agent_presence_penalty = None # === Processor Configs === processor_host = None processor_model = None processor_api_key = None processor_url = None processor_temperature = None processor_top_p = None processor_frequency_penalty = None processor_presence_penalty = None # Function to load the environment variables based on the given environment name @classmethod def load_environment(cls, base_dir, my_env_name): # Determine the path to the .env file based on the environment name env_file = f'{base_dir}/config/{my_env_name}.env' # Update the base path as needed # Load the environment variables from the specified .env file load_dotenv(dotenv_path=env_file) cls.base_dir = base_dir cls.env_name = my_env_name cls.num_respondents = int(os.getenv('NUM_RESPONDENTS', 0)) cls.num_focus_groups = int(os.getenv('NUM_FOCUS_GROUPS', 0)) # Construct paths based on BASE_DIR and subdirectories/filenames cls.config_dir = f"{base_dir}/{os.getenv('CONFIG_SUBDIR')}" cls.test_result_dir = f"{base_dir}/{os.getenv('TEST_SUBDIR')}" cls.input_dir = f"{base_dir}/{os.getenv('INPUT_SUBDIR')}" cls.output_dir = f"{base_dir}/{os.getenv('OUTPUT_SUBDIR')}" cls.respondent_summary_file = f"{cls.config_dir}/{os.getenv('RESPONDENT_SUMMARY_FILE')}" cls.focus_group_summary_file = f"{cls.config_dir}/{os.getenv('FOCUS_GROUP_SUMMARY_FILE')}" cls.respondent_details_file = f"{cls.config_dir}/{os.getenv('RESPONDENT_DETAILS_FILE')}" cls.data_dictionary_file = f"{cls.config_dir}/{os.getenv('DATA_DICTIONARY_FILE')}" cls.personality_question_file = f"{cls.config_dir}/{os.getenv('PERSONALITY_QUESTION_FILE')}" cls.personality_scoring_file = f"{cls.config_dir}/{os.getenv('PERSONALITY_SCORING_FILE')}" cls.style_tone_question_file = f"{cls.config_dir}/{os.getenv('STYLE_TONE_QUESTION_FILE')}" cls.interview_question_file = f"{cls.config_dir}/{os.getenv('INTERVIEW_QUESTION_FILE')}" cls.survey_question_file = f"{cls.config_dir}/{os.getenv('SURVEY_QUESTION_FILE')}" cls.interview_validation_files = f"{cls.config_dir}/{os.getenv('INTERVIEW_VALIDATION_FILES')}" # Respondent Agent Model: Load the environment variables, API keys, and parameters cls.respondent_agent_host = os.getenv(os.getenv("RESPONDENT_AGENT_HOST")) cls.respondent_agent_model = os.getenv(os.getenv("RESPONDENT_AGENT_MODEL")) respondent_agent_prefix = (lambda: os.getenv('RESPONDENT_AGENT_HOST').replace('_AGENT_HOST', ''))() cls.respondent_agent_api_key = os.getenv(f"{respondent_agent_prefix}_API_KEY") cls.respondent_agent_url = os.getenv(f"{respondent_agent_prefix}_URL") cls.respondent_agent_temperature = float(os.getenv(f"{respondent_agent_prefix}_TEMPERATURE", 0.0)) cls.respondent_agent_top_p = float(os.getenv(f"{respondent_agent_prefix}_TOP_P", 0.0)) cls.respondent_agent_frequency_penalty = float(os.getenv(f"{respondent_agent_prefix}_FREQUENCY_PENALTY", 0.0)) cls.respondent_agent_presence_penalty = float(os.getenv(f"{respondent_agent_prefix}_PRESENCE_PENALTY", 0.0)) # Processing Agent Model: Load the environment variables, API keys, and parameters cls.processing_agent_host = os.getenv(os.getenv("PROCESSING_AGENT_HOST")) cls.processing_agent_model = os.getenv(os.getenv("PROCESSING_AGENT_MODEL")) processing_agent_prefix = (lambda: os.getenv('PROCESSING_AGENT_HOST').replace('_AGENT_HOST', ''))() cls.processing_agent_api_key = os.getenv(f"{processing_agent_prefix}_API_KEY") cls.processing_agent_url = os.getenv(f"{processing_agent_prefix}_URL") cls.processing_agent_temperature = float(os.getenv(f"{processing_agent_prefix}_TEMPERATURE", 0.0)) cls.processing_agent_top_p = float(os.getenv(f"{processing_agent_prefix}_TOP_P", 0.0)) cls.processing_agent_frequency_penalty = float(os.getenv(f"{processing_agent_prefix}_FREQUENCY_PENALTY", 0.0)) cls.processing_agent_presence_penalty = float(os.getenv(f"{processing_agent_prefix}_PRESENCE_PENALTY", 0.0)) # Processor Model: Load the environment variables, API keys, and parameters cls.processor_host = os.getenv(os.getenv("PROCESSOR_HOST")) cls.processor_model = os.getenv(os.getenv("PROCESSOR_MODEL")) processor_prefix = (lambda: os.getenv('PROCESSOR_HOST').replace('_AGENT_HOST', ''))() cls.processor_api_key = os.getenv(f"{processor_prefix}_API_KEY") cls.processor_url = os.getenv(f"{processor_prefix}_URL") cls.processor_temperature = float(os.getenv(f"{processor_prefix}_TEMPERATURE", 0.0)) cls.processor_top_p = float(os.getenv(f"{processor_prefix}_TOP_P", 0.0)) cls.processor_frequency_penalty = float(os.getenv(f"{processor_prefix}_FREQUENCY_PENALTY", 0.0)) cls.processor_presence_penalty = float(os.getenv(f"{processor_prefix}_PRESENCE_PENALTY", 0.0)) hugging_face_excel_env = os.getenv('HUGGING_FACE_EXCEL_FILE', 'hugging_face_details.xlsx') if not os.path.isabs(hugging_face_excel_env): cls.hugging_face_excel_file = os.path.join(cls.config_dir, hugging_face_excel_env) else: cls.hugging_face_excel_file = hugging_face_excel_env @classmethod def print_environment(cls): print("ENVIRONMENT CONFIGURATION") print(f"Environment Name: {cls.env_name}") print(f"Number of Respondents: {cls.num_respondents}") print(f"Number of Focus Groups: {cls.num_focus_groups}") print("\nDIRECTORIES:") print(f"Base Directory: {cls.base_dir}") print(f"Config Directory: {cls.config_dir}") print(f"Test Result Directory: {cls.test_result_dir}") print(f"Input Directory: {cls.input_dir}") print(f"Output Directory: {cls.output_dir}") print("\nFILES:") print(f"Respondent Summary File: {cls.respondent_summary_file}") print(f"Focus Group Summary File: {cls.focus_group_summary_file}") print(f"Personality Question File: {cls.personality_question_file}") print(f"Respondent Details File: {cls.respondent_details_file}") print(f"Data Dictionary File: {cls.data_dictionary_file}") print(f"Personality Scoring File: {cls.personality_scoring_file}") print(f"Style Tone Question File: {cls.style_tone_question_file}") print(f"Interview Question File: {cls.interview_question_file}") print(f"Survey Question File: {cls.survey_question_file}") print(f"Interview Validation Files: {cls.interview_validation_files}") print(f"Hugging Face Excel File: {cls.hugging_face_excel_file}") print("\nRESPONDENT AGENT CONFIGS") print(f"Respondent Agent Host: {cls.respondent_agent_host}") print(f"Respondent Agent Model: {cls.respondent_agent_model}") print(f"Respondent Agent API Key: {cls.respondent_agent_api_key}") print(f"Respondent Agent URL: {cls.respondent_agent_url}") print(f"Respondent Agent Temperature: {cls.respondent_agent_temperature}") print(f"Respondent Agent Top P: {cls.respondent_agent_top_p}") print(f"Respondent Agent Frequency Penalty: {cls.respondent_agent_frequency_penalty}") print(f"Respondent Agent Presence Penalty: {cls.respondent_agent_presence_penalty}") print("\nPROCESSING AGENT CONFIGS") print(f"Processing Agent Host: {cls.processing_agent_host}") print(f"Processing Agent Name: {cls.processing_agent_model}") print(f"Processing Agent API Key: {cls.processing_agent_api_key}") print(f"Processing Agent URL: {cls.processing_agent_url}") print(f"Processing Agent Temperature: {cls.processing_agent_temperature}") print(f"Processing Agent Top P: {cls.processing_agent_top_p}") print(f"Processing Agent Frequency Penalty: {cls.processing_agent_frequency_penalty}") print(f"Processing Agent Presence Penalty: {cls.processing_agent_presence_penalty}") print("\nPROCESSOR CONFIGS") print(f"Processor Host: {cls.processor_host}") print(f"Processor Name: {cls.processor_model}") print(f"Processor API Key: {cls.processor_api_key}") print(f"Processor URL: {cls.processor_url}") print(f"Processor Temperature: {cls.processor_temperature}") print(f"Processor Top P: {cls.processor_top_p}") print(f"Processor Frequency Penalty: {cls.processor_frequency_penalty}") print(f"Processor Presence Penalty: {cls.processor_presence_penalty}")