chat / app.py
bryanpinheiro's picture
Update app.py
ac63131 verified
Raw
History Blame Contribute Delete
2.07 kB
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import gradio as gr
# Initialize model and tokenizer
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3.5-mini-instruct",
trust_remote_code=True,
torch_dtype=torch.float32, # Force float32 for CPU compatibility
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3.5-mini-instruct")
# Create pipeline
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
device=-1, # Force CPU usage (-1 = CPU)
)
def respond(message, chat_history):
# Format the chat history with system prompt
system_prompt = "You are a helpful AI assistant."
messages = [{"role": "system", "content": system_prompt}]
# Add previous chat history
for user_msg, bot_msg in chat_history:
messages.append({"role": "user", "content": user_msg})
messages.append({"role": "assistant", "content": bot_msg})
# Add new user message
messages.append({"role": "user", "content": message})
# Format for the model
formatted_input = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# Generate response
generation_args = {
"max_new_tokens": 200, # Reduced for CPU performance
"temperature": 0.7,
"do_sample": True,
}
output = pipe(formatted_input, **generation_args)
response = output[0]['generated_text']
# Remove the input text from the response
if response.startswith(formatted_input):
response = response[len(formatted_input):]
return response
# Create Gradio interface
demo = gr.ChatInterface(
respond,
chatbot=gr.Chatbot(height=400),
textbox=gr.Textbox(placeholder="Ask me anything...", container=False, scale=7),
title="Phi-3 Mini Chat (CPU)",
examples=["What's 2x + 3 = 7?", "How to make banana smoothie?", "Explain quantum computing simply"],
cache_examples=False,
)
if __name__ == "__main__":
demo.launch()