Bug: blank lines in wav.scp / jsonl file lists crash prepare_data_iterator (IndexError / JSONDecodeError)
Maintainer antworten meist innerhalb von 1 Tag
Ein zugehöriger Pull Request wurde bereits gemerged.
- #3758 von @Lesereingrape — gemerged
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 85/100
Rechercherichtung
Beginne in funasr/auto/auto_model.py bei prepare_data_iterator(), insbesondere bei den im Issue beschriebenen Parsing-Zweigen für .jsonl und id/data. Führe die bereitgestellte Reproduktion mit leeren und ausschließlich aus Leerzeichen bestehenden Zeilen sowohl für wav.scp als auch für data.jsonl aus. Erledigt ist die Aufgabe, wenn leere Zeilen ignoriert werden und beide Aufrufe die zwei erwarteten IDs und Datenpfade ohne eine der beiden Ausnahmen zurückgeben.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
🐛 Bug
AutoModel.generate() with a file list (wav.scp, text.txt, file.jsonl, ...) crashes if the list contains a blank or whitespace-only line. prepare_data_iterator() in funasr/auto/auto_model.py iterates over every line without skipping empty ones:
- the
id \t databranch doeslines = line.strip().split(maxsplit=1)and then indexeslines[0], so an empty line raisesIndexError: list index out of range; - the
.jsonlbranch callsjson.loads(line.strip())on the empty line and raisesjson.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0).
Blank lines are easy to produce in practice — lists concatenated from several sources, lists edited by hand, or files written with an extra separator line — and one of them aborts the whole batch instead of being ignored.
To Reproduce
- Install from source:
pip install -e . - Run the snippet below (it calls
prepare_data_iteratordirectly, so no model weights or download are needed). - See
IndexErrorfor the.scplist andJSONDecodeErrorfor the.jsonllist.
Code sample
from funasr.auto.auto_model import prepare_data_iterator
open("wav.scp", "w", encoding="utf-8").write("utt1 /a.wav\n\nutt2 /b.wav\n")
open("data.jsonl", "w", encoding="utf-8").write(
'{"key": "k1", "source": "/a.wav"}\n\n{"key": "k2", "source": "/b.wav"}\n'
)
prepare_data_iterator("wav.scp") # IndexError: list index out of range
prepare_data_iterator("data.jsonl") # json.decoder.JSONDecodeError
The same crash reaches users through model.generate(input="wav.scp").
Expected behavior
Blank lines carry no utterance, so they should be skipped; the two real entries should come back as (['utt1', 'utt2'], ['/a.wav', '/b.wav']) and (['k1', 'k2'], ['/a.wav', '/b.wav']), exactly as they do when the blank line is deleted manually.
Error logs
Traceback (most recent call last):
File "repro.py", line 8, in <module>
prepare_data_iterator("wav.scp")
File ".../funasr/auto/auto_model.py", line 479, in prepare_data_iterator
data = lines[1] if len(lines) > 1 else lines[0]
IndexError: list index out of range
Traceback (most recent call last):
File "repro.py", line 9, in <module>
prepare_data_iterator("data.jsonl")
File ".../funasr/auto/auto_model.py", line 474, in prepare_data_iterator
lines = json.loads(line.strip())
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Environment
- OS: Windows 11 26200 (the file-list reader is pure Python, so this reproduces on Linux too)
- Python version: 3.11.14
- FunASR version: source
mainat66d7a4c264a5993a2a63ed00c1f402c296ee521a - ModelScope version: not used by this code path
- PyTorch / torchaudio version: 2.14.1+cpu
- Install method (
pip, source, Docker): source,pip install -e .equivalent - Device (
cuda,cpu,mps): cpu - GPU model: n/a
- CUDA/cuDNN version: n/a
- Docker image tag, if used: n/a
Audio details
No audio is needed — the crash happens while parsing the list file itself.
- Vorherrschende Sprache
- Python
- Sterne
- 20.7k
- Forks
- 2.1k
- Ø Merge
- 23 Std. 18 Min.
- Gemergte PRs (30 T.)
- 38
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus modelscope/FunASR
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
modelscope/FunASR#3762 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
modelscope/FunASR#3730 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
modelscope/FunASR#3704 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
没有vllm时使用fun-asr-nano每次都重新加载模型Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenbug needs feedback
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
modelscope/FunASR#3401 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 28/100
modelscope/FunASR#3777 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in modelscope/FunASR
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
infrastructure qa
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
khuisman/mcp-gee-sweet#1068 ·
Maintainer antworten meist innerhalb von 1 Tag
-
The book has a Nix install section that chelis.ch lacks, and it names two of the three systemsOffenarea:ecosystem documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Chelis-Lang/chelis#3866 ·
Maintainer antworten meist innerhalb von 1 Tag
-
`lvm_compact` has no self-hosted twin, and `docs/158` §5 says every language-face component mustOffenbug sev-3 vm
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
-
issue: Picking a prompt from the / menu in a channel inserts a command chip instead of the promptOffenbug confirmed issue
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 78/100
open-webui/open-webui#32712 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag