Spaces:
Runtime error
Runtime error
File size: 7,808 Bytes
1bb6972 6dda0ea 95432af 2f56eef db23d5c 2f56eef db23d5c 2f56eef db23d5c 2f56eef 6dda0ea 2f56eef 7f9bdaf 2f56eef 6dda0ea 2f56eef |
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import gradio as gr
from huggingface_hub import InferenceClient
import random
class GemmaChatApp:
def __init__(self):
self.models = [
"google/gemma-7b",
"google/gemma-7b-it",
"google/gemma-2b",
"google/gemma-2b-it"
]
self.clients = [
InferenceClient(self.models[0]),
InferenceClient(self.models[1]),
InferenceClient(self.models[2]),
InferenceClient(self.models[3]),
]
self.rand_val = random.randint(1, 1111111111111111)
self.create_app()
def format_prompt(self, message, history):
prompt = ""
if history:
for user_prompt, bot_response in history:
prompt += f"<start_of_turn>usuário{user_prompt}<end_of_turn>"
prompt += f"<start_of_turn>modelo{bot_response}"
prompt += f"<start_of_turn>usuário{message}<end_of_turn><start_of_turn>modelo"
return prompt
def chat_inf(self, system_prompt, prompt, history, client_choice, seed, temp, tokens, top_p, rep_p, stream_output):
client = self.clients[int(client_choice) - 1]
if not history:
history = []
generate_kwargs = dict(
temperature=temp,
max_new_tokens=tokens,
top_p=top_p,
repetition_penalty=rep_p,
do_sample=True,
seed=seed,
)
formatted_prompt = self.format_prompt(f"{system_prompt}, {prompt}", history)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=stream_output, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
yield [(prompt, output)]
history.append((prompt, output))
yield history
def clear_fn(self):
return None, None, None
def create_app(self):
# Function to create a guide HTML for the user
def create_guide():
return """
<div style="max-width: 800px; margin: auto; padding: 20px; text-align: left; font-family: 'Arial', sans-serif; color: #333;">
<h1 style='font-size: 28px; text-align: center; color: #007BFF;'>Gemma Google LLM</h1>
<p style='font-size: 16px; text-align: center; color: #555;'>
Um conjunto de modelos leves e avançados,
construídos a partir da mesma pesquisa e tecnologia utilizadas para criar os modelos Gemini.
</p>
<h3>Instruções:</h3>
<ol style='font-size: 16px;'>
<li>Insira seu prompt na caixa <strong>"Prompt"</strong>.</li>
<li>
Opcionalmente, adicione um prompt de sistema na caixa <strong>"Prompt do Sistema"</strong>.
</li>
<li>
Escolha um modelo na lista suspensa <strong>"Modelos"</strong>.
</li>
<li>
Ajuste os parâmetros conforme necessário:
<ul>
<li>
<strong>Temperatura:</strong> Controla a aleatoriedade da geração (valores mais baixos são mais determinísticos).
</li>
<li>
<strong>Top-P:</strong> Controla a diversidade da geração (valores mais baixos são mais restritos).
</li>
<li>
<strong>Penalidade de Repetição:</strong> Controla a penalidade para repetições na resposta gerada.
</li>
<li>
<strong>Máximo de Novos Tokens:</strong> Limita o número máximo de tokens gerados.
</li>
</ul>
</li>
<li>
Se desejar, marque <strong>"Semente Aleatória"</strong> para gerar uma semente aleatória.
</li>
<li>
Clique em <strong>"Enviar"</strong> para gerar uma resposta do modelo.
</li>
<li>
Clique em <strong>"Parar"</strong> a qualquer momento para interromper a conversa.
</li>
<li>
Clique em <strong>"Limpar"</strong> para reiniciar a conversa.
</li>
<li>
Marque <strong>"Saída em Tempo Real"</strong> para exibir a resposta do modelo em tempo real.
</li>
</ol>
</div>
"""
# With Gradio Blocks, create the app interface
with gr.Blocks() as app:
gr.HTML(create_guide()) # Display the guide
chat_b = gr.Chatbot(height=500)
with gr.Group():
with gr.Row():
with gr.Column(scale=3):
inp = gr.Textbox(label="Prompt", placeholder="Digite seu prompt aqui")
sys_inp = gr.TextArea(label="Prompt do Sistema (opcional)", placeholder="Opcional: Adicione um prompt de sistema aqui")
with gr.Row():
with gr.Column(scale=2):
btn = gr.Button("Enviar")
with gr.Column(scale=1):
with gr.Group():
stop_btn = gr.Button("Parar")
clear_btn = gr.Button("Limpar")
client_choice = gr.Dropdown(label="Modelos", type='index', choices={c: f"Model {i+1}" for i, c in enumerate(self.models)}, value=self.models[0], interactive=True)
with gr.Column(scale=1):
with gr.Group():
rand = gr.Checkbox(label="Semente Aleatória", value=True)
seed = self.check_rand(rand, self.rand_val)
tokens = gr.Slider(label="Número Máximo de Tokens", value=6400, minimum=0, maximum=8000, step=64, interactive=True, visible=True, info="O número máximo de tokens")
temp = gr.Slider(label="Temperatura (Determinismo)", step=0.01, minimum=0.01, maximum=1.0, value=0.9)
top_p = gr.Slider(label="Top-P (Diversidade)", step=0.01, minimum=0.01, maximum=1.0, value=0.9)
rep_p = gr.Slider(label="Penalidade por Repetição", step=0.1, minimum=0.1, maximum=2.0, value=1.0)
stream_output = gr.Checkbox(label="Saída em Tempo Real", value=True)
go = btn.click(self.check_rand, [rand, seed], seed).then(self.chat_inf, [sys_inp, inp, chat_b, client_choice, seed, temp, tokens, top_p, rep_p, stream_output], chat_b)
stop_btn.click(None, None, None, cancels=go)
clear_btn.click(self.clear_fn, None, [inp, sys_inp, chat_b])
app.queue(default_concurrency_limit=10).launch()
def check_rand(self, inp, val):
if inp:
return gr.Slider(label="Semente", minimum=1, maximum=1111111111111111, value=random.randint(1, 1111111111111111))
else:
return gr.Slider(label="Semente", minimum=1, maximum=1111111111111111, value=int(val))
# Create an instance of the GemmaChatApp and launch the app
gemma_chat_app = GemmaChatApp()
|