File size: 4,163 Bytes
0841a1b
 
9a3f681
4e36c4a
0841a1b
5e292fc
 
9a3f681
5e292fc
 
 
6f28eab
9a3f681
5e292fc
9a3f681
0841a1b
5e292fc
9a3f681
5e292fc
 
9a3f681
 
 
 
5e292fc
 
354eea2
5e292fc
 
354eea2
5e292fc
6f28eab
 
5e292fc
6f28eab
5e292fc
6f28eab
 
5e292fc
6f28eab
 
 
0841a1b
5e292fc
0841a1b
 
 
 
 
 
 
 
9a3f681
5e292fc
9a3f681
0841a1b
 
5e292fc
0841a1b
 
 
 
 
 
5e292fc
0841a1b
 
9a3f681
5e292fc
4e36c4a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a3f681
4e36c4a
5e292fc
0841a1b
5e292fc
 
 
0841a1b
5e292fc
6f28eab
9a3f681
6f28eab
 
 
5e292fc
 
 
6f28eab
 
 
 
 
5e292fc
6f28eab
 
 
9a3f681
 
5e292fc
6f28eab
 
 
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import gradio as gr
from huggingface_hub import InferenceClient
from datasets import load_dataset
import time

# Função para carregar o dataset `aicoder69/aicoder69` com tratamento de erros
def load_aicoder_dataset():
    try:
        print("Carregando o dataset...")
        dataset = load_dataset("aicoder69/aicoder69")
        print("Dataset carregado com sucesso!")
        return dataset
    except Exception as e:
        print(f"Erro ao carregar o dataset: {e}")
        return None

aicoder_dataset = load_aicoder_dataset()

# Função para recuperar um exemplo do dataset com segurança
def get_example_from_aicoder(dataset, index):
    if dataset and "train" in dataset:
        try:
            return dataset["train"][index]
        except IndexError:
            print("Índice fora do intervalo no dataset.")
            return {"text": "Nenhum exemplo disponível."}
    else:
        print("O dataset não foi carregado corretamente.")
        return {"text": "Dataset não disponível."}

# Inicializar o cliente de inferência com tratamento de erros
def initialize_client():
    try:
        print("Inicializando o cliente de inferência...")
        client = InferenceClient("unsloth/Llama-3.2-1B-Instruct")
        print("Cliente de inferência inicializado com sucesso!")
        return client
    except Exception as e:
        print(f"Erro ao inicializar o cliente de inferência: {e}")
        return None

client = initialize_client()

# Função de resposta do chatbot
def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    if not client:
        return "Erro: O cliente de inferência não foi inicializado."

    messages = [{"role": "system", "content": system_message}]

    # Adicionar interações históricas
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    # Adicionar mensagem do usuário
    messages.append({"role": "user", "content": message})

    try:
        print("Enviando solicitação ao modelo...")
        # Ajuste o tempo limite e tente novamente caso haja falha
        retries = 3
        for attempt in range(retries):
            try:
                response = client.chat_completion(
                    messages,
                    max_tokens=max_tokens,
                    temperature=temperature,
                    top_p=top_p,
                ).choices[0].message.content
                print("Resposta recebida com sucesso!")
                return response
            except Exception as e:
                print(f"Erro na tentativa {attempt + 1}/{retries}: {e}")
                if attempt < retries - 1:
                    print("Tentando novamente...")
                    time.sleep(2)  # Pausa entre tentativas
                else:
                    return f"Erro ao gerar resposta após {retries} tentativas."
    except Exception as e:
        print(f"Erro ao enviar solicitação: {e}")
        return "Ocorreu um erro ao gerar uma resposta."

# Exemplo: Recuperar uma entrada do dataset
example_data = get_example_from_aicoder(aicoder_dataset, 0)
print("Exemplo do dataset:", example_data)

# Interface Gradio
def launch_demo():
    try:
        demo = gr.ChatInterface(
            respond,
            additional_inputs=[
                gr.Textbox(value="Você é um chatbot amigável. Seu nome é Juninho.", label="Mensagem do sistema"),
                gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Máximo de novos tokens"),
                gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperatura"),
                gr.Slider(
                    minimum=0.1,
                    maximum=1.0,
                    value=0.95,
                    step=0.05,
                    label="Top-p (amostragem núcleo)",
                ),
            ],
        )
        demo.launch()
    except Exception as e:
        print(f"Erro ao iniciar o aplicativo Gradio: {e}")

if __name__ == "__main__":
    launch_demo()