Spaces:
Sleeping
Sleeping
File size: 8,021 Bytes
e113c43 2573737 2fac1a1 2573737 e113c43 9f384e1 320a430 034b0b1 67b732d 320a430 67b732d 2a45a92 320a430 12975d8 fe033a7 67b732d 320a430 361c6d6 9c9fc43 320a430 67b732d 9b1b6aa 12975d8 6f97c22 2fac1a1 7a25c6e 2fac1a1 320a430 38c7a83 320a430 948377f 67b732d 12975d8 9b1b6aa 6f97c22 2fac1a1 7a25c6e 2fac1a1 320a430 2fac1a1 320a430 e3a009b 320a430 b4a4316 2ff8426 7a8ea26 2ff8426 7a25c6e 2ff8426 b4a4316 2ff8426 2fac1a1 2ff8426 67b732d 2fac1a1 2ff8426 e3a009b 2ff8426 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
import gradio as gr
from openai import OpenAI
from os import getenv
import json
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=getenv("OPENROUTER_API_KEY"),
)
# Initialize the chat log
with gr.Blocks() as app:
dialog_state_var = gr.State([])
def api_call(prompt, model_id):
completion = client.chat.completions.create(
model=model_id,
max_tokens = 2000,
messages=[
{
"role": "user",
"content": prompt,
},
],
)
answer = completion.choices[0].message.content
return answer
def format(str):
s = str.split("\",")
for i in range(len(s)):
key = s[i].split(":")[0]
value = s[i].split(":")[1]
value = value.replace("\"", "")
s[i]=key+":"+"\""+value+"\""
str_new = ",".join(s)
str_new = str_new.replace("}\"", "\"}")
str_new = str_new.replace("\n", "")
return str_new
def generate_next(intro, setting, topic, student_identity, teacher_identity, student_start, student_base, teacher_base, dialog_state, llm_teacher, llm_student):
dialog_prev = "\n\n".join(dialog_state)
# STUDENT
prompt_student = intro+"\n\nBisheriger Dialog:\n"+dialog_prev+"\n\Verlauf des Dialogs: "+setting+"\n\nThema, bei dem der Schüler Hilfe braucht:"+topic+"\n\nBeschreibung des Schülers:"+student_identity+"\n\n"
if len(dialog_state) == 0:
prompt_student+=student_start
else:
prompt_student+=student_base
student = api_call(prompt_student, llm_student)
print(student)
student = format(student)
student = json.loads(student,strict=False)
analysis_student = student["analyse"]
response = "Schüler: "+student["antwort"]
dialog_state.append(response)
dialog_prev = "\n\n".join(dialog_state)
# TEACHER
prompt_teacher = intro+"\n\nBisheriger Dialog:\n"+dialog_prev+"\n\Verlauf des Dialogs: "+setting+"\n\nThema, bei dem der Schüler Hilfe braucht:"+topic+"\n\nBeschreibung des Tutors:"+teacher_identity+"\n\n"+teacher_base
teacher = api_call(prompt_teacher, llm_teacher)
teacher = format(teacher)
print(teacher)
teacher = json.loads(teacher,strict=False)
analysis_teacher = teacher["analyse"]
response = "Tutor: "+teacher["antwort"]
dialog_state.append(response)
dialog_new = "\n\n".join(dialog_state)
return prompt_student,prompt_teacher, dialog_new, dialog_state, analysis_student, analysis_teacher
def reset():
return "", "", "", []
# Text boxes for user inputs
txt_llm_teacher = gr.Textbox(label="LLM Tutor (https://openrouter.ai/models)", lines=1, value = "mistralai/mixtral-8x22b-instruct")
txt_llm_student = gr.Textbox(label="LLM Schüler (https://openrouter.ai/models)", lines=1, value = "mistralai/mixtral-8x22b-instruct")
txt_intro = gr.Textbox(label="Einleitung", lines=4, value = "Ich möchte einen möglichst realistischen Dialog zwischen einem Schüler und einem Tutor simulieren.")
txt_setting = gr.Textbox(label="Dialogverlauf", lines=4, value = "Der Schüler kommt bei seinen Hausaufgaben nicht weiter und bittet den Tutorum Hilfe. Der Tutor diagnostiziert welches Vorwissen der Schülers hat und welche Art von Hilfe er genau braucht. Dann erabeiten Tutor und Schüler Schritt für Schritt das Thema.")
txt_topic = gr.Textbox(label="Thema des Dialogs", lines=4, value="Zellteilung - Die Phasen der Mitose")
txt_student_identity = gr.Textbox(label="Schüler-Identität", lines=4, value="Der Schüler ist in der 8. Klasse. Er hat große Schwierigkeiten in der Schule und kann nicht selbständig arbeiten. Er hat kaum Vorwissen in dem Thema. Er braucht viel Unterstützung und muss in kleinen Schritten an eine Aufgabe herangeführt werden. Der Schüler ist sehr passiv, antwortet meist sehr kurz und umgangssprachlich und ist unsicher.")
txt_teacher_identity = gr.Textbox(label="Tutor-Identität", lines=4, value="Der Tutor ist ein intelligenter KI-Assistent der speziell für die Unterstützung von Schülern entwickelt wurde. Er hat eine sehr starke didaktische Kompetenz,ist geduldig, motivierend und unterstützend. Er ist besonders gut darin, Schüler Schritt fürSchritt an ein Thema heranzuführen und komplexe Themen oder Aufgaben anschaulich und schüler-gerecht zu erklären. Der Tutor gibt niemals lange Erklärungen oder Verrät die Lösung zu einer Aufgabe, sondern er leitet den Schüler durch geschicktes Nachfragen und kleinere Tipps, bis dieser selbst auf die Lösung kommt.")
txt_student_start = gr.Textbox(label="Schüler Start Prompt (wird nur für den Start des Dialoges verwendet)", lines=4, value="Basierend auf diesen Vorgaben, analysiere welches Vorwissen der Schüler hat und wie motiviert er ist. Basierend auf dieser analyse, schreibe einen möglichen Satz, wie wie der Schüler den Dialog starten würde und schreibe einen realistischen ersten Satz des Schülers. Antworte im json Format mit folgenden variablen: {analyse:<DEINE_ANALYSE>, antwort:<DEIN_SATZ>}")
txt_student_base = gr.Textbox(label="Base-Prompt Schüler", lines=4, value="Analysiere die Beschreibung des Szene und den bisherigen Dialog. Analysiere welchen Wissenstand der Schüler hat und was sein Ziel ist. Überlege auch wie er sich wohl gerade fühlt und wie motiviert er ist. Der Schüler antwortet sehr kurz, und verhält sich sehr passiv im Gespräch. Schreibe nun basierend auf deinen Analyse eine realistische Antwort des Schülers. Antworte im JSON Format mit folgenden Variablen: {analyse:<DEINE_ANALYSE>, antwort:<ANTWORT_DES_SCHÜLERS>}")
txt_teacher_base = gr.Textbox(label="Base-Prompt Tutor", lines=4, value="Analysiere die Beschreibung der Szene, des Schülers und des Tutors sowie den bisherigen Dialog. Überlege genau, was das aktuelle Ziel des Tutors ist und wie gut er dieses bereits erfüllt hat. Überlege auch, welches Wissen der Schüler bereits hat und welches Problem er lösen möchte. Nutze ausschließlich Informationen und Wissen, dass der Tutor aus dem bisheren Dialogverlauf haben kann. Der Tutor ist der aktive Part in diesem Gespräch und leitet den Schüler mit geschickten Fragen und kleinen Aufgaben durch das Thema. Wenn der Schüler Rückfragen hat, nimmst sich der Tutor genügend Zeit diese zu beantworten, verliert aber auch nie das eigentliche Thema aus den Augen und übernimmt wieder den aktiven Part wenn die Frage des Schülers beantwortet ist. Überlege dir nun wie der Tutor am besten vorgehen sollte und schreibe dann eine realistische Antwort des Tutors. Antworte im JSON Format mit folgenden Variablen: {analyse:<DEINE_ANALYSE>, antwort:<ANTWORT_DES_TUTORS>}")
btn_submit = gr.Button("Submit")
btn_reset = gr.Button("Reset")
# The chat display area
prompt_student = gr.Textbox(label="Prompt Schüler", lines=10, interactive=False)
prompt_teacher = gr.Textbox(label="Prompt Tutor", lines=10, interactive=False)
analysis_student = gr.Textbox(label="Analyse Schüler", lines=10, interactive=False)
analysis_teacher = gr.Textbox(label="Analyse Tutor", lines=10, interactive=False)
chat_interface = gr.Textbox(label="Chat", lines=10, interactive=False)
# Define the layout and how components interact
btn_submit.click(
fn=generate_next,
inputs=[txt_intro, txt_setting, txt_topic, txt_student_identity, txt_teacher_identity,txt_student_start, txt_student_base, txt_teacher_base, dialog_state_var,txt_llm_teacher,txt_llm_student],
outputs=[prompt_student,prompt_teacher, chat_interface, dialog_state_var, analysis_student, analysis_teacher],
)
btn_reset.click(fn=reset, inputs = [], outputs = [prompt_student,prompt_teacher, chat_interface, dialog_state_var])
# Launch the interface
app.launch() |