chatbot / app.py
clove1002's picture
Update app.py
51828eb verified
Raw
History Blame Contribute Delete
1.44 kB
import os
from fastapi import FastAPI
from pydantic import BaseModel
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# ✅ Use /tmp instead of /data to avoid permission errors
os.environ["TRANSFORMERS_CACHE"] = "/tmp/huggingface"
app = FastAPI()
# Load model and tokenizer
model_id = "microsoft/phi-3-mini-4k-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id, cache_dir="/tmp/huggingface")
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32, cache_dir="/tmp/huggingface")
chat_history = []
class ChatRequest(BaseModel):
message: str
@app.post("/chat")
async def chat(request: ChatRequest):
global chat_history
messages = [{"role": "system", "content": "You are a helpful assistant."}]
for user, bot in chat_history:
messages.append({"role": "user", "content": user})
messages.append({"role": "assistant", "content": bot})
messages.append({"role": "user", "content": request.message})
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=200, do_sample=True, temperature=0.7)
response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
chat_history.append((request.message, response.strip()))
return {"response": response.strip()}