AresAI / app.py
JrizzDevvv182's picture
Upload app.py
f0edb92 verified
import gradio as gr
from diffusers import DiffusionPipeline
import torch
from flask import Flask, request, jsonify
import threading
import io
import base64
from PIL import Image
# Carregamento do pipeline do modelo
pipe = DiffusionPipeline.from_pretrained(
"HiDream-ai/HiDream-E1-Full",
torch_dtype=torch.float16,
)
pipe = pipe.to("cuda")
# Flask app para API
app = Flask(__name__)
def image_to_base64(image: Image.Image) -> str:
buffered = io.BytesIO()
image.save(buffered, format="PNG")
return base64.b64encode(buffered.getvalue()).decode()
@app.route("/v1/texttoimage/completions", methods=["POST"])
def text_to_image():
data = request.json
prompt = data.get("prompt", "").strip()
if not prompt:
return jsonify({"error": "Prompt vazio"}), 400
result = pipe(prompt)
img_b64 = image_to_base64(result.images[0])
return jsonify({"image_base64": img_b64})
# Executa Flask em uma thread separada
def run_flask():
app.run(host="0.0.0.0", port=7860)
threading.Thread(target=run_flask, daemon=True).start()
# Gradio interface
def gerar_imagem_gradio(prompt):
result = pipe(prompt)
return result.images[0]
with gr.Blocks() as demo:
gr.Markdown("## Chat Text-to-Image com API Flask integrada")
gr.Markdown("API disponível em: `http://localhost:7860/v1/texttoimage/completions`")
chat = gr.Chatbot()
txt = gr.Textbox(placeholder="Digite seu prompt aqui e pressione Enter", show_label=False)
def responder(prompt, chat_history):
img = gerar_imagem_gradio(prompt)
chat_history = chat_history + [(prompt, img)]
return chat_history, ""
txt.submit(responder, inputs=[txt, chat], outputs=[chat, txt])
demo.launch(server_name="0.0.0.0", server_port=7860)