File size: 3,236 Bytes
e31868e
 
 
885cb8b
324f4bb
e31868e
 
 
 
 
 
 
 
7de1329
9ea2212
26425fc
a8b1809
7de1329
 
885cb8b
7de1329
 
a8b1809
220eb38
 
 
 
a8b1809
7de1329
 
885cb8b
 
a8b1809
885cb8b
e31868e
 
7de1329
 
6a39342
e31868e
885cb8b
6a39342
e31868e
885cb8b
 
a8b1809
885cb8b
7de1329
885cb8b
 
 
 
a8b1809
885cb8b
e31868e
4804662
7de1329
dcf1e2f
9d19186
7de1329
 
9d19186
 
 
 
 
 
 
 
 
 
 
 
 
 
9d4f6ee
6a39342
0eee8b2
 
2605b7e
dcf1e2f
7de1329
 
 
a8b1809
e31868e
 
7de1329
 
a8b1809
7de1329
885cb8b
 
 
 
7de1329
885cb8b
e31868e
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import gradio as gr
from huggingface_hub import InferenceClient
import os
import time
import re 

HF_TOKEN = os.getenv("HF_TOKEN")

client = InferenceClient(
    provider="sambanova",
    api_key=HF_TOKEN,
)

MODELS = {
    "LLaMA 70B": "meta-llama/Llama-3.3-70B-Instruct",
    "Qwen 32B": "Qwen/QwQ-32B",
    "DeepSeek R1": "deepseek-ai/DeepSeek-R1",
}

history_log = []
show_history_flag = False

def clean_response(text):
    text = re.sub(r"</?think>", "", text)
    text = re.sub(r"\\boxed\{.*?\}", "", text)

    return text.strip()

def chatbot_response(user_input, model_name):
    model_id = MODELS[model_name]
    messages = [{"role": "user", "content": entry["Pergunta"]} for entry in history_log[-2:]]
    messages.append({"role": "user", "content": user_input})

    start_time = time.time()
    try:
        completion = client.chat.completions.create(
            model=model_id,
            messages=messages,
            max_tokens = 8192 if any(m in model_id for m in ["Qwen", "DeepSeek"]) else 800
        )
        response = completion.choices[0].message['content']
        
    except Exception as e:
        response = f"Erro ao gerar resposta: {str(e)}"
    end_time = time.time()

    history_log.append({
        "Modelo": model_name,
        "Pergunta": user_input,
        "Resposta": response,
        "Tempo de Resposta (s)": round(end_time - start_time, 2)
    })

    return response

with gr.Blocks(theme=gr.themes.Soft()) as demo:
    with gr.Row():
        gr.Column(scale=0.5, min_width=40) 

        with gr.Column(scale=4):
            with gr.Row():
                with gr.Column(scale=1):
                    gr.Markdown("## ⚙️ Configurações")
                    model_selector = gr.Dropdown(
                        choices=list(MODELS.keys()),
                        label="Escolha o Modelo",
                        value="LLaMA 70B"
                    )
                with gr.Column(scale=4):
                    gr.Markdown("# 🤖 Chatbot - API SambaNova")
                    chatbot = gr.Chatbot(height=500)
                    msg = gr.Textbox(placeholder="Digite sua mensagem aqui...", label="")
                    with gr.Row():
                        btn = gr.Button("Enviar", variant="primary")
                        history_btn = gr.Button("Histórico", variant="secondary")
                    
                with gr.Row():
                    with gr.Column(scale=4):
                        history_output = gr.JSON(visible=False)
                    
        gr.Column(scale=0.5, min_width=40) 

    def respond(message, chat_history, model_name):
        response = chatbot_response(message, model_name)
        response = clean_response(response)
        chat_history.append((message, response))
        return "", chat_history

    btn.click(respond, [msg, chatbot, model_selector], [msg, chatbot])
    msg.submit(respond, [msg, chatbot, model_selector], [msg, chatbot])

    def toggle_history():
        global show_history_flag
        show_history_flag = not show_history_flag
        return history_log if show_history_flag else {}

    history_btn.click(toggle_history, inputs=[], outputs=history_output)

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