{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceType":"competition","sourceId":129276,"databundleVersionId":15506988}],"dockerImageVersionId":31260,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-03-13T18:03:25.657986Z","iopub.execute_input":"2026-03-13T18:03:25.658168Z","iopub.status.idle":"2026-03-13T18:03:27.021597Z","shell.execute_reply.started":"2026-03-13T18:03:25.658149Z","shell.execute_reply":"2026-03-13T18:03:27.020873Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nos.environ[\"PYTORCH_CUDA_ALLOC_CONF\"] = \"expandable_segments:True\"\n\nimport torch\nfrom transformers import pipeline\nimport librosa\nimport pandas as pd\nfrom tqdm import tqdm\n\n# -------------------------\n# CONFIG\n# -------------------------\nMODEL_NAME = \"bengaliAI/tugstugi_bengaliai-asr_whisper-medium\"\nTEST_AUDIO_DIR = \"/kaggle/input/dl-sprint-4-0-bengali-long-form-speech-recognition/transcription/transcription/test/audio\"\nOUTPUT_CSV = \"/kaggle/working/submission.csv\"\n\ndevice = 0 if torch.cuda.is_available() else \"cpu\"\n\n# -------------------------\n# LOAD PIPELINE (MEMORY SAFE)\n# -------------------------\npipe = pipeline(\n    task=\"automatic-speech-recognition\",\n    model=MODEL_NAME,\n    device=device,\n    chunk_length_s=30,\n    return_timestamps=False,\n    ignore_warning=True,\n    generate_kwargs={\n        \"num_beams\": 1}\n)\n\npipe.model.config.use_cache = False\n\n# -------------------------\n# GET TEST FILES\n# -------------------------\naudio_files = sorted([\n    f for f in os.listdir(TEST_AUDIO_DIR)\n    if f.endswith(\".wav\")\n])\n\nresults = []\nfirst_text_printed = False\n\n# -------------------------\n# INFERENCE LOOP\n# -------------------------\nfor file_name in tqdm(audio_files, desc=\"🔊 Transcribing\"):\n    file_path = os.path.join(TEST_AUDIO_DIR, file_name)\n\n    audio, sr = librosa.load(file_path, sr=16000)\n\n    output = pipe(\n        {\"array\": audio, \"sampling_rate\": sr},\n        batch_size=16\n    )\n\n    text = output[\"text\"].strip()\n    file_id = file_name.replace(\".wav\", \"\")\n\n    results.append({\n        \"filename\": file_id,\n        \"transcript\": text\n    })\n\n    # print full transcription of first file only\n    if not first_text_printed:\n        print(\"\\n========== FIRST FILE TRANSCRIPTION ==========\")\n        print(f\"{file_id}:\")\n        print(text)\n        print(\"=============================================\\n\")\n        first_text_printed = True\n\n# -------------------------\n# SAVE SUBMISSION FILE\n# -------------------------\ndf = pd.DataFrame(results)\ndf.to_csv(OUTPUT_CSV, index=False)\n\nprint(f\"✅ Submission saved at: {OUTPUT_CSV}\")\nprint(df.head())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-13T18:03:37.532974Z","iopub.execute_input":"2026-03-13T18:03:37.533287Z","iopub.status.idle":"2026-03-13T19:37:18.844327Z","shell.execute_reply.started":"2026-03-13T18:03:37.533261Z","shell.execute_reply":"2026-03-13T19:37:18.843263Z"}},"outputs":[],"execution_count":null}]}