Views
No views yet

Llama-3B-Mono-Cooper is a Llama-based Speech-LLM designed for high-quality, empathetic text-to-speech generation. This model has been fine-tuned to deliver human-like speech synthesis, achieving exceptional clarity, expressiveness, and real-time streaming performance. The model has been fine-tuned from mono audio of a male voice named 'Cooper' using the base modelcanopylabs/orpheus-3b-0.1-ft.
[!Important] In some cases, the results may be inconsistent, particularly when handling complex speech transformations.
canopylabs/orpheus-3b-0.1-ft| Elements | Elements | Elements |
|---|---|---|
| laugh | chuckle | sigh |
| sniffle | groan | yawn |
| gasp | uhm | giggles & more |
1from huggingface_hub import notebook_login, HfApi
2notebook_login()1%%capture
2!pip install snac accelerate
3!pip install transformers
4!pip install gradio1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM
3import gradio as gr
4from snac import SNAC
5
6def redistribute_codes(row):
7 """
8 Convert a sequence of token codes into an audio waveform using SNAC.
9 The code assumes each 7 tokens represent one group of instructions.
10 """
11 row_length = row.size(0)
12 new_length = (row_length // 7) * 7
13 trimmed_row = row[:new_length]
14 code_list = [t - 128266 for t in trimmed_row]
15
16 layer_1, layer_2, layer_3 = [], [], []
17
18 for i in range((len(code_list) + 1) // 7):
19 layer_1.append(code_list[7 * i][None])
20 layer_2.append(code_list[7 * i + 1][None] - 4096)
21 layer_3.append(code_list[7 * i + 2][None] - (2 * 4096))
22 layer_3.append(code_list[7 * i + 3][None] - (3 * 4096))
23 layer_2.append(code_list[7 * i + 4][None] - (4 * 4096))
24 layer_3.append(code_list[7 * i + 5][None] - (5 * 4096))
25 layer_3.append(code_list[7 * i + 6][None] - (6 * 4096))
26
27 with torch.no_grad():
28 codes = [
29 torch.concat(layer_1),
30 torch.concat(layer_2),
31 torch.concat(layer_3)
32 ]
33 for i in range(len(codes)):
34 codes[i][codes[i] < 0] = 0
35 codes[i] = codes[i][None]
36
37 audio_hat = snac_model.decode(codes)
38 return audio_hat.cpu()[0, 0]
39
40# Load the SNAC model for audio decoding
41snac_model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz").to("cuda")
42
43# Load the single-speaker language model
44tokenizer = AutoTokenizer.from_pretrained('prithivMLmods/Llama-3B-Mono-Cooper')
45model = AutoModelForCausalLM.from_pretrained(
46 'prithivMLmods/Llama-3B-Mono-Cooper', torch_dtype=torch.bfloat16
47).cuda()
48
49def generate_audio(text, temperature, top_p, max_new_tokens):
50 """
51 Given input text, generate speech audio.
52 """
53 speaker = "Cooper"
54 prompt = f'<custom_token_3><|begin_of_text|>{speaker}: {text}<|eot_id|><custom_token_4><custom_token_5><custom_token_1>'
55 input_ids = tokenizer(prompt, add_special_tokens=False, return_tensors='pt').to('cuda')
56
57 with torch.no_grad():
58 generated_ids = model.generate(
59 **input_ids,
60 max_new_tokens=max_new_tokens,
61 do_sample=True,
62 temperature=temperature,
63 top_p=top_p,
64 repetition_penalty=1.1,
65 num_return_sequences=1,
66 eos_token_id=128258,
67 )
68
69 row = generated_ids[0, input_ids['input_ids'].shape[1]:]
70 y_tensor = redistribute_codes(row)
71 y_np = y_tensor.detach().cpu().numpy()
72 return (24000, y_np)
73
74# Gradio Interface
75with gr.Blocks() as demo:
76 gr.Markdown("# Llama-3B-Mono-Cooper - Single Speaker Audio Generation")
77 gr.Markdown("Generate speech audio using the `prithivMLmods/Llama-3B-Mono-Cooper` model.")
78
79 with gr.Row():
80 text_input = gr.Textbox(lines=4, label="Input Text")
81
82 with gr.Row():
83 temp_slider = gr.Slider(minimum=0.1, maximum=2.0, step=0.1, value=0.9, label="Temperature")
84 top_p_slider = gr.Slider(minimum=0.1, maximum=1.0, step=0.05, value=0.8, label="Top-p")
85 tokens_slider = gr.Slider(minimum=100, maximum=2000, step=50, value=1200, label="Max New Tokens")
86
87 output_audio = gr.Audio(type="numpy", label="Generated Audio")
88 generate_button = gr.Button("Generate Audio")
89
90 generate_button.click(
91 fn=generate_audio,
92 inputs=[text_input, temp_slider, top_p_slider, tokens_slider],
93 outputs=output_audio
94 )
95
96if __name__ == "__main__":
97 demo.launch()1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM
3import gradio as gr
4from snac import SNAC
5
6def redistribute_codes(row):
7 """
8 Convert a sequence of token codes into an audio waveform using SNAC.
9 The code assumes each 7 tokens represent one group of instructions.
10 """
11 row_length = row.size(0)
12 new_length = (row_length // 7) * 7
13 trimmed_row = row[:new_length]
14 code_list = [t - 128266 for t in trimmed_row]
15
16 layer_1, layer_2, layer_3 = [], [], []
17
18 for i in range((len(code_list) + 1) // 7):
19 layer_1.append(code_list[7 * i][None])
20 layer_2.append(code_list[7 * i + 1][None] - 4096)
21 layer_3.append(code_list[7 * i + 2][None] - (2 * 4096))
22 layer_3.append(code_list[7 * i + 3][None] - (3 * 4096))
23 layer_2.append(code_list[7 * i + 4][None] - (4 * 4096))
24 layer_3.append(code_list[7 * i + 5][None] - (5 * 4096))
25 layer_3.append(code_list[7 * i + 6][None] - (6 * 4096))
26
27 with torch.no_grad():
28 codes = [
29 torch.concat(layer_1),
30 torch.concat(layer_2),
31 torch.concat(layer_3)
32 ]
33 for i in range(len(codes)):
34 codes[i][codes[i] < 0] = 0
35 codes[i] = codes[i][None]
36
37 audio_hat = snac_model.decode(codes)
38 return audio_hat.cpu()[0, 0]
39
40# Load the SNAC model for audio decoding
41snac_model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz").to("cuda")
42
43# Load the single-speaker language model
44tokenizer = AutoTokenizer.from_pretrained('prithivMLmods/Llama-3B-Mono-Cooper')
45model = AutoModelForCausalLM.from_pretrained(
46 'prithivMLmods/Llama-3B-Mono-Cooper', torch_dtype=torch.bfloat16
47).cuda()
48
49def generate_audio(text, temperature, top_p, max_new_tokens):
50 """
51 Given input text, generate speech audio.
52 """
53 prompt = f'<custom_token_3><|begin_of_text|>{text}<|eot_id|><custom_token_4><custom_token_5><custom_token_1>'
54 input_ids = tokenizer(prompt, add_special_tokens=False, return_tensors='pt').to('cuda')
55
56 with torch.no_grad():
57 generated_ids = model.generate(
58 **input_ids,
59 max_new_tokens=max_new_tokens,
60 do_sample=True,
61 temperature=temperature,
62 top_p=top_p,
63 repetition_penalty=1.1,
64 num_return_sequences=1,
65 eos_token_id=128258,
66 )
67
68 row = generated_ids[0, input_ids['input_ids'].shape[1]:]
69 y_tensor = redistribute_codes(row)
70 y_np = y_tensor.detach().cpu().numpy()
71 return (24000, y_np)
72
73# Gradio Interface
74with gr.Blocks() as demo:
75 gr.Markdown("# Llama-3B-Mono-Cooper - Single Speaker Audio Generation")
76 gr.Markdown("Generate speech audio using the `prithivMLmods/Llama-3B-Mono-Cooper` model.")
77
78 with gr.Row():
79 text_input = gr.Textbox(lines=4, label="Input Text")
80
81 with gr.Row():
82 temp_slider = gr.Slider(minimum=0.1, maximum=2.0, step=0.1, value=0.9, label="Temperature")
83 top_p_slider = gr.Slider(minimum=0.1, maximum=1.0, step=0.05, value=0.8, label="Top-p")
84 tokens_slider = gr.Slider(minimum=100, maximum=2000, step=50, value=1200, label="Max New Tokens")
85
86 output_audio = gr.Audio(type="numpy", label="Generated Audio")
87 generate_button = gr.Button("Generate Audio")
88
89 generate_button.click(
90 fn=generate_audio,
91 inputs=[text_input, temp_slider, top_p_slider, tokens_slider],
92 outputs=output_audio
93 )
94
95if __name__ == "__main__":
96 demo.launch()