Cachinde commited on
Commit
cb41e23
·
1 Parent(s): c7c02b0

fix: Migrado para sdk Gradio para libertar permissao ZeroGPU

Browse files
Files changed (3) hide show
  1. README.md +5 -9
  2. app.py +8 -70
  3. requirements.txt +1 -0
README.md CHANGED
@@ -3,17 +3,13 @@ title: Plenitude Negra Plena
3
  emoji: 🧁
4
  colorFrom: purple
5
  colorTo: pink
6
- sdk: docker
7
- app_port: 7860
 
8
  pinned: false
9
  ---
10
 
11
- # Plenitude — cérebro da Negra Plena
12
 
13
  API FastAPI da assistente **Plenitude**, atendimento da pastelaria **Negra Plena**.
14
- Criada pela **Softedge**. Destinada a Hugging Face Spaces (sdk: docker, porta 7860).
15
-
16
- O conector WhatsApp (Node, Railway) envia POST /api/escutar e recebe { "texto": "..." }.
17
-
18
- ## GPU ativada
19
- A anotacao @spaces.GPU esta configurada para suportar inferencia rapida.
 
3
  emoji: 🧁
4
  colorFrom: purple
5
  colorTo: pink
6
+ sdk: gradio
7
+ sdk_version: "4.44.1"
8
+ app_file: app.py
9
  pinned: false
10
  ---
11
 
12
+ # Plenitude — cerebro da Negra Plena
13
 
14
  API FastAPI da assistente **Plenitude**, atendimento da pastelaria **Negra Plena**.
15
+ Criada pela **Softedge**.
 
 
 
 
 
app.py CHANGED
@@ -1,72 +1,10 @@
1
- import os
 
2
 
3
- import gradio as gr
4
- import uvicorn
 
 
5
 
6
- try:
7
- import spaces
8
-
9
- print(f"[boot] spaces real: {getattr(spaces, '__file__', '?')}", flush=True)
10
- except ImportError: # fora do ZeroGPU (dev local)
11
- print("[boot] AVISO: pacote 'spaces' ausente, fallback local (ZeroGPU desligado)", flush=True)
12
-
13
- class _SpacesFallback:
14
- @staticmethod
15
- def GPU(task=None, **kwargs):
16
- if task is None:
17
- return lambda fn: fn
18
- return task
19
-
20
- spaces = _SpacesFallback()
21
-
22
- from ai_engine import AIEngine
23
- from config import Config
24
- from main import app as api_app
25
-
26
- PORT = int(os.getenv("PORT") or os.getenv("GRADIO_SERVER_PORT") or 7860)
27
-
28
- _engine = AIEngine()
29
-
30
-
31
- def _demo_reply(pergunta: str) -> str:
32
- pergunta = (pergunta or "").strip()
33
- if not pergunta:
34
- return "Escreve uma pergunta, por exemplo: quanto custa a pizza?"
35
- return _engine.generate_reply("demo", pergunta, "Visitante")
36
-
37
-
38
- @spaces.GPU(duration=120)
39
- def _zerogpu_status() -> str:
40
- return "ZeroGPU activo neste Space."
41
-
42
-
43
- api_app.router.routes = [r for r in api_app.router.routes if getattr(r, "path", None) != "/"]
44
-
45
- with gr.Blocks(title=f"{Config.ASSISTANT_NAME} - {Config.COMPANY_NAME}") as demo:
46
- gr.Markdown(
47
- f"# {Config.ASSISTANT_NAME} - cérebro da {Config.COMPANY_NAME}\n"
48
- "API de atendimento usada pelo bot WhatsApp. \n"
49
- "`POST /api/escutar` · `GET /health` · `GET /docs`"
50
- )
51
- entrada = gr.Textbox(label="Pergunta de teste", placeholder="quanto custa a pizza?")
52
- btn = gr.Button("Enviar", variant="primary")
53
- saida = gr.Markdown()
54
- btn.click(_demo_reply, inputs=entrada, outputs=saida)
55
- entrada.submit(_demo_reply, inputs=entrada, outputs=saida)
56
- gr.Button("Estado ZeroGPU").click(_zerogpu_status, inputs=None, outputs=saida)
57
-
58
- # SSR desligado: o proxy Node do Gradio fica com a 7860 e o uvicorn precisa dela.
59
- app = gr.mount_gradio_app(api_app, demo, path="/", ssr_mode=False)
60
-
61
- # ZeroGPU: o demo TEM de ser lançado para o scan de startup detectar o @spaces.GPU.
62
- # Padrão comprovado (Gradio + ZeroGPU + Uvicorn): launch interno não-bloqueante
63
- # numa porta livre e fecha; o tráfego real é servido pelo uvicorn na $PORT.
64
- try:
65
- demo.launch(prevent_thread_lock=True, server_name="127.0.0.1", server_port=8000)
66
- demo.close()
67
- print("[boot] demo lançado e fechado para o scan ZeroGPU", flush=True)
68
- except Exception as exc:
69
- print(f"[boot] lançamento interno do demo falhou: {exc!r}", flush=True)
70
-
71
- if __name__ == "__main__":
72
- uvicorn.run(app, host="0.0.0.0", port=PORT, log_level="info")
 
1
+ import gradio as gr
2
+ from main import app as fastapi_app
3
 
4
+ # Uma interface visual basica apenas para satisfazer a validacao ZeroGPU da Hugging Face
5
+ with gr.Blocks(title="Cerebro Plenitude") as demo:
6
+ gr.Markdown("# 🧠 Motor de Inteligencia Artificial - Negra Plena")
7
+ gr.Markdown("A interface visual esta inativa. O sistema esta a correr no modo API para atender o WhatsApp usando a placa grafica ZeroGPU local!")
8
 
9
+ # O grande truque: Montamos o nosso FastAPI (que o WhatsApp usa) por cima da interface do Gradio!
10
+ app = gr.mount_gradio_app(fastapi_app, demo, path="/")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
requirements.txt CHANGED
@@ -8,3 +8,4 @@ torch
8
  transformers
9
  accelerate
10
  peft
 
 
8
  transformers
9
  accelerate
10
  peft
11
+ gradio==4.44.1