from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random doc = """ EXPERIMENT TO STUDY HOW PARTICIPANTS INTERACT WITH AI """ ############################################################ # WELCOME ############################################################ # WELCOME PAGE AND SETTING OF TRUSTEES & TREATMENT class Intro(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['consent'] def before_next_page(self): # DETERMINE AGAINST WHICH TRUSTEES PARTICIPANTS ACTUALLY PLAY self.player.trustee_() # DETERMINE IN WHICH TREATMENT PARTICIPANTS ACTUALLY ENGAGE #self.player.treatment() ############################################################ # INSTRUCTIONS ############################################################ # SHOW INSTRUCTIONS FOR THE BEHAVIORAL PRIOR GAME class Instructions(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): dict_ = dict() dict_['payoff_factor'] = Constants.payoff_factor*100 return dict_ pass #def before_next_page(self): # self.player.testing() ############################################################ # LIST DECISIONS ############################################################ # PARTICIPANTS ACTUAL DECISIONS FOR THE BEHAVIORAL PRIOR class Decision(Page): form_model = 'player' form_fields = ['invest_pri', 'risk_pri'] def vars_for_template(self): dict_ = dict() temp_no = self.round_number #if self.round_number == 1: dict_['PossibleInc'] = self.participant.vars[f'PossibleIncome{temp_no}'] #else: # dict_['PossibleInc'] = self.participant.vars[f'PossibleIncome2'] dict_['invest_objects'] = list(zip(Constants.feats_, self.participant.vars['trustees1'][self.round_number-1])) return dict_ # PARTICIPANTS ACTUAL DECISIONS FOR THE BEHAVIORAL POSTERIOR class Decision2(Page): form_model = 'player' form_fields = [f'q{i}' for i in range(1,10)] + ['invest_post', 'risk_post'] def vars_for_template(self): temp_ = ['Kreditsumme', 'Kreditlaufzeit in Monaten', 'Kreditzweck', 'Angebotener effektiver Jahreszins', 'Aktueller Beruf', 'Monatl. Ratenzahlung', 'Jährliches Einkommen Kreditnehmer'] temp_no = self.round_number if self.player.treatment_explain == 1: temp_.append('Ihre von der Künstlichen Intelligenz unterstütze Bankberater*in: Risikoeinschätzung') temp_.append('Ihre von der Künstlichen Intelligenz unterstütze Bankberater*in: Investitionsempfehlung') name = 'einer Bankberater*in, die von einer Künstlichen Intelligenz untersützt wurde' elif self.player.treatment_explain == 2: temp_.append('Ihre Bankberater*in: Risikoeinschätzung') temp_.append('Ihre Bankberater*in: Investitionsempfehlung') name = 'einer Bankberater*in' else: temp_.append('Die Künstliche Intelligenz: Risikoeinschätzung') temp_.append('Die Künstliche Intelligenz: Investitionsempfehlung') name = 'einer Künstlichen Intelligenz' dict_ = dict() dict_['invest_objects'] = list(zip(temp_, self.participant.vars['trustees2'][self.round_number-1])) #self.participant.vars['trustees2'] dict_['label_'] = name dict_['PrevInvest'] = Constants.invest_scale[self.player.invest_pri] dict_['PrevRisk'] = Constants.risk_scale[self.player.risk_pri] #if self.round_number == 1: dict_['PossibleInc'] = self.participant.vars[f'PossibleIncome{temp_no}'] #else: # dict_['PossibleInc'] = self.participant.vars[f'PossibleIncome2'] return dict_ def before_next_page(self): self.player.store_decisions() ############################################################ # DEMAND DECISIONS ############################################################ # PARTICIPANTS PREFERENCE TO OBSERVE THE class SliderDecisionPrior(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['invest_slider_prior', 'risk_slider_prior'] def vars_for_template(self): temp_ = ['Kreditsumme', 'Kreditlaufzeit in Monaten', 'Kreditzweck', 'Angebotener effektiver Jahreszins', 'Aktueller Beruf', 'Monatl. Ratenzahlung', 'Jährliches Einkommen Kreditnehmer'] dict_ = dict() dict_['invest_objects'] = list(zip(temp_, self.participant.vars['slider_ind'][Constants.features_list].values.tolist()[0])) dict_['PossibleInc'] = self.participant.vars[f'PossibleIncomeSlider'] return dict_ # PARTICIPANTS PREFERENCE TO OBSERVE THE class Slider(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['slider_'] def vars_for_template(self): if self.player.treatment_explain == 1: name = 'einer Bankberater*in, die von einer Künstlichen Intelligenz untersützt wurde,' elif self.player.treatment_explain == 2: name = 'einer Bankberater*in' else: name = 'einer Künstlichen Intelligenz' dict_ = dict() dict_['label_'] = name dict_['payoff_factor'] = Constants.payoff_factor * 100 return dict_ def before_next_page(self): # DETERMINE WHETHER PARTICIPANTS OBTAIN HELP OR NOT self.player.slider_comp() # PARTICIPANTS PREFERENCE TO OBSERVE THE class SliderDecisionPost(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' def get_form_fields(self): if self.player.help_ == 1: return [f'q{i}SLIDER' for i in range(1,11)] + ['invest_slider_post', 'risk_slider_post'] else: return ['invest_slider_post', 'risk_slider_post'] def vars_for_template(self): temp_ = ['Kreditsumme', 'Kreditlaufzeit in Monaten', 'Kreditzweck', 'Angebotener effektiver Jahreszins', 'Aktueller Beruf', 'Monatl. Ratenzahlung', 'Jährliches Einkommen Kreditnehmer'] dict_ = dict() help_ = 0 if self.player.help_ == 1: help_ = 1 if self.player.treatment_explain == 1: temp_.append('Ihre von der Künstlichen Intelligenz unterstütze Bankberater*in: Risikoeinschätzung') temp_.append('Ihre von der Künstlichen Intelligenz unterstütze Bankberater*in: Investitionsempfehlung') name = 'einer Bankberater*in, die von einer Künstlichen Intelligenz untersützt wurde' elif self.player.treatment_explain == 2: temp_.append('Ihre Bankberater*in: Risikoeinschätzung') temp_.append('Ihre Bankberater*in: Investitionsempfehlung') name = 'einer Bankberater*in' else: temp_.append('Die Künstliche Intelligenz: Risikoeinschätzung') temp_.append('Die Künstliche Intelligenz: Investitionsempfehlung') name = 'einer Künstliche Intelligenz' dict_['invest_objects'] = list(zip(temp_, self.participant.vars['trustees2'][ self.round_number - 1])) # self.participant.vars['trustees2'] dict_['label_'] = name else: dict_['invest_objects'] = list(zip(temp_, self.participant.vars['slider_ind'][Constants.features_list].values.tolist()[0])) dict_['aid'] = help_ dict_['PossibleInc'] = self.participant.vars[f'PossibleIncomeSlider'] return dict_ ############################################################ # QUESTIONNAIRE ############################################################ class Questionnaire(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = 'player' form_fields = [ 'q_age', 'q_female', 'q_work', 'q_degree', 'q_investexp', 'q_risk', 'q_ctrust1', 'q_ctrust2', 'q_ctrust3', 'q_etrust1', 'q_etrust2', 'q_etrust3', 'respGeneral', 'FutureNonFollow', 'SocialAkw', 'Auth1', 'Auth2', 'ManCheck' ] random.shuffle(form_fields) def before_next_page(self): self.player.payment() class Results(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): return dict(ChosenRound=self.participant.vars['relevant_round'], Decision=self.participant.vars['relevant_decision'], Repayment=self.participant.vars['relevantrepayment'], PointsOverall= self.participant.vars['points_'], Overall=self.player.inc_, payoff_factor=Constants.payoff_factor * 100) ############################################################ # SEQUENCE OF PAGES ############################################################ page_sequence = [ Intro, Instructions, Decision, Decision2, Questionnaire, Results ]