| import os |
| from typing import List, Union, Optional |
| from pydantic import AnyHttpUrl, field_validator |
| from pydantic_settings import BaseSettings, SettingsConfigDict |
|
|
| ENV_FILE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), ".env") |
|
|
| class Settings(BaseSettings): |
| APP_NAME: str = "Archvise" |
| DEBUG: bool = False |
| API_VERSION: str = "v1" |
| SECRET_KEY: str = "generate-a-secure-jwt-secret-key-for-production-deployment-2026" |
| SENTRY_DSN: Optional[str] = None |
|
|
| |
| DATABASE_URL: str = "postgresql://postgres.lxqysvqlhajjweorgztt:Sweaty%40ashok1@aws-1-ap-southeast-2.pooler.supabase.com:6543/postgres" |
|
|
| |
| REDIS_URL: str = "redis://localhost:6379/0" |
|
|
| |
| NVIDIA_BASE_URL: str = "https://integrate.api.nvidia.com/v1" |
| NVIDIA_LLAMA_KEY: str = "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" |
| NVIDIA_MISTRAL_KEY: str = "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" |
| NVIDIA_DEEPSEEK_KEY: str = "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" |
| NVIDIA_LLAMA_VISION_KEY: str = "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" |
| NVIDIA_EMBED_KEY: str = "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" |
|
|
| |
| SUPABASE_URL: str = "https://lxqysvqlhajjweorgztt.supabase.co" |
| SUPABASE_ANON_KEY: str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx4cXlzdnFsaGFqandlb3JnenR0Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODA1NDYwNjIsImV4cCI6MjA5NjEyMjA2Mn0.G93M7eXhhtNee04NYmmZBEmIKS1v4Typ7VEk4TkwHnM" |
| SUPABASE_SERVICE_ROLE_KEY: str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx4cXlzdnFsaGFqandlb3JnenR0Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDU0NjA2MiwiZXhwIjoyMDk2MTIyMDYyfQ.7ANfu1C845PV9e0Go3qiSyFvQ_AfCFSP_5aulKxbMdk" |
| SUPABASE_JWT_SECRET: str = "super-secret-jwt-token-with-at-least-32-characters-long" |
|
|
| |
| CLOUDFLARE_R2_ACCOUNT_ID: str = "supabase" |
| CLOUDFLARE_R2_ACCESS_KEY: str = "98d156188e6d2f13bb31061a039fe9b3" |
| CLOUDFLARE_R2_SECRET_KEY: str = "ef8ebc4ca31c6a917ecabd506341750ca7326dacf4218e31a7696a972c3e23c0" |
| CLOUDFLARE_R2_BUCKET: str = "scaleai-audits" |
| CLOUDFLARE_R2_ENDPOINT_URL: str = "https://lxqysvqlhajjweorgztt.storage.supabase.co/storage/v1/s3" |
| CLOUDFLARE_R2_REGION_NAME: str = "ap-southeast-2" |
|
|
| |
| CORS_ORIGINS: Union[str, List[str]] = ["*"] |
|
|
| @field_validator("CORS_ORIGINS") |
| @classmethod |
| def assemble_cors_origins(cls, v: Union[str, List[str]]) -> List[str]: |
| if isinstance(v, str): |
| if v.startswith("[") and v.endswith("]"): |
| import json |
| try: |
| return json.loads(v) |
| except Exception: |
| pass |
| return [x.strip() for x in v.split(",")] |
| return v |
|
|
| |
| RATE_LIMIT: str = "100/minute" |
|
|
| |
| STRIPE_SECRET_KEY: str = "sk_test_placeholder_please_replace" |
| STRIPE_WEBHOOK_SECRET: str = "whsec_placeholder_please_replace" |
| STRIPE_STARTER_PRICE_ID: str = "price_placeholder_starter" |
| STRIPE_PRO_PRICE_ID: str = "price_placeholder_pro" |
|
|
| |
| GITHUB_CLIENT_ID: str = "Iv23lipw1OEG5Q6myilm" |
| GITHUB_CLIENT_SECRET: str = "c01eaa49ac9db4e6f40f7ea1f99397964d0a975a" |
| |
| |
| FRONTEND_URL: str = "http://localhost:3000" |
|
|
| |
| OPENAI_API_KEY: str = "" |
| OPENAI_BASE_URL: str = "https://openrouter.ai/api/v1" |
| OPENROUTER_API_KEY: str = "" |
| GROQ_API_KEY: str = "" |
| GEMINI_API_KEY: str = "" |
|
|
| model_config = SettingsConfigDict( |
| env_file=(".env", ENV_FILE_PATH), |
| env_file_encoding="utf-8", |
| extra="ignore" |
| ) |
|
|
| settings = Settings() |
|
|
|
|