Spaces:
Sleeping
Sleeping
File size: 4,978 Bytes
c7d8b3f 0d88527 c7d8b3f 0d88527 c7d8b3f 0d88527 c7d8b3f 0d88527 c7d8b3f 0d88527 2ecd770 50c822a 2ecd770 0d88527 7c2acfb 710ae14 0d88527 50c822a 710ae14 8fa9440 90909c6 0d88527 8fa9440 0d88527 710ae14 0d88527 710ae14 0d88527 710ae14 0d88527 710ae14 |
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 |
import streamlit as st
import requests
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(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)
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 = next((item for item in data if item["name"] == selected_watch or item["sku"] == selected_sku), None)
if watch_data:
# Display the image from the JSON
if image_url := watch_data.get("image"):
st.image(image_url, caption=f"{watch_data['name']} Image")
# Attributes without price
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"),
"water_resistance": watch_data.get("water_resistance", "Unknown Water Resistance"),
"power_reserve": watch_data.get("power_reserve", "Unknown Power Reserve"),
"dial_color": watch_data.get("dial_color", "Unknown Dial Color"),
"strap_material": watch_data.get("strap_material", "Unknown Strap Material")
}
# Create a detailed description prompt
input_text = f"""Generate a detailed 200-word 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']}
Water Resistance: {attributes['water_resistance']}
Power Reserve: {attributes['power_reserve']}
Dial Color: {attributes['dial_color']}
Strap Material: {attributes['strap_material']}
Description: Provide a luxurious, detailed description focusing on the craftsmanship, innovation, and design. Highlight the unique features and selling points of this watch. Use vivid language to paint a picture of the watch's appearance and functionality. Discuss how this watch stands out in the {attributes['brand']} collection and why it would appeal to watch enthusiasts."""
# Tokenize input and generate description
inputs = tokenizer(input_text, return_tensors="pt", max_length=512, truncation=True)
outputs = model.generate(
**inputs,
max_length=300, # Increased to allow for longer descriptions
num_return_sequences=1,
temperature=0.8,
top_k=50,
top_p=0.95,
do_sample=True,
repetition_penalty=1.2,
no_repeat_ngram_size=3 # Prevent repetition of 3-gram phrases
)
# Decode generated text
description = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Display the result
st.write("### Generated Description")
st.write(description)
# Add word count
word_count = len(description.split())
st.write(f"Word count: {word_count}")
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
) |