File size: 2,957 Bytes
271f307
 
 
 
0064343
 
 
0477c9e
271f307
 
 
27fc254
8d1c101
933b9d8
adc6fa8
8037104
 
 
 
 
f64fa83
271f307
5f8069c
025291b
d96ba17
5baa862
271f307
4bb59b6
271f307
 
5baa862
271f307
 
 
 
 
c3aa9e5
271f307
 
fedb67a
2197af3
8052ea6
4310444
837d0bc
a5a9cdb
 
 
 
6ac2e72
1ddfd8c
ce695b3
fcb3120
 
d5a8fce
0064343
837d0bc
8f3e7b5
837d0bc
 
 
894c749
8f3e7b5
c5c3727
6ae48e4
933b9d8
c5c3727
 
 
 
d5a8fce
c65b118
 
6ae48e4
d5a8fce
1ddfd8c
837d0bc
087af30
1fa8310
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from huggingface_hub import InferenceClient
import gradio as gr
import random
import prompts
from pypipertts import PyPiper
pp=PyPiper()

#client = InferenceClient("Qwen/QwQ-32B-Preview")
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")

def format_prompt(message, history):
    prompt=""
    if history:
        print(history)
        prompt = "<s>"
        for user_prompt, bot_response in history:
            #print (bot_response)
            prompt += f"[INST] {user_prompt} [/INST]"
            prompt += f" {bot_response}</s> "
    prompt += f"[INST] {message} [/INST]"
    return prompt

def generate(prompt,history):
    if not history:
        history=[]
    seed = random.randint(1,9999999999999)
    print(seed)
    system_prompt = prompts.ASSISTANT
    generate_kwargs = dict(
        temperature=0.9,
        max_new_tokens=512,
        top_p=0.95,
        repetition_penalty=1.0,
        do_sample=True,
        seed=seed,
    )
    formatted_prompt = format_prompt(f"{system_prompt}\nUSER:{prompt}", history)
    stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
    output = ""
    buf = ""
    for response in stream:
        output += response.token.text
        yield [history,(prompt,output)]

def load_mod(model):
    yield f"Loading: {model}"
    pp.load_mod(model)
    yield f"Voice Loaded: {model}"
def tts(inp,names,length,noise,width,sen_pause):
    print(inp)
    print(inp[-1][-1])
    txt = inp[-1][-1].strip("</s>")
    yield from pp.stream_tts(txt,names,length,noise,width,sen_pause)

with gr.Blocks() as iface:
    chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, layout="panel")
    prompt = gr.Textbox(label="Prompt")
    with gr.Row():
        submit_b = gr.Button()
        stop_b = gr.Button("Stop")
        clear = gr.ClearButton([chatbot,prompt])
    aud=gr.Audio(streaming=True, autoplay=True)
    with gr.Accordion("Voice Controls",open=False):
        msg = gr.HTML("""""")
        names=gr.Dropdown(label="Voice", choices=pp.key_list,value="en_US-ryan-high")
        length=gr.Slider(label="Length", minimum=0.01, maximum=10.0, value=1)
        noise=gr.Slider(label="Noise", minimum=0.01, maximum=3.0, value=0.5)
        width=gr.Slider(label="Noise Width", minimum=0.01, maximum=3.0, value=0.5)
        sen_pause=gr.Slider(label="Sentence Pause", minimum=0.1, maximum=10.0, value=1)
        upd_btn=gr.Button("Update Voice")
    with gr.Row(visible=False):
        stt=gr.Textbox()
    iface.load(load_mod,names,msg)
    upd_btn.click(tts,[chatbot,names,length,noise,width,sen_pause],aud)
    sub_b = submit_b.click(generate, [prompt,chatbot],chatbot).then(tts,[chatbot,names,length,noise,width,sen_pause],aud)
    names_change=names.change(load_mod,names,msg)
    stop_b.click(None,None,None, cancels=[sub_b,names_change])
iface.queue(default_concurrency_limit=10).launch(max_threads=40)