From d4dd4fe82690a1a5c915a214a4363a678551bcc4 Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Tue, 15 Apr 2025 15:49:37 +0200 Subject: [PATCH] Reformated and fixed E402 Module level import not at top of file --- app.py | 6 ++++-- participant.py | 50 +++++++++++++++++++++++++++++--------------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/app.py b/app.py index 40cf75e..4148ca6 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,7 @@ from participant import ProParticipant, ContraParticipant import random + def main(): pro_participant = ProParticipant("Pro") contra_participant = ContraParticipant("Contra") @@ -9,12 +10,13 @@ def main(): opponents_answer = "Du bist der erste Teilnehmer in der ersten Runde. Was ist deine Meinung zum Thema?" for i in range(10): - print(f"Round {i+1}") + print(f"Round {i + 1}") for participant in participants: opponents_answer = participant.answer(opponents_answer) return + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/participant.py b/participant.py index 58b1047..8700c5f 100644 --- a/participant.py +++ b/participant.py @@ -1,56 +1,60 @@ - from faker import Faker -fake = Faker() - from mistralai import Mistral import os +fake = Faker() + + api_key = os.environ["MISTRAL_API_KEY"] if api_key is None: raise ValueError("MISTRAL_API_KEY environment variable not set") -basic_instruction = ("Du nimmst an einer Debatte teil. Dir wird ein Thema vorgegeben, und du musst entweder dafür oder " +basic_instruction = ( + "Du nimmst an einer Debatte teil. Dir wird ein Thema vorgegeben, und du musst entweder dafür oder " "dagegen argumentieren. Verhalte dich wie ein typischer Schweizer Politiker in einer öffentlich ausgestrahlten " "Debatte. Gehe auf die Argumente deines Gegners ein, analysiere sie und antworte darauf. Deine Antwort sollte " "maximal 100 Wörter umfassen und keine Aufzählungen enthalten. Wenn derselbe Aspekt diskutiert wird, versuche ein " "neues Argument zu finden. Sei Kreativ und halte die Diskussion lebendig. Das Thema der Debatte ist die " - "Legalisierung von Cannabis. Wenn du als Erster sprichst, wähle einen spezifischen " - "Aspekt des Themas aus und beginne damit.") + "Legalisierung von Cannabis. Wenn du als Erster sprichst, wähle einen spezifischen " + "Aspekt des Themas aus und beginne damit." +) + class Participant: def __init__(self, name, role_description): self.name = f"""{name} {fake.name()}""" self.client = Mistral(api_key=api_key) self.role_description = role_description - + try: os.remove(f"log/{self.__class__.__name__}.md") except FileNotFoundError: pass - self.messages = [{"role": "system", "content": basic_instruction}, - {"role": "system", "content": self.role_description}] + self.messages = [ + {"role": "system", "content": basic_instruction}, + {"role": "system", "content": self.role_description}, + ] def answer(self, question): self.messages.append({"role": "user", "content": question}) response = self.client.chat.complete( - temperature=0.7, - model="mistral-large-latest", - messages=self.messages) - + temperature=0.7, model="mistral-large-latest", messages=self.messages + ) + answer = response.choices[0].message.content self.messages.append({"role": "assistant", "content": answer}) self.write_to_file(self.__class__.__name__, self.messages) - + return answer - + def write_to_file(self, filename, messages): with open(f"log/{filename}.md", "w") as file: for message in messages: role = "unknown" - match message['role']: + match message["role"]: case "system": role = "System Prompt" case "user": @@ -65,16 +69,20 @@ class Participant: class ProParticipant(Participant): def __init__(self, name): - role_description = ("Du bist ein Befürworter der Legalisierung von Cannabis. Du argumentierst dafür, dass " - "Cannabis legalisiert werden sollte. Du hast eine starke Meinung zu dieser Frage und bist bereit, dich " - "dafür einzusetzen.") + role_description = ( + "Du bist ein Befürworter der Legalisierung von Cannabis. Du argumentierst dafür, dass " + "Cannabis legalisiert werden sollte. Du hast eine starke Meinung zu dieser Frage und bist bereit, dich " + "dafür einzusetzen." + ) super().__init__(name, role_description) class ContraParticipant(Participant): def __init__(self, name): - role_description =("Du lehnst die Legalisierung von Cannabis vehement ab. Du argumentierst dagegen, dass " + role_description = ( + "Du lehnst die Legalisierung von Cannabis vehement ab. Du argumentierst dagegen, dass " "Cannabis legalisiert werden sollte. Du hast eine extreme Meinung zu dieser Frage und bist bereit, dich " - "dafür einzusetzen, und weichst nicht von deiner Meinung ab.") + "dafür einzusetzen, und weichst nicht von deiner Meinung ab." + ) super().__init__(name, role_description)