From 95e73545cec27381b8a6c2acd11897562d9e0d0f Mon Sep 17 00:00:00 2001 From: Carina Kothe Date: Tue, 26 Nov 2024 15:23:15 +0100 Subject: [PATCH] move env vars to json file --- .gitignore | 3 ++ config/config.json | 51 +++++++++++++++++++++++++++ config/config.yml | 7 ---- scripts/k8s/companion-deployment.yaml | 10 +++--- src/utils/config.py | 17 ++++++--- src/utils/settings.py | 35 +++++++++++++++--- 6 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 config/config.json delete mode 100644 config/config.yml diff --git a/.gitignore b/.gitignore index 771cf15f..450e159d 100644 --- a/.gitignore +++ b/.gitignore @@ -132,6 +132,9 @@ ENV/ env.bak/ venv.bak/ +# Configuration +config/config.json + # Spyder project settings .spyderproject .spyproject diff --git a/config/config.json b/config/config.json new file mode 100644 index 00000000..aa5100e0 --- /dev/null +++ b/config/config.json @@ -0,0 +1,51 @@ +{ + "AICORE_AUTH_URL": "https://kyma-companion-0ovnrk86.authentication.sap.hana.ondemand.com/oauth/token", + "AICORE_BASE_URL": "https://api.ai.internalprod.eu-central-1.aws.ml.hana.ondemand.com/v2", + "AICORE_CLIENT_ID": "sb-8bd2476c-6428-44ef-be07-26caf642512e!b137635|xsuaa_std!b77089", + "AICORE_CLIENT_SECRET": "5545d480-0ae3-40e6-98a3-cfb72098f09f$68S9Upfzl7DP8ZDazxnQPcagEeKGDgNUgt9tkROrhTE=", + "AICORE_CONFIGURATION_ID_EMBEDDINGS_ADA": "f5c41bc9-a5fd-4f6c-9527-abdb7166eb19", + "AICORE_CONFIGURATION_ID_GEMINI_PRO": "e44b5905-3163-4205-9f72-bae8fc526f7d", + "AICORE_CONFIGURATION_ID_GPT35": "da6ff8ee-c7c6-46aa-a3b6-92c729d012f5", + "AICORE_CONFIGURATION_ID_GPT35_16K": "0f59b518-c128-4f8b-bcac-b6a0ae8347e1", + "AICORE_CONFIGURATION_ID_GPT4": "b5ebcea1-d35a-4831-97b4-be0a3c2f2c1f", + "AICORE_CONFIGURATION_ID_GPT4_32K": "0b142345-3bee-404b-9291-c08da5da4ca1", + "AICORE_DEPLOYMENT_ID_EMBEDDINGS_ADA": "d7029be0616fd7ee", + "AICORE_DEPLOYMENT_ID_GEMINI_PRO": "db839a2dbbfd311f", + "AICORE_DEPLOYMENT_ID_GPT35": "d7f200bc2d5586db", + "AICORE_DEPLOYMENT_ID_GPT35_16K": "d575345d0e413530", + "AICORE_DEPLOYMENT_ID_GPT4": "d8cc02e45ca77234", + "AICORE_DEPLOYMENT_ID_GPT4_32K": "da13b98b1870b839", + "AICORE_RESOURCE_GROUP": "default", + + "REDIS_URL": "redis://localhost:6379", + "REDIS_HOST": "localhost", + "REDIS_PORT": "6379", + + "TEST_CLUSTER_URL": "https://api.comp-tests-0.kymatunas.shoot.canary.k8s-hana.ondemand.com", + "TEST_CLUSTER_CA_DATA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ1akNDQWs2Z0F3SUJBZ0lRZkg0SktqeVZlS2RGejl0Slk4YVRLVEFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TkRBNE1ESXhNVFEwTUROYUZ3MHpOREE0TURJeE1UUTBNRE5hTUEweApDekFKQmdOVkJBTVRBbU5oTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUF1TGVxCjhDSDlibkFiaEVaY2FtZVRyckQyOFRYTU1MMWJIbVdXeXk5bGpwTnVRSXpjUkpFZWVQYWs5QzRuYmNHcUtwMUQKdWRUN3Z6bWZQRzJ1Qk9LZS8yemtaajlHcDFvZTI1OVVGUE5MalNpWG5nRm9wTUNHTFF5aWFEdGJiaUtaR3ZScApqbDcvSjRHbnFURUs3aElZSmg2dmJBc1BkL2wycVhhZ1p6QUxhR1k2VmwzQnNicG5OemJUZEpJM2RRbWRrWjJDCkRveGFLN0V0TG9PbGUxMlA4UjVNQzNGeTY3bDdudDIrTTRqSTFLRlNpaEIyRUpSalVWb0QveXhKVEN6dlBpZXgKZVlOVE9reXM5OWp4UzFpT1UxU3lqMkZQSVdWRWMxZGN4VUdMWjk1Tmx5ekJvcDJiaTVRVWhVWDM4UlFrTUtiSQpSWExsL0JBNk1qMDIzblRuVW5Zc2NqS2NUdXpOYUJJLzJtVEpEdDc5bUZub0JVK0NXZmVESlhGd1JhYmFzanBHCjVuVmdtVTdnQ3FQVnVsMTZmWmtNek80eFd0d3Z0SUxNMEgxRkdzdldja29sYkJDWDB3Qk80Q2Q3T3p3bjJyVHcKZzVaTHMyRnAxMURUZGtHWmxKSlNzMHNyN1h4QjE5TFEyQU5wbHUyZUthUDJLMHo3UFIrMzQ3WE5sSkVkQWdNQgpBQUdqUWpCQU1BNEdBMVVkRHdFQi93UUVBd0lCcGpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUzVrQk9yMFFXVmdINi9xMkUxNjNrZGdpU1VJekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBWUVBWExYYzRFMlEKQytVazhHOGlLbjI5V0NaQkdBeHpYUkxkcWJ4VDhvRUVTMFdOZWtBWlFWandEQnFOVmpMdDlxeGEyazBJK0FxMApCOUlZdDVTTDR1S3J1RWVSYnNrSlI5WEduOFIwOUFqaklrVkdzQ0NvOVJyVW9qQ0M4QXZudjJwMnIrTG5JU2U5CmdRVjJRRU9Cc1pwZTV2WHJ2Vm05K3ZiazVpbnBrOXlYc3FwNEdZeVN6NHF1ZUg4Q0c3T0hJaTMxSFB4akhSN0kKbGRWRVQwZURRbzZlKzlIcm1kWUpWc015Wm1abDJ4L2JnQUplQ1dIazVLWUFQL3N3WmdOdExPaXljRTZQTG9zZQpZWG1BWTN3OHpsMVNsRGpoamtPQWRmdWJRSjNxQXJYaFFsSVV4RTVIQzIwMXY0dytNN2x3NEVOSFczS3V3OGVNCmcrRXhpcjFDbW9ycCsxVXJSRlM5TkZwa0loWEw5dDYrb0d6c2RCVk50ZTVvTXhuSFMzQnpRbkVQMUlXdll2b1MKd3ByaVdweG1DZVZ2V3Y1dDFhK05MTmNSQnBJTUNjMlprQkh1QTgxSVM3TmY2QzhxcE01NlB3SVJ5ME9DQ3h3dwozRXE4MEI3T0JEcFRBUFAySUtzVnZtbUtXbUhnV0pjUjNkaHhJS1UvYysrQUZ6VnRlblpqbDFhcAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg::", + "TEST_CLUSTER_AUTH_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlFlckRmSzZ2dXdITDVKblFqb0E5aVAtNzNhRG9Nd0J6N0VycnY5VGkzZGcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InRlc3QtdXNlcjEtYWRtaW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoidGVzdC11c2VyMS1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImQxN2YzZWY0LWI0YWItNDFlYi04ZDJiLWM4ZGNhMmYzNTAyMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OnRlc3QtdXNlcjEtYWRtaW4ifQ.s1S_Y6eYZjAp989OsCqHlKpHAMb2hF8qBmpA6W9YMEKWEduqqRrTG2uQ7WMyuJM8chCKcHJmeBXJnaRH6vfhewNhQshpqtBuPKJFdsAvCPWXy6Pm_dvBOpC5ccZQcqyJe4KoucIAj8O3iWPQAk6f3k4N7o2khMdhwaZEf5jjrr84fvVFxtOBmekiVTOcAT6eDPV9q2jD9YtWEH_dKphpsmCT1zYPSeNoM7AXGP0N1fNRQuRqqa1HP5-PXy2JU7SuazpXmBNNhIuYIxPNfpn2iRLGG_xTY6RnwGyT8EWZ5OMp0f0Z9xhVI-YQk9MC1WNvZp8ug6Q-WUSVXyuJBrYn2rApI9MEwZ4DJryp3SDM-T_xx9AkZzSr3G45c6UZhiik8FKZJvE38uqHJdntPn4Zw9pd3A6vDmPEGQNm7GONubvWzWMsN9b0x6BgY-9Ht9u3PBElCws3giMjYOLgIOuvYyDXa5UtAP9bwAe0A5l1Ko3gAlbe2U-Zp0BHM7EZ4RyDf-tFJQGrgdFHPbfeN8ewVQB43gJDyX1fq-a24K9GmSJo1BLXCRY4J8L2Cnq7Uen7ngpo4mN2PlZxqc0H7mh-rmzNdrN-akJdPGa0mKfD9tUIc0LSQwjK9x-mzLvEdSK11lVs3cTK3izZ6iCWYtbpGOHAaljb9r-DiDRBNNghygU", + "MODELS_CONFIG_FILE_PATH": "/Users/I540130/go/kyma-companion/config/config.json", + + "LANGFUSE_HOST": "https://langfuse.mur-nats.kymatunas.shoot.canary.k8s-hana.ondemand.com", + "LANGFUSE_SECRET_KEY": "sk-lf-5db4a607-33cd-4032-bad1-4b73e648fb12", + "LANGFUSE_PUBLIC_KEY": "pk-lf-531cae1b-ee40-4792-a6f8-fc8b0d5a25e1", + + "DATABASE_URL": "75fd286d-e18a-466c-b815-6ea6df0a73db.hana.canary-eu10.hanacloud.ondemand.com", + "DATABASE_USER": "AIFORCE", + "DATABASE_PASSWORD": "-6 Config: # Get the absolute path of the current file current_file_path = Path(__file__).resolve() - target_config_file = os.environ.get("CONFIG_PATH", "config/config.yml") + target_config_file = os.environ.get("CONFIG_PATH", "config/config.json") # Find the config file by searching upwards config_file = find_config_file(current_file_path.parent, target_config_file) logger.info(f"Loading models config from: {config_file}") - with config_file.open() as f: - data = yaml.safe_load(f) - config = Config(**data) - return config + try: + with config_file.open() as file: + data = json.load(file) + # Extract only the "models" part of the configuration + models_data = data.get("models", []) + config = Config(models=models_data) + return config + except Exception as e: + logger.error(f"Error loading config from {config_file}: {e}") + raise diff --git a/src/utils/settings.py b/src/utils/settings.py index f7c869a0..667fee80 100644 --- a/src/utils/settings.py +++ b/src/utils/settings.py @@ -1,5 +1,6 @@ # Load all variables from .env into the environment # necessary to implicitly import AI Core Env Vars +import json import logging import os import sys @@ -15,19 +16,43 @@ def is_running_pytest() -> bool: return "pytest" in sys.modules -project_root = os.path.dirname(os.path.abspath(__file__)) +def load_env_from_json(): + """Load the configuration from the config.json file.""" + config_path = os.getenv( + "AICORE_HOME", + os.path.abspath("../../go/src/github.com/kyma-project/kyma-companion/config/config.json") + ) # Default to root config.json. + + if os.path.exists(config_path): + try: + # Load the configuration from the given path and set the environment variables. + with open(config_path, "r") as file: + config_file = json.load(file) + + # Set environment variables for all keys except "models" + for key, value in config_file.items(): + if key != "models": # Skip models + os.environ[key] = str(value) + except Exception as e: + logging.error(f"Error loading config from {config_path}: {e}") + else: + logging.error(f"Config file not found at {config_path}.") + if is_running_pytest(): - # Use .test.env for tests + # For tests use .env.test if available env_path = find_dotenv(".env.test") if env_path and os.path.exists(env_path): config = Config(RepositoryEnv(env_path)) load_dotenv(env_path) else: - logging.warning("No .test.env file found. Using .env file.") - load_dotenv() + # Load the config.json if no .env.test file is found + logging.warning("No .test.env file found. Using config.json.") + load_env_from_json() + else: - load_dotenv() + # For production load the env variables needed dynamically from the config.json. + load_env_from_json() LOG_LEVEL = config("LOG_LEVEL", default="INFO") # Redis