{ "modell": "Qwen3.8-27B Q8_0", "reasoning": false, "max_tokens": 900, "terminal": [ { "id": "term01", "titel": "Zeilen zaehlen", "ok": true, "grund": "", "antwort": "wc -l < log.txt", "tps": 25.809115779693393, "prompt_tps": 296.59666395155296, "tokens": 7, "prompt_tokens": 67, "denk_zeichen": 0, "antwort_zeichen": 15, "abbruch": "stop", "ttft": 0.226, "sekunden": 0.55 }, { "id": "term02", "titel": "Muster mit Zeilennummer", "ok": true, "grund": "", "antwort": "grep -n \"WARN\" log.txt", "tps": 25.087667460180295, "prompt_tps": 360.0658406108546, "tokens": 9, "prompt_tokens": 63, "denk_zeichen": 0, "antwort_zeichen": 22, "abbruch": "stop", "ttft": 0.175, "sekunden": 0.93 }, { "id": "term03", "titel": "Groesste Datei", "ok": true, "grund": "", "antwort": "ls -S | head -n 1", "tps": 25.06680303007515, "prompt_tps": 379.87360569119727, "tokens": 10, "prompt_tokens": 66, "denk_zeichen": 0, "antwort_zeichen": 17, "abbruch": "stop", "ttft": 0.174, "sekunden": 0.98 }, { "id": "term04", "titel": "Spalte aus CSV", "ok": true, "grund": "", "antwort": "awk -F';' 'NR>1 {print $1}' messwerte.csv", "tps": 19.915315652221057, "prompt_tps": 448.72384021106245, "tokens": 18, "prompt_tokens": 83, "denk_zeichen": 0, "antwort_zeichen": 41, "abbruch": "stop", "ttft": 0.185, "sekunden": 1.53 }, { "id": "term05", "titel": "Doppelte Zeilen", "ok": true, "grund": "", "antwort": "sort namen.txt | uniq -c | sort -rn", "tps": 19.598044115197304, "prompt_tps": 373.5181386154545, "tokens": 12, "prompt_tokens": 65, "denk_zeichen": 0, "antwort_zeichen": 35, "abbruch": "stop", "ttft": 0.174, "sekunden": 1.0 }, { "id": "term06", "titel": "Summe einer Spalte", "ok": false, "grund": "Ausgabe falsch: '0'", "antwort": "awk -F';' 'NR>1 {sum+=$spannung} END {print sum}' messwerte.csv", "tps": 20.73713032954618, "prompt_tps": 431.39913384018064, "tokens": 25, "prompt_tokens": 77, "denk_zeichen": 0, "antwort_zeichen": 63, "abbruch": "stop", "ttft": 0.178, "sekunden": 1.65 }, { "id": "term07", "titel": "Numerisch sortieren", "ok": true, "grund": "", "antwort": "tail -n +2 messwerte.csv | sort -t';' -k$(head -1 messwerte.csv | tr ';' '\\n' | grep -n '^spannung$' | cut -d: -f1) -rn", "tps": 19.134859427668697, "prompt_tps": 479.73005751370465, "tokens": 50, "prompt_tokens": 89, "denk_zeichen": 0, "antwort_zeichen": 119, "abbruch": "stop", "ttft": 0.186, "sekunden": 3.21 }, { "id": "term08", "titel": "JSON-Feld lesen", "ok": true, "grund": "", "antwort": "jq -r '.port' config.json", "tps": 25.32186909156388, "prompt_tps": 347.9854542080141, "tokens": 9, "prompt_tokens": 60, "denk_zeichen": 0, "antwort_zeichen": 25, "abbruch": "stop", "ttft": 0.172, "sekunden": 0.76 }, { "id": "term09", "titel": "Ersetzen in Datei", "ok": true, "grund": "", "antwort": "sed -i 's/WARN/ACHTUNG/g' log.txt", "tps": 19.551942791015396, "prompt_tps": 456.14347381068933, "tokens": 16, "prompt_tokens": 82, "denk_zeichen": 0, "antwort_zeichen": 33, "abbruch": "stop", "ttft": 0.18, "sekunden": 1.39 }, { "id": "term10", "titel": "Gefiltert zaehlen", "ok": false, "grund": "Ausgabe falsch: '0'", "antwort": "awk -F';' 'NR>1 && $kanal==6' messwerte.csv | wc -l", "tps": 20.754495077725583, "prompt_tps": 492.1153388565619, "tokens": 24, "prompt_tokens": 91, "denk_zeichen": 0, "antwort_zeichen": 51, "abbruch": "stop", "ttft": 0.185, "sekunden": 1.62 } ], "code": [ { "id": "code01", "titel": "Intervalle zusammenfassen", "ok": true, "grund": "", "bestanden": 5, "gesamt": 5, "code": "def merge_intervalle(intervalle):\n if not intervalle:\n return []\n sortiert = sorted(intervalle, key=lambda x: x[0])\n erg = [sortiert[0]]\n for start, ende in sortiert[1:]:\n if start <= erg[-1][1]:\n erg[-1] = (erg[-1][0], max(erg[-1][1], ende))\n else:\n erg.append((start, ende))\n return erg", "tps": 19.30488463871395, "prompt_tps": 592.799399551576, "tokens": 119, "prompt_tokens": 124, "denk_zeichen": 0, "antwort_zeichen": 360, "abbruch": "stop", "ttft": 0.209, "sekunden": 6.76 }, { "id": "code02", "titel": "Verschachteltes dict flach machen", "ok": true, "grund": "", "bestanden": 6, "gesamt": 6, "code": "def flatten(d, sep='.'):\n result = {}\n for key, value in d.items():\n if isinstance(value, dict):\n if value:\n for k, v in flatten(value, sep).items():\n result[f\"{key}{sep}{k}\"] = v\n # leeres dict wird ignoriert\n else:\n result[key] = value\n return result", "tps": 20.265722427730065, "prompt_tps": 271.0990881742497, "tokens": 94, "prompt_tokens": 93, "denk_zeichen": 0, "antwort_zeichen": 356, "abbruch": "stop", "ttft": 0.343, "sekunden": 5.2 }, { "id": "code03", "titel": "Roemische Zahlen lesen", "ok": true, "grund": "", "bestanden": 6, "gesamt": 6, "code": "def roemisch_zu_int(s):\n romane = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}\n total = 0\n for i in range(len(s)):\n if i < len(s) - 1 and romane[s[i]] < romane[s[i + 1]]:\n total -= romane[s[i]]\n else:\n total += romane[s[i]]\n return total", "tps": 19.577864618361925, "prompt_tps": 467.244546128315, "tokens": 139, "prompt_tokens": 87, "denk_zeichen": 0, "antwort_zeichen": 320, "abbruch": "stop", "ttft": 0.186, "sekunden": 7.7 }, { "id": "code04", "titel": "Wortfrequenz mit Gleichstand", "ok": true, "grund": "", "bestanden": 5, "gesamt": 5, "code": "import re\nfrom collections import Counter\n\ndef top_woerter(text, n):\n woerter = re.findall(r'[a-zA-Z0-9]+', text)\n woerter = [w.lower() for w in woerter]\n zaehler = Counter(woerter)\n sortiert = sorted(zaehler.items(), key=lambda x: (-x[1], x[0]))\n return sortiert[:n]", "tps": 19.5525206331296, "prompt_tps": 261.4549970586313, "tokens": 103, "prompt_tokens": 112, "denk_zeichen": 0, "antwort_zeichen": 296, "abbruch": "stop", "ttft": 0.428, "sekunden": 5.91 }, { "id": "code05", "titel": "Klammern pruefen", "ok": true, "grund": "", "bestanden": 7, "gesamt": 7, "code": "def klammern_ok(s):\n stack = []\n pairs = {')': '(', ']': '[', '}': '{'}\n for ch in s:\n if ch in '([{':\n stack.append(ch)\n elif ch in ')]}':\n if not stack or stack[-1] != pairs[ch]:\n return False\n stack.pop()\n return not stack", "tps": 20.084597187206157, "prompt_tps": 203.9978951126277, "tokens": 93, "prompt_tokens": 88, "denk_zeichen": 0, "antwort_zeichen": 313, "abbruch": "stop", "ttft": 0.431, "sekunden": 5.28 }, { "id": "code06", "titel": "Suche im rotierten Feld", "ok": true, "grund": "", "bestanden": 6, "gesamt": 6, "code": "def suche_rotiert(arr, ziel):\n if not arr:\n return -1\n \n links, rechts = 0, len(arr) - 1\n \n while links <= rechts:\n mitte = (links + rechts) // 2\n \n if arr[mitte] == ziel:\n return mitte\n \n # Linker Teil ist sortiert\n if arr[links] <= arr[mitte]:\n if arr[links] <= ziel < arr[mitte]:\n rechts = mitte - 1\n else:\n links = mitte + 1\n # Rechter Teil ist sortiert\n else:\n if arr[mitte] < ziel <= arr[rechts]:\n links = mitte + 1\n ", "tps": 18.812744080017964, "prompt_tps": 537.1640806053072, "tokens": 184, "prompt_tokens": 105, "denk_zeichen": 0, "antwort_zeichen": 674, "abbruch": "stop", "ttft": 0.195, "sekunden": 10.46 }, { "id": "code07", "titel": "Werktage zwischen zwei Daten", "ok": true, "grund": "", "bestanden": 5, "gesamt": 5, "code": "from datetime import datetime, timedelta\n\ndef werktage(von, bis):\n if bis < von:\n return 0\n start = datetime.strptime(von, '%Y-%m-%d')\n end = datetime.strptime(bis, '%Y-%m-%d')\n count = 0\n current = start\n while current <= end:\n if current.weekday() < 5:\n count += 1\n current += timedelta(days=1)\n return count", "tps": 19.427207531485283, "prompt_tps": 486.82858224698435, "tokens": 114, "prompt_tokens": 90, "denk_zeichen": 0, "antwort_zeichen": 377, "abbruch": "stop", "ttft": 0.185, "sekunden": 6.28 }, { "id": "code08", "titel": "LRU-Zwischenspeicher", "ok": true, "grund": "", "bestanden": 5, "gesamt": 5, "code": "from collections import OrderedDict\n\nclass LRU:\n def __init__(self, groesse):\n self.groesse = groesse\n self.cache = OrderedDict()\n\n def get(self, schluessel):\n if schluessel not in self.cache:\n return None\n self.cache.move_to_end(schluessel)\n return self.cache[schluessel]\n\n def put(self, schluessel, wert):\n if schluessel in self.cache:\n self.cache.move_to_end(schluessel)\n self.cache[schluessel] = wert\n if len(self.cache) > self.groesse:\n self.cache.popitem(last=False)", "tps": 19.464508901082485, "prompt_tps": 309.25198223545004, "tokens": 156, "prompt_tokens": 133, "denk_zeichen": 0, "antwort_zeichen": 584, "abbruch": "stop", "ttft": 0.43, "sekunden": 8.66 }, { "id": "code09", "titel": "Wiederholung nach Fehlschlag", "ok": true, "grund": "", "bestanden": 4, "gesamt": 4, "code": "def wiederhole(fn, versuche=3):\n for i in range(versuche):\n try:\n return fn()\n except Exception:\n if i == versuche - 1:\n raise", "tps": 18.304271911993062, "prompt_tps": 540.9156783899084, "tokens": 54, "prompt_tokens": 106, "denk_zeichen": 0, "antwort_zeichen": 194, "abbruch": "stop", "ttft": 0.196, "sekunden": 3.37 }, { "id": "code10", "titel": "CSV sortieren und als JSON", "ok": true, "grund": "", "bestanden": 3, "gesamt": 3, "code": "import json\nimport csv\nimport io\n\ndef csv_nach_json(text, spalte):\n reader = csv.DictReader(io.StringIO(text), delimiter=';')\n rows = list(reader)\n \n if not rows:\n return json.dumps([])\n \n # Prüfen, ob alle Werte in der Spalte numerisch sind\n try:\n for row in rows:\n val = row[spalte].strip()\n if val == '':\n continue\n float(val)\n numeric = True\n except (ValueError, TypeError):\n numeric = False\n \n if numeric:\n rows.sort(key=lambda r: float(r[spalte].strip()) if r[spalte].strip() != ''", "tps": 18.953469325714536, "prompt_tps": 595.1348894314353, "tokens": 204, "prompt_tokens": 127, "denk_zeichen": 0, "antwort_zeichen": 756, "abbruch": "stop", "ttft": 0.213, "sekunden": 11.37 } ], "messungen": [ { "tps": 25.809115779693393, "prompt_tps": 296.59666395155296, "tokens": 7, "prompt_tokens": 67, "denk_zeichen": 0, "antwort_zeichen": 15, "abbruch": "stop", "ttft": 0.226, "sekunden": 0.55 }, { "tps": 25.087667460180295, "prompt_tps": 360.0658406108546, "tokens": 9, "prompt_tokens": 63, "denk_zeichen": 0, "antwort_zeichen": 22, "abbruch": "stop", "ttft": 0.175, "sekunden": 0.93 }, { "tps": 25.06680303007515, "prompt_tps": 379.87360569119727, "tokens": 10, "prompt_tokens": 66, "denk_zeichen": 0, "antwort_zeichen": 17, "abbruch": "stop", "ttft": 0.174, "sekunden": 0.98 }, { "tps": 19.915315652221057, "prompt_tps": 448.72384021106245, "tokens": 18, "prompt_tokens": 83, "denk_zeichen": 0, "antwort_zeichen": 41, "abbruch": "stop", "ttft": 0.185, "sekunden": 1.53 }, { "tps": 19.598044115197304, "prompt_tps": 373.5181386154545, "tokens": 12, "prompt_tokens": 65, "denk_zeichen": 0, "antwort_zeichen": 35, "abbruch": "stop", "ttft": 0.174, "sekunden": 1.0 }, { "tps": 20.73713032954618, "prompt_tps": 431.39913384018064, "tokens": 25, "prompt_tokens": 77, "denk_zeichen": 0, "antwort_zeichen": 63, "abbruch": "stop", "ttft": 0.178, "sekunden": 1.65 }, { "tps": 19.134859427668697, "prompt_tps": 479.73005751370465, "tokens": 50, "prompt_tokens": 89, "denk_zeichen": 0, "antwort_zeichen": 119, "abbruch": "stop", "ttft": 0.186, "sekunden": 3.21 }, { "tps": 25.32186909156388, "prompt_tps": 347.9854542080141, "tokens": 9, "prompt_tokens": 60, "denk_zeichen": 0, "antwort_zeichen": 25, "abbruch": "stop", "ttft": 0.172, "sekunden": 0.76 }, { "tps": 19.551942791015396, "prompt_tps": 456.14347381068933, "tokens": 16, "prompt_tokens": 82, "denk_zeichen": 0, "antwort_zeichen": 33, "abbruch": "stop", "ttft": 0.18, "sekunden": 1.39 }, { "tps": 20.754495077725583, "prompt_tps": 492.1153388565619, "tokens": 24, "prompt_tokens": 91, "denk_zeichen": 0, "antwort_zeichen": 51, "abbruch": "stop", "ttft": 0.185, "sekunden": 1.62 }, { "tps": 19.30488463871395, "prompt_tps": 592.799399551576, "tokens": 119, "prompt_tokens": 124, "denk_zeichen": 0, "antwort_zeichen": 360, "abbruch": "stop", "ttft": 0.209, "sekunden": 6.76 }, { "tps": 20.265722427730065, "prompt_tps": 271.0990881742497, "tokens": 94, "prompt_tokens": 93, "denk_zeichen": 0, "antwort_zeichen": 356, "abbruch": "stop", "ttft": 0.343, "sekunden": 5.2 }, { "tps": 19.577864618361925, "prompt_tps": 467.244546128315, "tokens": 139, "prompt_tokens": 87, "denk_zeichen": 0, "antwort_zeichen": 320, "abbruch": "stop", "ttft": 0.186, "sekunden": 7.7 }, { "tps": 19.5525206331296, "prompt_tps": 261.4549970586313, "tokens": 103, "prompt_tokens": 112, "denk_zeichen": 0, "antwort_zeichen": 296, "abbruch": "stop", "ttft": 0.428, "sekunden": 5.91 }, { "tps": 20.084597187206157, "prompt_tps": 203.9978951126277, "tokens": 93, "prompt_tokens": 88, "denk_zeichen": 0, "antwort_zeichen": 313, "abbruch": "stop", "ttft": 0.431, "sekunden": 5.28 }, { "tps": 18.812744080017964, "prompt_tps": 537.1640806053072, "tokens": 184, "prompt_tokens": 105, "denk_zeichen": 0, "antwort_zeichen": 674, "abbruch": "stop", "ttft": 0.195, "sekunden": 10.46 }, { "tps": 19.427207531485283, "prompt_tps": 486.82858224698435, "tokens": 114, "prompt_tokens": 90, "denk_zeichen": 0, "antwort_zeichen": 377, "abbruch": "stop", "ttft": 0.185, "sekunden": 6.28 }, { "tps": 19.464508901082485, "prompt_tps": 309.25198223545004, "tokens": 156, "prompt_tokens": 133, "denk_zeichen": 0, "antwort_zeichen": 584, "abbruch": "stop", "ttft": 0.43, "sekunden": 8.66 }, { "tps": 18.304271911993062, "prompt_tps": 540.9156783899084, "tokens": 54, "prompt_tokens": 106, "denk_zeichen": 0, "antwort_zeichen": 194, "abbruch": "stop", "ttft": 0.196, "sekunden": 3.37 }, { "tps": 18.953469325714536, "prompt_tps": 595.1348894314353, "tokens": 204, "prompt_tokens": 127, "denk_zeichen": 0, "antwort_zeichen": 756, "abbruch": "stop", "ttft": 0.213, "sekunden": 11.37 } ], "summe": { "terminal_ok": 8, "terminal_n": 10, "code_ok": 10, "code_n": 10, "code_testfaelle_ok": 52, "code_testfaelle_n": 52, "tps_median": 19.6, "tps_min": 18.3, "tps_max": 25.8, "prompt_tps_median": 448.7, "tokens_gesamt": 1440, "sekunden_gesamt": 84.6, "anfragen": 20, "tokens_je_aufgabe": 72.0, "denk_zeichen_gesamt": 0, "antwort_zeichen_gesamt": 4651, "am_limit": 0 } }