Iacoder / app.py
Erinaldorodrigues's picture
Update app.py
6959a84 verified
Raw
History Blame Contribute Delete
1.88 kB
import spaces
import torch
import gradio as gr
from fastapi import FastAPI
from gradio.routes import mount_gradio_app
from pydantic import BaseModel
from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL = "Qwen/Qwen2.5-Coder-7B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
model = None
@spaces.GPU
def gerar(prompt):
global model
if model is None:
print("Carregando modelo...")
model = AutoModelForCausalLM.from_pretrained(
MODEL,
torch_dtype=torch.float16,
device_map="auto"
)
model.eval()
entrada = tokenizer(
prompt,
return_tensors="pt"
).to(model.device)
with torch.no_grad():
saida = model.generate(
**entrada,
max_new_tokens=1024,
temperature=0.2
)
texto = tokenizer.decode(
saida[0],
skip_special_tokens=True
)
return texto
class Chat(BaseModel):
model: str
messages: list
api = FastAPI()
@api.get("/status")
def status():
return {
"status": "online",
"model": MODEL
}
@api.post("/v1/chat/completions")
def completions(req: Chat):
prompt = ""
for msg in req.messages:
prompt += msg["role"] + ": "
prompt += msg["content"] + "\n"
resposta = gerar(prompt)
return {
"id": "qwen",
"object": "chat.completion",
"model": MODEL,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": resposta
},
"finish_reason": "stop"
}
]
}
demo = gr.Interface(
fn=gerar,
inputs="text",
outputs="text",
title="Qwen2.5 Coder Bridge"
)
app = mount_gradio_app(
api,
demo,
path="/"
)