LM-Studio-Matrix mit gemma-4-e4b: zwoelf Laeufe und vier Befunde

Skill 12.0.0 bis 12.2.0 und Adapter 2.0.0 bis 2.2.0.

Werkzeugfreigabe: Die Shell-Rechte des OpenCode-Adapters sind jetzt eine
Denylist wie beim Claude-Adapter statt einer Allowlist. Ausloeser war der
erste Qwen-Lauf, dessen einzige beide Werkzeugaufrufe an einer Pipeline
scheiterten. Kontrolltest belegt beide Richtungen: Get-ChildItem | Format-Table
laeuft durch, rm wird verweigert, die Datei bleibt bestehen.

Lokaler Betrieb: Der Preflight entlaedt alle Modelle vor jedem Lauf und laedt
den Kontext auf das Modellmaximum. Gemessen waren zuvor beide Modelle
gleichzeitig geladen - 168 MiB frei von 16,3 GB. Qwen 27B passt auf dieser
Karte nicht und wurde durch qwen3.5-9b ersetzt, in Q4_K_M wie Gemma.

Messinstrument: analyse-anforderungen.py erkennt Feldnamen in Markdown-
Fettschrift und Modulpraefixe in IDs. Der erste lokale Lauf mit Artefakten
wurde sonst mit null Anforderungen gezaehlt statt mit neun. Regressionsprobe
an vier Claude-Laeufen unveraendert.

Befunde: Der Standard-Ausgabeblock, mit dem Claude sieben Artefakte erzeugt,
liefert bei gemma-4-e4b null von sechs Laeufen ein Ergebnis - das Modell loest
den Pfad relativ zum Arbeitsverzeichnis auf. Ein Lauf startete alle sieben
vorgesehenen Rollen und lieferte neun formkonforme Anforderungen. Ein anderer
erzeugte sieben richtig benannte Dateien ohne eine einzige formkonforme
Anforderung. Und eine Shell-Umleitung schrieb an der Denylist vorbei in den
eingefrorenen Snapshot - gefunden vom Vorher/Nachher-Vergleich, nicht von der
Regel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Christoph Schwörer
2026-09-01 11:02:04 +02:00
co-authored by Claude Opus 5
parent 654339464e
commit 28e927013b
218 changed files with 20745 additions and 17 deletions
+34 -4
View File
@@ -1,6 +1,15 @@
# 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.
param(
# Optionaler Filter: nur Laeufe dieser Modelle fahren. Ohne Angabe alle.
# Erlaubt es, eine Modellzelle nachzuziehen, ohne die uebrigen zu wiederholen.
[string[]]$Modelle,
# Variante des Ausgabe-Blocks. 'standard' ist der Wortlaut, mit dem die
# Claude-Laeufe gemessen wurden. 'explizit' verbietet relative Pfade
# ausdruecklich - eigene Versuchsbedingung, eigene Iteration.
[ValidateSet('standard','explizit')][string]$Ausgabeblock = 'standard'
)
$ErrorActionPreference = 'Continue'
$repo = 'C:\DEV\MasterArbeit'
@@ -9,8 +18,8 @@ $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'
$iterV1 = if ($Ausgabeblock -eq 'explizit') { 'Iteration 14' } else { 'Iteration 13' }
$iterV2 = if ($Ausgabeblock -eq 'explizit') { 'Iteration 7' } else { 'Iteration 6' }
$maxRun = 28800 # 8 h je Lauf; 6 Laeufe = bis zu 48 h gesamt
$werkzeugkontext = @{
@@ -74,8 +83,10 @@ $laeufe = @(
@{ modell = 'qwen/qwen3.5-9b'; modus = 'custom' }
)
if ($Modelle) { $laeufe = $laeufe | Where-Object { $Modelle -contains $_.modell } }
$protokoll = Join-Path $repo 'Versuche\_lmstudio_matrix.log'
Set-Content -Path $protokoll -Value "Matrixstart $(Get-Date -Format o); Skill $skillVer"
Add-Content -Path $protokoll -Value "Matrixstart $(Get-Date -Format o); Skill $skillVer; Ausgabeblock: $Ausgabeblock; Modelle: $(($laeufe.modell | Select-Object -Unique) -join ', ')"
foreach ($l in $laeufe) {
$modell = $l.modell
@@ -102,13 +113,32 @@ foreach ($l in $laeufe) {
Set-Content -Path "$lauf\_meta\before.txt" `
-Value (git -C $repo status --porcelain -- 'QuellCode/CentronERP' | Out-String)
$block2 = @"
if ($Ausgabeblock -eq 'explizit') {
$block2 = @"
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in dieses Verzeichnis:
$lauf\Ergebnisse
Verwende bei jedem Schreibvorgang den vollständigen absoluten Pfad, beginnend mit
``$lauf\Ergebnisse\``. Ein relativer Pfad wie ``Ergebnisse\StRS.md`` wird vom
Arbeitsverzeichnis aus aufgelöst und deshalb abgewiesen.
Beispiel für die Datei StRS.md:
``$lauf\Ergebnisse\StRS.md``
Lege im Arbeitsverzeichnis (der analysierten Codebasis) kein Verzeichnis ``Ergebnisse``
an und verändere dort keine Dateien.
"@
} else {
$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)