Spaces:
Sleeping
Sleeping
| # Configuration module for LLM Code Deployment API | |
| import os | |
| import hashlib | |
| import secrets | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| class Config: | |
| """Configuration settings for the deployment API""" | |
| # API Configuration | |
| SECRET_KEY = os.environ.get('SECRET_KEY', secrets.token_urlsafe(32)) | |
| VALID_SECRETS = os.environ.get('VALID_SECRETS', '').split(',') | |
| # GitHub Configuration | |
| GITHUB_TOKEN = os.environ.get('GITHUB_TOKEN') | |
| GITHUB_USERNAME = os.environ.get('GITHUB_USERNAME') | |
| GITHUB_ORG = os.environ.get('GITHUB_ORG') # Optional: use org instead of personal | |
| # LLM Configuration | |
| OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY') | |
| OPENAI_BASE_URL = os.environ.get('OPENAI_BASE_URL', 'https://api.openai.com/v1') | |
| LLM_MODEL = os.environ.get('LLM_MODEL', 'gpt-4o-mini') | |
| # Deployment Settings | |
| MAX_DEPLOYMENT_TIME = int(os.environ.get('MAX_DEPLOYMENT_TIME', 600)) # 10 minutes | |
| RETRY_ATTEMPTS = int(os.environ.get('RETRY_ATTEMPTS', 5)) | |
| TEMP_DIR = os.environ.get('TEMP_DIR', './temp') | |
| # GitHub Pages Settings | |
| PAGES_BRANCH = os.environ.get('PAGES_BRANCH', 'main') | |
| PAGES_SOURCE = os.environ.get('PAGES_SOURCE', '/') # or '/docs' | |
| def validate_secret(cls, secret): | |
| """Validate the provided secret against known valid secrets""" | |
| if not secret: | |
| return False | |
| # If no valid secrets configured, accept any non-empty secret (dev mode) | |
| if not cls.VALID_SECRETS or cls.VALID_SECRETS == ['']: | |
| return True | |
| # Check against configured secrets | |
| return secret in cls.VALID_SECRETS | |
| def get_repo_name(cls, task_id, student_email): | |
| """Generate a unique repository name""" | |
| # Create a short hash from email for uniqueness | |
| email_hash = hashlib.md5(student_email.encode()).hexdigest()[:8] | |
| return f"student-task-{task_id}-{email_hash}" | |
| def validate_config(cls): | |
| """Validate that required configuration is present""" | |
| errors = [] | |
| if not cls.GITHUB_TOKEN: | |
| errors.append("GITHUB_TOKEN is required") | |
| if not cls.GITHUB_USERNAME and not cls.GITHUB_ORG: | |
| errors.append("Either GITHUB_USERNAME or GITHUB_ORG is required") | |
| if not cls.OPENAI_API_KEY: | |
| errors.append("OPENAI_API_KEY is required") | |
| return errors | |
| def get_github_owner(cls): | |
| """Get the GitHub owner (org or username)""" | |
| return cls.GITHUB_ORG if cls.GITHUB_ORG else cls.GITHUB_USERNAME |