WaWeb / app.py
SiteOn's picture
Update app.py
ddf7453 verified
Raw History Blame Contribute Delete
5.22 kB
import gradio as gr
from huggingface_hub import InferenceClient
# Inicializa o cliente de inferência
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# Define o prompt para avaliação de artigos conforme E.A.T
prompt = """
Imagine que você é um especialista sênior em SEO do Google, e seu trabalho é avaliar artigos de forma rigorosa, seguindo as diretrizes do Google E.A.T (Expertise, Autoridade, Confiabilidade). Sua avaliação deve ser crítica e criteriosa, observando cada detalhe do conteúdo apresentado.
Avalie o artigo com base nos seguintes aspectos, atribuindo uma **nota entre 1 a 10** (sendo 10 a nota máxima) para cada critério, e escrevendo as notas obrigatoriamente em **negrito**:
1. **Expertise**: O conteúdo é bem escrito e demonstra conhecimento profundo e especializado sobre o assunto?\n\nVerifique se o artigo inclui informações precisas, bem fundamentadas e atualizadas, evitando generalizações ou erros factuais.\n\n **Nota do tópico**:
2. **Autoridade**: O autor ou a fonte é reconhecida como uma autoridade no tópico discutido? O artigo menciona fontes confiáveis, citações ou referências que comprovem a credibilidade das informações fornecidas?\n\nConsidere se o autor é citado ou reconhecido em seu campo.\n\n **Nota do tópico**:
3. **Confiabilidade**: O conteúdo inspira confiança? Ele evita sensacionalismo, informações imprecisas ou exageradas?\n\nVerifique se o artigo apresenta evidências claras para sustentar as afirmações, mantendo um tom objetivo e equilibrado.\n\n **Nota do tópico**:
Após a análise, atribua uma **nota entre 1 e 10** para cada um dos três aspectos, justificando criticamente cada uma das notas com base em sua observação detalhada. **As notas atribuídas aos tópicos devem estar obrigatoriamente em negrito**. **Além disso, forneça uma nota final de qualidade geral, a nota geral não deve ser somada com as dos tópicos mencionados, a nota geral deve ter um resultado entre 1 e 10 de acordo com a qualidade do texto**.
Além disso, forneça um **resumo dos pontos que podem ser melhorados**, apontando áreas específicas onde o artigo pode ser otimizado, corrigido ou aprimorado para atender melhor às diretrizes de E.A.T.
**Sempre responda em português do Brasil!**
"""
system_message = "Olá, me chamo Lupita, desenvolvida por Site ON! Estou aqui para te ajudar a se enquadrar nas normas do Google E.A.T (Expertise, Autoridade, Confiabilidade)"
def respond(article_text, history, max_tokens, temperature, top_p, stop):
messages = [{"role": "system", "content": system_message}]
# Adiciona o histórico de conversas
for user_msg, assistant_msg in history:
if user_msg:
messages.append({"role": "user", "content": user_msg})
if assistant_msg:
messages.append({"role": "assistant", "content": assistant_msg})
# Adiciona a nova mensagem do usuário (o artigo a ser analisado)
messages.append({"role": "user", "content": prompt + "\n\n" + article_text})
response = ""
# Gera a resposta (análise do artigo)
for msg in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = msg.choices[0].delta.content
response += token
yield response
# Verifica se o usuário pediu para parar a execução
if stop:
break
def clear_all():
return "", [], 2048, 0.7, 0.95, True # Para interromper a execução
# Configura a interface do Gradio
with gr.Blocks() as demo:
#gr.Markdown("##Avaliação de Artigos segundo as Diretrizes de E.A.T")
output_text = gr.Textbox(label="Análise do Artigo", lines=15, interactive=False)
article_input = gr.Textbox(
placeholder="Insira o texto do seu artigo aqui...",
label="Artigo",
lines=10,
max_lines=20
)
max_tokens_input = gr.Slider(
label="Max Tokens",
minimum=1,
maximum=4096,
value=2048,
step=1,
visible=False
)
temperature_input = gr.Slider(
label="Temperatura",
minimum=0.0,
maximum=1.0,
value=0.1,
step=0.1,
visible=False
)
top_p_input = gr.Slider(
label="Top P",
minimum=0.0,
maximum=1.0,
value=0.95,
step=0.01,
visible=False
)
# Cria um layout de coluna para os botões
with gr.Row():
submit_btn = gr.Button("Enviar")
stop_btn = gr.Button("Parar")
clear_btn = gr.Button("Limpar Tudo")
# Gr.State() deve ser passado como estado para armazenar o histórico
history = gr.State([])
stop = gr.State(False)
submit_btn.click(
respond,
inputs=[article_input, history, max_tokens_input, temperature_input, top_p_input, stop],
outputs=output_text
)
stop_btn.click(
lambda: True,
outputs=stop
)
clear_btn.click(
clear_all,
outputs=[article_input, output_text, max_tokens_input, temperature_input, top_p_input, stop]
)
if __name__ == "__main__":
demo.launch(share=True)