ChatGEO / app.py
itacaiunas's picture
Update app.py
69a244e verified
raw
history blame contribute delete
No virus
3.22 kB
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)