File size: 3,218 Bytes
ecc4605
879137a
ecc4605
 
4c86ab7
ecc4605
bf9bed4
 
 
949ded2
bf9bed4
 
 
ecc4605
 
a66ad26
 
ecc4605
 
bf9bed4
 
ecc4605
 
 
 
 
 
a66ad26
ecc4605
 
3dec43b
35eb646
 
3dec43b
35eb646
 
3dec43b
35eb646
 
 
 
 
67ad064
ecc4605
3dec43b
a66ad26
 
 
 
 
ecc4605
3dec43b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ecc4605
a66ad26
 
 
3dec43b
a66ad26
 
 
 
 
ecc4605
 
69a244e
ecc4605
 
a66ad26
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
from huggingface_hub import InferenceClient
import gradio as gr
import random

client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.3")

def format_prompt(message):
    prompt = (
        "O ChatGEO é um assistente virtual especializado em geografia. "
        "Responda de forma clara e objetiva às perguntas feitas no idioma Português do Brasil. "
        "Apenas responda ao que foi perguntado pelo usuário, sem adicionar ou criar novas perguntas.\n\n"
        f"Usuário: {message}\nChatGEO:"
    )
    return prompt

def generate(message, history, temperature=0.7, max_new_tokens=1024, top_p=0.90, repetition_penalty=0.9):
    temperature = max(float(temperature), 1e-2)
    top_p = float(top_p)

    formatted_prompt = format_prompt(message)

    generate_kwargs = dict(
        temperature=temperature,
        max_new_tokens=max_new_tokens,
        top_p=top_p,
        repetition_penalty=repetition_penalty,
        do_sample=True,
        seed=random.randint(1, 1111111111111111),
    )

    # Gerar o texto
    output = client.text_generation(formatted_prompt, **generate_kwargs)

    # Extrair a resposta apenas até o primeiro ponto final ou outro delimitador
    response = output.split("\n")[0].strip()

    # Limitar a resposta para que o bot não continue respondendo indefinidamente
    if "Usuário:" in response or "ChatGEO:" in response:
        response = response.split("Usuário:")[0].strip()

    history.append((message, response))
    return response

mychatbot = gr.Chatbot(
    avatar_images=["./user.png", "./botz.png"],
    bubble_full_width=False,
    show_label=False,
    show_copy_button=True,
    likeable=True,
)

additional_inputs = [
    gr.Slider(
        label="Temperature",
        value=0.7,
        minimum=0.0,
        maximum=1.0,
        step=0.01,
        interactive=True,
        info="Higher values generate more diverse outputs",
        visible=False  # Oculta o slider

    ),
    gr.Slider(
        label="Max new tokens",
        value=1024,
        minimum=0,
        maximum=8000,
        step=64,
        interactive=True,
        info="The maximum number of new tokens",
        visible=False  # Oculta o slider
    ),
    gr.Slider(
        label="Top-p",
        value=0.90,
        minimum=0.0,
        maximum=1.0,
        step=0.01,
        interactive=True,
        info="Higher values sample more low-probability tokens",
        visible=False  # Oculta o slider
    ),
    gr.Slider(
        label="Repetition penalty",
        value=1.0,
        minimum=0.1,
        maximum=2.0,
        step=0.1,
        interactive=True,
        info="Penalize repeated tokens",
        visible=False  # Oculta o slider
    )
]

iface = gr.ChatInterface(
    fn=generate, 
    chatbot=mychatbot,
    additional_inputs=additional_inputs,
    submit_btn='Enviar',
    retry_btn=None,
    undo_btn=None,
    clear_btn=None
)

with gr.Blocks() as demo:
    gr.HTML("<center><h2 style='font-size: 22px; text-align: center; color: #007BFF;'>ChatGEO IA</h2><p><b>Tire suas dúvidas, peça sugestões sobre os assuntos da Geografia. Usamos o modelo de IA Mistral-7B-Instruct-v0.3.</b></p></center>")
    iface.render()
    
demo.queue().launch(show_api=False)