1import torch
2import torchaudio
3from transformers import AutoProcessor, AutoTokenizer
4from speech_llm_ja import LlamaForSpeechLM, LlamaForSpeechLMConfig
5
6MODEL_ID = "Atotti/llm-jp-4-8b-speech-asr"
7
8config = LlamaForSpeechLMConfig.from_pretrained(MODEL_ID)
9model = LlamaForSpeechLM.from_pretrained(
10 MODEL_ID,
11 config=config,
12 device_map="auto",
13 torch_dtype=torch.bfloat16,
14 low_cpu_mem_usage=True,
15).eval()
16
17encoder_processor = AutoProcessor.from_pretrained(model.config.encoder_id)
18tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
19tokenizer.pad_token = tokenizer.eos_token
20
21# Load audio
22waveform, sample_rate = torchaudio.load("path/to/your_audio_file.wav")
23if waveform.size(0) > 1:
24 waveform = waveform.mean(dim=0, keepdim=True)
25waveform = waveform.squeeze(0)
26if sample_rate != 16000:
27 waveform = torchaudio.functional.resample(waveform, sample_rate, 16000)
28
29# Build prompt
30instruction = "音声を書き起こしてください。"
31prompt = f"""あなたは音声を理解できるAIアシスタントです。
32
33<|reserved_343|><|reserved_342|>### 指示:
34{instruction}
35
36### 応答:
37"""
38
39# Encode
40encoder_inputs = encoder_processor(
41 [waveform.numpy()],
42 return_tensors="pt",
43 return_attention_mask=True,
44 sampling_rate=16000,
45)
46decoder_inputs = tokenizer(prompt, return_tensors="pt")
47
48# Generate
49with torch.no_grad():
50 output_ids = model.generate(
51 input_features=encoder_inputs.input_features.to(model.device),
52 input_ids=decoder_inputs.input_ids.to(model.device),
53 encoder_attention_mask=encoder_inputs.attention_mask.to(model.device),
54 decoder_attention_mask=decoder_inputs.attention_mask.to(model.device),
55 max_new_tokens=256,
56 do_sample=False,
57 )
58
59generated_ids = output_ids[0, decoder_inputs.input_ids.shape[1]:]
60print(tokenizer.decode(generated_ids, skip_special_tokens=True))
1import torch
2import torchaudio
3from transformers import AutoProcessor, AutoTokenizer
4from speech_llm_ja import LlamaForSpeechLM, LlamaForSpeechLMConfig
5
6MODEL_ID = "Atotti/llm-jp-4-8b-speech-asr"
7
8config = LlamaForSpeechLMConfig.from_pretrained(MODEL_ID)
9model = LlamaForSpeechLM.from_pretrained(
10 MODEL_ID,
11 config=config,
12 device_map="auto",
13 torch_dtype=torch.bfloat16,
14 low_cpu_mem_usage=True,
15).eval()
16
17encoder_processor = AutoProcessor.from_pretrained(model.config.encoder_id)
18tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
19tokenizer.pad_token = tokenizer.eos_token
20
21# 音声読み込み
22waveform, sample_rate = torchaudio.load("path/to/your_audio_file.wav")
23if waveform.size(0) > 1:
24 waveform = waveform.mean(dim=0, keepdim=True)
25waveform = waveform.squeeze(0)
26if sample_rate != 16000:
27 waveform = torchaudio.functional.resample(waveform, sample_rate, 16000)
28
29# プロンプト構築
30instruction = "音声を書き起こしてください。"
31prompt = f"""あなたは音声を理解できるAIアシスタントです。
32
33<|reserved_343|><|reserved_342|>### 指示:
34{instruction}
35
36### 応答:
37"""
38
39# エンコード
40encoder_inputs = encoder_processor(
41 [waveform.numpy()],
42 return_tensors="pt",
43 return_attention_mask=True,
44 sampling_rate=16000,
45)
46decoder_inputs = tokenizer(prompt, return_tensors="pt")
47
48# 生成
49with torch.no_grad():
50 output_ids = model.generate(
51 input_features=encoder_inputs.input_features.to(model.device),
52 input_ids=decoder_inputs.input_ids.to(model.device),
53 encoder_attention_mask=encoder_inputs.attention_mask.to(model.device),
54 decoder_attention_mask=decoder_inputs.attention_mask.to(model.device),
55 max_new_tokens=256,
56 do_sample=False,
57 )
58
59generated_ids = output_ids[0, decoder_inputs.input_ids.shape[1]:]
60print(tokenizer.decode(generated_ids, skip_special_tokens=True))
1@misc{tsutsumi2026jaspeechllmasr,
2 title={atotti/llm-jp-4-8b-speech-asr},
3 url={https://huggingface.co/atotti/llm-jp-4-8b-speech-asr},
4 author={Ayuto Tsutsumi and Haruki Oshiro},
5 year={2026},
6}