om4r932's picture
Update app.py
f5702a3 verified
import os
import gradio as gr
from fastapi import FastAPI, Request, HTTPException
from huggingface_hub import HfApi
from dotenv import load_dotenv
import uvicorn
from threading import Thread
load_dotenv()
# Configuration
HF_TOKEN = os.getenv("HF_TOKEN")
WEBHOOK_SECRET = os.getenv("WEBHOOK_SECRET")
SPACES_TO_RESTART = [
"OrganizedProgrammers/DocFinder",
"OrganizedProgrammers/SpecSplitter"
]
api = HfApi()
# FastAPI pour les webhooks
fastapi_app = FastAPI()
@fastapi_app.post("/webhook")
async def handle_webhook(request: Request):
# Vérification du secret
received_secret = request.headers.get("X-Webhook-Secret")
if received_secret != WEBHOOK_SECRET:
raise HTTPException(status_code=401, detail="Invalid secret")
try:
payload = await request.json()
print(f"📦 Payload reçu: {payload}")
except Exception as e:
raise HTTPException(status_code=400, detail=f"Invalid JSON: {str(e)}")
# Vérifier si c'est une mise à jour de dataset
if (payload.get("repo", {}).get("type") == "dataset" and
payload.get("event", {}).get("action") == "update"):
print(f"✅ Dataset {payload['repo']['name']} mis à jour!")
# Redémarrer tous les Spaces liés
for space_id in SPACES_TO_RESTART:
try:
api.restart_space(space_id, token=HF_TOKEN)
print(f"✅ Space redémarré: {space_id}")
except Exception as e:
print(f"❌ Erreur redémarrage {space_id}: {e}")
return {"message": "Spaces mis à jour avec succès"}
return {"message": "Aucune action nécessaire"}
@fastapi_app.get("/health")
async def health_check():
return {
"status": "healthy",
"spaces": SPACES_TO_RESTART
}
# Interface Gradio
with gr.Blocks() as gradio_app:
gr.Markdown("""
# 🔄 Dataset Update Webhook Server
**Status**: Serveur actif et en attente de webhooks
**URL du webhook**: `/webhook`
**Spaces surveillés**:
- OrganizedProgrammers/DocFinder
- OrganizedProgrammers/SpecSplitter
""")
# Monter Gradio sur FastAPI
fastapi_app = gr.mount_gradio_app(fastapi_app, gradio_app, path="/")
# Lancer le serveur
if __name__ == "__main__":
uvicorn.run(fastapi_app, host="0.0.0.0", port=7860)