Source code for llmp.components.settings.global_settings

"""Configuration class to store the state of bools for different scripts access."""
from __future__ import annotations

import os
from datetime import datetime
from typing import Union

import yaml
from dotenv import load_dotenv
from llmp.utils.singleton import Singleton


load_dotenv(verbose=True, override=True)


[docs]class GlobalSettings(metaclass=Singleton): """ Configuration class to store the state of bools for different scripts access. """ DEBUG: bool = False OPENAI_API_KEY: str = None BASE_PATH: str = None
[docs] def __init__(self, config_path="config.yaml", **kwargs) -> None: """Initialize the Global Settings Hierarchical order of config (next level overwrites the previous): 1. Default values 2. Environment variables 3. config.yaml 4. kwargs Args: config_path (str, optional): Path to config.yaml. Defaults to "config.yaml". """ try: with open(config_path) as f: self.config = yaml.load(f, Loader=yaml.FullLoader) except: raise ValueError("config.yaml not found in project dirs")
# self.openai_api_key = self.getenv("OPENAI_API_KEY", set_env=True) # self.debug_mode = self.getenv("DEBUG_MODE", "True") # self.local_storage_dir = self.getenv("LOCAL_STORAGE_DIR", "storage") # self.local_memory_dir = self.getenv("LOCAL_MEMORY_DIR", "memory") # self.get_local_dirs() # self.file_creation_dir = self.local_storage_dir + "/generated" # # self.local_index_name = self.getenv("LOCAL_INDEX_NAME") # self.trello_board_name = self.getenv("TRELLO_BOARD_NAME", "Project AGI") # self.trello_board_id = self.getenv("TRELLO_BOARD_ID", None) # self.trello_labels = self.getenv( # "TRELLO_LABELS", { # "open": "blue", # "depends": "yellow", # "approval": "orange", # "done": "green", # "closed": "green", # "blocked": "red", # "approved": "purple", # "issue": "red", # } # ) # self.github_api_key = self.getenv("GITHUB_API_KEY", set_env=True) # self.github_username = self.getenv("GITHUB_USERNAME") # self.fast_llm_model = self.getenv("FAST_LLM_MODEL", "gpt-3.5-turbo") # self.max_token_treshhold = self.getenv("MAX_TOKEN_TRESHHOLD", 3000) # self.long_llm_model = self.getenv("LONG_LLM_MODEL", "gpt-3.5-turbo-16k") # self.func_llm_model = self.getenv("FUNC_LLM_MODEL", "gpt-3.5-turbo-0613") # self.slow_llm_model = self.getenv("SLOW_LLM_MODEL", "gpt-4")
[docs] def get_local_dirs(self): """Get root storage dir and logging dir in root path. For execution from different paths, this is needed to ensure that the local storage and memory dirs are always in the same place. """ if self.local_storage_dir is None: storage_dir_name = self.getenv("LOCAL_STORAGE_DIR_NAME", "storage") storage_dir = os.path.join(find_root_dir(), storage_dir_name) if not os.path.exists(storage_dir): os.makedirs(storage_dir) self.set_local_memory_dir(os.path.abspath(storage_dir)) if self.local_memory_dir is None: local_memory_dir_name = self.getenv("LOCAL_MEMORY_DIR_NAME", "memory") log_dir = os.path.join(find_root_dir(), local_memory_dir_name) if not os.path.exists(log_dir): os.makedirs(log_dir) self.set_local_memory_dir(os.path.abspath(log_dir))
[docs] def getenv(self, key: str, default: Union[str, dict] = None, set_env: bool = True ) -> Union[str, int, float, bool, dict]: """Get an environment variable.""" value = self.config_file.get(key, default) if value: return value value = os.getenv(key, default) if value == "True": return True if value == "False": return False if set_env and value: os.environ[key] = value return value
[docs] def set_local_memory_dir(self, value: str) -> None: """Set the local memory directory value.""" self.local_memory_dir = value
[docs] def set_local_storage_dir(self, value: str) -> None: """Set the local memory directory value.""" self.local_storage_dir = value