StoryCraft / app.py
Caseyishere's picture
Upload app.py
133d782 verified
import streamlit as st
import torch
import numpy as np
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# Load the model and tokenizer from Hugging Face
model = AutoModelForSequenceClassification.from_pretrained("Caseyishere/StoryCraft", num_labels=5)
tokenizer = AutoTokenizer.from_pretrained("Caseyishere/StoryCraft")
# Streamlit app interface
st.set_page_config(page_title="Story Craft", page_icon="🍽️", layout="centered")
# Set page title and styles
st.title("🍽️ Welcome to Story Craft 🍽️")
st.markdown("""
<style>
.big-font {
font-size:24px !important;
font-weight:bold;
}
.highlight {
color: #FF4B4B;
}
.divider {
border-top: 2px solid #bbb;
margin: 20px 0;
}
.menu {
font-size:18px !important;
line-height: 1.8;
font-family: 'Arial', sans-serif;
}
</style>
""", unsafe_allow_html=True)
# Get user input
user_input = st.text_input("Please tell us what you like today:")
if user_input:
# Preprocess the input using the tokenizer
inputs = tokenizer(user_input, padding=True, truncation=True, return_tensors='pt')
# Get predictions from the model
outputs = model(**inputs)
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
predictions = predictions.cpu().detach().numpy()
# Get the predicted label
predicted_label = np.argmax(predictions)
# Display the predicted label with its corresponding sentiment
label_map = {0: "Negative", 1: "Neutral", 2: "Positive"}
# Display the predicted label and corresponding sentiment
st.write(f"Predicted label is {predicted_label} ({label_map.get(predicted_label, 'Unknown')} Sentence)")
# Generate response based on predicted label
responses = {
0: '''**Appetizer**: Escargots: Snails cooked in garlic butter with herbs
**Main Course**: Coq au vin: Chicken braised in red wine with mushrooms and onions
**Side Dish**: Pommes frites: French fries
**Dessert**: Crème brûlée: Custard topped with caramelized sugar
**Beverage**: Bordeaux: A red wine from the Bordeaux region of France
**Cheese Course**: Fromage à raclette: Melted cheese served with bread, potatoes, and pickles''',
1: '''**Appetizer**: Spätzle: Swabian egg noodles with cheese
**Main Course**: Wiener schnitzel: Breaded veal cutlet
**Side Dish**: Sauerkraut: Fermented cabbage
**Dessert**: Schwarzwälder Kirschtorte: Black Forest cake
**Beverage**: Kölsch: A light, golden ale from Cologne
**Cheese Course**: Käsekuchen: German cheesecake''',
2: '''**Appetizer**: Creamy Spinach and Artichoke Dip with tortilla chips
**Main Course**: Ribeye Steak cooked to your desired temperature (medium-rare, medium, well-done)
**Side Dish**: Baked Potato topped with butter, sour cream, and bacon bits
**Dessert**: Chocolate Lava Cake with vanilla ice cream
**Beverage**: Red Wine (ask your server for a recommendation based on your preferences)
**Salad**: Caesar Salad with romaine lettuce, croutons, Parmesan cheese, and Caesar dressing
**Soup**: French Onion Soup with caramelized onions, Gruyère cheese, and croutons''',
3: "Oops! Something went wrong!"
}
# Display the response based on the predicted label
st.markdown('<div class="divider"></div>', unsafe_allow_html=True)
st.markdown(f'<div class="big-font highlight">Here is your curated menu based on your input:</div>', unsafe_allow_html=True)
# Correcting the misplaced closing parenthesis
st.write(responses.get(predicted_label, "I'm not sure what you're asking for."))
# Add a separator
st.markdown('<div class="divider"></div>', unsafe_allow_html=True)