from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'my_survey' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 MY_CONSTANT = cu(0) TREATMENTS = (1, 2, 3, 4) class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): session = subsession.session import itertools pressures = itertools.cycle([1,2,3,4]) for player in subsession.get_players(): player.time_pressure = next(pressures) print('set time_pressure to', player.time_pressure) class Group(BaseGroup): pass class Player(BasePlayer): name = models.StringField(label='What is your name?') age = models.StringField(choices=[['18-20', '18-20'], ['21-25', '21-25'], ['26-30', '26-30'], ['30+', '30+']], label='Please specify your age.') activity = models.StringField(choices=[['0', '0'], ['1-2 hours', '1-2 hours'], ['3-4 hours', '3-4 hours'], ['more than 6 hours a week', 'more than 6 hours a week']], label='How many hours a week, on average, do you participate in sports or physical activity?') finallikelihood = models.IntegerField(label='After seeing the AI’s recommendation, how confident are you in choosing option B (undergo surgery) for your torn ACL? (0 lowest, 100 highest)', max=100, min=0) initiallikelihood = models.IntegerField(label='How confident are you in choosing option B (undergo surgery) for your torn ACL? (0 lowest, 100 highest)', max=100, min=0) time_pressure = models.IntegerField(choices=C.TREATMENTS) technophobia = models.StringField(choices=[['Highly Technophobic', 'Highly Technophobic'], ['Moderately Technophobic', 'Moderately Technophobic'], ['Mildly Technophobic', 'Mildly Technophobic'], ['Not Technophobic', 'Not Technophobic']], label='If "technophobia" is defined as feeling discomfort about computers or any new technology, which of the following best describes you?') medicinedegree = models.StringField(choices=[['Yes', 'Yes'], ['No', 'No']], label='Did you or do you study for a degree in medicine?') gender = models.StringField(choices=[['Female', 'Female'], ['Male', 'Male'], ['Other', 'Other'], ['Prefer not to answer', 'Prefer not to answer']], label='Which gender do you identify most with?') ability1 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice is competent in providing health information service.') ability2 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice performs its role very well.') ability3 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice understands the needs of patients it servers.') ability4 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice is knowledgeable in providing health information service.') benevolence1 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice is ready and willing to assist me.') benevolence2 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label="AI advice's intentions are benevolent.") benevolence3 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice has good intentions towards me.') benevolence4 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice is well meaning.') integrity1 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='Promises made by AI advice are reliable.') integrity2 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='I would characterize AI advice as honest.') integrity3 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='AI advice keeps its commitment.') integrity4 = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5']], label='Medical Information Services given by AI advice are its best judgement.') class Welcome1(Page): form_model = 'player' form_fields = ['technophobia', 'medicinedegree', 'gender', 'age', 'activity'] @staticmethod def is_displayed(player: Player): if(player.time_pressure == 2 or player.time_pressure == 3 or player.time_pressure == 4): return 1 class Welcome2(Page): form_model = 'player' form_fields = ['initiallikelihood'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 1 class Initiallikelihood(Page): form_model = 'player' form_fields = ['initiallikelihood'] @staticmethod def is_displayed(player: Player): if(player.time_pressure == 2 or player.time_pressure == 3 or player.time_pressure == 4): return 1 class Treatment1general(Page): form_model = 'player' form_fields = ['finallikelihood'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 1 class Treatmentvisualperso(Page): form_model = 'player' form_fields = ['finallikelihood'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 2 class Treatmentexample1side(Page): form_model = 'player' form_fields = ['finallikelihood'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 3 class Treatmentexample2side(Page): form_model = 'player' form_fields = ['finallikelihood'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 4 class QuestionnaireAI(Page): form_model = 'player' form_fields = ['ability1', 'ability2', 'ability3', 'ability4', 'benevolence1', 'benevolence2', 'benevolence3', 'benevolence4', 'integrity1', 'integrity2', 'integrity3', 'integrity4'] @staticmethod def is_displayed(player: Player): if(player.time_pressure == 2 or player.time_pressure == 3 or player.time_pressure == 4): return 1 class QuestionnaireAI2(Page): form_model = 'player' form_fields = ['ability1', 'ability2', 'ability3', 'ability4', 'benevolence1', 'benevolence2', 'benevolence3', 'benevolence4', 'integrity1', 'integrity2', 'integrity3', 'integrity4'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 1 class Questionnaire2(Page): form_model = 'player' form_fields = ['name', 'technophobia', 'medicinedegree', 'gender', 'age', 'activity'] @staticmethod def is_displayed(player: Player): return player.time_pressure == 1 page_sequence = [Welcome1, Welcome2, Initiallikelihood, Treatment1general, Treatmentvisualperso, Treatmentexample1side, Treatmentexample2side, QuestionnaireAI, QuestionnaireAI2, Questionnaire2]