mali08890's picture
Upload 5 files
f3c8548 verified
import gradio as gr
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, pipeline
# Load a lightweight, CPU-friendly model
model_id = "google/flan-t5-base"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
# Pipeline setup
chatbot = pipeline("text2text-generation", model=model, tokenizer=tokenizer)
# Function to format prompt for chat-like interaction
def format_prompt(user_input):
base_prompt = (
"You are Cinco, a helpful assistant that answers customer questions ONLY about product returns, refunds, and exchanges.\n"
"Respond concisely, clearly, and don't repeat the question. If the question is not about returns, politely say so.\n\n"
f"Customer: {user_input}\n"
f"Cinco Assistant:"
)
# Chatbot logic
def chat_fn(user_input, history):
history = history or []
prompt = format_prompt(history, user_input)
response = chatbot(prompt, max_length=256, do_sample=False, clean_up_tokenization_spaces=True)[0]["generated_text"]
# Extract only the latest assistant response
if "Cinco Assistant:" in response:
assistant_reply = response.split("Cinco Assistant:")[-1].strip()
else:
assistant_reply = response.strip()
history.append((user_input, assistant_reply))
return "", history
# Build Gradio UI
with gr.Blocks(title="Cinco Returns Chatbot") as demo:
gr.Markdown("## 🧾 Cinco Returns Chatbot\nAsk anything about returns, refunds, or exchanges.")
chatbot_ui = gr.Chatbot(label="Cinco Assistant", show_label=True)
with gr.Row():
user_input = gr.Textbox(placeholder="Example: Can I return a used item without a receipt?", scale=6)
submit_btn = gr.Button("Send", scale=1)
state = gr.State([])
submit_btn.click(fn=chat_fn, inputs=[user_input, state], outputs=[user_input, chatbot_ui])
user_input.submit(fn=chat_fn, inputs=[user_input, state], outputs=[user_input, chatbot_ui])
if __name__ == "__main__":
demo.launch()