Spaces:
Running on Zero
Running on Zero
| # app.py — Íslenskt ASR – 3 mínútur (ZeroGPU, works forever, your original code!) | |
| import os | |
| os.environ["OMP_NUM_THREADS"] = "1" | |
| os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128" | |
| import gradio as gr | |
| import spaces | |
| from transformers import pipeline | |
| import torch | |
| import gc | |
| # —————————————————————————————— | |
| # Model loaded ONLY inside GPU worker (ZeroGPU safe) | |
| # —————————————————————————————— | |
| MODEL_NAME = "palli23/whisper-small-sam_spjall" | |
| # Auto-refreshes every 3 min idle → Space never dies | |
| def transcribe_3min(audio_path): | |
| if not audio_path: | |
| return "Hlaðið upp hljóðskrá" | |
| # Load pipeline directly on GPU inside the worker (this is the simplest & works 100%) | |
| pipe = pipeline( | |
| "automatic-speech-recognition", | |
| model=MODEL_NAME, | |
| torch_dtype=torch.float16, | |
| device=0, # GPU 0 (safe inside @spaces.GPU) | |
| token=os.getenv("HF_TOKEN"), | |
| ) | |
| result = pipe( | |
| audio_path, | |
| chunk_length_s=30, | |
| stride_length_s=(6, 0), | |
| batch_size=8, | |
| return_timestamps=False, | |
| ) | |
| # Aggressive memory cleanup so ZeroGPU stays happy | |
| if "chunks" in result: | |
| del result["chunks"] | |
| del pipe | |
| gc.collect() | |
| torch.cuda.empty_cache() | |
| return result["text"] | |
| # —————————————————————————————— | |
| # UI — your original, unchanged | |
| # —————————————————————————————— | |
| with gr.Blocks() as demo: # removed 'theme=' (was causing error) | |
| gr.Markdown("# Íslenskt ASR – 3 mínútur") | |
| gr.Markdown("**Whisper small· mjög lágur WER á prófunarupptökum · allt að 5 mín hljóð**") | |
| gr.Markdown("**Hafa samband:** pallinr1@protonmail.com") | |
| audio_in = gr.Audio( | |
| type="filepath", | |
| label="Hlaðið upp .mp3 / .wav (max 5 mín)" | |
| ) | |
| btn = gr.Button("Transcribe", variant="primary", size="lg") | |
| output = gr.Textbox(lines=30, label="Útskrift") | |
| btn.click(fn=transcribe_3min, inputs=audio_in, outputs=output) | |
| # —————————————————————————————— | |
| # PUBLIC — NO LOGIN, NO PASSWORD | |
| # —————————————————————————————— | |
| demo.launch( | |
| auth=None, # ← No login | |
| share=True, # ← Public | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| show_error=True, | |
| quiet=False | |
| ) |