import openai from otree.api import * import json doc = """ Chat mit Startseite und Instruktionen """ # Code Teilweise von https://www.otreehub.com/projects/ultimatum-game/ übernommen, bzw als Vorlage genutzt class C(BaseConstants): NAME_IN_URL = 'Chat' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 TEMP = 0.7 MODEL = "gpt-4" Prompt1 = (#"Formuliere den Folgenden Text um, dass er kürzer und direkter ist. " "Formuliere den Folgenden Text um, dass er härter und direkter ist. " "Wenn in dem Tem Text geduzt wird, behalte dies in der Antwort bei." "Gibt NUR die umformulierte Nachricht zurück!" "Wenn die Eingabe nur eine Zahl oder nur ein Wort ist, gib diese unverändert zurück. " "Korrigiere nicht alle Fehler, sondern behalte einige bei. " "Der Text ist:") Prompt2 = ("Formuliere den Folgenden Text um, dass er höflicher klingt. " "Der umformulierte Text sollte nicht länger sein als der ursprüngliche Text." "Wenn in dem Tem Text geduzt wird, behalte dies in der Antwort bei." "Gibt NUR die umformulierte Nachricht zurück!" "Wenn die Eingabe nur eine Zahl oder nur ein Wort ist, gib diese unverändert zurück. " "Korrigiere nicht alle Fehler, sondern behalte einige bei. " "Der Text ist:") class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): pass def warten(group: Group): print("Warten") # otree snippets von Chris @ otree https://www.otreehub.com/projects/otree-snippets/ class Message(ExtraModel): group = models.Link(Group) sender = models.Link(Player) text = models.StringField() alter_text = models.StringField() # otree snippets von Chris @ otree https://www.otreehub.com/projects/otree-snippets/ def to_dict(msg: Message): return dict(sender=msg.sender.id_in_group, text=msg.text, alter_text=msg.alter_text) def umschreiben_text(text, group): response = openai.ChatCompletion.create( model=C.MODEL, temperature=C.TEMP, max_tokens=70, messages=[ {"role": "system", "content": C.Prompt1 + text}, ], ) umgeschriebener_text = response['choices'][0]['message']['content'] return umgeschriebener_text response['choices'][0]['message']['content'] # PAGES class Chat(Page): # otree snippets von Chris @ otree https://www.otreehub.com/projects/otree-snippets/ # timeout_seconds = 300 @staticmethod def js_vars(player: Player): return dict(my_id=player.id_in_group) @staticmethod def live_method(player: Player, data): openai.api_key = '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' my_id = player.id_in_group group = player.group if 'text' in data: text = data['text'] # text muss hier genommen werden umgeschrieben und die variable "text" bei msg # mit dem umgeschrieben neuen GPT_text gleichgesetzt werden alter_text = text output = umschreiben_text(text, group) umwandeln = str(output) msg = Message.create(group=group, sender=player, text=umwandeln, alter_text=alter_text) return {0: [to_dict(msg)]} return {my_id: [to_dict(msg) for msg in Message.filter(group=group)]} class ChatWaitPage(WaitPage): after_all_players_arrive = 'warten' page_sequence = [ChatWaitPage, Chat]