152 lines
6.5 KiB
PowerShell
152 lines
6.5 KiB
PowerShell
# Faehrt die LM-Studio-Matrix sequenziell: zwei Modelle x drei Agentenmodi.
|
|
# Sequenziell zwingend - beide Modelle teilen sich dieselbe GPU, parallele
|
|
# Laeufe wuerden die Laufzeitmessung verzerren und den Speicher sprengen.
|
|
$ErrorActionPreference = 'Continue'
|
|
|
|
$repo = 'C:\DEV\MasterArbeit'
|
|
$skill = Join-Path $repo '.claude\skills\run-experiment'
|
|
$adapter = Join-Path $skill 'opencode-adapter.py'
|
|
$root = Join-Path $repo 'QuellCode\CentronERP'
|
|
$agents = Join-Path $repo 'Versuche\Versuch_02\03_Agents.json'
|
|
$skillVer = 'v12.1.0'
|
|
$iterV1 = 'Iteration 13'
|
|
$iterV2 = 'Iteration 6'
|
|
$maxRun = 28800 # 8 h je Lauf; 6 Laeufe = bis zu 48 h gesamt
|
|
|
|
$werkzeugkontext = @{
|
|
solo = @'
|
|
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
|
|
Für diesen Lauf stehen zur Verfügung: Lesen von Dateien, Suchen im Dateibestand, Auflisten von
|
|
Verzeichnissen sowie das Ausführen rein lesender Kommandozeilenbefehle im Arbeitsverzeichnis.
|
|
Nicht verfügbar sind: Subagenten, spezialisierte Agentenrollen, externe Werkzeugserver,
|
|
Webzugriff.
|
|
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
|
|
Werkzeuge zu ersetzen.
|
|
'@
|
|
builtin = @'
|
|
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
|
|
Für diesen Lauf stehen zur Verfügung: Lesen von Dateien, Suchen im Dateibestand, Auflisten von
|
|
Verzeichnissen, das Ausführen rein lesender Kommandozeilenbefehle im Arbeitsverzeichnis sowie
|
|
die werkzeugeigenen Subagenten.
|
|
Nicht verfügbar sind: spezialisierte Agentenrollen aus Konfigurationsdateien, externe
|
|
Werkzeugserver, Webzugriff.
|
|
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
|
|
Werkzeuge zu ersetzen.
|
|
'@
|
|
custom = @'
|
|
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
|
|
Für diesen Lauf stehen zur Verfügung: Lesen von Dateien, Suchen im Dateibestand, Auflisten von
|
|
Verzeichnissen, das Ausführen rein lesender Kommandozeilenbefehle im Arbeitsverzeichnis sowie
|
|
die beigestellten Agentenrollen modulinventar, faktenermittler, strs-autor, syrs-autor,
|
|
swrs-autor, belegpruefer, konsistenzpruefer und iso29148-orchestrator.
|
|
Nicht verfügbar sind: externe Werkzeugserver, Webzugriff.
|
|
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
|
|
Werkzeuge zu ersetzen.
|
|
|
|
Für die folgenden Teilaufgaben stehen vorgesehene Bearbeiter bereit. Führe diese
|
|
Teilaufgaben durch den jeweils genannten Bearbeiter aus, nicht selbst:
|
|
|
|
| Teilaufgabe | Vorgesehener Bearbeiter |
|
|
|---|---|
|
|
| Modulinventar (Schritt 0) | modulinventar |
|
|
| Faktenerhebung zu einem Modulausschnitt (Schritte 2 bis 4) | faktenermittler |
|
|
| Formulierung der StRS-Anforderungen | strs-autor |
|
|
| Formulierung der SyRS-Anforderungen | syrs-autor |
|
|
| Formulierung der SwRS-Anforderungen samt Konsolidierungsprüfung | swrs-autor |
|
|
| Prüfung ausgewiesener Belege gegen die Codebasis | belegpruefer |
|
|
| Prüfung des Gesamtbestands an den Nahtstellen der Ausschnitte | iso29148-orchestrator |
|
|
| Konsistenzcheck des fertigen Anforderungssatzes (Abschnitt Abschluss) | konsistenzpruefer |
|
|
|
|
Zuschnitt, Anzahl der Aufträge je Bearbeiter, deren Reihenfolge und die Tiefe
|
|
entscheidest du. Gebunden ist allein, wer eine Teilaufgabe ausführt. Die Bearbeiter
|
|
lesen nur; das Anlegen der Ergebnisdateien und die Übernahme ihrer Rückmeldungen
|
|
bleiben deine Aufgabe.
|
|
'@
|
|
}
|
|
|
|
# Modell x Modus. custom ist V2 und liegt deshalb unter Versuch_02.
|
|
$laeufe = @(
|
|
@{ modell = 'google/gemma-4-e4b'; modus = 'solo' }
|
|
@{ modell = 'google/gemma-4-e4b'; modus = 'builtin' }
|
|
@{ modell = 'google/gemma-4-e4b'; modus = 'custom' }
|
|
@{ modell = 'qwen/qwen3.5-9b'; modus = 'solo' }
|
|
@{ modell = 'qwen/qwen3.5-9b'; modus = 'builtin' }
|
|
@{ modell = 'qwen/qwen3.5-9b'; modus = 'custom' }
|
|
)
|
|
|
|
$protokoll = Join-Path $repo 'Versuche\_lmstudio_matrix.log'
|
|
Set-Content -Path $protokoll -Value "Matrixstart $(Get-Date -Format o); Skill $skillVer"
|
|
|
|
foreach ($l in $laeufe) {
|
|
$modell = $l.modell
|
|
$modus = $l.modus
|
|
|
|
if ($modus -eq 'custom') {
|
|
$promptDir = Join-Path $repo 'Versuche\Versuch_02'
|
|
$promptDatei = Join-Path $promptDir '02_Prompt.md'
|
|
$nn = '02'; $iter = $iterV2
|
|
} else {
|
|
$promptDir = Join-Path $repo 'Versuche\Versuch_01'
|
|
$promptDatei = Join-Path $promptDir '03_Prompt.md'
|
|
$nn = '03'; $iter = $iterV1
|
|
}
|
|
|
|
$zelle = Join-Path (Join-Path (Join-Path $iter $modell) $modus) 'high'
|
|
do {
|
|
$id4 = '{0:x4}' -f (Get-Random -Maximum 65536)
|
|
$lauf = Join-Path (Join-Path $promptDir $zelle) "${nn}_Lauf_$(Get-Date -Format 'yyyy-MM-dd_HHmmss')_${skillVer}-$id4"
|
|
} while (Test-Path $lauf)
|
|
|
|
New-Item -ItemType Directory -Force "$lauf\Ergebnisse" | Out-Null
|
|
New-Item -ItemType Directory -Force "$lauf\_meta" | Out-Null
|
|
Set-Content -Path "$lauf\_meta\before.txt" `
|
|
-Value (git -C $repo status --porcelain -- 'QuellCode/CentronERP' | Out-String)
|
|
|
|
$block2 = @"
|
|
|
|
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
|
|
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
|
|
``$lauf\Ergebnisse\``.
|
|
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
|
|
"@
|
|
Set-Content -Path "$lauf\_meta\combined_prompt.md" -Encoding utf8 `
|
|
-Value ((Get-Content $promptDatei -Raw) + "`n`n" + $werkzeugkontext[$modus] + "`n" + $block2)
|
|
|
|
Add-Content -Path $protokoll -Value "START $(Get-Date -Format o) $modell $modus -> $lauf"
|
|
Set-Content -Path "$lauf\_meta\startzeit.txt" -Value (Get-Date -Format o)
|
|
|
|
$argumente = @(
|
|
$adapter,
|
|
'--prompt', "$lauf\_meta\combined_prompt.md",
|
|
'--root', $root,
|
|
'--output', "$lauf\Ergebnisse",
|
|
'--result-dir', $lauf,
|
|
'--provider', 'lmstudio',
|
|
'--model', $modell,
|
|
'--effort', 'high',
|
|
'--mode', $modus,
|
|
'--min-context', '32768',
|
|
'--lmstudio-context', 'max',
|
|
'--lmstudio-parallel', '4',
|
|
'--lmstudio-gpu', 'max',
|
|
'--lmstudio-autoload',
|
|
'--stall-timeout', '0',
|
|
'--max-runtime', "$maxRun",
|
|
'--title', "run-experiment $modell $modus high"
|
|
)
|
|
if ($modus -eq 'custom') { $argumente += @('--agents', $agents) }
|
|
|
|
& python @argumente 2> "$lauf\Stderr.log"
|
|
$code = $LASTEXITCODE
|
|
|
|
Set-Content -Path "$lauf\_meta\endzeit.txt" -Value (Get-Date -Format o)
|
|
Set-Content -Path "$lauf\_meta\after.txt" `
|
|
-Value (git -C $repo status --porcelain -- 'QuellCode/CentronERP' | Out-String)
|
|
& python (Join-Path $skill 'analyse-anforderungen.py') $lauf 2>&1 | Out-Null
|
|
|
|
$dateien = (Get-ChildItem "$lauf\Ergebnisse" -Recurse -File -EA SilentlyContinue | Measure-Object).Count
|
|
Add-Content -Path $protokoll -Value "ENDE $(Get-Date -Format o) exit=$code dateien=$dateien"
|
|
}
|
|
|
|
Add-Content -Path $protokoll -Value "Matrixende $(Get-Date -Format o)"
|