xrayvision-backend / app /config.py
zohaibcodez's picture
initial deploy
ce4fddb
Raw
History Blame Contribute Delete
2.26 kB
"""Centralized application settings loaded from environment variables."""
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field
from pydantic.aliases import AliasChoices
from functools import lru_cache
import os
class Settings(BaseSettings):
# Supabase
# Accepts both SUPABASE_KEY and SUPABASE_SERVICE_ROLE_KEY so either
# naming convention works in Render / HuggingFace Spaces env vars.
supabase_url: str = "https://your-project.supabase.co"
supabase_key: str = Field(
"your-supabase-service-role-key",
validation_alias=AliasChoices("SUPABASE_KEY", "SUPABASE_SERVICE_ROLE_KEY"),
)
supabase_anon_key: str = "your-supabase-anon-key"
# OpenRouter
openrouter_api_key: str = ""
openrouter_model: str = "z-ai/glm-4.5-air:free"
openrouter_site_url: str = "http://localhost:5173"
openrouter_app_name: str = "XRayVision AI"
openrouter_timeout_seconds: float = 60.0
# Hugging Face
hf_token: str | None = None
# JWT
jwt_secret: str = "change-this-to-a-random-secret-string"
jwt_algorithm: str = "HS256"
jwt_expiry_hours: int = 24
# Model Config
yolo_weights_path: str = "models/fracture_yolov8.pt"
allow_generic_yolo_weights: bool = False
# Set FRACTURE_CLASSIFIER_ENABLED=false on low-RAM hosts (saves ~400 MB).
fracture_classifier_enabled: bool = True
fracture_classifier_model_name: str = "prithivMLmods/Bone-Fracture-Detection"
wound_model_name: str = "PayamFard123/dermaintel-wound-classifier"
confidence_threshold: float = 0.40
# CORS
frontend_url: str = "http://localhost:5173"
# Performance — set DISABLE_PRELOAD=true on free-tier hosts (<=512 MB RAM)
# to avoid OOM on startup. Models will lazy-load on first use instead.
disable_preload: bool = False
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
extra="ignore",
populate_by_name=True,
)
@lru_cache()
def get_settings() -> Settings:
settings = Settings()
if settings.hf_token:
os.environ.setdefault("HF_TOKEN", settings.hf_token)
os.environ.setdefault("HUGGINGFACE_HUB_TOKEN", settings.hf_token)
return settings