from otree.api import * from os import environ import openai import json import math from decimal import Decimal, ROUND_HALF_UP import re doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'Uncertainty_process_BC_FI' PLAYERS_PER_GROUP = 8 NUM_ROUNDS = 10 TEMP = 0 MODEL = "gpt-5.2" class Subsession(BaseSubsession): pass class Group(BaseGroup): clear = models.BooleanField() average_price = models.FloatField() optimization = models.BooleanField() class Player(BasePlayer): #general variables omega_current = models.IntegerField(default = 40) omega_pre = models.IntegerField(default = 40) omega_small = models.IntegerField(default = 20) omega_large = models.IntegerField(default = 60) omega_average = models.IntegerField(default = 40) cost_deduction = models.IntegerField(default = 10) price_aim_parameter_pre = models.IntegerField(default = 15) price_aim_parameter_post = models.IntegerField(default = 25) price_aim_parameter_current = models.IntegerField(default = 15) price_aim_parameter_small = models.IntegerField(default=5) maximum_price = models.IntegerField() shock = models.IntegerField(default=6) shock_announcement = models.BooleanField() display_shock = models.BooleanField() explanation = models.LongStringField(label="Begründung:",max_length=2000) optimization_instruction = models.BooleanField() optimization = models.BooleanField() clear = models.BooleanField() clear_instruction = models.BooleanField() cum_score = models.IntegerField() sitzplatznummer = models.IntegerField() # player variables price = models.IntegerField(label= "",min=10) output = models.IntegerField() unit_costs = models.IntegerField() total_costs = models.IntegerField() revenue = models.IntegerField() earnings = models.IntegerField(min=0) per_piece_earnings = models.IntegerField() price_aim = models.IntegerField() # variables for payoffs payoff_round = models.IntegerField() # if I don't round, then it needs to be a float payoff_acc = models.IntegerField() exchange_rate = models.IntegerField(default=200) show_up_fee = models.CurrencyField(default=5) payoff_mon = models.CurrencyField() payoff_mon_final = models.CurrencyField() explanation_bonus_taler = models.IntegerField() explanation_bonus = models.CurrencyField() payoff_mon_final_otree = models.CurrencyField() # Questionnaire Question_1 = models.IntegerField( choices=[[1, ("Die Produktion erfolgt automatisch in Höhe der Nachfrage.")], [2, ("Die Produktion wird zufällig bestimmt.")], [3, ("Die Produktion hängt vom Durchschnittspreis ab.")]], label="Frage 1: Wie wird die Höhe Ihrer Produktion bestimmt?", widget=widgets.RadioSelect) Question_2 = models.IntegerField( choices=[[1, "Je höher mein Preis p, desto höher die Nachfrage y."], [2, "Je höher mein Preis p, desto niedriger die Nachfrage y."], [3, "Je niedriger mein Preis p, desto niedriger die Nachfrage y."]], label="Frage 2: Welche Aussage über Ihre Nachfrage y und Ihren Preis p ist richtig?", widget=widgets.RadioSelect) Question_3 = models.IntegerField( choices=[[1, ("Je höher der exogene Faktor ω, desto höher die Nachfrage y.")], [2, ("Je höher der exogene Faktor ω, desto niedriger die Nachfrage y.")], [3, ("Je niedriger der exogene Faktor ω, desto höher die Nachfrage y.")]], label="Frage 3: Welche Aussage über Ihre Nachfrage und den exogenen Faktor ω ist korrekt?", widget=widgets.RadioSelect) Question_4 = models.IntegerField( choices=[[1, "Der Preis des eigenen Produkts."], [2, "Der Durchschnittspreis aller Produzenten über alle Runden hinweg."], [3, "Der Durchschnittspreis aller Produzenten in der jeweiligen Runde."]], label="Frage 4: Welche der folgenden Variablen hat einen Einfluss auf die Kosten pro Stück Ihres Produkts?", widget=widgets.RadioSelect) Question_5 = models.IntegerField( choices=[[1, "... werden durch die Preissetzung aller Produzenten bestimmt und sind daher am Anfang jeder Runde unbekannt."], [2, "... sind zu Beginn jeder Runde bekannt."], [3, "... resultieren aus dem von mir festgelegten Preis."]], label="Frage 5: Die Produktionskosten ...", widget=widgets.RadioSelect) Question_6 = models.IntegerField( choices=[[1, "Eine KI bestimmt zufällige Werte."], [2, "Eine KI bewertet die grammatikalische und stilistische Qualität."], [3, "Eine KI bewertet die Überzeugungskraft."]], label="Frage 6: Wie wird die Bonuszahlung für Ihre Begründung bestimmt?", widget=widgets.RadioSelect) attempts = models.IntegerField(blank=True) Q1_first_attempt = models.IntegerField(blank=True) Q2_first_attempt = models.IntegerField(blank=True) Q3_first_attempt = models.IntegerField(blank=True) Q4_first_attempt = models.IntegerField(blank=True) Q5_first_attempt = models.IntegerField(blank=True) Q6_first_attempt = models.IntegerField(blank=True) #BC questions Question_1_BC = models.IntegerField( choices=[[1, ("Je näher mein Preis p am Zielpreis z liegt, desto höher mein Gewinn.")], [2, ("Je näher mein Preis p am Zielpreis z liegt, desto niedriger mein Gewinn.")], [3, ("Es gibt nur einen Gewinn, wenn mein Preis p exakt dem Zielpreis z entspricht.")]], label=("Frage 1: Welche Aussage über Ihren Gewinn ist korrekt?"), widget=widgets.RadioSelect) Question_2_BC = models.IntegerField( choices=[[1, ("Je höher der Durchschnittspreis P, desto höher der Zielpreis z.")], [2, ("Je höher der Durchschnittspreis P, desto niedriger der Zielpreis z.")], [3, ("Der Zielpreis z ist unabhängig vom Durchschnittspreis P.")]], label=("Frage 2: Welche Aussage über das Verhältnis zwischen dem Zielpreis z und dem Durchschnittspreis P ist korrekt?"), widget=widgets.RadioSelect) Question_3_BC = models.IntegerField( choices=[ [1, ("Der Zielpreis z liegt 15 Taler unter der Hälfte des Durchschnittspreises P.")], [2, ("Der Zielpreis z liegt 15 Taler über der Hälfte des Durchschnittspreises P.")], [3, ("Der Zielpreis z liegt 15 Taler über dem Durchschnittspreis P.")]], label=("Frage 3: Wie berechnet sich Ihr Zielpreis z?"), widget=widgets.RadioSelect, allow_html = True ) Question_4_BC = models.IntegerField( choices=[[1, "… wird durch die Preissetzung aller Produzenten bestimmt und ist daher zu Beginn jeder Runde unbekannt."], [2, "… ist zu Beginn jeder Runde bekannt."], [3, "… entspricht immer dem Zielpreis."]], label="Frage 4: Der Durchschnittspreis P ...", widget=widgets.RadioSelect) Question_5_BC = models.IntegerField( choices=[[1, "Eine KI bestimmt zufällige Werte."], [2, "Eine KI bewertet die grammatikalische und stilistische Qualität."], [3, "Eine KI bewertet die Überzeugungskraft."]], label="Frage 5: Wie wird die Bonuszahlung für Ihre Begründung bestimmt?", widget=widgets.RadioSelect) Q1_BC_first_attempt = models.IntegerField(blank=True) Q2_BC_first_attempt = models.IntegerField(blank=True) Q3_BC_first_attempt = models.IntegerField(blank=True) Q4_BC_first_attempt = models.IntegerField(blank=True) Q5_BC_first_attempt = models.IntegerField(blank=True) bonus = models.IntegerField(blank=True) bonus_mon = models.CurrencyField(blank=True) bonus_eligible = models.BooleanField(blank=True) payoff_bonus = models.IntegerField(blank=True) #Demographics Gender = models.IntegerField( choices=[[1, "Weiblich"], [2, "Männlich"], [3, "Divers"], [4, "keine Angabe"]], label="Welchem Geschlecht fühlen Sie sich zugehörig?", widget=widgets.RadioSelect) Age = models.IntegerField(label="Wie alt sind Sie?", min=10, max=99) Faculty = models.IntegerField( choices=[[1, "Sozial- und Bildungswissenschaftliche Fakultät"], [2, "Geistes- und Kulturwissenschaftliche Fakultät"], [3, "Wirtschaftswissenschaftliche Fakultät"], [4, "Juristische Fakultät"], [5, "Fakultät für Informatik und Mathematik "], [6, "An mehreren Fakultäten"], [7, "Sonstiges"]], label="An welcher Fakultät studieren Sie?", widget=widgets.RadioSelect) Makro = models.IntegerField( choices=[[1, "Ja"], [2, "Nein"]], label="Haben Sie bereits die Veranstaltung Makroökonomik besucht?", widget=widgets.RadioSelect) tech_problems = models.LongStringField(label="Haben Sie sonstige Anmerkungen oder sind Ihnen technische Fehler ausgefallen?",max_length=2000, blank=True) # GPT stuff prompt1 = models.LongStringField(blank=True) prompt2 = models.LongStringField(blank=True) prompt3 = models.LongStringField(blank=True) prompt4 = models.LongStringField(blank=True) prompt5 = models.LongStringField(blank=True) prompt6 = models.LongStringField(blank=True) chatLog = models.LongStringField(blank=True) receive = models.LongStringField(blank=True) msg1 = models.LongStringField(blank=True) msg2 = models.LongStringField(blank=True) msg3 = models.LongStringField(blank=True) msg4 = models.LongStringField(blank=True) msg5 = models.LongStringField(blank=True) msg6 = models.LongStringField(blank=True) explanation_score1 = models.IntegerField(blank=True, default=0) explanation_score2 = models.IntegerField(blank=True, default=0) explanation_score3 = models.IntegerField(blank=True, default=0) explanation_score4 = models.IntegerField(blank=True, default=0) explanation_score5 = models.IntegerField(blank=True, default=0) explanation_score6 = models.IntegerField(blank=True, default=0) reasoning1 = models.LongStringField(blank=True) reasoning2 = models.LongStringField(blank=True) reasoning3 = models.LongStringField(blank=True) reasoning4 = models.LongStringField(blank=True) reasoning5 = models.LongStringField(blank=True) reasoning6 = models.LongStringField(blank=True) #decision data keystroke_data = models.LongStringField(blank=True) # Stores JSON keystroke data keystroke_price_data = models.LongStringField(blank=True) # same for price def price_max(player): return player.omega_current def price_min(player): return player.cost_deduction # assign treatments def creating_session(subsession): for group in subsession.get_groups(): if subsession.round_number == 1: import itertools clear_cycle = itertools.cycle([True, False, False, True]) for group in subsession.get_groups(): group.clear = next(clear_cycle) print(f"Group {group.id_in_subsession}: clear = {group.clear}") import itertools optimization_cycle = itertools.cycle([False, False, True, False]) for group in subsession.get_groups(): group.optimization = next(optimization_cycle) print(f"Group {group.id_in_subsession}: optimization = {group.optimization}") else: group.clear = group.in_round(1).clear group.optimization = group.in_round(1).optimization # currently this is only for a positive shock of omega --> group statt player for p in group.get_players(): if 6<= group.round_number <=10: p.omega_current = p.omega_large p.price_aim_parameter_current = p.price_aim_parameter_post for group in subsession.get_groups(): if group.round_number==Player.shock: group.display_shock=True else: group.display_shock=False for group in subsession.get_groups(): for p in group.get_players(): p.optimization_instruction = group.optimization #print(f"Player {p.id_in_group}: optimization_instruction = {p.optimization_instruction}") for group in subsession.get_groups(): for p in group.get_players(): p.clear_instruction = group.clear #print(f"Player {p.id_in_group}: clear_instruction = {p.clear_instruction}") for group in subsession.get_groups(): for p in group.get_players(): p.prompt1 = """Du bist ein Teilnehmer eines Experiments. Die Instruktionen lauten wie folgt: ****** Das Experiment besteht aus 10 Runden. In jeder Runde erzielen Sie Gewinne in Form von Talern, die über alle Runden aufsummiert werden. Am Ende erhalten Sie Ihre gesamten Gewinne sowie eventuelle Bonuszahlungen ausbezahlt. In diesem Experiment gibt es zwei Rollen: 8 Teilnehmende interagieren als Produzenten in einer Volkswirtschaft, 4 Teilnehmende haben die Rolle des Beobachters. Die Rollen bleiben über alle Runden gleich. Ihre Rolle in diesem Experiment ist die eines Beobachters. In jeder Runde legen zunächst die Produzenten den Preis p für ihr Produkt fest. Dann werden jedem Beobachter die Preise von zwei zufällig ausgewählten Produzenten angezeigt. Ihre Aufgabe als Beobachter ist es, aus den beiden Preisen den von Ihnen bevorzugten Preis auszuwählen. Ihr Gewinn ist dabei identisch zu dem Gewinn des Produzenten, dessen Preis Sie wählen. Dieser Gewinn ergibt sich wie folgt: In jeder Runde legt jeder Produzent den Preis p für sein Produkt fest. Dieser Preis muss zwischen 10 und 40 Talern liegen. Der Gewinn des Produzenten hängt davon ab, wie nah sein gewählter Preis p am Zielpreis z liegt. Dieser Zielpreis hängt positiv von den Preisen aller 8 Produzenten ab: Aus allen gewählten Preisen wird ein Durchschnittspreis P berechnet. Daraus ergibt sich der Zielpreis nach der Formel: z=15+1/2 P Das bedeutet: Der Zielpreis liegt 15 Taler über der Hälfte des Durchschnittspreises. Dieser Zielpreis ist für alle Produzenten identisch. Da alle 8 Produzenten gleichzeitig ihren Preis festlegen, kennt zu Beginn einer Runde noch niemand den Durchschnittspreis P. Auch Sie als Beobachter kennen den Durchschnittspreis noch nicht, wenn Sie einen der beiden Preise auswählen. Ihr Ziel ist es also, möglichst gut einzuschätzen, wie die 8 Produzenten Ihre Preise setzen werden, um den Durchschnittspreis zu bestimmen. Darauf basierend wählen Sie aus den beiden Preisen den Preis aus, der Ihrer Meinung nach näher am Zielpreis liegt. Für die 8 Produzenten und Sie als Beobachter gilt gleichermaßen: Je näher der von Ihnen gewählte Preis am Zielpreis der jeweiligen Runde liegt, desto höher ist Ihr Gewinn. In einigen Runden erhalten Sie zu jedem der beiden Preise zusätzlich eine Begründung von den Produzenten. Lesen Sie sich diese Begründungen aufmerksam durch und entscheiden Sie sich dann für einen der beiden Preise. ***** Du bist in der Rolle des Beobachters und versuchst entsprechend der obigen Instruktionen deinen Gewinnen zu maximieren. Hierfür bekommst du am Ende dieser Anleitung eine einzelne, zu bewertende Begründung, welche du als überzeugend oder nicht überzeugend einordnen sollst. Im Folgenden erhältst du eine Liste mit Beispielbegründungen aus einem identischen Experiment, welche von menschlichen Beobachtern bewertet wurden. Jeder Absatz repräsentiert dabei einen Beobachter und die von ihm bewerten Begründungen. Du siehst dort jeweils, welche Begründung der Beobachter als überzeugend und welche als nicht überzeugend bewertet hat, jeweils durch ein Semikolon getrennt. Basierend auf diesen Beispielen sollst du nun bitte die zu bewertende Begründung bewerten. Hierfür ersetzt du systematisch nacheinander bei jedem Beobachter jeweils eine der Beispielbegründungen mit der zu bewertenden Begründung und entscheidest, ob diese zu bewertende Begründung überzeugender ist, als die verbliebene Beispielbegründung in dieser Zeile. Zähle anschließend, wie häufig die zu bewertende Begründung insgesamt überzeugender war. Anschließend teile diese Zahl durch 16. Ist das Ergebnis dieser Rechnung größer als 0,5 dann schreibe als letztes Zeichen deiner Antwort die Zahl „1“. Ansonsten schreibe die Zahl „0“. Falls die Eingabe nur eine sinnlose Aneinanderreihung von Buchstaben ist, schreibe die Zahl „0“. Die letzte Zahl ist deine wichtigste Aufgabe, vergiss diese also nie! Hier sind die Beispielbegründungen: Beobachter 1: Überzeugende Begründung: „das Produkt kommt aus fairer Herstellung. Die Nachhaltigkeit und Klimabilanz, sowie die Arbeitsrechte der Menschen, die das Produkt anfertigen, stehen an erster Stelle. Daraus ergibt sich der für uns fairste Preis, ein qualitativ hochwertiges, dennoch preiswertes Produkt auf den Markt zu bringen.“; Nicht überzeugende Begründung: „In meinem Produkt steckt viel Forschungsarbeit und es wurde viel experimentiert, um die optimale Leistung für unsere Kunden zu bieten. 28 Taler sind also gerechtfertigt und noch relativ günstig, so dass es sich jeder leisten kann.“ Beobachter 2: Überzeugende Begründung: „Wenn jeder diesen Preis wählt ergibt dies genau den Zielpreis. Es ist der mathematisch ideale Preis“; Nicht überzeugende Begründung: „Preis sollte im Durchschnitt liegen, also bei 20. Da es aber zu einer fortschreitende Inflation kommt, kommt es zum Preis von 25 Talern“ Beobachter 3: Überzeugende Begründung: „Weil das ein ziemlich moderater Preis ist wo ich denke dass viele andere diesen auch wählen werden. Nicht viel Risiko.“; Nicht überzeugende Begründung: „ich gehe davon aus, dass im Durchschnitt alle anderen Produzenten auch 30 als Zielpreis gewählt haben. daher ist die Hälfte des Durchschnitsspreises 15. Plus 15 ergibt das 30“ Beobachter 4: Überzeugende Begründung: „ich als Produzent möchte mein Gut mit zu einem möglichst hohen Preis verkaufen, um meinen Gewinn zu erhöhen, da der Zielpreis sich aus der Hälfte des Preises ergibt, setzte ich diesen in der jetzigen Runde eben am höchsten an, um das maximale davon auszuschöpfen“; Nicht überzeugende Begründung: „Der Preis liegt im Mittelfeld und somit ist es sehr wahrscheinlich, dass er nah an dem Zielpreis Z liegen wird, da der Durchschnitt mit hoher wahrscheinlichkeit im Mittelfeld liegen wird und durch die Halbierung und Addierung von 15 sehr nah kommen könnte.“ Beobachter 5: Überzeugende Begründung: „vorsichtige erste Einschätzung, am besten wäre für ale 40 zu nehmen, wird sich aber denke erst in den nächsten runden einpendeln, maximaler z ist 35 wenn alle den p = 40 wählen, das wird zuerst nicht passieren, deswegen denke ich ird sich z bei ca 31 einpendeln. da wir ja alle so nah wie möglich an z herankommen wollen. Die Gefahr besteht, dass der Preis noch niedriger ist, da alle so denken --> Deswegen erste Einschätzung, welche nah an dem ersten z liegen sollte“; Nicht überzeugende Begründung: „Ich habe diesen Preis gewählt, damit der Zielpreis einen niedrigen, jedoch geraden Wert annimmt. “ Beobachter 6: Überzeugende Begründung: „Ich habe mich für die Mitte der Range der vorgegebenen Taler als ersten Wert entschieden. Wenn die Mitspieler nicht stark von diesem Wert abweichen bzw. sich die gewählten Preise dort einpendeln, wird der Zielpreis 27/28 Taler betragen und meine Abweichung daher 3 Taler.“; Nicht überzeugende Begründung: „20 Taler sind angemessen, da das Produkt mittlere Produktionskosten nach sich zieht. Außerdem möchte ich den anderen Produzenten so genau die Mitte des möglichen Raums bieten, da sie so selbst entscheiden können.“ Beobachter 7: Überzeugende Begründung: „Der Preis ist deswegen so hoch angesetzt, weil man auf am meisten Gewinn erzielen möchte und Preiserhöhungen im späteren Verlauf aus dem Weg gehen möchte und deswegen konstante und gleich bleibende Preise anbieten kann, wobei andere die Preise erhöhren müssen“; Nicht überzeugende Begründung: „ich denke, dass alle einen relativ hohen preis wählen“ Beobachter 8: Überzeugende Begründung: „Aus dem Durchschnitt der möglichen Antworten des Preises P (10-40) folgt, P=25, in die Formel (15+(1/2x25)) eingesetzt ergibt sich ein Durschnittszielpreis von 17,5. Leider können nur Ganze Zahlen nenannt werden. Dies ist die einzig logische Anntwort für die erste Runde eines solchen Experiments.“; Nicht überzeugende Begründung: „Ich wähle 15, da dies der Mittelwert des möglichen Preises zwischen 10 und 40 Talern ist. Da der Preis noch unbekannt ist, gehe ich davon aus, dass der Mittelwert gewählt wird, da dies dem durchschnittlichen Wert der möglichen Geldspanne entspricht und im Laufe der nächsten Runden noch angepasst werden kann.“ Bitte bewerte nun die folgende Begründung: """ p.msg1 = json.dumps([{"role": "system", "content": p.prompt1}]) # in the prompt its currently inportant that the final score is the last stroke as only then the function at the end retrieves the score and stores it p.prompt2 = """Du bist ein Teilnehmer eines Experiments. Die Instruktionen lauten wie folgt: ****** Das Experiment besteht aus 10 Runden. In jeder Runde erzielen Sie Gewinne in Form von Talern, die über alle Runden aufsummiert werden. Am Ende erhalten Sie Ihre gesamten Gewinne sowie eventuelle Bonuszahlungen ausbezahlt. In diesem Experiment gibt es zwei Rollen: 8 Teilnehmende interagieren als Produzenten in einer Volkswirtschaft, 4 Teilnehmende haben die Rolle des Beobachters. Die Rollen bleiben über alle Runden gleich. Ihre Rolle in diesem Experiment ist die eines Beobachters. In jeder Runde legen zunächst die Produzenten den Preis p für ihr Produkt fest. Dann werden jedem Beobachter die Preise von zwei zufällig ausgewählten Produzenten angezeigt. Ihre Aufgabe als Beobachter ist es, aus den beiden Preisen den von Ihnen bevorzugten Preis auszuwählen. Ihr Gewinn ist dabei identisch zu dem Gewinn des Produzenten, dessen Preis Sie wählen. Dieser Gewinn ergibt sich wie folgt: In jeder Runde legt jeder Produzent den Preis p für sein Produkt fest. Dieser Preis muss zwischen 10 und 40 Talern liegen. Der Gewinn des Produzenten hängt davon ab, wie nah sein gewählter Preis p am Zielpreis z liegt. Dieser Zielpreis hängt positiv von den Preisen aller 8 Produzenten ab: Aus allen gewählten Preisen wird ein Durchschnittspreis P berechnet. Daraus ergibt sich der Zielpreis nach der Formel: z=15+1/2 P Das bedeutet: Der Zielpreis liegt 15 Taler über der Hälfte des Durchschnittspreises. Dieser Zielpreis ist für alle Produzenten identisch. Da alle 8 Produzenten gleichzeitig ihren Preis festlegen, kennt zu Beginn einer Runde noch niemand den Durchschnittspreis P. Auch Sie als Beobachter kennen den Durchschnittspreis noch nicht, wenn Sie einen der beiden Preise auswählen. Ihr Ziel ist es also, möglichst gut einzuschätzen, wie die 8 Produzenten Ihre Preise setzen werden, um den Durchschnittspreis zu bestimmen. Darauf basierend wählen Sie aus den beiden Preisen den Preis aus, der Ihrer Meinung nach näher am Zielpreis liegt. Für die 8 Produzenten und Sie als Beobachter gilt gleichermaßen: Je näher der von Ihnen gewählte Preis am Zielpreis der jeweiligen Runde liegt, desto höher ist Ihr Gewinn. In einigen Runden erhalten Sie zu jedem der beiden Preise zusätzlich eine Begründung von den Produzenten. Lesen Sie sich diese Begründungen aufmerksam durch und entscheiden Sie sich dann für einen der beiden Preise. ***** Du bist in der Rolle des Beobachters und versuchst entsprechend der obigen Instruktionen deinen Gewinnen zu maximieren. Hierfür bekommst du am Ende dieser Anleitung eine einzelne, zu bewertende Begründung, welche du als überzeugend oder nicht überzeugend einordnen sollst. Im Folgenden erhältst du eine Liste mit Beispielbegründungen aus einem identischen Experiment, welche von menschlichen Beobachtern bewertet wurden. Jeder Absatz repräsentiert dabei einen Beobachter und die von ihm bewerten Begründungen. Du siehst dort jeweils, welche Begründung der Beobachter als überzeugend und welche als nicht überzeugend bewertet hat, jeweils durch ein Semikolon getrennt. Basierend auf diesen Beispielen sollst du nun bitte die zu bewertende Begründung bewerten. Hierfür ersetzt du systematisch nacheinander bei jedem Beobachter jeweils eine der Beispielbegründungen mit der zu bewertenden Begründung und entscheidest, ob diese zu bewertende Begründung überzeugender ist, als die verbliebene Beispielbegründung in dieser Zeile. Zähle anschließend, wie häufig die zu bewertende Begründung insgesamt überzeugender war. Anschließend teile diese Zahl durch 16. Ist das Ergebnis dieser Rechnung größer als 0,5 dann schreibe in deiner Antwort nur die Zahl „1“. Ansonsten schreibe nur die Zahl „0“. Falls die Eingabe nur eine sinnlose Aneinanderreihung von Buchstaben ist, schreibe nur die Zahl „0“. Die Zahl ist deine wichtigste Aufgabe, vergiss diese also nie! Hier sind die Beispielbegründungen: Beobachter 1: Überzeugende Begründung: „in der vergangenen Runde war der gewählte Durchschnittspreis 29, daher denke ich, dass dies diese Runde wieder so ist“; Nicht überzeugende Begründung: „mit dieser Preissetzung garantieren wir den Konsumenten sowie den Produzenten des Produkts einen fairen Betrag für ein qualitativ hochwertiges Produkt, welches in fairen Arbeitsbedingungen hergestellt wird, aber dennoch preiswert ist.“ Beobachter 2: Überzeugende Begründung: „Da der Zp 29 war wird die Mehrheit diexs anstreben. ich berücksichtige den bevorrigen durchschnitt“; Nicht überzeugende Begründung: „Unser Produkt ist noch dabei, sich zu etablieren. Ein kurzfristiger Rabatt macht es attraktiver für die breite Masse. 25 Taler ist ein schöner glatter Betrag, der auf Kunden ansprechend wirkt.“ Beobachter 3: Überzeugende Begründung: „Es handelt sich hierbei um den mathematisch korrekten Preis. Letzte Runde waren wir nah dran, diesmal werden alle gesehen haben, dass 30 perfekt ist“; Nicht überzeugende Begründung: „Dieser Preis ist noch nicht das Maximum, ich als Produzent kann jedoch davon Profitieren und liege zudem ein bisschen höher über den durchschnittspreis der Vorherigen Runde“ Beobachter 4: Überzeugende Begründung: „Durch den bekannten Zielpreis von 29 Talern werden die anderen Produzenten wahrscheinlich diesen Preis nehmen bzw. mehr Taler für einen höheren Gewinn ansetzen deswegen habe ich einen höheren Betrag von 30 Talern gewählt“; Nicht überzeugende Begründung: „Aufgrund des vorherig berechneten Zielpreises sollte der Zielpreis bei 30 talern liegen. Er wäre somit knapp über dem Durchschnitt des vorherigen (aufgrund von Inflation)“ Beobachter 5: Überzeugende Begründung: „Da der Zielpreis in Runde 1 26 beträgt, der Durchschnittspreis aber bei 23 lag, gehe ich davon aus, dass die Produzenten ihre Preise erhöhen werden. Ich bleibe aber voerst bei dem Wert von 25, da ich keine drastische Erhöhung antizipiere.“; Nicht überzeugende Begründung: „Mein Produkt kostet 17 Taler, da es etwas kleineres ist, dass meiner Meinung nach jeder zu Hause haben sollte. Daher sollte es sich auch jeder leisten können, weswegen ich mich für einen Preis im niedrigen mittleren Bereich entschieden habe. Außerdem beinhaltet das Produkt keinerlei Akku oder andere Art von Elektronik, weswegen es nicht gerechtfertigt wäre, einen höheren Preis anzugeben.“ Beobachter 6: Überzeugende Begründung: „Ich wähle 23, da dieser Preis allen Teilnehmern bekannt ist und somit keine Informationsassymetrien bestehen. Diesbezüglich kennen die Teilnehmer den Preis und werden sich in etwa daran richten, da bereits ein Anhaltspunkt besteht und die Teilnehmer auf diese Information zurückgreifen können.“; Nicht überzeugende Begründung: „In der letzten Runde habe ich mich am Durchschnittswert orientiert. Dies mache ich diese Runde auch. Der Zielpreis z war 23. Setzt man diesen in die Formel (23=15+(1/2xP)) ein und rechnet diese aus, folgt, dass der Preis P=16 sich logisch aus der vorherigen Runde ergibt. So kann gewährt werden, dass der "Markt" dieser "Vorlkswirtschaft" stabil bleibt.“ Beobachter 7: Überzeugende Begründung: „ich denke, dass es die anderen jetzt noch etwas höher gehen werden“; Nicht überzeugende Begründung: „Der Durschnittspreis aus vorheriger Runde wurde analysiert und in die Rechnung berücksichtigt“ Beobachter 8: Überzeugende Begründung: „Da die meisten jetzt den Preis bekannten Zielpreis z = 26 wählen, um so dem Durchschnitt P = 26 führt zu z = 28, manche werden weiterhin den maximalen preis wählen, um die höchtsmögliche Gewinnsumme zu erzielen, also das allgemeine Gewinnniveau anzuheben, deswegen stat 28 wähle ich 29. Dies sollte den Zielpreis z entsprechen, eine gute Näherung sein. Herdenverhalten nach Graf Lambsdorff :)“; Nicht überzeugende Begründung: „Die mögliche Spanne des Preis p liegt zwischen 10 und 40 somit ist anzunehmen, dass der Zielpreis sich am Durchschnitt dieser Preisspanne bewegt. Das begründet meine Entscheidung zu diesem Preis.“ Bitte bewerte nun die folgende Begründung: """ p.msg2 = json.dumps([{"role": "system", "content": p.prompt2}]) p.prompt3 = """Du bist ein Teilnehmer eines Experiments. Die Instruktionen lauten wie folgt: ****** Das Experiment besteht aus 10 Runden. In jeder Runde erzielen Sie Gewinne in Form von Talern, die über alle Runden aufsummiert werden. Am Ende erhalten Sie Ihre gesamten Gewinne sowie eventuelle Bonuszahlungen ausbezahlt. In diesem Experiment gibt es zwei Rollen: 8 Teilnehmende interagieren als Produzenten in einer Volkswirtschaft, 4 Teilnehmende haben die Rolle des Beobachters. Die Rollen bleiben über alle Runden gleich. Ihre Rolle in diesem Experiment ist die eines Beobachters. In jeder Runde legen zunächst die Produzenten den Preis p für ihr Produkt fest. Dann werden jedem Beobachter die Preise von zwei zufällig ausgewählten Produzenten angezeigt. Ihre Aufgabe als Beobachter ist es, aus den beiden Preisen den von Ihnen bevorzugten Preis auszuwählen. Ihr Gewinn ist dabei identisch zu dem Gewinn des Produzenten, dessen Preis Sie wählen. Dieser Gewinn ergibt sich wie folgt: In jeder Runde legt jeder Produzent den Preis p für sein Produkt fest. Dieser Preis muss zwischen 10 und 40 Talern liegen. Der Gewinn des Produzenten hängt davon ab, wie nah sein gewählter Preis p am Zielpreis z liegt. Dieser Zielpreis hängt positiv von den Preisen aller 8 Produzenten ab: Aus allen gewählten Preisen wird ein Durchschnittspreis P berechnet. Daraus ergibt sich der Zielpreis nach der Formel: z=15+1/2 P Das bedeutet: Der Zielpreis liegt 15 Taler über der Hälfte des Durchschnittspreises. Dieser Zielpreis ist für alle Produzenten identisch. Da alle 8 Produzenten gleichzeitig ihren Preis festlegen, kennt zu Beginn einer Runde noch niemand den Durchschnittspreis P. Auch Sie als Beobachter kennen den Durchschnittspreis noch nicht, wenn Sie einen der beiden Preise auswählen. Ihr Ziel ist es also, möglichst gut einzuschätzen, wie die 8 Produzenten Ihre Preise setzen werden, um den Durchschnittspreis zu bestimmen. Darauf basierend wählen Sie aus den beiden Preisen den Preis aus, der Ihrer Meinung nach näher am Zielpreis liegt. Für die 8 Produzenten und Sie als Beobachter gilt gleichermaßen: Je näher der von Ihnen gewählte Preis am Zielpreis der jeweiligen Runde liegt, desto höher ist Ihr Gewinn. In einigen Runden erhalten Sie zu jedem der beiden Preise zusätzlich eine Begründung von den Produzenten. Lesen Sie sich diese Begründungen aufmerksam durch und entscheiden Sie sich dann für einen der beiden Preise. ***** Du bist in der Rolle des Beobachters und versuchst entsprechend der obigen Instruktionen deinen Gewinnen zu maximieren. Hierfür bekommst du am Ende dieser Anleitung eine einzelne, zu bewertende Begründung, welche du als überzeugend oder nicht überzeugend einordnen sollst. Im Folgenden erhältst du eine Liste mit Beispielbegründungen aus einem identischen Experiment, welche von menschlichen Beobachtern bewertet wurden. Jeder Absatz repräsentiert dabei einen Beobachter und die von ihm bewerten Begründungen. Du siehst dort jeweils, welche Begründung der Beobachter als überzeugend und welche als nicht überzeugend bewertet hat, jeweils durch ein Semikolon getrennt. Basierend auf diesen Beispielen sollst du nun bitte die zu bewertende Begründung bewerten. Hierfür ersetzt du systematisch nacheinander bei jedem Beobachter jeweils eine der Beispielbegründungen mit der zu bewertenden Begründung und entscheidest, ob diese zu bewertende Begründung überzeugender ist, als die verbliebene Beispielbegründung in dieser Zeile. Zähle anschließend, wie häufig die zu bewertende Begründung insgesamt überzeugender war. Anschließend teile diese Zahl durch 16. Ist das Ergebnis dieser Rechnung größer als 0,5 dann schreibe in deiner Antwort nur die Zahl „1“. Ansonsten schreibe nur die Zahl „0“. Falls die Eingabe nur eine sinnlose Aneinanderreihung von Buchstaben ist, schreibe nur die Zahl „0“. Die Zahl ist deine wichtigste Aufgabe, vergiss diese also nie! Hier sind die Beispielbegründungen: Beobachter 1: Überzeugende Begründung: „Ich orientiere mich an dem Zielpreis und an dem Durchschnitt. der durchschnitt davor war 31 und der zielpreis 30 jetzt werden einige auf 29-30 gehen und somit den wert runter drücken“; Nicht überzeugende Begründung: „Der Preis liegt jetzt bei 31, da sich der Zielpreis durch die letzten 4 Runden auf knapp 30 Talern eingependelt hat, aber mit einer Tendenz nach oben. Daher ist nun 31 Taler angemessen“ Beobachter 2: Überzeugende Begründung: „Der Preis hat sich die letzten 2 Runden kaum verändert und ist bei 30 stagniert. Deshalb denke ich, dass sich der Preis auf dem Level eingependelt hat und nicht mehr extrem schwankt“; Nicht überzeugende Begründung: „bei unserem Produkt geht es nicht nur um unsere Gewinnmaximierung, sondern um die Zufriedenheit unserer Kunden. Qualität und Nachhaltigkeit ist uns sehr wichtig. Dieser Preis garantiert Qualität und wird von uns reinvestiert in die Verbesserung des Produkts“ Beobachter 3: Überzeugende Begründung: „Letzte Runde war der Preis höher als er mathematisch hätte sein sollen. Jetzt werden mehr Leute gegensteuern,darum erwarte ich einen etwas geringeren Preis“; Nicht überzeugende Begründung: „Unser Produkt ist mittlerweile gut etabliert. Es liegt bereits in der etwas höheren Preisklasse, also wollen wir nun unsere Marke langsam für elitärere Kunden attraktiv machen. Wir steigern also den Preis langsam.“ Beobachter 4: Überzeugende Begründung: „Alle versuchen den gleichen Zielpreis zu erhalten, der Durchschnitt ist daher also 30. wenn ich den Schnitt etwas hochziehe und aufgerundet wird, bin ich damit näher am Zielpreis dran als die anderen und der Gewinn ist höher“; Nicht überzeugende Begründung: „bis jetzt lag der zp immer bei 30, deswegen nehme ich ihn gerade wieder um meinen Gewinn zu maximieren“ Beobachter 5: Überzeugende Begründung: „Der Zielpreis ist vorgegeben und der Durchschnitsspreis nähert sich sehr stark an, der Preis oben ist der sogenannte sweet spot“; Nicht überzeugende Begründung: „Aufgrund der bisherigen Ergebnisse im Zielpreis möchte ich mein Produkt auf knapp über die Hälfte des Wertes setzen. Außerdem ist es aus hochwertigem Material gefertigt und verfügt über eine neuere Technologie, die es so auf dem Markt nur wenige Male gibt. Um wettbewerbsfähig zu sein und möglichst viele der Produkte zu verkaufen, habe ich mich für einen Preis von 27 Münzen entschieden, um damit eine mittlere Preisbasis zu schaffen.“ Beobachter 6: Überzeugende Begründung: „Wenn es mittlerweile hoffentlich alle verstanden haben, wählen alle ihren p = z(letzter Runde) Somit wäre P = 28 und das z(DieseRunde) wäre somit 15+0,5*28 und somit 29, aufgrund der Verzögerung in dieser Runde und dem zweiersprung aus runde 3 wäre es dennoch ratsam p = 30 zu wählen, da somit die varianz und Streung von den Produzenten mit p=40 entgegenzuwirken. Somit wäre p=30 eine überzuegende Schätzung.“; Nicht überzeugende Begründung: „ich denke, dass die anderen jetzt leicht anheben“ Beobachter 7: Überzeugende Begründung: „Die letzten Runden konnte man seine Entschiedung abhängig von dem Durchschnittspreis machen und so für ALLE den höchst möglichen Gewinn erzielen. Durch Kooperation ist dies nun (da einzelne sich diese Strategie verwehrt haben mit D(p)=27) auch wieder möglich. So können wir alle mehr Taler gewinnen und auch im Sinne des "Marktes" dieser "Volkswirtschaft" den Preis stabil halten!“; Nicht überzeugende Begründung: „Es wurde festgestellt, dass in den letzten vorangegangenen Runden der Preis eine klene, inkrementelle Änderung durchlief. Der Preis hat sich von Runde zu Runde minmal erhöht, weshalb auch in dieser Runde ausgegangen werden kann, dass wieder eine minimale Preiserhöhung vorliegt. Da aber kein Anreiz besteht, eine hohe Preisänderung vorzunehmen, erhöhe ich den Preis nur schrittweise.“ Beobachter 8: Überzeugende Begründung: „Der letzte Zielpreis lag bei 28, welcher im schnitt bisher jeweils 3 Punkte über dem Durchschnittspreis lag. Dieser war bei 25. Wenn sich die Mitspielenden den letzten Durchschnittspreis gemerkt haben und somit dazu bewegt sind, diesen erneut zu wählen liege ich korrekt.“; Nicht überzeugende Begründung: „Der Zielpreis stagniert aktuell, der Durchschnittspreis betrug 27. Ich wähle den vorherigen Zielpreis, da ich vermute, dass keine hohen Abweichungen in der nächsten Runde zu erwarten sind.“ Bitte bewerte nun die folgende Begründung: """ p.msg3 = json.dumps([{"role": "system", "content": p.prompt3}]) p.prompt4 = """Du bist ein Teilnehmer eines Experiments. Die Instruktionen lauten wie folgt: ****** Das Experiment besteht aus 10 Runden. In jeder Runde erzielen Sie Gewinne in Form von Talern, die über alle Runden aufsummiert werden. Am Ende erhalten Sie Ihre gesamten Gewinne sowie eventuelle Bonuszahlungen ausbezahlt. In diesem Experiment gibt es zwei Rollen: 8 Teilnehmende interagieren als Produzenten in einer Volkswirtschaft, 4 Teilnehmende haben die Rolle des Beobachters. Die Rollen bleiben über alle Runden gleich. Ihre Rolle in diesem Experiment ist die eines Beobachters. In jeder Runde legen zunächst die Produzenten den Preis p für ihr Produkt fest. Dann werden jedem Beobachter die Preise von zwei zufällig ausgewählten Produzenten angezeigt. Ihre Aufgabe als Beobachter ist es, aus den beiden Preisen den von Ihnen bevorzugten Preis auszuwählen. Ihr Gewinn ist dabei identisch zu dem Gewinn des Produzenten, dessen Preis Sie wählen. Dieser Gewinn ergibt sich wie folgt: In jeder Runde legt jeder Produzent den Preis p für sein Produkt fest. Dieser Preis muss zwischen 10 und 40 Talern liegen. Der Gewinn des Produzenten hängt davon ab, wie nah sein gewählter Preis p am Zielpreis z liegt. Dieser Zielpreis hängt positiv von den Preisen aller 8 Produzenten ab: Aus allen gewählten Preisen wird ein Durchschnittspreis P berechnet. Daraus ergibt sich der Zielpreis nach der Formel: z=15+1/2 P Das bedeutet: Der Zielpreis liegt 15 Taler über der Hälfte des Durchschnittspreises. Dieser Zielpreis ist für alle Produzenten identisch. Da alle 8 Produzenten gleichzeitig ihren Preis festlegen, kennt zu Beginn einer Runde noch niemand den Durchschnittspreis P. Auch Sie als Beobachter kennen den Durchschnittspreis noch nicht, wenn Sie einen der beiden Preise auswählen. Ihr Ziel ist es also, möglichst gut einzuschätzen, wie die 8 Produzenten Ihre Preise setzen werden, um den Durchschnittspreis zu bestimmen. Darauf basierend wählen Sie aus den beiden Preisen den Preis aus, der Ihrer Meinung nach näher am Zielpreis liegt. Für die 8 Produzenten und Sie als Beobachter gilt gleichermaßen: Je näher der von Ihnen gewählte Preis am Zielpreis der jeweiligen Runde liegt, desto höher ist Ihr Gewinn. In einigen Runden erhalten Sie zu jedem der beiden Preise zusätzlich eine Begründung von den Produzenten. Lesen Sie sich diese Begründungen aufmerksam durch und entscheiden Sie sich dann für einen der beiden Preise. ***** Du bist in der Rolle des Beobachters und versuchst entsprechend der obigen Instruktionen deinen Gewinnen zu maximieren. Hierfür bekommst du am Ende dieser Anleitung eine einzelne, zu bewertende Begründung, welche du als überzeugend oder nicht überzeugend einordnen sollst. Im Folgenden erhältst du eine Liste mit Beispielbegründungen aus einem identischen Experiment, welche von menschlichen Beobachtern bewertet wurden. Jeder Absatz repräsentiert dabei einen Beobachter und die von ihm bewerten Begründungen. Du siehst dort jeweils, welche Begründung der Beobachter als überzeugend und welche als nicht überzeugend bewertet hat, jeweils durch ein Semikolon getrennt. Basierend auf diesen Beispielen sollst du nun bitte die zu bewertende Begründung bewerten. Hierfür ersetzt du systematisch nacheinander bei jedem Beobachter jeweils eine der Beispielbegründungen mit der zu bewertenden Begründung und entscheidest, ob diese zu bewertende Begründung überzeugender ist, als die verbliebene Beispielbegründung in dieser Zeile. Zähle anschließend, wie häufig die zu bewertende Begründung insgesamt überzeugender war. Anschließend teile diese Zahl durch 16. Ist das Ergebnis dieser Rechnung größer als 0,5 dann schreibe in deiner Antwort nur die Zahl „1“. Ansonsten schreibe nur die Zahl „0“. Falls die Eingabe nur eine sinnlose Aneinanderreihung von Buchstaben ist, schreibe nur die Zahl „0“. Die Zahl ist deine wichtigste Aufgabe, vergiss diese also nie! Bitte beachte, dass die folgenden Begründungen aus einer Runde stammen, in der alle wissen, dass sich die Formel für den Zielpreis für alle auf z=25+1/2 P erhöht hat, und der Preis jetzt zwischen 10 und 60 liegen kann. Hier sind die Beispielbegründungen: Beobachter 1: Überzeugende Begründung: „Es ist der Durchschnitt für alle. Die letzten Runden haben gezeigt, dass sich am Durchschnitt orientiert wird“; Nicht überzeugende Begründung: „Der Zielpreis war bisher bei knapp 30 Talern, damit über den Durchschnitt von 20 Talern. Durch die neue Formel ist der Talerdurchschnitt höher, also 35“ Beobachter 2: Überzeugende Begründung: „Das Äquivalent zum alten Zielpreis im Neuen wäre 50, aber wir wollen unsere Kunden nicht überfordern mit einer zu hohen Preissteigerung. Solange eine 4 vorne ist, sind sie hoffentlich noch zufrieden.“; Nicht überzeugende Begründung: „50 ist der Preis, der genau dem Zielpreis entspricht. Ich gehe davon aus, dass alle anderen dies ebenfalls erkannt haben und darum den mathematisch idealen Preis gewählt haben“ Beobachter 3: Überzeugende Begründung: „Da sich nun alleine schon der Zielpreis um 10 taler erhöht hat und der Preis höher angesetzt werden kann, wird auch der Zielpreis mindestens um 15 Taler steigen “; Nicht überzeugende Begründung: „dieser Preis garantiert sowohl Qualität als auch faire Arbeitsbedingungen in der Herstellung. Unsere Gewinne dienen dem Wohl des Produkts und werden stets in die Qualitätssicherung und Entwicklung gesteckt, um unseren Kunden das bestmögliche Produkt zu dem bestmöglichen Preisen anbieten zu können.“ Beobachter 4: Überzeugende Begründung: „Da sich Z um 10 erhöht werden die anderen Produzenten den Preis auch anheben. Davor war es immer zwischen 29-31. 47 wäre eine moderate erhöhung“; Nicht überzeugende Begründung: „bis jetzt haben lag der zielpreis immer bei 30 und jeder war darauf getrimmt die 30 als preis zu setzen, ich hoffe dass da jetzt wieder so kommt und aus sicht des produzenten, kann ich so auch einen hohen Preis halten“ Beobachter 5: Überzeugende Begründung: „durch die neue funktion steigt der preis erheblich an.“; Nicht überzeugende Begründung: „Mein Preis setzt sich aus Elektronik und hochwertiger Sitzmöglichkeit zusammen, die beheizbar ist und so für eine wohlige Wärme sorgt. Der Preis ist gerechtfertigt, da er zwar etwas über dem mittleren Bereich liegt, allerdings auch eher in Richtung Luxusartikel geht, als in etwas das jede Person haben muss. Gerade die Menschen, die es wollen, werden es zu jedem Preis kaufen.“ Beobachter 6: Überzeugende Begründung: „Der Zielpreis ist jetzt gestiegen, jetzt müssen die Produzenten auch die Preise anheben. Hätte man damals sich auf einen etwas höheren preis geeinigt bräuchte man jetzt den Zielpreis nicht erhöhren. Naja, dann müssen wir jetzt erhöhen“; Nicht überzeugende Begründung: „Dies ist der Durchschnitt, der in den letzten Runden auch immer ungefähr gewählt wurde (vgl. D(p)= 25-27; wegen P= 10-40). Es Ist nur plausibel nun auch wieder den Durchschnitt anzustreben, dass alle Teilnehmer einen hohen Talergewin erzielen können! Außerdem wird im Sinne der "Volkswirtschaft" dieses Experiments der Preis stabil gehalten!“ Beobachter 7: Überzeugende Begründung: „Aufgrund der Verschiebung der Range sowie des Zielpreises gehe ich nun von einer ähnlichen Verschiebung des Durchschnittpreises um 10 Punkte aus, welcher nun sich bei ca 38 einpendeln sollte um den durchschnitt der Range zwsichen 10 und 60 zu erlangen.“; Nicht überzeugende Begründung: „Die Talerrange hat sich geändert, daher nehme ich den mittleren Wert für meinen Preis, also 35, an und berechne auf Basis dessen den Zielpreis. Ich gehe davon aus, dass sich die Preise um den Mittelwert herum einpendeln werden.“ Beobachter 8: Überzeugende Begründung: „Wir nehmen (herdenverhalten) den z aus letzter Runde als p an. Somit führt einsetzen von 29 zu 25 + 14,5 = 35, da mittlerweile alle den mechanismus wahrscheinlich verstanden hhaben wird jetzt jeder versuchen 35 zu wählen. Da durh die neue Funktion der gernerlle Abstand höher gworden ist durch 25 wird jetzt 35*0,5“; Nicht überzeugende Begründung: „Da erneut keine Informationen bezüglich des Verhaltens anderer Teilnehmer besteht, kann erneut davon ausgegangen werden, dass sich der Preis um den Mittelwert zwischen 10 und 60 befinden wird. Noch sind keine Informationen vorhanden bzgl. des Preises anderer, daher wird der durchschnittliche Wert herangezogen, welcher in den folgenden Runden noch angepasst werden kann“ Bitte bewerte nun die folgende Begründung: """ p.msg4 = json.dumps([{"role": "system", "content": p.prompt4}]) p.prompt5 = """Du bist ein Teilnehmer eines Experiments. Die Instruktionen lauten wie folgt: ****** Das Experiment besteht aus 10 Runden. In jeder Runde erzielen Sie Gewinne in Form von Talern, die über alle Runden aufsummiert werden. Am Ende erhalten Sie Ihre gesamten Gewinne sowie eventuelle Bonuszahlungen ausbezahlt. In diesem Experiment gibt es zwei Rollen: 8 Teilnehmende interagieren als Produzenten in einer Volkswirtschaft, 4 Teilnehmende haben die Rolle des Beobachters. Die Rollen bleiben über alle Runden gleich. Ihre Rolle in diesem Experiment ist die eines Beobachters. In jeder Runde legen zunächst die Produzenten den Preis p für ihr Produkt fest. Dann werden jedem Beobachter die Preise von zwei zufällig ausgewählten Produzenten angezeigt. Ihre Aufgabe als Beobachter ist es, aus den beiden Preisen den von Ihnen bevorzugten Preis auszuwählen. Ihr Gewinn ist dabei identisch zu dem Gewinn des Produzenten, dessen Preis Sie wählen. Dieser Gewinn ergibt sich wie folgt: In jeder Runde legt jeder Produzent den Preis p für sein Produkt fest. Dieser Preis muss zwischen 10 und 40 Talern liegen. Der Gewinn des Produzenten hängt davon ab, wie nah sein gewählter Preis p am Zielpreis z liegt. Dieser Zielpreis hängt positiv von den Preisen aller 8 Produzenten ab: Aus allen gewählten Preisen wird ein Durchschnittspreis P berechnet. Daraus ergibt sich der Zielpreis nach der Formel: z=15+1/2 P Das bedeutet: Der Zielpreis liegt 15 Taler über der Hälfte des Durchschnittspreises. Dieser Zielpreis ist für alle Produzenten identisch. Da alle 8 Produzenten gleichzeitig ihren Preis festlegen, kennt zu Beginn einer Runde noch niemand den Durchschnittspreis P. Auch Sie als Beobachter kennen den Durchschnittspreis noch nicht, wenn Sie einen der beiden Preise auswählen. Ihr Ziel ist es also, möglichst gut einzuschätzen, wie die 8 Produzenten Ihre Preise setzen werden, um den Durchschnittspreis zu bestimmen. Darauf basierend wählen Sie aus den beiden Preisen den Preis aus, der Ihrer Meinung nach näher am Zielpreis liegt. Für die 8 Produzenten und Sie als Beobachter gilt gleichermaßen: Je näher der von Ihnen gewählte Preis am Zielpreis der jeweiligen Runde liegt, desto höher ist Ihr Gewinn. In einigen Runden erhalten Sie zu jedem der beiden Preise zusätzlich eine Begründung von den Produzenten. Lesen Sie sich diese Begründungen aufmerksam durch und entscheiden Sie sich dann für einen der beiden Preise. ***** Du bist in der Rolle des Beobachters und versuchst entsprechend der obigen Instruktionen deinen Gewinnen zu maximieren. Hierfür bekommst du am Ende dieser Anleitung eine einzelne, zu bewertende Begründung, welche du als überzeugend oder nicht überzeugend einordnen sollst. Im Folgenden erhältst du eine Liste mit Beispielbegründungen aus einem identischen Experiment, welche von menschlichen Beobachtern bewertet wurden. Jeder Absatz repräsentiert dabei einen Beobachter und die von ihm bewerten Begründungen. Du siehst dort jeweils, welche Begründung der Beobachter als überzeugend und welche als nicht überzeugend bewertet hat, jeweils durch ein Semikolon getrennt. Basierend auf diesen Beispielen sollst du nun bitte die zu bewertende Begründung bewerten. Hierfür ersetzt du systematisch nacheinander bei jedem Beobachter jeweils eine der Beispielbegründungen mit der zu bewertenden Begründung und entscheidest, ob diese zu bewertende Begründung überzeugender ist, als die verbliebene Beispielbegründung in dieser Zeile. Zähle anschließend, wie häufig die zu bewertende Begründung insgesamt überzeugender war. Anschließend teile diese Zahl durch 16. Ist das Ergebnis dieser Rechnung größer als 0,5 dann schreibe in deiner Antwort nur die Zahl „1“. Ansonsten schreibe nur die Zahl „0“. Falls die Eingabe nur eine sinnlose Aneinanderreihung von Buchstaben ist, schreibe nur die Zahl „0“. Die Zahl ist deine wichtigste Aufgabe, vergiss diese also nie! Bitte beachte, dass die folgenden Begründungen aus einer Runde stammen, in der alle wissen, dass sich die Formel für den Zielpreis für alle auf z=25+1/2 P erhöht hat, und der Preis jetzt zwischen 10 und 60 liegen kann. Hier sind die Beispielbegründungen: Beobachter 1: Überzeugende Begründung: „durch die Steigerung des Marktwertes unseres Produktes gibt es eine Preiserhöhung. Nur durch diese können wir garantieren, das qualitativ hochwertigste Produkt anzubieten und stets in die Herstellung und Qualität zu investieren. das Konsumentenwohl liegt uns sehr am Herzen und der Preis ist eine Abwägung, die fairsten Bedingungen für alle beizubehalten.“; Nicht überzeugende Begründung: „Ich orientiere mich an dem Durchschnitt und vorherigen Zielpreis. DIe anderen Produzenten werden dasselbe tun aus Sicherheit und Routine.“ Beobachter 2: Überzeugende Begründung: „Letzte Runde haben leider viele Produzenten den mathematisch perfekten Preis von 50 nicht gesehen. Voraussichtlich werden sie diesmal näher dran sein aber immer noch nicht die 50 erreichen darum diese Runde nur 49“; Nicht überzeugende Begründung: „Jeder möchte seinen Gewinn maximieren und da der durchschnittspreis bn der letzten Runde bei 47 lag, soll dieser beibehalten werden“ Beobachter 3: Überzeugende Begründung: „Der Durchschnittspreis war in der vergangenen Runde eher niedrig, daher werden die anderen jetzt einen höheren Betrag nehmen. Ich ziehe mit meiner Zahl den Schnitt noch mehr in die Höhe, weshalb mein Zielpreis näher an dem Ergebnis sein wird als der der anderen“; Nicht überzeugende Begründung: „Der Preis wird sich wie bei der vorherigen Runde mit hoher Wahrscheinlichkeit nochmal erhöhen, da die anderen Produzenten ca ihren Preis um den Zielpreis herum ansetzen werden “ Beobachter 4: Überzeugende Begründung: „Wir wollen wieder eine kleine Preissteigerung, aber trotzdem noch eine 4 an der Zehnerstelle, um Kundinnen und Kunden nicht zu überfordern. Wir forschen natürlich weiterhin an dem Produkt, um ihnen die beste Leistung für ihr Geld zu bieten.“; Nicht überzeugende Begründung: „Der Durchschnitt war bei 47. Da es bisher immer eine Tendenz nach oben gegeben hat, würde ich den Preis nun auf 48 Taler schätzen“ Beobachter 5: Überzeugende Begründung: „Da jetzt die Diskrepanz zwischen z und p höher sein wird, da durch die 25 statt 15 der Abstand höher ist, wird jeder nicht nur 44 als p wählen, sondern 44 schon in z einsetzen und somit 25 + 44*0,5 = 47 wählen als p, das wissen wir und whählen somit p mit dem Wissen dass als P ca. 47 rasukommen wird: Etwas höher bei 48“; Nicht überzeugende Begründung: „Durch Orientierung am Durchschnittspreis D(p)=37 der vergangenen Runde ist es nur plausibel, diesen weiterhin auf diesem Wert zu halten, sodass der Durchschnitt der Teilnehhmenden weiterhin nah an diesem Wert liegt. Nur einzelne Ausreißer variieren den Preis, was ihnen aber selbst schadet, weshalb sich an dem Wert 37 gehalten werden soll. Es geht in dieser "Volkswirtschaft" schließlich um Kooperation!“ Beobachter 6: Überzeugende Begründung: „Die systematische Unterschätzung des Durchschnittspreises in der letzten Runde hat zu einem Abstand von 10 Punkten zwischen Durchschnittspreis und Zielpreis gefährt, da sich die Streuung der Antworten erhöht hat. nun wäre eine sinnvolle Anpassung diesen Spread zu schließen. Hierfür muss der Preis höher am Ziel orientiert gesetzt werden.“; Nicht überzeugende Begründung: „Es bestehen Informationen ezüglich des Preises. Daher kann davon ausgegangen werden, dass sich der Preis in etwa bei dieser Höhe einpendelt.“ Beobachter 7: Überzeugende Begründung: „Ich passe meinen Preis dem Mittelwert der Range an und setze ihn so, dass er dem Zielpreis nah kommen wird, da ich antizipiere, dass die anderen Produzenten ihre Preise nicht stark anpassen werden.“; Nicht überzeugende Begründung: „die anderen werden jetzt tedenziell noch ein bisschen anheben aber nicht zu viel“ Beobachter 8: Überzeugende Begründung: „Der vorherige Zielwert lag in etwa in diesem Bereich. Neben dieser Begründung spricht für den Preis selbstverständlich auch die Qualität des Produkts selbst. Es ist ein Luxusgut, dass man sich nur von Zeit zu Zeit gönnen würde. Außerdem braucht man es sich lediglich alle 5-7 Jahre zu kaufen, weswegen es einen höheren Preis auch durchaus rechtfertigt.“; Nicht überzeugende Begründung: „Jetzt gehts ab, da der Zielpreis so erhöht wurde müssen die Produzenten erhöhen, sonst gehen ihnen Geld durch die Lappen. Man möchte ja nicht mit dem selben Produkt weniger Geld verdienen?“ Bitte bewerte nun die folgende Begründung: """ p.msg5 = json.dumps([{"role": "system", "content": p.prompt5}]) p.prompt6 = """Du bist ein Teilnehmer eines Experiments. Die Instruktionen lauten wie folgt: ****** Das Experiment besteht aus 10 Runden. In jeder Runde erzielen Sie Gewinne in Form von Talern, die über alle Runden aufsummiert werden. Am Ende erhalten Sie Ihre gesamten Gewinne sowie eventuelle Bonuszahlungen ausbezahlt. In diesem Experiment gibt es zwei Rollen: 8 Teilnehmende interagieren als Produzenten in einer Volkswirtschaft, 4 Teilnehmende haben die Rolle des Beobachters. Die Rollen bleiben über alle Runden gleich. Ihre Rolle in diesem Experiment ist die eines Beobachters. In jeder Runde legen zunächst die Produzenten den Preis p für ihr Produkt fest. Dann werden jedem Beobachter die Preise von zwei zufällig ausgewählten Produzenten angezeigt. Ihre Aufgabe als Beobachter ist es, aus den beiden Preisen den von Ihnen bevorzugten Preis auszuwählen. Ihr Gewinn ist dabei identisch zu dem Gewinn des Produzenten, dessen Preis Sie wählen. Dieser Gewinn ergibt sich wie folgt: In jeder Runde legt jeder Produzent den Preis p für sein Produkt fest. Dieser Preis muss zwischen 10 und 40 Talern liegen. Der Gewinn des Produzenten hängt davon ab, wie nah sein gewählter Preis p am Zielpreis z liegt. Dieser Zielpreis hängt positiv von den Preisen aller 8 Produzenten ab: Aus allen gewählten Preisen wird ein Durchschnittspreis P berechnet. Daraus ergibt sich der Zielpreis nach der Formel: z=15+1/2 P Das bedeutet: Der Zielpreis liegt 15 Taler über der Hälfte des Durchschnittspreises. Dieser Zielpreis ist für alle Produzenten identisch. Da alle 8 Produzenten gleichzeitig ihren Preis festlegen, kennt zu Beginn einer Runde noch niemand den Durchschnittspreis P. Auch Sie als Beobachter kennen den Durchschnittspreis noch nicht, wenn Sie einen der beiden Preise auswählen. Ihr Ziel ist es also, möglichst gut einzuschätzen, wie die 8 Produzenten Ihre Preise setzen werden, um den Durchschnittspreis zu bestimmen. Darauf basierend wählen Sie aus den beiden Preisen den Preis aus, der Ihrer Meinung nach näher am Zielpreis liegt. Für die 8 Produzenten und Sie als Beobachter gilt gleichermaßen: Je näher der von Ihnen gewählte Preis am Zielpreis der jeweiligen Runde liegt, desto höher ist Ihr Gewinn. In einigen Runden erhalten Sie zu jedem der beiden Preise zusätzlich eine Begründung von den Produzenten. Lesen Sie sich diese Begründungen aufmerksam durch und entscheiden Sie sich dann für einen der beiden Preise. ***** Du bist in der Rolle des Beobachters und versuchst entsprechend der obigen Instruktionen deinen Gewinnen zu maximieren. Hierfür bekommst du am Ende dieser Anleitung eine einzelne, zu bewertende Begründung, welche du als überzeugend oder nicht überzeugend einordnen sollst. Im Folgenden erhältst du eine Liste mit Beispielbegründungen aus einem identischen Experiment, welche von menschlichen Beobachtern bewertet wurden. Jeder Absatz repräsentiert dabei einen Beobachter und die von ihm bewerten Begründungen. Du siehst dort jeweils, welche Begründung der Beobachter als überzeugend und welche als nicht überzeugend bewertet hat, jeweils durch ein Semikolon getrennt. Basierend auf diesen Beispielen sollst du nun bitte die zu bewertende Begründung bewerten. Hierfür ersetzt du systematisch nacheinander bei jedem Beobachter jeweils eine der Beispielbegründungen mit der zu bewertenden Begründung und entscheidest, ob diese zu bewertende Begründung überzeugender ist, als die verbliebene Beispielbegründung in dieser Zeile. Zähle anschließend, wie häufig die zu bewertende Begründung insgesamt überzeugender war. Anschließend teile diese Zahl durch 16. Ist das Ergebnis dieser Rechnung größer als 0,5 dann schreibe in deiner Antwort nur die Zahl „1“. Ansonsten schreibe nur die Zahl „0“. Falls die Eingabe nur eine sinnlose Aneinanderreihung von Buchstaben ist, schreibe nur die Zahl „0“. Die Zahl ist deine wichtigste Aufgabe, vergiss diese also nie! Bitte beachte, dass die folgenden Begründungen aus einer Runde stammen, in der alle wissen, dass sich die Formel für den Zielpreis für alle auf z=25+1/2 P erhöht hat, und der Preis jetzt zwischen 10 und 60 liegen kann. Hier sind die Beispielbegründungen: Beobachter 1: Überzeugende Begründung: „Der Preis hat sich auf dem Niveau eingependelt und die anderen Produzenten werden mit großer Sicherheit wieder diesen Preis wählen oder einer der etwas höher liegt“; Nicht überzeugende Begründung: „da der Durchschnitt sich die letzten 2 Runden nicht erhöht hat, bleibe ich bei den 50 Talern. Zudem ist 50 eine runde Zahl, die man intuitiv eher nehmen würde, als 51 oder 49“ Beobachter 2: Überzeugende Begründung: „50 ist der rechnerisch perfekte Preis. Ein Raum voller Studenten wird dies erkannt haben“; Nicht überzeugende Begründung: „dieser Preis ist der fairste, den wir als Unternehmen euch bieten können. Der Preis ist nicht nur das Produkt, sondern bedeutet auch Qualität, Nachhaltigkeit, faire Herstellungsprozesse und Reinvestierung zur stetigen Verbesserung. Eure Zufriedenheit liegt uns sehr am Herzen.“ Beobachter 3: Überzeugende Begründung: „Der Zielpreis und der Durchschnitt lagen in der Vorrunde bei 50. Die meisten werden sich auch erneut in dem Bereich bewegen weil es Ihnen Sicherheit gibt und sie einen gewissen Trend erkennen, den sie auch verfolgen werden.“; Nicht überzeugende Begründung: „Ich möchte den Zielpreis nach oben ziehen, damit mein Gewinn höher ist und ich näher dran bin als die anderen“ Beobachter 4: Überzeugende Begründung: „der zp war jetzt zwei Runden hintereinander 50, da ich meinen Gewinn maximieren möchte, gehe ich auf die selbe Zahl, da ich glaube das alle es so weiterbehalten wollen um ebenso ihre Gewinn zu maximieren“; Nicht überzeugende Begründung: „Wir haben wieder viel Forschungsaufwand hineingesteckt, um unseren Kunden das bestmögliche Ergebnis bieten zu können. Außerdem etablieren wir uns als Luxusmarke. Die 52 Taler liegen absolut im Rahmen.“ Beobachter 5: Überzeugende Begründung: „Durch den in der Formel angelegten Drift verschiebt sich der Zielpreis nach oben, was bewirkt, dass die Mitspielenden nachsteuern. Das in Bezug genommen müsste sich der Zielpreis nun auf einem Niveau von 53 befinden. Somit wird die sich fortgesetzte Erhöhung des Preises der Produzenten miteinbezogen und die Annahme, dass diese wiederum ebenfalls die Preisanpassung der anderen Produzenten berücksichtigen.“; Nicht überzeugende Begründung: „alle werden jetzt nochmal höher “ Beobachter 6: Überzeugende Begründung: „Ja krass, jetzt haben wir den Salat, die Preise sind so angestiegen, dass man es eher als teueer bezeichnen kann, als erschwinglich. Man würde zu diesem Moment denken, warum wechsle ich nicht zu einem ganz neuen Produzenten? Warum nicht? Weil die Marke jetzt etabliert ist HAHAHAHAHA“; Nicht überzeugende Begründung: „Weiterhin, wie in den vorherigen Runden sich an dem Durschnittspreis zu orientieren lässt auf kooperation zwischen den Teilnehmenden hoffen, wesshalb die einzig rationale antwort bei P=49 liegt. “ Beobachter 7: Überzeugende Begründung: „Ich wähle den vorherigen Zielpreis von 50, da P 49 betrug und die Abweichung somit minimal ist. Ich antizipiere, dass die weiteren Produzenten ebenfalls nah an diesen Werten bleiben werden, um ihren Gewinn zu maximieren.“; Nicht überzeugende Begründung: „In den vorhergehenden Runden konnte beobachtet werden, dass der Preis schrittweise stieg. Eine Möglichkeit dessen könnte sein, dass die Teilnehmer ihren Preis maximieren möchten, um so beim Verkauf eines einzigen Produktes den höchsten Gewinn zu erzielen. Aufgrund dieses Anhaltspunktes kann auch in dieser Runde davon ausgegangen werden, dass der Preis erneut steigt, sich aber auf ähnlichem Preisniveau befindet wie in der vorhergehenden Runde.“ Beobachter 8: Überzeugende Begründung: „Die meisten haben es mittlerweile verstanden oder hatten auch Makro, Herdenverhalten, sie wählen z aus letzter Rund als p somit wäre für diese Runde 50. hier würde sich auch das Gleichgewicht einpendeln, da P = 50 zu Zielpreis = 50 führt und somit jeder besser gestellt wird, wenn er 50 wählt, der Effekt der 25 Konstante in der z wurde somit absorbiert.“; Nicht überzeugende Begründung: „Der Preis des Produkts setzt sich aus unterschiedlichen Komponenten zusammen. Zum einen liegt er in der wissenschaftlichen Forschung begründet, die extra für dieses Produkt durchgeführt wurde. Zum anderen aber auch in der Patentierung des Produkts, da es sich hierbei um ein Produkt von neuester Elektronenwissenschaft handelt. Neben diesen bereits schwer ins Gewicht fallenden Preisreglern muss man selbstverständlich auch die Qualität und die Herkunft des Produkts bedenken.“ Bitte bewerte nun die folgende Begründung: """ p.msg6 = json.dumps([{"role": "system", "content": p.prompt6}]) def runGPT(inputMessage): completion = openai.ChatCompletion.create( model=C.MODEL, messages=inputMessage, temperature=C.TEMP ) return completion["choices"][0]["message"]["content"] def average_price(group): group.average_price = 0 for player in group.get_players(): group.average_price += player.price group.average_price /= C.PLAYERS_PER_GROUP def explanation(player): return player.explanation # calculating the earnings def round_results(group): players = group.get_players() for p in players: if p.price < 10: p.price = 10 players = group.get_players() group.average_price = 0 for player in group.get_players(): group.average_price += player.price group.average_price /= C.PLAYERS_PER_GROUP group.average_price = int(Decimal(group.average_price).to_integral_value(rounding=ROUND_HALF_UP)) for p in players: p.output = (p.omega_current - p.price) p.revenue = p.output * p.price p.unit_costs = group.average_price - p.cost_deduction p.total_costs = p.unit_costs * p.output p.earnings = (p.price - p.unit_costs) * p.output p.per_piece_earnings = p.price - p.unit_costs # if in BC p.price_aim = round((p.omega_current + group.average_price - p.cost_deduction) / 2) for p in players: if p.output < 0: p.output =0 if p.earnings < 0: p.earnings = 0 players = group.get_players() for p in players: p.payoff_round = p.earnings if group.round_number>1: player_in_all_rounds=p.in_all_rounds() p.payoff_acc = sum([p.payoff_round for p in player_in_all_rounds]) else: p.payoff_acc = p.payoff_round if p.in_round(1).attempts > 1: p.bonus_eligible = False p.bonus = 0 if p.in_round(1).attempts == 1: p.bonus_eligible = True p.bonus = 400 p.bonus_mon = cu(p.bonus).to_real_world_currency(p.session) / p.exchange_rate p.payoff_mon = math.ceil(cu(p.payoff_acc).to_real_world_currency(p.session) / p.exchange_rate) if p.payoff_mon < 0.1: #? p.payoff_mon = 3.5 if group.round_number == 10: p.explanation_bonus_taler = ( p.in_round(1).explanation_score1 + p.in_round(2).explanation_score2 + p.in_round(5).explanation_score3 + p.in_round(6).explanation_score4 + p.in_round(7).explanation_score5 + p.in_round(10).explanation_score6 )*(p.exchange_rate//2) p.explanation_bonus = cu(p.explanation_bonus_taler).to_real_world_currency(p.session) / p.exchange_rate p.cum_score= (p.in_round(1).explanation_score1+ p.in_round(2).explanation_score2 + p.in_round(5).explanation_score3 + p.in_round(6).explanation_score4 + p.in_round(7).explanation_score5 + p.in_round(10).explanation_score6) p.payoff_mon_final = math.ceil(p.payoff_mon + p.bonus_mon + p.show_up_fee + p.explanation_bonus) p.payoff_mon_final_otree = math.ceil(p.payoff_mon + p.bonus_mon + p.explanation_bonus) p.payoff = p.payoff_mon_final_otree # as currently defined, there cannot be negative value in the end. otherwise use if conditions <0 = =0 # further currently there is no test or anything alike included, thus payoff = payoff_total # currently no calibration of the payoffs # PAGES class Place(Page): form_model = 'player' form_fields = ['sitzplatznummer'] @staticmethod def before_next_page(player: Player, timeout_happened): player.participant.label = str(player.sitzplatznummer) @staticmethod def is_displayed(player: Player): return (player.round_number == 1) class Start(Page): @staticmethod def is_displayed(player: Player): return (player.round_number == 1) class Pre_Comprehension(Page): #timeout_seconds = 240 @staticmethod def is_displayed(player: Player): return (player.round_number == 1) class Comprehension_OT(Page): #timeout_seconds = 720 @staticmethod def is_displayed(player: Player): return (player.round_number == 1) and player.group.optimization == True form_model = 'player' form_fields = ['Question_1', 'Question_2', 'Question_3', 'Question_4', 'Question_5', 'Question_6', 'attempts', 'Q1_first_attempt', 'Q2_first_attempt', 'Q3_first_attempt', 'Q4_first_attempt', 'Q5_first_attempt', 'Q6_first_attempt'] class Comprehension_BC(Page): #timeout_seconds = 720 @staticmethod def is_displayed(player: Player): return (player.round_number == 1) and player.group.optimization == False form_model = 'player' form_fields = ['Question_1_BC', 'Question_2_BC', 'Question_3_BC', 'Question_4_BC', 'Question_5_BC', 'attempts', 'Q1_BC_first_attempt', 'Q2_BC_first_attempt', 'Q3_BC_first_attempt', 'Q4_BC_first_attempt', 'Q5_BC_first_attempt' ] class StartWait(WaitPage): @staticmethod def is_displayed(player: Player): return (player.round_number == 1) # after_all_players_arrive = 'assigned_roles' title_text = "Bitte warten Sie einen Moment." body_text = "Bitte warten Sie, bis die anderen Spieler bereit sind, um mit dem Experiment zu beginnen. " \ "Das Experiment wird in Kürze beginnen." class Price_and_Explanation_R1(Page): @staticmethod def app_after_this_page(player, timeout_happened): if timeout_happened: return None # Stay on the same page if time runs out @staticmethod def is_displayed(player: Player): return (player.round_number == 1) @staticmethod def live_method(player: Player, data): # set chatgpt api key openai.api_key = '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' # load msg messages = json.loads(player.msg1) # functions for retrieving text from openAI if 'text' in data: # grab text that participant inputs and format for chatgpt text = data['text'] inputMsg = {'role': 'user', 'content': text} botMsg = {'role': 'assistant', 'content': text} # append messages and run chat gpt function messages.append(inputMsg) output = runGPT(messages) # also append messages with bot message botMsg = {'role': 'assistant', 'content': output} messages.append(botMsg) numbers = re.findall(r'\d+', output) score1 = int(numbers[-1]) if numbers else 0 player.explanation_score1=score1 player.participant.vars['score1'] = score1 reasoning_AI1 = str(output.strip().split()) player.reasoning1 = reasoning_AI1 return {player.id_in_group: output} else: pass form_model = 'player' form_fields = ['price', 'keystroke_data', 'keystroke_price_data', 'chatLog', 'receive'] class Price_and_Explanation_R2(Page): @staticmethod def app_after_this_page(player, timeout_happened): if timeout_happened: return None # Stay on the same page if time runs out @staticmethod def is_displayed(player: Player): return (player.round_number == 2) @staticmethod def live_method(player: Player, data): # set chatgpt api key openai.api_key = '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' # load msg messages = json.loads(player.msg2) # functions for retrieving text from openAI if 'text' in data: # grab text that participant inputs and format for chatgpt text = data['text'] inputMsg = {'role': 'user', 'content': text} botMsg = {'role': 'assistant', 'content': text} # append messages and run chat gpt function messages.append(inputMsg) output = runGPT(messages) # also append messages with bot message botMsg = {'role': 'assistant', 'content': output} messages.append(botMsg) numbers = re.findall(r'\d+', output) score2 = int(numbers[-1]) if numbers else 0 player.explanation_score2=score2 player.participant.vars['score2'] = score2 reasoning_AI2 = str(output.strip().split()) player.reasoning2 = reasoning_AI2 return {player.id_in_group: output} else: pass form_model = 'player' form_fields = ['price', 'keystroke_data', 'keystroke_price_data', 'chatLog', 'receive'] class Price_and_Explanation_R3(Page): @staticmethod def app_after_this_page(player, timeout_happened): if timeout_happened: return None # Stay on the same page if time runs out @staticmethod def is_displayed(player: Player): return (player.round_number == 5) @staticmethod def live_method(player: Player, data): # set chatgpt api key openai.api_key = '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' # load msg messages = json.loads(player.msg3) # functions for retrieving text from openAI if 'text' in data: # grab text that participant inputs and format for chatgpt text = data['text'] inputMsg = {'role': 'user', 'content': text} botMsg = {'role': 'assistant', 'content': text} # append messages and run chat gpt function messages.append(inputMsg) output = runGPT(messages) # also append messages with bot message botMsg = {'role': 'assistant', 'content': output} messages.append(botMsg) numbers = re.findall(r'\d+', output) score3 = int(numbers[-1]) if numbers else 0 player.explanation_score3=score3 player.participant.vars['score3'] = score3 reasoning_AI3 = str(output.strip().split()) player.reasoning3 = reasoning_AI3 return {player.id_in_group: output} else: pass form_model = 'player' form_fields = ['price', 'keystroke_data', 'keystroke_price_data', 'chatLog', 'receive'] class Price_and_Explanation_R4(Page): @staticmethod def app_after_this_page(player, timeout_happened): if timeout_happened: return None # Stay on the same page if time runs out @staticmethod def is_displayed(player: Player): return (player.round_number == 6) @staticmethod def live_method(player: Player, data): # set chatgpt api key openai.api_key = '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' # load msg messages = json.loads(player.msg4) # functions for retrieving text from openAI if 'text' in data: # grab text that participant inputs and format for chatgpt text = data['text'] inputMsg = {'role': 'user', 'content': text} botMsg = {'role': 'assistant', 'content': text} # append messages and run chat gpt function messages.append(inputMsg) output = runGPT(messages) # also append messages with bot message botMsg = {'role': 'assistant', 'content': output} messages.append(botMsg) numbers = re.findall(r'\d+', output) score4 = int(numbers[-1]) if numbers else 0 player.explanation_score4=score4 player.participant.vars['score4'] = score4 reasoning_AI4 = str(output.strip().split()) player.reasoning4 = reasoning_AI4 return {player.id_in_group: output} else: pass form_model = 'player' form_fields = ['price', 'keystroke_data', 'keystroke_price_data', 'chatLog', 'receive'] class Price_and_Explanation_R5(Page): @staticmethod def app_after_this_page(player, timeout_happened): if timeout_happened: return None # Stay on the same page if time runs out @staticmethod def is_displayed(player: Player): return (player.round_number == 7) @staticmethod def live_method(player: Player, data): # set chatgpt api key openai.api_key = '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' # load msg messages = json.loads(player.msg5) # functions for retrieving text from openAI if 'text' in data: # grab text that participant inputs and format for chatgpt text = data['text'] inputMsg = {'role': 'user', 'content': text} botMsg = {'role': 'assistant', 'content': text} # append messages and run chat gpt function messages.append(inputMsg) output = runGPT(messages) # also append messages with bot message botMsg = {'role': 'assistant', 'content': output} messages.append(botMsg) numbers = re.findall(r'\d+', output) score5 = int(numbers[-1]) if numbers else 0 player.explanation_score5=score5 player.participant.vars['score5'] = score5 reasoning_AI5 = str(output.strip().split()) player.reasoning5 = reasoning_AI5 return {player.id_in_group: output} else: pass form_model = 'player' form_fields = ['price', 'keystroke_data', 'keystroke_price_data', 'chatLog', 'receive'] class Price_and_Explanation_R6(Page): @staticmethod def app_after_this_page(player, timeout_happened): if timeout_happened: return None # Stay on the same page if time runs out @staticmethod def is_displayed(player: Player): return (player.round_number == 10) @staticmethod def live_method(player: Player, data): # set chatgpt api key openai.api_key = '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' # load msg messages = json.loads(player.msg6) # functions for retrieving text from openAI if 'text' in data: # grab text that participant inputs and format for chatgpt text = data['text'] inputMsg = {'role': 'user', 'content': text} botMsg = {'role': 'assistant', 'content': text} # append messages and run chat gpt function messages.append(inputMsg) output = runGPT(messages) # also append messages with bot message botMsg = {'role': 'assistant', 'content': output} messages.append(botMsg) numbers = re.findall(r'\d+', output) score6 = int(numbers[-1]) if numbers else 0 player.explanation_score6=score6 player.participant.vars['score6'] = score6 reasoning_AI6 = str(output.strip().split()) player.reasoning6 = reasoning_AI6 return {player.id_in_group: output} else: pass form_model = 'player' form_fields = ['price', 'keystroke_data', 'keystroke_price_data', 'chatLog', 'receive'] class PriceSetting(Page): @staticmethod def is_displayed(player: Player): return player.round_number in [ 3, 4, 8, 9] form_model = 'player' form_fields = ['price'] class ResultsWait(WaitPage): after_all_players_arrive='round_results' title_text = "Bitte warten Sie einen Moment." body_text = "Bitte warten Sie kurz bis alle Teilnehmenden eine Entscheidung getroffen haben. " \ "Es geht in Kürze weiter." class ResultsFeedback(Page): pass class ShockAnnouncement(Page): @staticmethod def is_displayed(player: Player): return (player.round_number == player.shock) class FinalResults(Page): @staticmethod def is_displayed(player: Player): return (player.round_number == 10) class Demographics(Page): @staticmethod def is_displayed(player: Player): return (player.round_number == 10) form_model = 'player' form_fields = ['Gender', 'Age', 'Faculty', 'Makro', 'tech_problems'] class FinalPage(Page): @staticmethod def is_displayed(player: Player): return (player.round_number == 10) page_sequence = [ Place, Start, Pre_Comprehension, Comprehension_OT, Comprehension_BC, StartWait, ShockAnnouncement, Price_and_Explanation_R1, Price_and_Explanation_R2, Price_and_Explanation_R3, Price_and_Explanation_R4, Price_and_Explanation_R5, Price_and_Explanation_R6, PriceSetting, ResultsWait, ResultsFeedback, FinalResults, Demographics, FinalPage]