services: - type: web name: russian-news-classification-api runtime: python plan: free region: oregon healthCheckPath: /health buildCommand: | # Install a lean, API-only dependency set (faster builds + lower RAM). pip install -r requirements-api.txt # Download model weights (recommended: GitHub Release asset URL) if [ -z "$MODEL_URL" ]; then echo "ERROR: MODEL_URL is not set." echo "Set MODEL_URL in Render -> Service -> Environment to the direct .pt Release asset URL." echo "Example: https://github.com///releases/download//distilmbert_lora_10k_v1.pt" exit 1 fi python scripts/download_model.py \ --model-id distilmbert_lora_10k_v1 \ --url "$MODEL_URL" \ --output-path models/distilmbert_lora_10k_v1.pt \ ${MODEL_SHA256:+--sha256 "$MODEL_SHA256"} startCommand: uvicorn api.main:app --host 0.0.0.0 --port $PORT envVars: # Ensure Python can import local top-level packages (api/, models/, utils/, etc.) - key: PYTHONPATH value: /opt/render/project/src - key: PYTHONUNBUFFERED value: "1" - key: MODEL_PATH value: models/distilmbert_lora_10k_v1.pt - key: THRESHOLDS_PATH value: config/thresholds.json - key: TOKENIZER_NAME value: distilbert-base-multilingual-cased # Set these in the Render dashboard (do not hardcode secrets here): # - MODEL_URL: direct URL to .pt file (e.g., GitHub Release asset) # - MODEL_SHA256: optional integrity check # - CORS_ALLOW_ORIGINS: comma-separated list of allowed origins for Streamlit Cloud # - MODEL_DTYPE: optional (float32|float16). Use float16 with an fp16 checkpoint to fit into 512Mi.