# -*- coding: utf-8 -*- """ Created on Wed Aug 28 15:11:38 2024 @author: lfels """ import gradio as gr #Interface import requests #Wartezeit bei keiner Antwort import time import os #enthält die Umgebungsvariablen from openai import OpenAI #Kommunikation OpenAI import random #zeitliche Beschränkung requests.adapters.DEFAULT_TIMEOUT = 60 #start = time.time() start = 0 api_key = os.getenv("API_key") client = OpenAI(api_key=api_key) def format_chat_prompt(message, chat_history, max_convo_length = 10): #max_conv 10 --> konditioniert die Ausgabe besser prompt = "" #zeigt die gespeicherten Messages von Beiden an for user_message, bot_message in chat_history[-max_convo_length:]: prompt = f"{prompt} \nUser: {user_message}\nChatbot: {bot_message}" prompt = f"{prompt} \nUser: {message} \nChatbot:" return prompt def nt_response(message, chat_history, system_prompt, model = 'gpt-3.5-turbo', temperature = 1): formatted_prompt = format_chat_prompt(message, chat_history) #print(formatted_prompt) try: #Antwort generieren response = client.chat.completions.create( temperature = temperature, #Akkuratheit [0:2] model = model, messages = [{"role": "system", "content": system_prompt},{"role": "user", "content": formatted_prompt}] ) #Extrahieren der Antwort bot_message = response.choices[0].message.content except Exception as exception: bot_message = "Es sind technische Fehler aufgetreten: " + exception return bot_message, chat_history #nicht-transparenter Bot def nt_bot(prompt): if not prompt: start_resp = "" else: start_resp = random.choice(["Ok.", "Alles klar.", "Verstehe.", "...", "Mhhh.", ""]) #print(start_resp) return start_resp def problem_int(): p_system_prompt = "Du bist ein Assistent, der die Intention des Benutzers absichtlich missversteht und Schlüsselwörter in einer Weise interpretiert, die nicht im Einklang mit der eigentlichen Bedeutung steht. Beantworte die Anfrage so, als würdest du die Kernbotschaft oder das Thema völlig anders verstehen, als es der Benutzer beabsichtigt. Um so Unzufriedenheit im Nutzer zu erzeugen" return p_system_prompt def problem_acc(): p_system_prompt = "Du bist ein Assistent, der absichtlich falsche und widersprüchliche Antworten gibt. Selbst wenn du die korrekte Information kennst, antwortest du entweder falsch oder gegenteilig. Deine Aussagen enthalten manchmal Fehler, die nicht verifiziert werden können, oder erfinden neue Fakten (Halluzination). Zusätzlich passt du deine Antworten zu stark an den Wunsch des Nutzers an, selbst wenn dies falsch oder unlogisch ist (Sycophancy). Achte auch darauf, dass deine Antworten nicht immer durchgehend konsistent sind, um Verwirrung zu stiften. Um so Unzufriedenheit im Nutzer zu erzeugen" #überschreiben des p_system_prompt - für Problem-prompt return p_system_prompt i = 0 j = 0 def nt_chat(message, chat_history): #nt_trans_bot p_system_prompt = "Gib nur die nötigsten Informationen. Verzichte auf Erklärungen oder zusätzliche Details. Unterlasse es an jede Antwort positive Ausdrücke ranzuhängen. Antworte nicht auf Rückfragen - agiere eher wie eine Blackbox" #random Reihenfolge r_rf = random.choice([1,2]) global i global j (first_reaction, second_reaction) = (problem_int, problem_acc) if r_rf == 1 else (problem_acc, problem_int) if int((time.time() - start)/60) > 2 and i == 0 : #2 i += 1 p_system_prompt = first_reaction() if int((time.time() - start)/60) > 6 and j == 0 : #6 j += 1 p_system_prompt = second_reaction() if not message : #just enter = exit // "quit" reply = "Bitte schreibe etwas, sonst kann ich dir nicht helfen" else: #generierte Response reply, chat_history = nt_response(message, chat_history, p_system_prompt) #zusammengefasste response _ nt_transBot begin = nt_bot(message) combined_reply = begin + " " + reply #print("\n" + combined_reply + "\n") chat_history.append((message, combined_reply)) if ((time.time() - start)/60) > 10: chat_history.append(("", "Deine Zeit für die Frage ist leider abgelaufen, führe bitte den Fragebogen weiter fort")) return "", chat_history def save_chat_text(chat_history): text = "\n".join(["User: " + user + "\nChatbot: " + bot for user, bot in chat_history]) return text ##### #Verabeitet die Auswahl und zeigt sie nochmal an def process_input(slider_value, checkbox_choices): #Ausgabe des Slider-Wertes output_value = f"Der gewählte Wert ist {slider_value}.\n" max_selection = 3 #max. Optionen auswählen if len(checkbox_choices) > max_selection: return f"Sie dürfen maximal {max_selection} Optionen auswählen." if checkbox_choices: output_value += f"Gewählte Optionen: {', '.join(checkbox_choices)}" else: output_value += "Keine Optionen gewählt." return output_value ##### with gr.Blocks() as interface: #aussehen #Überschrift gr.Markdown( "