harry85's picture
Upload app.py
44a3a0e verified
# Install the necessary packages
# pip install accelerate transformers fastapi pydantic torch jinja2
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from pydantic import BaseModel
from fastapi import FastAPI
# Initialize the FastAPI app
app = FastAPI(docs_url="/")
# Determine the device to use
device = "cuda" if torch.cuda.is_available() else "cpu"
# Load the model and tokenizer once at startup
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen1.5-0.5B-Chat",
torch_dtype="auto",
device_map="auto"
).to(device)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-0.5B-Chat")
# Define the request model
class RequestModel(BaseModel):
input: str
# Define a greeting endpoint
@app.get("/")
def greet_json():
return {"message": "working..."}
# Define the text generation endpoint
@app.post("/prompt")
def get_response(request: RequestModel):
prompt = request.input
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
return {"generated_text": response}
# To run the FastAPI app, use the command: uvicorn <filename>:app --reload