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)