# Submission Failed: “Expected file not found” - What output file/path is required?

**URL:** <https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367>\
**Category:** Children’s Speech Recognition Challenge\
**Created:** [February 26, 2026, 11:25pm UTC](https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367 "2026-02-26T23:25:03Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mubarak127](https://avatars.discourse-cdn.com/v4/letter/m/76d3ee/32.png) [@Mubarak127](https://community.drivendata.org/u/Mubarak127)\
**Post date:** [February 26, 2026, 11:25pm UTC](https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367/1 "2026-02-26T23:25:03Z")

</div>

Hi everyone, I’m having an issue submitting my code for leaderboard scoring. The platform keeps showing:

**“Your submission did not output the expected file, so it could not be scored. This may be due to an unhandled exception or syntax error.”**

I reviewed the logs and confirmed my `submission.zip` includes `main.py` and the required model files, but the submission still fails with the same message.

Has anyone experienced this before? What is the exact expected output filename and path for the phonetic track, and what’s the best way to ensure it gets created correctly during scoring?

Thanks in advance.

main.py

“”"  
import json  
import traceback  
from pathlib import Path  
from dataclasses import dataclass  
from typing import List

import torch  
import torchaudio  
from transformers import AutoProcessor, WavLMForCTC

TARGET\_SR = 16000  
BATCH\_SIZE = 16

def read\_jsonl(path: Path):  
with open(path, “r”, encoding=“utf-8”) as f:  
return [json.loads(line) for line in f if line.strip()]

def write\_jsonl(path: Path, rows):  
path.parent.mkdir(parents=True, exist\_ok=True)  
with open(path, “w”, encoding=“utf-8”) as f:  
for r in rows:  
f.write(json.dumps(r, ensure\_ascii=False) + “\n”)

def load\_audio(path: Path):  
wav, sr = torchaudio.load(str(path))  
if wav.ndim == 2 and wav.shape[0] \> 1:  
wav = wav.mean(dim=0, keepdim=True)  
if sr != TARGET\_SR:  
wav = torchaudio.functional.resample(wav, sr, TARGET\_SR)  
return wav.squeeze(0).contiguous()

@dataclass  
class ModelBundle:  
processor: any  
model: torch.nn.Module  
device: torch.device

def load\_model(model\_dir: Path) → ModelBundle:  
print(“[debug] Loading processor from:”, model\_dir)  
processor = AutoProcessor.from\_pretrained(str(model\_dir))  
print(“[debug] Loading model from:”, model\_dir)  
model = WavLMForCTC.from\_pretrained(str(model\_dir))

```
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("[debug] Device:", device)
model.to(device).eval()
return ModelBundle(processor, model, device)

```

@torch.no\_grad()  
def predict\_batch(bundle: ModelBundle, waves: List[torch.Tensor]):  
inputs = bundle.processor(  
waves,  
sampling\_rate=TARGET\_SR,  
return\_tensors=“pt”,  
padding=True,  
)  
input\_values = inputs[“input\_values”].to(bundle.device)  
attention\_mask = inputs.get(“attention\_mask”)  
if attention\_mask is not None:  
attention\_mask = attention\_mask.to(bundle.device)

```
with torch.autocast(
    device_type="cuda",
    dtype=torch.float16,
    enabled=(bundle.device.type == "cuda"),
):
    logits = bundle.model(input_values, attention_mask=attention_mask).logits

pred_ids = torch.argmax(logits, dim=-1)
return bundle.processor.batch_decode(pred_ids)

```

def main():  
work\_dir = Path.cwd() # /code\_execution  
data\_dir = work\_dir / “data”  
model\_dir = Path( **file** ).parent / “model”  
out\_path = work\_dir / “submission” / “submission.jsonl”

```
print("[debug] CWD:", work_dir)
print("[debug] data_dir exists:", data_dir.exists())
print("[debug] model_dir exists:", model_dir.exists())
print("[debug] writing to:", out_path)

meta_path = data_dir / "utterance_metadata.jsonl"
print("[debug] meta_path:", meta_path, "exists:", meta_path.exists())

bundle = load_model(model_dir)

metadata = read_jsonl(meta_path)
print("[debug] num utterances:", len(metadata))

results = []
for i in range(0, len(metadata), BATCH_SIZE):
    batch = metadata[i:i + BATCH_SIZE]
    waves, ids = [], []

    for row in batch:
        ap = data_dir / row["audio_path"]
        waves.append(load_audio(ap))
        ids.append(row["utterance_id"])

    preds = predict_batch(bundle, waves)

    for uid, pred in zip(ids, preds):
        results.append({"utterance_id": uid, "phonetic_text": pred.strip()})

    if i == 0 or (i + BATCH_SIZE) % (BATCH_SIZE * 20) == 0:
        print(f"[debug] processed {min(i + BATCH_SIZE, len(metadata))}/{len(metadata)}")

write_jsonl(out_path, results)
print("[done] wrote:", out_path, "size:", out_path.stat().st_size)

```

if **name** == “ **main** ”:  
try:  
main()  
except Exception:  
print(“[FATAL] Unhandled exception:\n”)  
print(traceback.format\_exc())  
raise

“”"

---

<div class="post-metadata">

**Author:** ![oknaitik](https://avatars.discourse-cdn.com/v4/letter/o/cc9497/32.png) [@oknaitik](https://community.drivendata.org/u/oknaitik)\
**Post date:** [February 27, 2026, 3:23pm UTC](https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367/2 "2026-02-27T15:23:27Z")

</div>

Did you check if your output file follows the submission format (only 2 columns with correct names, dtypes, etc.)?

---

<div class="post-metadata">

**Author:** ![cszc](https://avatars.discourse-cdn.com/v4/letter/c/c68b51/32.png) [@cszc](https://community.drivendata.org/u/cszc)\
**Post date:** [February 28, 2026, 12:34am UTC](https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367/3 "2026-02-28T00:34:38Z")

</div>

Hi @Mubarak127 - Thanks for posting.

The error message indicates that the job is not finding the `submission.jsonl` file required for scoring. It could have been output incorrectly, or something else may have failed upstream.

Your submission is unzipped to `src`, and running your `src/main.py` file should output `src/submission/submission.jsonl`.

You should also check at that your `submission.jsonl` file is formatted correctly.

An example submission for the phonetic track can be found [here](https://github.com/drivendataorg/childrens-speech-recognition-runtime/tree/main/examples/phonetic/minimal). Instructions for the output format can be found [here](https://www.drivendata.org/competitions/309/childrens-phonetic-asr/page/981/#output-format).

I inspected a few of your submitted jobs, and it is odd that the logs don’t go past unzipping, despite your code including print statements. I would make sure that your zipfile is structured correctly and can be unzipped in successfully in a linux environment.

If you provide the submission id for the submission that failed, I can look into this further. Good luck!

---

<div class="post-metadata">

**Author:** ![Mubarak127](https://avatars.discourse-cdn.com/v4/letter/m/76d3ee/32.png) [@Mubarak127](https://community.drivendata.org/u/Mubarak127)\
**Post date:** [March 1, 2026, 1:54am UTC](https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367/4 "2026-03-01T01:54:23Z")

</div>

Thank you @oknaitik I have successfully submitted.

---

<div class="post-metadata">

**Author:** ![Mubarak127](https://avatars.discourse-cdn.com/v4/letter/m/76d3ee/32.png) [@Mubarak127](https://community.drivendata.org/u/Mubarak127)\
**Post date:** [March 1, 2026, 1:57am UTC](https://community.drivendata.org/t/submission-failed-expected-file-not-found-what-output-file-path-is-required/11367/5 "2026-03-01T01:57:29Z")

</div>

Thank you @cszc I have successfully submitted.
