Package: moss-transcribe

All packages Open in Cursor /Users/friedrichstr/ai-mac-studio/development/moss-transcribe
Status
Description: Sprecherdiarisierte Transkription und redaktionelle Glättung mit dem 0,9B-Modell **MOSS-Transcribe-Diarize**
Port: —
Venv: no venv
Git: not a git repo
File tree
moss-transcribe/
  dev_runs/
    afm_advanced_audio_audit/
    afm_audio_audit/
    batch_50_eval/
    batch_50b_eval/
    batch_50b_eval_w1/
    gemini35_komparatistik_10/
    profile_40658/
    profile_41109/
    batch_50b_eval_w1.log
    batch_50b_eval_w2.log
    batch_50b_eval_w3.log
    inqua_126_gesamtaudit_report.pdf
    inqua_126_gesamtaudit_report.typ
    inqua_126_gesamtaudit_summary.json
    local_model_test.json
  docs/
    moss_orchestrator_guide.pdf
    moss_orchestrator_guide.typ
  kontor/
    domains/
    learning_history.jsonl
    lexikon.json
    linguistic.md
    speaker_registry.json
    styles.yaml
    vocabulary.json
  models/
    MOSS-Transcribe-Diarize/
  samples/
    event_2025_10_21b_90s.json
    event_2025_10_21b_90s.orchestrator.json
    event_2025_10_21b_90s.orchestrator.md
    event_2025_10_21b_90s.orchestrator.srt
    event_2025_10_21b_90s.orchestrator.vtt
    event_2025_10_21b_90s.orchestrator.xml
    event_2025_10_21b_90s.wav
    event_2025_10_21b_90s_orchestrator.json
    event_2025_10_21b_90s_orchestrator.md
    event_2025_10_21b_90s_orchestrator.srt
    event_2025_10_21b_90s_orchestrator.vtt
    event_2025_10_21b_90s_orchestrator.xml
    event_2025_10_21b_90s_stream.json
    event_2025_10_21b_90s_studio.json
    event_2025_10_21b_full.json
  agent.py
  audit_gate.py
  audit_register.json
  audit_register.jsonl
  batch_eval_50.py
  batch_merge.py
  corpus_miner.py
  domain_manager.py
  generate_126_report.py
  learning_loop.py
  learning_plan.md
  orchestrator.py
  partitur.yaml
  PROJECT.yaml
Project Goal

Speaker-diarised transcription and editorial smoothing of audio recordings using the 0.9B MOSS-Transcribe-Diarize model on Apple Silicon Metal (mlx_audio). The system runs a 4-stage AI-orchestrator Partitur: (A) transcription + diarisation, (B) speaker mapping from Kontor bundles, (C) text correction and style transformation, (D) continuous learning loop via Gemini diff extraction. The breakthrough development (August 2026) is a fully operational learning loop with domain-specific Kontor bundles, an audit gate, and a Gemini comparison runner — making it the most sophisticated local-model transcription pipeline in the platform.

Success criteria:
  • MOSS model produces correctly diarised output with speaker markers [S01]/[S02]
  • Speaker mapping resolves to real names via kontor registry
  • Audit gate (audit_gate.py) passes quality threshold on batch eval runs
  • Learning loop (learning_loop.py) extracts improvements from Gemini comparisons
  • Kontor bundles (domains/) cover all active conversation partners
  • docs/ PDF guide (moss_orchestrator_guide.pdf) is current with the implementation
Code/Users/friedrichstr/ai-mac-studio/development/moss-transcribe
Docs/Users/friedrichstr/ai-mac-studio/development/moss-transcribe/docs
Pilot runs/Users/friedrichstr/ai-mac-studio/development/moss-transcribe/dev_runs
Path & Service Checks
CheckPathStatusDetail
code/Users/friedrichstr/ai-mac-studio/development/moss-transcrib✓ ok30 items, last_modified=2026-08-24
docs/Users/friedrichstr/ai-mac-studio/development/moss-transcrib✓ ok2 items, last_modified=2026-08-23
pilot_runs/Users/friedrichstr/ai-mac-studio/development/moss-transcrib✓ ok22 items, last_modified=2026-08-23
README

MOSS-Transcribe-Diarize & AI-Orchestrator Partitur

Sprecherdiarisierte Transkription und redaktionelle Glättung mit dem 0,9B-Modell MOSS-Transcribe-Diarize von OpenMOSS-Team (GitHub: OpenMOSS/MOSS-Transcribe-Diarize), ausgeführt über die mlx_audio-Bibliothek auf Apple Silicon Metal via Nativ.app.

4-Stufige AI-Orchestrator Partitur (partitur.yaml)

   ┌─────────────────────────────────────────────────────────────┐
   │ (A) Stage A: Transkription & Diarisierung (MOSS 0.9B MLX)   │
   │     • Metal GPU Beschleunigung                              │
   │     • 4-Bit/8-Bit Quantisierung & 8192 Prefill-Step         │
   │     • Exakte Zeitstempel & Sprechermarken ([S01], [S02])    │
   └──────────────────────────────┬──────────────────────────────┘
                                  ▼
   ┌─────────────────────────────────────────────────────────────┐
   │ (B) Stage B: Kontext-Injektion & Sprecher-Mapping           │
   │     • Auflösung S01/S02 -> "Josias Strelow", "Gerd Graßhoff"│
   │     • Automatische Rollen-Invariante (1. vs. 2. Person)     │
   │     • Kontor-Registry / Explicit CLI Flags / Heuristiken    │
   └──────────────────────────────┬──────────────────────────────┘
                                  ▼
   ┌─────────────────────────────────────────────────────────────┐
   │ (C) Stage C: Textkorrektor & Stil-Transformation            │
   │     • Bereinigung von Versprechern, Füllwörtern & Stottern  │
   │     • Gesteuert via linguistic.md & vocabulary.json         │
   │     • Zielformat-Schema: Gemini 3.7 Flash XML, JSON, MD, SRT│
   └──────────────────────────────┬──────────────────────────────┘
                                  ▼
   ┌─────────────────────────────────────────────────────────────┐
   │ (D) Stage D: Continuous Learning Loop (Gemini Diff Extractor│
   │     • Automatisches Lernen aus Gemini-Vergleichsläufen      │
   │     • Synchronisation in lexikon.json, vocabulary & rules   │
   │     • Kontinuierlicher Qualitätsgewinn ohne Feintraining    │
   └─────────────────────────────────────────────────────────────┘

Aufbau der Produktionseinheit

moss-transcribe/
  partitur.yaml         Formale AI-Orchestrator Partitur-Spezifikation (4 Stufen)
  orchestrator.py       Hauptengine: Stage A + Stage B + Stage C
  run_orchestrator.sh   Produktions-Launcher für den Orchestrator
  audit_gate.py         Lokales Qwen3.8 Audit-Gate für Rollen- & Fakten-Invariante
  learning_loop.py      Automatische Lernschleife aus Gemini-Komparationsläufen
  run_learning_loop.sh  Launcher für die kontinuierliche Lernschleife
  batch_eval_50.py      Großevaluations- & Batch-Runner für 50+ Profile
  transcribe.py         Basis-Wrapper für MOSS über Nativ mlx_audio
  run.sh                Basis-Launcher für reine Transkription
  kontor/
    lexikon.json        Strukturiertes Weltwissen- & Domänenlexikon
    vocabulary.json     Fachbegriffe & phonetische Autokorrekturen (Prompt-Bias)
    linguistic.md       Linguistische Satzbau-Direktiven & Few-Shot Regeln
    speaker_registry.json Sprecher-Register und Rollenzuweisungen
    styles.yaml         Stilprofile (gemini_polished, verbatim_timestamps, etc.)
    learning_history.jsonl Fortlaufend wachsende Lernhistorie
  docs/
    moss_orchestrator_guide.typ  Typst-Handbuch im lettreai Theme
    moss_orchestrator_guide.pdf  Kompilierte PDF-Dokumentation
  samples/              Referenztranskripte und Test-Audiodateien
  README.md             Dokumentation & Benchmarks

Verwendung

1. AI-Orchestrator Partitur (Standard-Inferenz)

# Produktionslauf mit 4-Bit-Quantisierung, Sprecher-Mapping und Gemini 3.7 Flash XML Ausgabe
./moss-transcribe/run_orchestrator.sh <audio.m4a> \
    --speakers S01="Klient (K)" S02="Interviewer (I)" \
    -s gemini_polished \
    -f all \
    -q 4

2. Kontinuierliche Lernschleife (Learning Loop aus Gemini-Läufen)

# Batch-Lernlauf über alle vorhandenen Komparationsprofile
./moss-transcribe/run_learning_loop.sh --batch-dir dev_runs/batch_50_eval/profiles

# Einzel-Paar Lernen (MOSS XML vs. Gemini XML)
./moss-transcribe/run_learning_loop.sh --moss audio_moss.xml --gemini audio_gemini.xml

3. Lokales Qwen3.8 Audit-Gate

python3 moss-transcribe/audit_gate.py audio_moss.xml --profile-id <ID>

./moss-transcribe/run_orchestrator.sh \ --speakers S01="Josias Strelow" S02="Gerd Graßhoff" \ -f all

Wortgetreue Archivierung mit exakten Zeitstempeln

./moss-transcribe/run_orchestrator.sh -s verbatim_timestamps -f all


### 2. Parameterübersicht Orchestrator

| Parameter | Werte | Beschreibung |
|:--|:--|:--|
| `-s, --style` | `gemini_polished`, `verbatim_timestamps`, `meeting_memo`, `broadcast_subtitles` | Stilprofil für die Textkorrektur |
| `-q, --quantize` | `4`, `8` (oder `--fp16`) | On-the-fly Quantisierung des LLM-Decoders |
| `--prefill-step-size` | `8192`, `4096`, `16384` | Prefill-Blockgröße für Metal-GPU |
| `--speakers` | `S01="Name1" S02="Name2"` | Explizite Zuordnung der Sprecher-Labels |
| `-f, --format` | `xml`, `json`, `md`, `srt`, `vtt`, `all` | Ausgabeformat (XML = Gemini 3.7 Flash Schema) |
| `--no-xml-timestamps` | Flag | Deaktiviert Zeitstempel-Attribute im XML |
| `--registry` | Pfad | Eigene `speaker_registry.json` einbinden |
| `--vocabulary` | Pfad | Eigene `vocabulary.json` mit Terminologie nutzen |

## Funktionsweise

- **Modellladung:** `mlx_audio.stt.utils.load_model` lädt das HF-Repo
  `OpenMOSS-Team/MOSS-Transcribe-Diarize` (FP16, 1,83 GB). Die Modellklasse
  `moss_transcribe_diarize` ist in Nativs `mlx_audio` (v0.5.0) enthalten; ihre
  `sanitize()`-Methode konvertiert die HF-Gewichte (Conv-Transpose,
  `vq_adwaptor`→`vq_adaptor`) in das MLX-Layout.
- **Ein-Durchgang-Transkription:** MOSS verarbeitet die gesamte Audiodatei in
  einem Prompt (Audio-Tokens bei 12,5 Token/s Audio) und generiert danach in
  einem Durchgang den Transkripttext mit eingebetteten Zeitstempeln und
  Sprechermarken: `[start][Sxx] text [end]`.
- **Streaming:** `stream=True` liefert jeden Token einzeln, so dass der
  Fortschritt sichtbar wird (prefill der Audio-Tokens kann bei langen Dateien
  über eine Minute dauern).

## Voraussetzungen

- **Nativ.app** installiert (`/Applications/Nativ.app`) — liefert `mlx`,
  `mlx_audio`, `transformers` und den Python3-Interpreter.
- `ffmpeg` (für Audio-Konvertierung, falls nötig).
- Speicher: ~2,5 GB für kurze Dateien; ~10 GB Spitze für 45-Min-Audio (KV-Cache
  skaliert mit Audiolänge). Auf 16-GB-Macs für Dateien bis ~90 Min ausreichend.

## Verwendung

```bash
# Kurze Datei
./moss-transcribe/run.sh <audio.m4a> -o <ausgabebasis> -f json

# Maximale Geschwindigkeit mit 4-Bit-Quantisierung & optimiertem Prefill (8192)
./moss-transcribe/run.sh <audio.m4a> -q 4 --prefill-step-size 8192 -f json

# 8-Bit-Quantisierung für optimale Balance aus Qualität und Speicherbandbreite
./moss-transcribe/run.sh <audio.m4a> -q 8 -f json

# Volle Kontrolle über den Nativ-Python3
NATIV_PYTHON=/Applications/Nativ.app/.../python3 \
    ./moss-transcribe/transcribe.py <audio> --max-tokens 24000 -q 4 -f srt

# Hotwords zur Biasierung seltener Begriffe
./moss-transcribe/run.sh <audio> --hotwords "Kontor" "Valentino Faldon" "Redis"

Ausgabeformate: json (mit speaker_id pro Segment), srt, vtt, txt. Ohne -o heißt die Ausgabe <audio_stem>.moss.<format>.

Ergebnisse: ai-reporter-Beispiel

Getestet auf event_2025_10_21b.m4a (45:40 Min, 2 Sprecher) aus agents/communication/ai-reporter/example/ — dort liegt eine Referenztranskription von gemini-3-flash-preview.

Kennzahl MOSS (Mac mini 16 GB) MOSS (Mac Studio M1 Ultra 128 GB) Gemini-3-flash (Referenz)
Modellgröße 0,9B, lokal, FP16 0,9B, lokal, FP16 cloud-API
Durchlauf ein Durchgang, keine Stückelung ein Durchgang, keine Stückelung 3 Chunks
Segmente 527 519 ~50 Sprecher-Blöcke
Sprecher 2 (S01, S02) 2 (S01, S02) 2 (speaker1, speaker2)
Text 47.427 Zeichen 47.225 Zeichen ~33.000 Zeichen
Zeitstempel pro Segment (Start/Ende) pro Segment (Start/Ende) pro Sprecherblock
Zeitstempel-Abdeckung bis 2.736 s (volles Audio) bis 2.736 s (volles Audio) bis ~2.740 s
Prefill-Zeit 103,8 s 43,1 s (2,4× schneller) n/a
Generierungszeit 1.739,7 s (29,0 Min) 768,0 s (12,8 Min, 2,3× schneller) API-Seitenlauf
Gesamtlaufzeit 30,7 Min 13,5 Min (2,3× Gesamtspeedup) n/a
Token-Rate 11,5 Tok/s (Durchschnitt) 25,8 Tok/s (bis zu 41,5 Tok/s Peak) n/a

Sprecherabbildung

S01 ↔ speaker1, S02 ↔ speaker2 — konsistent über die gesamte Datei.

Beispielvergleich (erste 90 s)

Gemini:

speaker1: Wir sind alle seit einigen Tagen krank. Das erschwert die Arbeit erheblich.
speaker2: Mich hatte es letzte Woche erwischt. Ich bin hoffentlich über den Berg.
speaker1: Das ist gut. Mich hat letzte Woche in der Schule erneut eine Corona-Variante erwischt.

MOSS (mit Zeitstempeln):

[38.0-42.7] S01: Ja, ja, bin jetzt, bin jetzt seit, wir alle sind jetzt ein paar Tagen krank.
[43.7-46.4] S01: Es erschwert die Arbeit ganz schön, aber.
[46.5-54.0] S02: Ja, da hatte mich das ja letzte Woche erwischt. Jetzt bin ich hoffentlich über dem Berg.
[55.2-63.4] S01: Ja, das ist gut. Ja, ich hatte, ich habe dann letzte Woche in der Schule noch mal erwischt ...

Beide Modelle treffen dieselben inhaltlichen Aussagen; MOSS liefert zusätzliche wortnahe Zeitstempel und feinere Segmentgrenzen, hat aber gelegentlich kleine ASR-Fehler (z.B. „Achtung zu halten" statt „Abstand zu halten").

Lauf-Kennzahlen (45-Min-Datei im Vergleich)

Mac Studio (M1 Ultra, 128 GB Unified Memory)

Prefill:         43,1 s  (34.250 Audio-Tokens, ~795 Tok/s)
Generierung:    768,0 s  (19.846 Tokens, 25,8 Tok/s)
Gesamtlaufzeit:  13,5 Min (811,1 s)
Spitzenspeicher: ~10 GB (problemlos im 128-GB-Pool)

Mac mini (16 GB RAM)

Prefill:        103,8 s  (34.250 Audio-Tokens, ~330 Tok/s)
Generierung:  1.739,7 s  (20.018 Tokens, 11,5 Tok/s)
Gesamtlaufzeit:  30,7 Min (1.843,5 s)
Spitzenspeicher: ~10 GB (nahe an Speichergrenze bei 16 GB)

90-Sekunden-Kurztest

  • Mac Studio: 2,7 s Prefill + 11,5 s Gen = 14,2 s gesamt (41,5 Tok/s)
  • Mac mini: ~10 s Prefill + ~35 s Gen = ~45 s gesamt (16,7 Tok/s)

Die Generierungsrate sinkt leicht mit wachsendem KV-Cache (16 → 11,5 Tok/s), bleibt aber stabil. Das Modell beendet die Generierung per EOS-Token, sobald das gesamte Audio transkribiert ist — max_tokens ist nur eine obere Schranke (8.192 reichen für ~20 Min, 24.000 für die volle 45-Min-Datei).

Grenzen / Hinweise

  • 16 GB RAM: Der KV-Cache für 45 Min belegt ~8 GB; längere Dateien (Richtung 90 Min) benötigen deutlich mehr Speicher. Bei Speicherengpässen auf eine 4-/8-Bit-MLX-Variante (vanch007/mlx-MOSS-Transcribe-Diarize-4bit) ausweichen oder die Datei stückeln.
  • Keine Sprechernamen: MOSS vergibt S01, S02, … — die Zuordnung zu echten Namen muss wie bei Gemini über ein Sprecher-Register (ai-reporter-Kontor) erfolgen.
  • Sprache: MOSS auto-erkennt 50+ Sprachen; der --language-Parameter ist nur Metadaten, keine Steuerung.
Recent commits
No git history.