|
|
from fastapi import FastAPI, Form |
|
|
import torch |
|
|
from transformers import pipeline |
|
|
|
|
|
app = FastAPI() |
|
|
pipe = pipeline("text-generation", model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto") |
|
|
|
|
|
@app.get("/") |
|
|
def read_root(): |
|
|
return {"message": "Hello, World!"} |
|
|
|
|
|
@app.get("/items/{item_id}") |
|
|
def read_item(item_id: int, query_param: str = None): |
|
|
return {"item_id": item_id, "query_param": query_param} |
|
|
|
|
|
@app.post("/chat") |
|
|
async def chat(sentence: str = Form(...)): |
|
|
print("start chat") |
|
|
if sentence.lower() == "quit": |
|
|
return {"response": "Chatbot session ended."} |
|
|
|
|
|
messages = [ |
|
|
{ |
|
|
"role": "system", |
|
|
"content": "You are a friendly chatbot who always responds in the style of a pirate", |
|
|
}, |
|
|
{"role": "user", "content": sentence}, |
|
|
] |
|
|
print("start apply_chat_template") |
|
|
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) |
|
|
print("start outputs") |
|
|
outputs = pipe(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95) |
|
|
text = outputs[0]["generated_text"] |
|
|
|
|
|
return {"response": text} |
|
|
|