# %% Feedback_Bewertung import openai import os from pathlib import Path client = openai.OpenAI( api_key="sk--T3QiY4gBE67o9oSxEOqxw", base_url="http://pluto/v1" ) EVAL_PROMPT = """ Du bist ein strenger, objektiver Bewertender. Bewerte das folgende Feedback anhand der untenstehenden Kriterien. Für jedes Kriterium musst du GENAU folgendes liefern: - answer: true oder false - explanation: eine kurze, klare Begründung auf Deutsch, basierend ausschließlich auf dem gegebenen Feedback KRITERIEN: 1. Ist das Feedback zeitnah? (<48 Stunden) 2. Enthält das Feedback narrative Kommentare? 3. Ist der Ton positiv und/oder unterstützend? 4. Beschreibt das Feedback beobachtbares Verhalten in klarer, eindeutiger Sprache? 5. Verstärkt das Feedback, was gut gemacht wurde? 6. Zeigt das Feedback Bereiche auf, in denen Verbesserungen nötig sind? 7. Enthält das Feedback konkrete, spezifische Strategien zur Verbesserung? 8. Bezieht sich das Feedback auf definierte Standards (z. B. EPA, Leistungsniveaus)? 9. Passt der Anspruch/die Komplexität des Feedbacks zum Lernstand der Lernenden? Gib die Ergebnisse AUSSCHLIESSLICH als JSON gemäß dem bereitgestellten Schema zurück. """ from pydantic import BaseModel class CriterionResult(BaseModel): answer: bool | None explanation: str class FeedbackEvaluation(BaseModel): timely: CriterionResult narrative_comments: CriterionResult positive_supportive_tone: CriterionResult clear_language: CriterionResult reinforces_strengths: CriterionResult identifies_improvements: CriterionResult includes_strategies: CriterionResult relates_to_standards: CriterionResult congruent_with_learner_level: CriterionResult ## # %% Main input_dir = "./cruscloud/AudioFeedbackProject/Transkripte" files = list(Path(input_dir).glob("*.txt")) results = {} for f in files: text = f.read_text(encoding="utf-8") response = client.responses.parse( model="GPT-OSS-120B", input=[ {"role": "system", "content": EVAL_PROMPT}, {"role": "user", "content": text}, ], text_format=FeedbackEvaluation, ) results[f.name] = response.output_parsed # Save results import json with open("feedback_evaluations.json", "w", encoding="utf-8") as out: json.dump({k: v.dict() for k, v in results.items()}, out, indent=4) ## # %% Feedback_Bewertung_Moodle import openai import os from pathlib import Path client = openai.OpenAI( api_key="sk--T3QiY4gBE67o9oSxEOqxw", base_url="http://pluto/v1" ) EVAL_PROMPT = """ Du bist ein strenger, objektiver Bewertender für medizinische Lehre. Bewerte das folgende Feedback anhand der Kursinhalte "Feedback in der Lehre: Basics". Für jedes Kriterium musst du GENAU folgendes liefern: - score: Zahl von 1 (beste Bewertung) bis 5 (gescheitert) - explanation: Ausführliche Begründung auf Deutsch mit: a) Zitat aus dem Kursmaterial das das Kriterium definiert b) Konkrete Analyse des Feedback-Textes mit Zitaten c) Klare Verknüpfung zwischen Kursanforderung und Feedback-Umsetzung KRITERIEN (basierend auf Kursmaterial): 1. KONKRETHEIT (Bild 4: Merkmale von Feedback) "Das Feedback sollte so konkret wie möglich sein. Die Wiedergabe beobachteter Beispiele ist hilfreich." Bewertung: Enthält das Feedback beobachtbare Beispiele statt Verallgemeinerungen? 2. ICH-BOTSCHAFTEN (Feedbackregeln) "Ein Feedback … wird in „Ich-Botschaften“ ausgedrückt. … ist nicht (ab)wertend." Bewertung: Wird subjektive Wahrnehmung in Ich-Formulierungen dargestellt? 3. STRUKTUR (WWW/BEB-Prinzip) WWW: "1. Wahrnehmung: Ich habe gesehen ... 2. Wirkung: ... das hat mich nervös gemacht. 3. Wunsch: Ich wünsche mir ..." BEB: "1. Beobachtung: Ich habe gesehen ... 2. Empfehlung: Ich empfehle ... 3. Begründung: Auf diese Weise vermeiden Sie ..." Bewertung: Folgt das Feedback einer klaren Struktur (WWW oder BEB)? 4. WERTSCHÄTZUNG (Bild 4: Merkmale von Feedback) "Feedback ... auf Augenhöhe: Feedbackgeber und Feedbackempfänger gehen respektvoll und wertschätzend miteinander um." Bewertung: Wird respektvoll und auf Augenhöhe kommuniziert? 5. VERBESSERUNGSEMPFEHLUNG (Feedbackregeln) "Ein Feedback … endet mit einer wertschätzenden Anregung für zukünftige Verbesserungen." Bewertung: Gibt es konkrete, wertschätzende Handlungsempfehlungen? SCORING-ANLEITUNG: 1 = Vollständige Umsetzung (exzellentes Beispiel) 2 = Gute Umsetzung mit minimalen Lücken 3 = Grundlegende Umsetzung mit signifikanten Mängeln 4 = Unzureichende Umsetzung (wichtige Elemente fehlen) 5 = Keine erkennbare Umsetzung (kriterienwidrig) Gib die Ergebnisse AUSSCHLIESSLICH als JSON gemäß dem bereitgestellten Schema zurück. """ from pydantic import BaseModel class CriterionResult(BaseModel): score: int # 1-5 (1=best, 5=failed) explanation: str class FeedbackEvaluation(BaseModel): konkretes_feedback: CriterionResult ich_botschaften: CriterionResult struktur: CriterionResult wertschaetzung: CriterionResult verbesserungsempfehlung: CriterionResult ## # %% Main input_dir = "./cruscloud/AudioFeedbackProject/Transkripte" files = list(Path(input_dir).glob("*.txt")) results = {} for f in files: text = f.read_text(encoding="utf-8") response = client.chat.completions.create( model="GPT-OSS-120B", messages=[ {"role": "system", "content": EVAL_PROMPT}, {"role": "user", "content": text}, ], response_format={"type": "json_object"}, temperature=0.1 ) # Parse the JSON response import json parsed_response = json.loads(response.choices[0].message.content) results[f.name] = FeedbackEvaluation(**parsed_response) # Save results import json with open("feedback_evaluations.json", "w", encoding="utf-8") as out: json.dump({k: v.dict() for k, v in results.items()}, out, indent=4, ensure_ascii=False) ##