File size: 9,371 Bytes
31b863d 740ea71 31b863d 740ea71 31b863d 740ea71 31b863d 740ea71 31b863d |
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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
import gradio as gr
import pandas as pd
from groq import Groq
# Initialize the Groq client with your API key
client = Groq(api_key="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")
# Define the system message for the model
system_message = {
"role": "system",
"content": "You are an experienced Fashion designer who starts conversation with proper greet, giving valuable and catchy fashion advices and suggestions, stays to the point and precise, asks questions only if the user have any concern over your provided suggestions, taking inputs like name, age, gender, location, ethnicity, height, weight"
}
# Function to reset the chat
def reset_chat():
return [], "New Chat"
# Function to handle the questionnaire submission
def submit_questionnaire(name, age, location, gender, ethnicity, height, weight,
style_preference, color_palette, everyday_style,
preferred_prints, season_preference, outfit_priority,
experiment_with_trends, accessories, fit_preference,
material_preference, top_preference, bottom_preference,
outerwear_preference, footwear_preference, dress_frequency,
layering_preference, jeans_fit, formal_wear_frequency,
sportswear_preference, party_outfit, confidence_in_style,
follow_fashion_trends, look_for_inspiration,
wardrobe_satisfaction, unique_style, outfit_struggle,
fashion_preference, gender_neutral_clothing,
special_occasion_attire, trendsetter,
ai_usefulness, trust_in_ai, ai_preference,
ai_usage_frequency, ai_match_preferences,
ai_recommendation, ai_understanding_style,
more_personalized_recommendations, event_suggestions,
ai_improvements):
# Store questionnaire responses in a DataFrame
questionnaire_data = {
"Name": name,
"Age": age,
"Location": location,
"Gender": gender,
"Ethnicity": ethnicity,
"Height": height,
"Weight": weight,
"Style Preference": style_preference,
"Color Palette": color_palette,
"Everyday Style": everyday_style,
"Preferred Prints": preferred_prints,
"Season Preference": season_preference,
"Outfit Priority": outfit_priority,
"Experiment with Trends": experiment_with_trends,
"Accessories": accessories,
"Fit Preference": fit_preference,
"Material Preference": material_preference,
"Top Preference": top_preference,
"Bottom Preference": bottom_preference,
"Outerwear Preference": outerwear_preference,
"Footwear Preference": footwear_preference,
"Dress Frequency": dress_frequency,
"Layering Preference": layering_preference,
"Jeans Fit": jeans_fit,
"Formal Wear Frequency": formal_wear_frequency,
"Sportswear Preference": sportswear_preference,
"Party Outfit": party_outfit,
"Confidence in Style": confidence_in_style,
"Follow Fashion Trends": follow_fashion_trends,
"Look for Inspiration": look_for_inspiration,
"Wardrobe Satisfaction": wardrobe_satisfaction,
"Unique Style": unique_style,
"Outfit Struggle": outfit_struggle,
"Fashion Preference": fashion_preference,
"Gender Neutral Clothing": gender_neutral_clothing,
"Special Occasion Attire": special_occasion_attire,
"Trendsetter": trendsetter,
"AI Usefulness": ai_usefulness,
"Trust in AI": trust_in_ai,
"AI Preference": ai_preference,
"AI Usage Frequency": ai_usage_frequency,
"AI Match Preferences": ai_match_preferences,
"AI Recommendation": ai_recommendation,
"AI Understanding Style": ai_understanding_style,
"More Personalized Recommendations": more_personalized_recommendations,
"Event Suggestions": event_suggestions,
"AI Improvements": ai_improvements
}
df = pd.DataFrame([questionnaire_data]) # Create DataFrame from dictionary
# Append to CSV file
df.to_csv("questionnaire_responses.csv", mode='a', header=not pd.io.common.file_exists("questionnaire_responses.csv"), index=False)
return "Thank you for completing the questionnaire!"
# Function to handle chat
def chat(user_input, messages, name, age, location, gender, ethnicity, height, weight):
if user_input:
# Create a user profile string
user_profile_string = (
f"User profile: Name: {name}, Age: {age}, Location: {location}, "
f"Gender: {gender}, Ethnicity: {ethnicity}, Height: {height}, Weight: {weight}"
)
# Prepare messages for the API call, including the profile and the conversation history
messages.append({"role": "user", "content": user_input})
messages.append(system_message)
messages.append({"role": "user", "content": user_profile_string})
try:
# Generate a response from the Groq API
completion = client.chat.completions.create(
model="llama3-8b-8192",
messages=messages,
temperature=1,
max_tokens=1024,
top_p=1,
stream=False,
)
# Ensure response is valid
if completion.choices and len(completion.choices) > 0:
response_content = completion.choices[0].message.content
else:
response_content = "Sorry, I couldn't generate a response."
except Exception as e:
response_content = f"Error: {str(e)}"
# Store assistant response in the chat history
messages.append({"role": "assistant", "content": response_content})
return messages, response_content
return messages, ""
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("## Fashion Assistant Chatbot")
# Sidebar for user inputs
with gr.Row():
with gr.Column():
name = gr.Textbox(label="Name")
age = gr.Number(label="Age", value=25, minimum=1, maximum=100)
location = gr.Textbox(label="Location")
gender = gr.Radio(label="Gender", choices=["Male", "Female", "Other"])
ethnicity = gr.Radio(label="Ethnicity", choices=["Asian", "Black", "Hispanic", "White", "Other"])
height = gr.Number(label="Height (cm)", value=170, minimum=50, maximum=250)
weight = gr.Number(label="Weight (kg)", value=70, minimum=20, maximum=200)
with gr.Column():
submit_btn = gr.Button("Submit Questionnaire")
reset_btn = gr.Button("Reset Chat")
# Questionnaire responses
style_preference = gr.Radio(label="Which style do you prefer the most?", choices=["Casual", "Formal", "Streetwear", "Athleisure", "Baggy"])
color_palette = gr.Radio(label="What color palette do you wear often?", choices=["Neutrals", "Bright Colors", "Pastels", "Dark Shades"])
everyday_style = gr.Radio(label="How would you describe your everyday style?", choices=["Relaxed", "Trendy", "Elegant", "Bold"])
preferred_prints = gr.Radio(label="What type of prints do you like?", choices=["Solid", "Stripes", "Floral", "Geometric", "Animal Print"])
season_preference = gr.Radio(label="Which season influences your wardrobe the most?", choices=["Spring", "Summer", "Fall", "Winter"])
outfit_priority = gr.Radio(label="What do you prioritize when choosing an outfit?", choices=["Comfort", "Style", "Affordability", "Brand"])
experiment_with_trends = gr.Radio(label="How often do you experiment with new trends?", choices=["Always", "Sometimes", "Rarely", "Never"])
accessories = gr.Radio(label="What kind of accessories do you usually wear?", choices=["Watches", "Rings", "Necklaces", "Bracelets", "Earrings"])
fit_preference = gr.Radio(label="What fit do you prefer in clothes?", choices=["Loose", "Tailored", "Fitted", "Oversized"])
material_preference = gr.Radio(label="Which material do you prefer?", choices=["Cotton", "Linen", "Silk", "Denim", "Wool"])
# More preferences (add all as needed)
chatbox = gr.Chatbot(label="Chat History", type='messages')
user_input = gr.Textbox(label="Ask anything about fashion...", placeholder="Type your message here...")
# Reset chat functionality
reset_btn.click(reset_chat, outputs=[chatbox, chatbox])
# Submit questionnaire functionality
submit_btn.click(submit_questionnaire, inputs=[name, age, location, gender, ethnicity, height, weight,
style_preference, color_palette, everyday_style,
preferred_prints, season_preference, outfit_priority,
experiment_with_trends, accessories, fit_preference,
material_preference], outputs="text")
# Chat functionality
user_input.submit(chat, inputs=[user_input, chatbox, name, age, location, gender, ethnicity, height, weight], outputs=[chatbox, user_input])
# Run the app
demo.launch()
|