Lots of runs

This commit is contained in:
Christoph Schwörer
2026-08-26 16:37:24 +02:00
parent f349d189c7
commit 844b4e5569
823 changed files with 198980 additions and 125 deletions
@@ -51,10 +51,22 @@ for zeile in io.open(pfad, encoding='utf-8'):
inhalt = c.get('content')
if isinstance(inhalt, list):
inhalt = ' '.join(str(x.get('text', '')) for x in inhalt if isinstance(x, dict))
ergebnisse[c.get('tool_use_id')] = len(str(inhalt or ''))
ergebnisse[c.get('tool_use_id')] = str(inhalt or '')
# Ein Aufruf, der am Nebenlaeufigkeitslimit scheitert, erscheint im Transkript wie ein
# regulaerer Subagenten-Start, ist aber keiner: Er liefert nur die Absage zurueck und
# zaehlt nicht in `subagent_stats.spawned`. Ohne diese Trennung meldet der Abgleich eine
# Abweichung, die es nicht gibt (Lauf Iteration 3/.../125032_v4.4.0-fb24: 21 gefundene
# Aufrufe gegenueber 13 erwarteten - die Differenz waren 8 Absagen).
ABSAGE = 'Concurrent subagent limit reached'
for a in aufrufe:
a['ergebnis_zeichen'] = ergebnisse.get(a['id'])
txt = ergebnisse.get(a['id']) or ''
a['ergebnis_zeichen'] = len(txt)
a['abgewiesen'] = ABSAGE in txt
abgewiesen = [a for a in aufrufe if a['abgewiesen']]
echte = [a for a in aufrufe if not a['abgewiesen']]
meta = os.path.join(lauf, '_meta')
os.makedirs(meta, exist_ok=True)
@@ -65,15 +77,27 @@ md = ['# Subagenten-Aufrufe', '',
'Session `%s`, Transkript `%s`.' % (sid, os.path.basename(pfad)),
'',
'`subagent_stats`: **%s** Subagenten gesamt, davon **%s** von Subagenten gestartet '
'(max_depth %s). Direkt vom Hauptagenten erwartet: **%s**. Im Transkript gefunden: **%s**.'
% (gesamt, verschachtelt, stats.get('max_depth'), erwartet, len(aufrufe)), '']
'(max_depth %s). Direkt vom Hauptagenten erwartet: **%s**. Im Transkript gefunden: '
'**%s** echte Starts%s.'
% (gesamt, verschachtelt, stats.get('max_depth'), erwartet, len(echte),
' und **%d** am Nebenlaeufigkeitslimit abgewiesene Aufrufe' % len(abgewiesen)
if abgewiesen else ''), '']
if verschachtelt:
md += ['> Die %s von Subagenten gestarteten Aufrufe stehen in deren eigenen Transkripten und'
' sind hier **nicht** enthalten.' % verschachtelt, '']
if erwartet != len(aufrufe):
md += ['> **Abweichung** zwischen erwarteter und gefundener Anzahl.',
if abgewiesen:
md += ['> **%d Aufrufe wurden am Nebenlaeufigkeitslimit abgewiesen** '
'(`subagent_stats.refused.concurrency_limit` = %s) und sind unten **nicht** '
'aufgefuehrt. Sie erscheinen im Transkript wie regulaere Starts, liefern aber nur '
'die Absage zurueck und zaehlen nicht in `spawned`. Fuer die Auswertung der '
'selbstgewaehlten Zerlegung sind sie dennoch aufschlussreich: Der Hauptagent wollte '
'staerker parallelisieren, als das Werkzeug zuliess.'
% (len(abgewiesen), stats.get('refused', {}).get('concurrency_limit', '?')), '']
if erwartet != len(echte):
md += ['> **Abweichung** zwischen erwarteter (%s) und gefundener Anzahl echter Starts (%s).'
% (erwartet, len(echte)),
'> Ursache pruefen, bevor die Prompts ausgewertet werden.', '']
for i, a in enumerate(aufrufe, 1):
for i, a in enumerate(echte, 1):
md += ['## %d. %s' % (i, a['description'] or '(ohne Beschreibung)'),
'',
'- **Werkzeug:** `%s` **Typ:** `%s` **Hintergrund:** %s'
@@ -83,8 +107,10 @@ for i, a in enumerate(aufrufe, 1):
'', '### Prompt', '', '```', a['prompt'].rstrip(), '```', '']
io.open(os.path.join(meta, 'subagenten.md'), 'w', encoding='utf-8').write('\n'.join(md))
print('Subagenten gefunden: %d (direkt erwartet: %s, gesamt: %s, davon verschachtelt: %s)' % (len(aufrufe), erwartet, gesamt, verschachtelt))
for a in aufrufe:
print('Subagenten gefunden: %d echte%s (direkt erwartet: %s, gesamt: %s, davon verschachtelt: %s)'
% (len(echte), (', %d abgewiesen' % len(abgewiesen)) if abgewiesen else '',
erwartet, gesamt, verschachtelt))
for a in echte:
print(' - %-42s %s Prompt %6d Z. Ergebnis %s Z.'
% ((a['description'] or '')[:42], a['subagent_type'], len(a['prompt']), a['ergebnis_zeichen']))
print('geschrieben:', os.path.join(meta, 'subagenten.md'))