Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import torch | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| from datasets import load_dataset, Dataset | |
| import pandas as pd | |
| # Load the dataset | |
| ds = load_dataset("bitext/Bitext-customer-support-llm-chatbot-training-dataset") | |
| # Convert the dataset to a pandas DataFrame | |
| df = ds['train'].to_pandas() | |
| # Define labels based on your intent categories | |
| label2id = {label: idx for idx, label in enumerate(df['intent'].unique())} | |
| id2label = {idx: label for label, idx in label2id.items()} | |
| # Encode labels | |
| df['label'] = df['intent'].map(label2id) | |
| # Ensure 'instruction', 'label', 'intent', and 'response' columns are included | |
| df = df[['instruction', 'label', 'intent', 'response']] | |
| # Load the tokenizer and model | |
| tokenizer = AutoTokenizer.from_pretrained("Chillyblast/Roberta_Question_Answer") | |
| model = AutoModelForSequenceClassification.from_pretrained("Chillyblast/Roberta_Question_Answer") | |
| # Ensure the model is in evaluation mode | |
| model.eval() | |
| # Function to get the predicted intent and response | |
| def get_intent_and_response(instruction): | |
| # Tokenize the input instruction | |
| inputs = tokenizer(instruction, return_tensors="pt", truncation=True, padding='max_length', max_length=128) | |
| # Perform inference | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| logits = outputs.logits | |
| predicted_label_id = torch.argmax(logits, dim=1).item() | |
| # Decode the predicted label to get the intent | |
| predicted_intent = id2label[predicted_label_id] | |
| # Fetch the appropriate response based on the predicted intent | |
| response = df[df['intent'] == predicted_intent].iloc[0]['response'] | |
| return predicted_intent, response | |
| # Streamlit app setup | |
| st.title("Customer Support Chatbot") | |
| st.write("Ask a question, and I'll do my best to help you.") | |
| instruction = st.text_input("You:") | |
| if st.button("Submit"): | |
| if instruction: | |
| predicted_intent, response = get_intent_and_response(instruction) | |
| st.write(f"**Predicted Intent:** {predicted_intent}") | |
| st.write(f"**Assistant:** {response}") | |
| else: | |
| st.write("Please enter an instruction.") | |
| if st.button("Exit"): | |
| st.write("Exiting the chat.") | |