experience branch of Voxtral
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -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
1539
exp/2moodle.py
Normal file
File diff suppressed because it is too large
Load Diff
1539
exp/app.old_inside_pipeline.py
Normal file
1539
exp/app.old_inside_pipeline.py
Normal file
File diff suppressed because it is too large
Load Diff
191
exp/feedback_bewertung.py
Normal file
191
exp/feedback_bewertung.py
Normal 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)
|
||||||
|
|
||||||
|
##
|
||||||
Reference in New Issue
Block a user