multi-agent-system / env_loader.py
GitHub Bot
Update to use DashScope credentials securely via environment variables
35db168
Raw
History Blame Contribute Delete
4.04 kB
"""Environment variable loader with HF Secrets support."""
import os
import logging
from typing import Optional
logger = logging.getLogger(__name__)
class EnvironmentLoader:
"""Loads environment variables with support for HF Secrets."""
@staticmethod
def get_secret(key: str, default: Optional[str] = None) -> str:
"""Get environment variable or secret.
In Hugging Face Spaces, secrets are injected as environment variables.
This function provides a consistent interface for accessing them.
Args:
key: Environment variable name
default: Default value if not found
Returns:
Environment variable value or default
Raises:
ValueError: If required variable is missing and no default provided
"""
value = os.getenv(key, default)
if value is None:
raise ValueError(
f"Required environment variable '{key}' is not set. "
f"Please add it to HF Secrets in your Space settings."
)
if not value:
logger.warning(f"Environment variable '{key}' is empty")
return value
@staticmethod
def validate_secrets() -> bool:
"""Validate that all required secrets are configured.
Returns:
True if all required secrets are present, False otherwise
"""
required_secrets = [
"HUGGINGFACE_TOKEN",
]
dashscope_secrets = [
"DASHSCOPE_API_KEY",
"DASHSCOPE_BASE_URL",
]
optional_secrets = [
"HUGGINGFACE_DATASET",
"MODEL_NAME",
]
all_valid = True
# Check required secrets
for secret in required_secrets:
value = os.getenv(secret)
if not value:
logger.error(f"Missing required secret: {secret}")
all_valid = False
else:
logger.info(f"✓ {secret} configured")
# Check DashScope secrets (without exposing values)
logger.info("\nDashScope Configuration:")
dashscope_valid = True
for secret in dashscope_secrets:
value = os.getenv(secret)
if value:
logger.info(f"✓ {secret} configured (***hidden***)")
else:
logger.warning(f"⚠ {secret} not configured")
dashscope_valid = False
if not dashscope_valid:
logger.warning(
"\n⚠ DashScope credentials not fully configured. "
"They will be set via HF API during Space deployment."
)
# Check optional secrets
for secret in optional_secrets:
value = os.getenv(secret)
if value:
logger.info(f"✓ {secret} configured")
else:
logger.info(f"ℹ {secret} not configured (using default)")
return all_valid
@staticmethod
def get_api_config() -> dict:
"""Get API configuration from environment.
Returns:
Dictionary with API configuration
"""
return {
"openrouter_api_key": os.getenv("DASHSCOPE_API_KEY", ""),
"openrouter_base_url": os.getenv(
"DASHSCOPE_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"
),
"model_name": os.getenv("MODEL_NAME", "qwen3.7-plus"),
"huggingface_token": os.getenv("HUGGINGFACE_TOKEN", ""),
"huggingface_dataset": os.getenv(
"HUGGINGFACE_DATASET", "factorstudios/Pipeline"
),
}
# Validate secrets on import
def validate_on_startup():
"""Validate secrets when module is imported."""
if not EnvironmentLoader.validate_secrets():
logger.warning(
"Some secrets are not configured. "
"The application may not work correctly. "
"Please add missing secrets to HF Secrets in your Space settings."
)