appinitdev commited on
Commit
843aafe
·
verified ·
1 Parent(s): f2a0a32

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -9
app.py CHANGED
@@ -10,13 +10,13 @@ from pydantic import BaseModel
10
  API_URL = "https://api-inference.huggingface.co/models/joyfox/Qwen-Image-Edit-Cosplay"
11
  HF_TOKEN = os.getenv("HF_TOKEN")
12
 
13
- # 2. Inicializamos FastAPI
14
- app = fastapi.FastAPI()
15
 
16
  class CosplayPayload(BaseModel):
17
  data: list[str]
18
 
19
- @app.post("/api/predict")
20
  async def fusionar_cosplay(payload: CosplayPayload):
21
  if not HF_TOKEN:
22
  print("[-] ERROR: El HF_TOKEN no está configurado en las variables (Secrets) del Space.")
@@ -32,7 +32,7 @@ async def fusionar_cosplay(payload: CosplayPayload):
32
  data_uri_real = payload.data[0] if payload.data[0].startswith("data:") else f"data:image/jpeg;base64,{payload.data[0]}"
33
  data_uri_ref = payload.data[1] if payload.data[1].startswith("data:") else f"data:image/jpeg;base64,{payload.data[1]}"
34
 
35
- prompt_texto = "把图2中动漫人物中的发型,服饰和装扮道具迁移到图1的真实人物,图1真实人物保持高度人脸一致性"
36
 
37
  # Payload JSON limpio para la API de Inferencia Serverless
38
  json_payload = {
@@ -52,7 +52,7 @@ async def fusionar_cosplay(payload: CosplayPayload):
52
 
53
  print("[+] Enviando petición a la API de Inferencia de Hugging Face mediante el puente de Gradio...")
54
 
55
- # Al estar bajo el SDK de Gradio, esta petición ya NO lanzará NameResolutionError
56
  respuesta = requests.post(API_URL, headers=headers, json=json_payload, timeout=110)
57
  print(f"[+] Respuesta recibida. Código de estado: {respuesta.status_code}")
58
 
@@ -76,11 +76,11 @@ async def fusionar_cosplay(payload: CosplayPayload):
76
  print("=====================================================\n")
77
  raise fastapi.HTTPException(status_code=500, detail=f"Crash interno: {str(e)}")
78
 
79
- # 3. Interfaz de Gradio Dummy (Obligatoria para que Hugging Face valide el Space)
80
  with gr.Blocks() as demo:
81
  gr.Markdown("# Cosplay API Bridge Active 🎭")
82
  gr.Markdown("Este Space está corriendo un servidor FastAPI en segundo plano optimizado para peticiones desde Android.")
83
 
84
- # 4. ¡MAGIA! Montamos FastAPI dentro del entorno de Gradio
85
- # Esto hace que FastAPI herede todas las configuraciones y accesos de red del contenedor de Gradio.
86
- app = gr.mount_gradio_app(app, demo, path="/")
 
10
  API_URL = "https://api-inference.huggingface.co/models/joyfox/Qwen-Image-Edit-Cosplay"
11
  HF_TOKEN = os.getenv("HF_TOKEN")
12
 
13
+ # 2. Inicializamos FastAPI de manera independiente
14
+ io_app = fastapi.FastAPI()
15
 
16
  class CosplayPayload(BaseModel):
17
  data: list[str]
18
 
19
+ @io_app.post("/api/predict")
20
  async def fusionar_cosplay(payload: CosplayPayload):
21
  if not HF_TOKEN:
22
  print("[-] ERROR: El HF_TOKEN no está configurado en las variables (Secrets) del Space.")
 
32
  data_uri_real = payload.data[0] if payload.data[0].startswith("data:") else f"data:image/jpeg;base64,{payload.data[0]}"
33
  data_uri_ref = payload.data[1] if payload.data[1].startswith("data:") else f"data:image/jpeg;base64,{payload.data[1]}"
34
 
35
+ prompt_texto = "把图2中动漫人物中的发型,服饰 and 装扮道具迁移到图1的真实人物,图1真实人物保持高度人脸一致性"
36
 
37
  # Payload JSON limpio para la API de Inferencia Serverless
38
  json_payload = {
 
52
 
53
  print("[+] Enviando petición a la API de Inferencia de Hugging Face mediante el puente de Gradio...")
54
 
55
+ # Petición HTTP POST síncrona
56
  respuesta = requests.post(API_URL, headers=headers, json=json_payload, timeout=110)
57
  print(f"[+] Respuesta recibida. Código de estado: {respuesta.status_code}")
58
 
 
76
  print("=====================================================\n")
77
  raise fastapi.HTTPException(status_code=500, detail=f"Crash interno: {str(e)}")
78
 
79
+ # 3. Interfaz de Gradio (Obligatoria para que Hugging Face mantenga vivo el contenedor)
80
  with gr.Blocks() as demo:
81
  gr.Markdown("# Cosplay API Bridge Active 🎭")
82
  gr.Markdown("Este Space está corriendo un servidor FastAPI en segundo plano optimizado para peticiones desde Android.")
83
 
84
+ # 4. Montamos la aplicación de FastAPI dentro de la instancia de Gradio 'demo'
85
+ # El objeto final resultante se debe mapear de nuevo a la aplicación nativa para que la plataforma lo detecte.
86
+ app = gr.mount_gradio_app(io_app, demo, path="/")