Compare commits

..

3 Commits

Author SHA1 Message Date
4a0d398a91 delete the test 2026-01-24 15:58:33 +01:00
9ef1815b84 experience branch of Voxtral 2026-01-24 14:40:12 +01:00
28ce0c7875 test 2026-01-24 14:38:12 +01:00
4 changed files with 3272 additions and 3 deletions

6
.gitignore vendored
View File

@@ -49,7 +49,7 @@ Thumbs.db
# ====================== # ======================
# Experimental scripts # Experimental scripts
# ====================== # ======================
2moodle.py #2moodle.py
app.old_inside_pipeline.py #app.old_inside_pipeline.py
feedback_bewertung.py #feedback_bewertung.py

1539
exp/2moodle.py Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

191
exp/feedback_bewertung.py Normal file
View File

@@ -0,0 +1,191 @@
# %% 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)
##