Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import random
|
| 3 |
+
import pandas as pd
|
| 4 |
+
from datetime import datetime
|
| 5 |
+
|
| 6 |
+
# Load or initialize CSVs for logging interactions and survey responses
|
| 7 |
+
try:
|
| 8 |
+
interactions_df = pd.read_csv("interactions.csv")
|
| 9 |
+
except FileNotFoundError:
|
| 10 |
+
interactions_df = pd.DataFrame(columns=["timestamp", "participant_id", "chatbot_type", "interaction", "response"])
|
| 11 |
+
|
| 12 |
+
try:
|
| 13 |
+
survey_df = pd.read_csv("survey_responses.csv")
|
| 14 |
+
except FileNotFoundError:
|
| 15 |
+
survey_df = pd.DataFrame(columns=["timestamp", "participant_id", "chatbot_type", "emotional_response", "feedback"])
|
| 16 |
+
|
| 17 |
+
# Initialize session state for participant assignment and interactions
|
| 18 |
+
if "participant_id" not in st.session_state:
|
| 19 |
+
st.session_state.participant_id = str(random.randint(1000, 9999))
|
| 20 |
+
|
| 21 |
+
if "chatbot_type" not in st.session_state:
|
| 22 |
+
st.session_state.chatbot_type = random.choice(["Positive", "Critical"])
|
| 23 |
+
|
| 24 |
+
if "idea_count" not in st.session_state:
|
| 25 |
+
st.session_state.idea_count = 0
|
| 26 |
+
|
| 27 |
+
# Display Welcome Message
|
| 28 |
+
st.title("Welcome to the Chatbot Study")
|
| 29 |
+
st.write("""
|
| 30 |
+
Thank you for participating in our study. You will interact with a chatbot
|
| 31 |
+
and brainstorm ideas for a marketing campaign. Please press "Start" below to begin.
|
| 32 |
+
""")
|
| 33 |
+
|
| 34 |
+
if st.button("Start Study") or "start" in st.session_state:
|
| 35 |
+
st.session_state.start = True
|
| 36 |
+
|
| 37 |
+
# Chatbot Interaction Section
|
| 38 |
+
if "start" in st.session_state:
|
| 39 |
+
st.subheader("Chatbot Interaction")
|
| 40 |
+
|
| 41 |
+
# Display participant information and assigned chatbot type
|
| 42 |
+
st.write(f"Participant ID: {st.session_state.participant_id}")
|
| 43 |
+
st.write(f"Assigned Chatbot Type: {st.session_state.chatbot_type}")
|
| 44 |
+
|
| 45 |
+
# Pre-programmed responses for each chatbot type
|
| 46 |
+
if st.session_state.chatbot_type == "Positive":
|
| 47 |
+
responses = [
|
| 48 |
+
"Great idea! I love where you’re going with this.",
|
| 49 |
+
"Awesome suggestion! Here’s another thought: what if we add a new twist?",
|
| 50 |
+
"You're on fire! That’s a really promising direction.",
|
| 51 |
+
"Keep up the creativity! This is really going somewhere.",
|
| 52 |
+
]
|
| 53 |
+
else:
|
| 54 |
+
responses = [
|
| 55 |
+
"I don’t think that will work very well. Maybe try something different?",
|
| 56 |
+
"Are you sure about that idea? It seems a bit weak.",
|
| 57 |
+
"This doesn’t sound very innovative. Try another angle.",
|
| 58 |
+
"Not quite there yet. What else do you have in mind?",
|
| 59 |
+
]
|
| 60 |
+
|
| 61 |
+
# User input for submitting an idea
|
| 62 |
+
user_input = st.text_input("Enter your idea here:")
|
| 63 |
+
|
| 64 |
+
if st.button("Submit Idea"):
|
| 65 |
+
if st.session_state.idea_count < 10:
|
| 66 |
+
response = random.choice(responses)
|
| 67 |
+
st.write(f"Chatbot: {response}")
|
| 68 |
+
|
| 69 |
+
# Record the interaction
|
| 70 |
+
interaction_data = {
|
| 71 |
+
"timestamp": datetime.now(),
|
| 72 |
+
"participant_id": st.session_state.participant_id,
|
| 73 |
+
"chatbot_type": st.session_state.chatbot_type,
|
| 74 |
+
"interaction": user_input,
|
| 75 |
+
"response": response
|
| 76 |
+
}
|
| 77 |
+
interactions_df = interactions_df.append(interaction_data, ignore_index=True)
|
| 78 |
+
interactions_df.to_csv("interactions.csv", index=False)
|
| 79 |
+
|
| 80 |
+
# Increment idea count
|
| 81 |
+
st.session_state.idea_count += 1
|
| 82 |
+
st.write(f"Ideas Submitted: {st.session_state.idea_count}/10")
|
| 83 |
+
else:
|
| 84 |
+
st.warning("You have reached the maximum of 10 ideas.")
|
| 85 |
+
|
| 86 |
+
# Option to end interaction and proceed to the survey
|
| 87 |
+
if st.button("Proceed to Survey"):
|
| 88 |
+
st.session_state.end_interaction = True
|
| 89 |
+
|
| 90 |
+
# Survey Page
|
| 91 |
+
if "end_interaction" in st.session_state:
|
| 92 |
+
st.subheader("Post-Interaction Survey")
|
| 93 |
+
|
| 94 |
+
emotional_response = st.radio(
|
| 95 |
+
"How did interacting with the chatbot make you feel?",
|
| 96 |
+
("Very Positive", "Positive", "Neutral", "Negative", "Very Negative")
|
| 97 |
+
)
|
| 98 |
+
feedback = st.text_area("Any feedback on the chatbot interaction?")
|
| 99 |
+
|
| 100 |
+
if st.button("Submit Survey"):
|
| 101 |
+
# Record survey data
|
| 102 |
+
survey_data = {
|
| 103 |
+
"timestamp": datetime.now(),
|
| 104 |
+
"participant_id": st.session_state.participant_id,
|
| 105 |
+
"chatbot_type": st.session_state.chatbot_type,
|
| 106 |
+
"emotional_response": emotional_response,
|
| 107 |
+
"feedback": feedback
|
| 108 |
+
}
|
| 109 |
+
survey_df = survey_df.append(survey_data, ignore_index=True)
|
| 110 |
+
survey_df.to_csv("survey_responses.csv", index=False)
|
| 111 |
+
|
| 112 |
+
st.write("Thank you for completing the study! Your responses have been recorded.")
|