#!/usr/bin/env bash set -euo pipefail ROOT=/root/projects/website-builder-backend-clean cd "$ROOT" echo "========================================" echo "Rebuilding Dolor3V Fallback Layer" echo "========================================" cp backend/llm/providers/fallback.py \ backend/llm/providers/fallback.py.bak.$(date +%Y%m%d_%H%M%S) 2>/dev/null || true cat > backend/llm/providers/fallback.py <<'PY' """ Dolor3V Production Fallback Single-provider deployment. Only Hugging Face is registered. """ from typing import Any from .huggingface import HuggingFaceProvider _PROVIDER = HuggingFaceProvider() async def complete_with_fallback( prompt: str, **kwargs: Any, ): """ Unified completion entrypoint. The runtime intentionally exposes only one provider. """ if hasattr(_PROVIDER, "complete"): return await _PROVIDER.complete(prompt=prompt, **kwargs) if hasattr(_PROVIDER, "generate"): return await _PROVIDER.generate(prompt=prompt, **kwargs) raise RuntimeError( "HuggingFaceProvider exposes neither " "'complete' nor 'generate'." ) def get_provider(): return _PROVIDER def providers(): return [_PROVIDER] PY echo echo "[1/4] Compile" python3 -m py_compile \ backend/llm/providers/fallback.py echo echo "[2/4] Import" python3 <<'PY' from backend.llm.providers.fallback import ( complete_with_fallback, get_provider, providers, ) print("Fallback:", complete_with_fallback) print("Provider:", type(get_provider()).__name__) print("Providers:", len(providers())) PY echo echo "[3/4] Search removed providers" grep -RInE \ "GroqProvider|OpenRouterProvider|GeminiProvider|OllamaProvider|LocalProvider" \ backend/llm/providers/fallback.py || true echo echo "[4/4] Finished" echo echo "========================================" echo "Dolor3V Fallback Ready" echo "========================================"