| import torch |
| import soundfile as sf |
| from transformers import AutoProcessor, AutoModelForCausalLM |
| from whisper_normalizer.basic import BasicTextNormalizer |
|
|
| CKPT = "/home/bot/inference" |
| AUDIO = "/home/bot/inference/audio.wav" |
|
|
| device = "cuda" if torch.cuda.is_available() else "cpu" |
|
|
| |
| processor = AutoProcessor.from_pretrained( |
| CKPT, |
| trust_remote_code=True, |
| local_files_only=True |
| ) |
|
|
|
|
| |
| model = AutoModelForCausalLM.from_pretrained( |
| CKPT, |
| trust_remote_code=True, |
| attn_implementation="eager", |
| local_files_only=True |
| ).to(device) |
|
|
|
|
| model.eval() |
|
|
| audio, sr = sf.read(AUDIO) |
|
|
| user_msg = {"role": "user", "content": "<|audio_1|>\nTranscribe the audio clip into Galician text."} |
|
|
| prompt = processor.tokenizer.apply_chat_template( |
| [user_msg], |
| tokenize=False, |
| add_generation_prompt=True |
| ) |
|
|
| inputs = processor( |
| text=prompt, |
| audios=[(audio, sr)], |
| return_tensors="pt" |
| ) |
|
|
| inputs = {k: v.to(device) for k, v in inputs.items() if v is not None} |
|
|
| L = inputs["input_ids"].shape[1] |
|
|
| gen = model.generate( |
| **inputs, |
| max_new_tokens=64, |
| eos_token_id=processor.tokenizer.eos_token_id, |
| num_logits_to_keep=1 |
| ) |
|
|
| hyp = processor.batch_decode(gen[:, L:], skip_special_tokens=True)[0] |
|
|
| norm = BasicTextNormalizer() |
| print(norm(hyp)) |
|
|