Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import random | |
| import pandas as pd | |
| from datetime import datetime | |
| # Load or initialize CSVs for logging interactions and survey responses | |
| try: | |
| interactions_df = pd.read_csv("interactions.csv") | |
| except FileNotFoundError: | |
| interactions_df = pd.DataFrame(columns=["timestamp", "participant_id", "chatbot_type", "interaction", "response"]) | |
| try: | |
| survey_df = pd.read_csv("survey_responses.csv") | |
| except FileNotFoundError: | |
| survey_df = pd.DataFrame(columns=["timestamp", "participant_id", "chatbot_type", "emotional_response", "feedback"]) | |
| # Initialize session state for participant assignment and interactions | |
| if "participant_id" not in st.session_state: | |
| st.session_state.participant_id = str(random.randint(1000, 9999)) | |
| if "chatbot_type" not in st.session_state: | |
| st.session_state.chatbot_type = random.choice(["Positive", "Critical"]) | |
| if "idea_count" not in st.session_state: | |
| st.session_state.idea_count = 0 | |
| # Display Welcome Message | |
| st.title("Welcome to the Chatbot Study") | |
| st.write(""" | |
| Thank you for participating in our study. You will interact with a chatbot | |
| and brainstorm ideas for a marketing campaign. Please press "Start" below to begin. | |
| """) | |
| if st.button("Start Study") or "start" in st.session_state: | |
| st.session_state.start = True | |
| # Chatbot Interaction Section | |
| if "start" in st.session_state: | |
| st.subheader("Chatbot Interaction") | |
| # Display participant information and assigned chatbot type | |
| st.write(f"Participant ID: {st.session_state.participant_id}") | |
| st.write(f"Assigned Chatbot Type: {st.session_state.chatbot_type}") | |
| # Pre-programmed responses for each chatbot type | |
| if st.session_state.chatbot_type == "Positive": | |
| responses = [ | |
| "Great idea! I love where you’re going with this.", | |
| "Awesome suggestion! Here’s another thought: what if we add a new twist?", | |
| "You're on fire! That’s a really promising direction.", | |
| "Keep up the creativity! This is really going somewhere.", | |
| ] | |
| else: | |
| responses = [ | |
| "I don’t think that will work very well. Maybe try something different?", | |
| "Are you sure about that idea? It seems a bit weak.", | |
| "This doesn’t sound very innovative. Try another angle.", | |
| "Not quite there yet. What else do you have in mind?", | |
| ] | |
| # User input for submitting an idea | |
| user_input = st.text_input("Enter your idea here:") | |
| if st.button("Submit Idea"): | |
| if st.session_state.idea_count < 10: | |
| response = random.choice(responses) | |
| st.write(f"Chatbot: {response}") | |
| # Record the interaction | |
| interaction_data = { | |
| "timestamp": datetime.now(), | |
| "participant_id": st.session_state.participant_id, | |
| "chatbot_type": st.session_state.chatbot_type, | |
| "interaction": user_input, | |
| "response": response | |
| } | |
| interactions_df = interactions_df.append(interaction_data, ignore_index=True) | |
| interactions_df.to_csv("interactions.csv", index=False) | |
| # Increment idea count | |
| st.session_state.idea_count += 1 | |
| st.write(f"Ideas Submitted: {st.session_state.idea_count}/10") | |
| else: | |
| st.warning("You have reached the maximum of 10 ideas.") | |
| # Option to end interaction and proceed to the survey | |
| if st.button("Proceed to Survey"): | |
| st.session_state.end_interaction = True | |
| # Survey Page | |
| if "end_interaction" in st.session_state: | |
| st.subheader("Post-Interaction Survey") | |
| emotional_response = st.radio( | |
| "How did interacting with the chatbot make you feel?", | |
| ("Very Positive", "Positive", "Neutral", "Negative", "Very Negative") | |
| ) | |
| feedback = st.text_area("Any feedback on the chatbot interaction?") | |
| if st.button("Submit Survey"): | |
| # Record survey data | |
| survey_data = { | |
| "timestamp": datetime.now(), | |
| "participant_id": st.session_state.participant_id, | |
| "chatbot_type": st.session_state.chatbot_type, | |
| "emotional_response": emotional_response, | |
| "feedback": feedback | |
| } | |
| survey_df = survey_df.append(survey_data, ignore_index=True) | |
| survey_df.to_csv("survey_responses.csv", index=False) | |
| st.write("Thank you for completing the study! Your responses have been recorded.") | |