import os, litellm
import pkg_resources
import dotenv
dotenv.load_dotenv() # load env variables

def print_verbose(print_statement): 
    pass

def get_package_version(package_name):
    try:
        package = pkg_resources.get_distribution(package_name)
        return package.version
    except pkg_resources.DistributionNotFound:
        return None

# Usage example
package_name = "litellm"
version = get_package_version(package_name)
if version:
    print_verbose(f"The version of {package_name} is {version}")
else:
    print_verbose(f"{package_name} is not installed")
import yaml
import dotenv
from typing import Optional
dotenv.load_dotenv() # load env variables

def set_callbacks():
    ## LOGGING
    if len(os.getenv("SET_VERBOSE", "")) > 0: 
        if os.getenv("SET_VERBOSE") == "True": 
            litellm.set_verbose = True
            print_verbose("\033[92mLiteLLM: Switched on verbose logging\033[0m")
        else: 
            litellm.set_verbose = False

    ### LANGFUSE
    if (len(os.getenv("LANGFUSE_PUBLIC_KEY", "")) > 0 and len(os.getenv("LANGFUSE_SECRET_KEY", ""))) > 0 or len(os.getenv("LANGFUSE_HOST", "")) > 0:
        litellm.success_callback = ["langfuse"] 
        print_verbose("\033[92mLiteLLM: Switched on Langfuse feature\033[0m")
    
    ## CACHING 
    ### REDIS
    # if len(os.getenv("REDIS_HOST", "")) >  0 and len(os.getenv("REDIS_PORT", "")) > 0 and len(os.getenv("REDIS_PASSWORD", "")) > 0: 
    #     print(f"redis host: {os.getenv('REDIS_HOST')}; redis port: {os.getenv('REDIS_PORT')}; password: {os.getenv('REDIS_PASSWORD')}")
    #     from litellm.caching import Cache
    #     litellm.cache = Cache(type="redis", host=os.getenv("REDIS_HOST"), port=os.getenv("REDIS_PORT"), password=os.getenv("REDIS_PASSWORD"))
    #     print("\033[92mLiteLLM: Switched on Redis caching\033[0m")



def load_router_config(router: Optional[litellm.Router], config_file_path: Optional[str]='/app/config.yaml'):
    config = {}
    server_settings  = {} 
    try: 
        if os.path.exists(config_file_path): # type: ignore
            with open(config_file_path, 'r') as file: # type: ignore
                config = yaml.safe_load(file)
        else:
            pass
    except:
        pass

    ## SERVER SETTINGS (e.g. default completion model = 'ollama/mistral')
    server_settings = config.get("server_settings", None)
    if server_settings: 
        server_settings = server_settings

    ## LITELLM MODULE SETTINGS (e.g. litellm.drop_params=True,..)
    litellm_settings = config.get('litellm_settings', None)
    if litellm_settings: 
        for key, value in litellm_settings.items(): 
            setattr(litellm, key, value)

    ## MODEL LIST
    model_list = config.get('model_list', None)
    if model_list: 
        router = litellm.Router(model_list=model_list)
    
    ## ENVIRONMENT VARIABLES
    environment_variables = config.get('environment_variables', None)
    if environment_variables: 
        for key, value in environment_variables.items(): 
            os.environ[key] = value

    return router, model_list, server_settings
