Download app.py from SiteOn/WaWeb: direct link, hf CLI and curl.
- Browser
- Download file 5.22 kB
-
https://huggingface.co/spaces/SiteOn/WaWeb/resolve/main/app.py
- Command line
-
hf download hf://spaces/SiteOn/WaWeb/app.py
-
curl -L -o app.py https://huggingface.co/spaces/SiteOn/WaWeb/resolve/main/app.py
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) | |