File size: 2,786 Bytes
038f313
7570a52
c5a20a4
038f313
db00df1
c6bdd15
7570a52
 
038f313
 
27c8b8d
7570a52
0f1304a
544cdb6
 
 
 
 
a00ad13
038f313
0f1304a
 
 
 
27c8b8d
19532c8
 
 
 
27c8b8d
19532c8
7570a52
19532c8
7570a52
 
 
 
 
 
 
 
 
19532c8
7570a52
 
 
 
 
 
0ef95ea
ca486cf
a8fc89d
7570a52
 
f572bef
 
 
 
7570a52
f572bef
7570a52
0f1304a
7570a52
 
 
5aff883
7570a52
 
 
 
 
 
 
 
 
 
 
 
 
 
769901b
77298b9
db8b55b
132703b
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
80
81
82
83
84
85
import gradio as gr
import requests
import os

ACCESS_TOKEN = os.getenv("HF_TOKEN")

API_URL = "https://api-inference.huggingface.co/v1/chat/completions"
HEADERS = {"Authorization": f"Bearer {ACCESS_TOKEN}"}

def respond(
    message,
    history,
    system_message,
    max_tokens,
    temperature,
    top_p,
    frequency_penalty,
    seed,
    custom_model
):
    if seed == -1:
        seed = None
    
    messages = [{"role": "system", "content": system_message}]
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})
    messages.append({"role": "user", "content": message})
    
    model_to_use = custom_model.strip() if custom_model.strip() else "meta-llama/Llama-3.2-3B-Instruct"
    
    payload = {
        "model": model_to_use,
        "messages": messages,
        "max_tokens": max_tokens,
        "temperature": temperature,
        "top_p": top_p,
        "frequency_penalty": frequency_penalty,
        "seed": seed,
    }
    
    response = requests.post(API_URL, headers=HEADERS, json=payload)
    
    if response.status_code == 200:
        return response.json()["choices"][0]["message"]["content"]
    else:
        return "Error: " + response.text

chatbot = gr.Chatbot(height=600, show_copy_button=True, placeholder="ChatGPT is initializing...", likeable=True, layout="panel")

system_message_box = gr.Textbox(value="System message here", label="System Message")
max_tokens_slider = gr.Slider(1024, 2048, value=1024, step=100, label="Max Tokens")
temperature_slider = gr.Slider(0.1, 1.0, value=0.7, step=0.1, label="Temperature")
top_p_slider = gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="Top-P")
frequency_penalty_slider = gr.Slider(-2.0, 2.0, value=0.0, step=0.1, label="Frequency Penalty")
seed_slider = gr.Slider(-1, 65535, value=-1, step=1, label="Seed (-1 for random)")
custom_model_box = gr.Textbox(value="meta-llama/Llama-3.2-3B-Instruct", label="Custom Model")

voice_input = gr.Microphone(label="Speak your message")

with gr.Blocks() as demo:
    gr.Markdown("# AI Chatbot with Voice Input")
    chatbot.render()
    
    with gr.Row():
        system_message_box.render()
        max_tokens_slider.render()
        temperature_slider.render()
        top_p_slider.render()
    
    with gr.Row():
        frequency_penalty_slider.render()
        seed_slider.render()
        custom_model_box.render()
    
    voice_input.render()
    
    voice_input.change(respond, inputs=[voice_input, chatbot, system_message_box, max_tokens_slider, temperature_slider, top_p_slider, frequency_penalty_slider, seed_slider, custom_model_box], outputs=chatbot)

if __name__ == "__main__":
    demo.launch()