|
from fastapi import FastAPI, Request, Form |
|
from fastapi.responses import HTMLResponse, JSONResponse |
|
from fastapi.templating import Jinja2Templates |
|
from fastapi.staticfiles import StaticFiles |
|
from fastapi.middleware.cors import CORSMiddleware |
|
from pydantic import BaseModel |
|
import torch |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
app = FastAPI() |
|
|
|
|
|
templates = Jinja2Templates(directory="templates") |
|
|
|
|
|
personaje = "rias" |
|
user="user" |
|
chat={ |
|
personaje: f"hola soy {personaje} no esperaba verte por aqui", |
|
user:f"hola " |
|
} |
|
|
|
app.mount("/static", StaticFiles(directory="static"), name="static") |
|
|
|
|
|
@app.get("/", response_class=HTMLResponse) |
|
async def read_html(request: Request): |
|
return templates.TemplateResponse("listapersonajes.html", {"request": request}) |
|
|
|
|
|
@app.get("/personajes/{personaje}", response_class=HTMLResponse) |
|
async def personaje_detalle(request: Request, personaje: str): |
|
|
|
context = { |
|
"character_image": f"{personaje}.jpg" , |
|
"character_name": personaje.capitalize() |
|
|
|
} |
|
return templates.TemplateResponse("chat.html", {"request": request, **context}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
model_name = "nakodanei/Blue-Orchid-2x7b" |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
model = AutoModelForCausalLM.from_pretrained( |
|
model_name, |
|
device_map="auto", |
|
torch_dtype=torch.float16 |
|
) |
|
|
|
@app.post("/personajes/{personaje}/chat", response_class=HTMLResponse) |
|
async def chat_with_character(request: Request, personaje: str, user_input: str): |
|
prompt = f""" |
|
### Instruction: |
|
You are {personaje}, a sexy girl who has been dating the user for 2 months. |
|
|
|
### Input: |
|
User: {user_input} |
|
|
|
### Response: |
|
Character: |
|
""" |
|
inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu") |
|
outputs = model.generate( |
|
**inputs, |
|
max_new_tokens=500, |
|
pad_token_id=tokenizer.eos_token_id, |
|
do_sample=True, |
|
temperature=0.7 |
|
) |
|
generated_response = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
return {"response": generated_response} |
|
|