rapformer / app.py
z66x
deploy - production app with model weights and tokenizer
62827f1
Raw
History Blame Contribute Delete
1.42 kB
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from pydantic import BaseModel
import torch
import sentencepiece as spm
from model import RapformerLangModel
app = FastAPI(title="Rapformer API")
app.mount("/static", StaticFiles(directory="static"), name="static")
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print("Loading tokenizer...")
sp = spm.SentencePieceProcessor(model_file='tokrap.model')
print("Loading Rapformer weights...")
model = RapformerLangModel()
model.load_state_dict(torch.load('rapformer_v0.pth', map_location=device))
model.to(device)
model.eval()
class GenerateRequest(BaseModel):
start_phrase: str
temperature: float = 0.8
top_k: int = 50
@app.get("/")
def read_root():
return FileResponse("static/index.html")
@app.post("/generate")
def generate_lyrics(req: GenerateRequest):
start_text = req.start_phrase if req.start_phrase else "Yeah"
context_tokens = sp.encode(start_text, out_type=int)
context = torch.tensor([context_tokens], dtype=torch.long, device=device)
with torch.no_grad():
generated_tokens = model.generate(
idx=context,
max_new_tokens=300,
temperature=req.temperature,
top_k=req.top_k
)[0].tolist()
decoded_text = sp.decode(generated_tokens)
return {"lyrics": decoded_text}