Spaces:
Sleeping
Sleeping
File size: 4,852 Bytes
fbc2796 bf2578c 90909c6 fbc2796 93e2204 90909c6 93e2204 fbc2796 93e2204 fbc2796 bf2578c 5d087ca bf2578c 5d087ca bf2578c 5d087ca 93e2204 fbc2796 5d087ca 2ecd770 3da548a 2ecd770 3da548a 5d087ca 3da548a 2ecd770 3da548a 5d087ca 90909c6 2ecd770 3da548a 2ecd770 3da548a 2ecd770 3da548a 5d087ca 3da548a 5d087ca 3da548a 90909c6 2ecd770 5d087ca 90909c6 2ecd770 90909c6 3da548a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
import streamlit as st
import requests
import json
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
# Load model and tokenizer
@st.cache_resource
def load_model():
model = AutoModelForSeq2SeqLM.from_pretrained("shreyanshjha0709/watch-description-generator")
tokenizer = AutoTokenizer.from_pretrained("shreyanshjha0709/watch-description-generator")
return model, tokenizer
model, tokenizer = load_model()
# Load the JSON file from a URL
@st.cache_data
def load_json_from_url(url):
response = requests.get(url)
return response.json()
# Provide your JSON URL here
json_url = "https://www.ethoswatches.com/feeds/holbox_ai.json"
data = load_json_from_url(json_url)
# Extract unique brands
brands = sorted(list(set([item["brand"] for item in data])))
# Streamlit UI
st.title("Watch Description Generator")
# Select brand
selected_brand = st.selectbox("Select a Brand", ["Select"] + brands)
# Filter watches and SKUs by the selected brand
if selected_brand != "Select":
watches = [item["name"] for item in data if item["brand"] == selected_brand]
skus = [item["sku"] for item in data if item["brand"] == selected_brand]
selected_watch = st.selectbox("Select Watch Name (Optional)", ["Select"] + watches)
selected_sku = st.selectbox("Select SKU (Optional)", ["Select"] + skus)
# Get the selected watch data from the JSON
watch_data = None
if selected_watch != "Select":
watch_data = next((item for item in data if item["name"] == selected_watch), None)
elif selected_sku != "Select":
watch_data = next((item for item in data if item["sku"] == selected_sku), None)
if watch_data:
# Generation parameters
max_length = st.slider("Max Length", min_value=100, max_value=500, value=300) # Increase max length to allow for more text
temperature = st.slider("Temperature", min_value=0.1, max_value=1.0, value=0.7, step=0.1)
repetition_penalty = st.slider("Repetition Penalty", min_value=1.0, max_value=2.0, value=1.2, step=0.1) # Penalize repetitive text
# Generate description based on attributes
if st.button("Generate Description"):
attributes = {
"brand": watch_data["brand"],
"name": watch_data.get("name", "Unknown Watch"),
"sku": watch_data.get("sku", "Unknown SKU"),
"features": watch_data.get("features", "Unknown Features"),
"casesize": watch_data.get("casesize", "Unknown Case Size"),
"movement": watch_data.get("movement", "Unknown Movement"),
"gender": watch_data.get("gender", "Unknown Gender"),
}
# Format input similar to training data (adjust this based on your training data format)
input_text = f"""Generate a detailed description for the following watch:
Brand: {attributes['brand']}
Name: {attributes['name']}
SKU: {attributes['sku']}
Features: {attributes['features']}
Case Size: {attributes['casesize']}
Movement: {attributes['movement']}
Gender: {attributes['gender']}
Description:"""
# Tokenize input and generate description
inputs = tokenizer(input_text, return_tensors="pt", max_length=512, truncation=True)
outputs = model.generate(
**inputs,
max_length=max_length,
num_return_sequences=1,
temperature=temperature,
top_k=50,
top_p=0.95,
do_sample=True,
repetition_penalty=repetition_penalty # Prevent repetitive descriptions
)
# Decode generated text
description = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Display the result
st.write("### Generated Description")
st.write(description)
# Display watch details
st.write("### Watch Details")
st.json(json.dumps(watch_data, indent=2))
# Display input text for debugging
st.write("### Input Text (for debugging)")
st.text(input_text)
else:
st.warning("Please select a brand.")
# Add some information about the app
st.sidebar.title("About")
st.sidebar.info(
"This app uses a fine-tuned AI model to generate descriptions for watches. "
"Select a brand and a watch to get started. The model will generate a unique "
"description based on the watch's attributes."
)
# Add a footer
st.markdown(
"""
<style>
.footer {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background-color: #f1f1f1;
color: black;
text-align: center;
}
</style>
<div class="footer">
<p>Developed with ❤️ by Shreyansh Jha</p>
</div>
""",
unsafe_allow_html=True
)
|