ARCHIVISE / app /config.py
UNI12345's picture
feat(config): support OPENROUTER_API_KEY, GROQ_API_KEY, and GEMINI_API_KEY loaded from .env
6e39ce4
Raw
History Blame Contribute Delete
3.91 kB
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
DATABASE_URL: str = "postgresql://postgres.lxqysvqlhajjweorgztt:Sweaty%40ashok1@aws-1-ap-southeast-2.pooler.supabase.com:6543/postgres"
# Redis
REDIS_URL: str = "redis://localhost:6379/0"
# NVIDIA NIM APIs
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 Auth Settings
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"
# Storage API (Supabase Storage S3-Compatible)
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 Settings
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 Limiting
RATE_LIMIT: str = "100/minute"
# Stripe
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 OAuth
GITHUB_CLIENT_ID: str = "Iv23lipw1OEG5Q6myilm"
GITHUB_CLIENT_SECRET: str = "c01eaa49ac9db4e6f40f7ea1f99397964d0a975a"
# Frontend Redirect
FRONTEND_URL: str = "http://localhost:3000"
# OpenRouter/OpenAI/Groq/Gemini API Keys
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()