ia / app.py
darkshop's picture
Update app.py
8810acc verified
import os
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import gradio as gr
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime
import threading, uvicorn
# ======================
# CARREGAR MODELO LOCAL
# ======================
MODEL_DIR = "."
print("🚀 Carregando modelo CodeGen 350M Mono...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
model = AutoModelForCausalLM.from_pretrained(MODEL_DIR)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
print("✅ Modelo carregado com sucesso!")
# ======================
# BANCO DE DADOS LOCAL
# ======================
DATABASE_URL = "sqlite:///./local.db"
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
Base = declarative_base()
SessionLocal = sessionmaker(bind=engine)
db = SessionLocal()
class History(Base):
__tablename__ = "history"
id = Column(Integer, primary_key=True, index=True)
prompt = Column(String)
response = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
Base.metadata.create_all(bind=engine)
# ======================
# API FASTAPI
# ======================
app = FastAPI(title="💻 CodeGen 350M Mono API")
class Prompt(BaseModel):
text: str
@app.post("/generate")
def generate_code(data: Prompt):
result = generator(data.text, max_new_tokens=256, num_return_sequences=1)[0]["generated_text"]
db.add(History(prompt=data.text, response=result))
db.commit()
return {"response": result}
@app.post("/upgrade")
def upgrade_model(version: str = "main"):
"""
Atualiza o modelo CodeGen para a versão especificada.
"""
global tokenizer, model, generator
try:
print(f"🚀 Atualizando modelo para a versão: {version}")
# Substitua 'your-username/codegen-350M-mono' pelo seu repositório HF
tokenizer = AutoTokenizer.from_pretrained(f"your-username/codegen-350M-mono", revision=version)
model = AutoModelForCausalLM.from_pretrained(f"your-username/codegen-350M-mono", revision=version)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
print("✅ Modelo atualizado com sucesso!")
return {"status": "success", "message": f"Modelo atualizado para {version}"}
except Exception as e:
raise HTTPException(status_code=500, detail=f"Erro ao atualizar modelo: {e}")
# ======================
# INTERFACE GRADIO
# ======================
def gradio_generate(prompt):
result = generator(prompt, max_new_tokens=256, num_return_sequences=1)[0]["generated_text"]
db.add(History(prompt=prompt, response=result))
db.commit()
return result
def gradio_upgrade():
try:
upgrade_model("main")
return "✅ Modelo atualizado com sucesso!"
except Exception as e:
return f"❌ Erro ao atualizar: {e}"
css = """
body { background-color: #0f111a; color: #fff; font-family: 'Arial', sans-serif; }
.gradio-container { background-color: #1c1f33; border-radius: 12px; padding: 20px; }
h1, h2 { color: #10b981; }
textarea { background-color: #12141f; color: #fff; border-radius: 8px; }
button { background-color: #10b981; color: #fff; border-radius: 6px; }
"""
demo = gr.Blocks(css=css)
with demo:
gr.Markdown("## 💻 CodeGen 350M Mono")
with gr.Row():
prompt_input = gr.Textbox(lines=5, placeholder="Digite seu código ou pergunta...")
with gr.Column():
send_btn = gr.Button("Gerar")
upgrade_btn = gr.Button("Atualizar Modelo")
output = gr.Textbox(label="Resposta do Modelo")
send_btn.click(fn=gradio_generate, inputs=prompt_input, outputs=output)
upgrade_btn.click(fn=gradio_upgrade, inputs=None, outputs=output)
# ======================
# EXECUÇÃO
# ======================
if __name__ == "__main__":
def run_gradio():
demo.launch(server_name="0.0.0.0", server_port=7860, share=False)
threading.Thread(target=run_gradio).start()
uvicorn.run(app, host="0.0.0.0", port=8000)