File size: 4,211 Bytes
31b863d
96cb6bb
 
31b863d
50238a6
96cb6bb
 
 
 
 
 
 
 
 
 
 
 
31b863d
 
 
96cb6bb
 
 
31b863d
96cb6bb
f2c765e
 
96cb6bb
 
31b863d
 
 
f2c765e
31b863d
9f60b4a
31b863d
 
50238a6
aa5530b
f205342
96cb6bb
a157698
96cb6bb
 
 
 
 
 
 
31b863d
 
 
 
96cb6bb
 
 
31b863d
 
 
 
 
50238a6
31b863d
 
 
 
 
 
 
 
f2c765e
 
 
 
 
5bb7226
31b863d
 
f2c765e
 
 
 
 
5d951f6
 
 
31b863d
2dcd8c5
96cb6bb
5bb7226
 
f2c765e
5bb7226
f2c765e
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
import gradio as gr
import torch
from transformers import pipeline

# Load the Qwen2.5-72B-Instruct model
pipe = pipeline(
    "text-generation",
    model="HuggingFaceH4/Qwen2.5-72B-Instruct",
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
)

# Initial messages list for chat history
messages = [
    {"role": "system", "content": "You are an experienced Fashion designer who starts conversation with proper greeting, "
                                   "giving valuable and catchy fashion advice and suggestions, stays to the point and precise."}
]

# Function to reset the chat
def reset_chat():
    global messages
    messages = []  # Reset the message history
    return [], "New Chat"

# Function to handle questionnaire submission
def submit_questionnaire(name, age, location, gender, ethnicity, height, weight,
                         style_preference, color_palette, everyday_style):
    # Store questionnaire responses in a DataFrame or process as needed
    # This is just a placeholder to indicate processing
    return "Thank you for completing the questionnaire!"

# Function to handle chat
def chat(user_input, messages):
    if user_input:
        # Append user message to the conversation history
        messages.append({"role": "user", "content": user_input})

        # Prepare input for the model
        input_text = "\n".join([f"{msg['role']}: {msg['content']}" for msg in messages])

        # Generate a response using the model
        try:
            response = pipe(input_text, max_new_tokens=256)  # Using the pipeline

            # Check if response is valid and structured correctly
            if isinstance(response, list) and len(response) > 0:
                response_content = response[0]['generated_text'].strip()  # Accessing generated text
            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 with fashion-related questions
    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"])

    # Chat functionality
    chatbox = gr.Chatbot(type='messages')
    user_input = gr.Textbox(label="Your Message", placeholder="Type your message here...")

    # Connect the buttons to their respective functions
    output_message = gr.Textbox(label="Output Message")
    submit_btn.click(submit_questionnaire, inputs=[name, age, location, gender, ethnicity, height, weight,
                                                    style_preference, color_palette, everyday_style], outputs=output_message)

    reset_btn.click(reset_chat, outputs=[chatbox, output_message])  # Corrected outputs
    user_input.submit(chat, inputs=[user_input, chatbox], outputs=[chatbox, user_input])

# Run the app
demo.launch()