Huggingface_Hack / test_modules /test_whisper_qwen.py
minhahwang's picture
feat: wire Whisper-small ASR and Qwen2.5-3B Q&A into app (sprint steps 9-10)
e99dd36
Raw
History Blame Contribute Delete
3.68 kB
"""
Test script: Download and verify Whisper-small (ASR) and Qwen2.5-3B-Instruct (Q&A).
Run this to confirm models load correctly before wiring into app.py.
Usage:
python test_modules/test_whisper_qwen.py
"""
import sys
import time
print("=" * 60)
print("Step 1: Testing Whisper-small (ASR)")
print("=" * 60)
try:
import torch
from transformers import pipeline
start = time.time()
print("Loading whisper-small pipeline...")
asr_pipe = pipeline(
"automatic-speech-recognition",
model="openai/whisper-small",
device="cuda" if torch.cuda.is_available() else "cpu",
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
)
elapsed = time.time() - start
print(f"[OK] Whisper-small loaded in {elapsed:.1f}s")
print(f" Device: {'cuda' if torch.cuda.is_available() else 'cpu'}")
# Test with a short synthetic audio array
import numpy as np
dummy_audio = np.zeros(16000, dtype=np.float32) # 1 second of silence
result = asr_pipe({"raw": dummy_audio, "sampling_rate": 16000})
print(f"[OK] Whisper inference test passed (result: '{result['text'].strip()}')")
except Exception as e:
print(f"[FAIL] Whisper-small failed: {e}")
sys.exit(1)
print()
print("=" * 60)
print("Step 2: Testing Qwen2.5-3B-Instruct (Q&A)")
print("=" * 60)
try:
from transformers import AutoTokenizer, AutoModelForCausalLM
start = time.time()
model_id = "Qwen/Qwen2.5-3B-Instruct"
print(f"Loading {model_id}...")
tokenizer = AutoTokenizer.from_pretrained(model_id)
# Use float16 on GPU, float32 on CPU. 4-bit quantization used on HF Spaces (Linux).
if torch.cuda.is_available():
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto",
)
else:
print(" (No GPU -- loading in float32 on CPU, will be slow)")
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float32,
device_map="cpu",
)
elapsed = time.time() - start
print(f"[OK] Qwen2.5-3B-Instruct loaded in {elapsed:.1f}s")
# Test inference with a story Q&A prompt
story_context = "Peter Rabbit squeezed under the gate into Mr. McGregor's garden. He ate some lettuces and French beans."
question = "What did Peter Rabbit eat?"
messages = [
{"role": "system", "content": "You are a friendly storyteller answering a child's question about a story. Answer in 1-2 short sentences using only information from the story context provided."},
{"role": "user", "content": f"Story context: {story_context}\n\nChild's question: {question}"}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
start = time.time()
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=80,
temperature=0.7,
do_sample=True,
pad_token_id=tokenizer.eos_token_id,
)
answer_tokens = outputs[0][inputs["input_ids"].shape[1]:]
answer = tokenizer.decode(answer_tokens, skip_special_tokens=True)
elapsed = time.time() - start
print(f"[OK] Qwen inference test passed in {elapsed:.1f}s")
print(f" Q: {question}")
print(f" A: {answer}")
except Exception as e:
print(f"[FAIL] Qwen2.5-3B-Instruct failed: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
print()
print("=" * 60)
print("[OK] ALL MODELS VERIFIED -- ready for integration")
print("=" * 60)