File size: 9,354 Bytes
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")
    user_input = gr.Textbox(label="Ask anything about fashion...", placeholder="Type your message here...")
    
    # Reset chat functionality
    reset_btn.click(reset_chat, outputs=[chatbox, "title"])

    # 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, ""])

demo.launch()