File size: 3,153 Bytes
eb450e3
 
7515381
eb450e3
09742af
 
eb450e3
09742af
 
 
 
 
 
 
 
 
 
eb450e3
09742af
 
 
 
 
 
eb450e3
 
09742af
eb450e3
 
7515381
 
 
 
09742af
 
eb450e3
09742af
eb450e3
 
 
 
09742af
eb450e3
 
 
09742af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7515381
09742af
1345715
09742af
eb450e3
1345715
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7515381
 
 
1345715
 
eb450e3
91e7ac0
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
import time

# Cliente da Inference API
client = InferenceClient("lambdaindie/lambdai")

# Função para responder no chatbot
def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    messages = [{"role": "system", "content": system_message}]

    # Adicionando a história da conversa
    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})

    response = ""

    # Mostrando o indicador de "thinking"
    yield "Thinking... 🤔"
    time.sleep(1)  # Atraso artificial para simular tempo de processamento

    # Fluxo de resposta do cliente da API
    for message in client.chat_completion(
        messages,
        max_tokens=max_tokens,
        stream=True,
        temperature=temperature,
        top_p=top_p,
    ):
        token = message.choices[0].delta.content
        response += token
        yield response


# Interface do Gradio com chat customizado
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="", label="System message", lines=1, placeholder="System message..."),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p (nucleus sampling)",
        ),
    ],
    title="Lambda-v1-1B",  # Título na interface
    description="Chatbot alimentado pelo modelo Lambdai",  # Descrição simples
    theme="dark",  # Usando o tema Dark do Gradio
)

# Customização de CSS simples para JetBrains Mono e visual Dark
demo.css = """
    * {
        font-family: 'JetBrains Mono', monospace;
    }
    .gradio-container {
        background-color: #121212;
        color: #ffffff;
        border-radius: 10px;
        padding: 20px;
    }
    .chatbox {
        background-color: #181818;
        border-radius: 8px;
        color: #f5f5f5;
        border: 1px solid #333;
    }
    .gr-button {
        background-color: #4a90e2;
        color: white;
        border-radius: 5px;
        padding: 10px 20px;
        font-size: 16px;
    }
    .gr-button:hover {
        background-color: #357ab7;
    }
    .gr-slider {
        background-color: #333;
        color: #f5f5f5;
        border-radius: 8px;
    }
    .gr-chatbox-container {
        background-color: #1f1f1f;
        border-radius: 10px;
    }
    .gr-output {
        font-family: 'JetBrains Mono', monospace;
        color: #f5f5f5;
    }
    .gr-input {
        font-family: 'JetBrains Mono', monospace;
        color: #f5f5f5;
    }
    .gr-chatbox .message {
        font-family: 'JetBrains Mono', monospace;
    }
    .gr-button.gr-loading {
        background-color: #f39c12;
    }
"""

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