|
import gradio as gr |
|
import pandas as pd |
|
from groq import Groq |
|
|
|
|
|
client = Groq(api_key="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") |
|
|
|
|
|
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" |
|
} |
|
|
|
|
|
def reset_chat(): |
|
return [], "New Chat" |
|
|
|
|
|
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): |
|
|
|
|
|
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]) |
|
|
|
|
|
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!" |
|
|
|
|
|
def chat(user_input, messages, name, age, location, gender, ethnicity, height, weight): |
|
if user_input: |
|
|
|
user_profile_string = ( |
|
f"User profile: Name: {name}, Age: {age}, Location: {location}, " |
|
f"Gender: {gender}, Ethnicity: {ethnicity}, Height: {height}, Weight: {weight}" |
|
) |
|
|
|
|
|
messages.append({"role": "user", "content": user_input}) |
|
messages.append(system_message) |
|
messages.append({"role": "user", "content": user_profile_string}) |
|
|
|
try: |
|
|
|
completion = client.chat.completions.create( |
|
model="llama3-8b-8192", |
|
messages=messages, |
|
temperature=1, |
|
max_tokens=1024, |
|
top_p=1, |
|
stream=False, |
|
) |
|
|
|
|
|
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)}" |
|
|
|
|
|
messages.append({"role": "assistant", "content": response_content}) |
|
|
|
return messages, response_content |
|
return messages, "" |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("## Fashion Assistant Chatbot") |
|
|
|
|
|
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") |
|
|
|
|
|
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"]) |
|
|
|
|
|
|
|
chatbox = gr.Chatbot(label="Chat History") |
|
user_input = gr.Textbox(label="Ask anything about fashion...", placeholder="Type your message here...") |
|
|
|
|
|
reset_btn.click(reset_chat, outputs=[chatbox, "title"]) |
|
|
|
|
|
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") |
|
|
|
|
|
user_input.submit(chat, inputs=[user_input, chatbox, name, age, location, gender, ethnicity, height, weight], |
|
outputs=[chatbox, ""]) |
|
|
|
demo.launch() |
|
|