Srikanthgoud7's picture
Update app.py
5c8c783 verified
Raw
History Blame Contribute Delete
2.54 kB
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
# -------------------------------------------------
# Configuration
# -------------------------------------------------
BASE_MODEL = "Qwen/Qwen2.5-1.5B-Instruct"
LORA_REPO = "Srikanthgoud7/qwen2.5-customer-support-lora"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
# -------------------------------------------------
# Load tokenizer & model
# -------------------------------------------------
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
base_model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL,
device_map="auto",
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32
)
model = PeftModel.from_pretrained(base_model, LORA_REPO)
model.eval()
# -------------------------------------------------
# Chat function (DYNAMIC INPUT)
# -------------------------------------------------
def chat(user_input, history):
"""
user_input: current user message
history: list of (user, assistant) tuples
"""
# Build conversation prompt
conversation = ""
for u, a in history:
conversation += f"User: {u}\nAssistant: {a}\n"
conversation += f"User: {user_input}\nAssistant:"
inputs = tokenizer(conversation, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=200,
temperature=0.7,
do_sample=True
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Extract only the assistant's latest reply
response = response.split("Assistant:")[-1].strip()
history.append((user_input, response))
return history, history
# -------------------------------------------------
# Gradio Chat UI
# -------------------------------------------------
with gr.Blocks() as demo:
gr.Markdown("## 🤖 Customer Support Chatbot (LoRA + Qwen2.5)")
chatbot = gr.Chatbot()
user_input = gr.Textbox(
placeholder="Type your query here (e.g., Can you cancel my order?)",
label="Your Message"
)
state = gr.State([])
send_btn = gr.Button("Send")
clear_btn = gr.Button("Clear Chat")
send_btn.click(
fn=chat,
inputs=[user_input, state],
outputs=[chatbot, state]
)
clear_btn.click(
fn=lambda: ([], []),
inputs=None,
outputs=[chatbot, state]
)
if __name__ == "__main__":
demo.launch()