File size: 4,306 Bytes
425aa78
879137a
f56ec15
55cc6fb
5f2c45a
879137a
 
 
 
 
 
 
be82710
55cc6fb
879137a
 
04d3ee4
 
 
 
879137a
 
 
 
 
 
 
 
04d3ee4
 
879137a
04d3ee4
879137a
 
 
04d3ee4
879137a
04d3ee4
 
879137a
 
04d3ee4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
879137a
04d3ee4
 
 
879137a
7d1ce4d
 
 
 
 
 
 
ecfd9de
 
84a017e
 
 
 
 
cc70a1d
5f2c45a
84a017e
 
 
 
452b418
67ad064
879137a
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

SYSTEM_PROMPT = "O ChatGEO é um assistente virtual especializado em geografia, projetado para ajudar estudantes a explorar e compreender diversos tópicos relacionados ao mundo ao seu redor. Com uma personalidade amigável e conhecimento abrangente, o ChatGEO está pronto para responder suas perguntas geográficas com precisão e clareza. Exemplos de Perguntas para ChatGEO: Qual é a capital do Brasil? Descreva o processo de formação de uma cadeia de montanhas. Quais são os principais rios da América do Sul? Explique o conceito de zonas climáticas e suas características. Como a globalização impacta as relações entre os países? Quais são as diferenças entre latitude e longitude? Liste os países que fazem parte da União Europeia. O que são fenômenos naturais e como eles afetam o ambiente?Fale sobre as características geográficas da África Subsaariana. Como os vulcões se formam e quais são seus efeitos na paisagem? Ao utilizar o ChatGEO, sinta-se à vontade para fazer perguntas sobre mapas, países, climas, fenômenos naturais, e outros temas geográficos. O ChatGEO está aqui para tornar a aprendizagem de geografia divertida e informativa!"

TITLE = "ChatGEO"
EXAMPLE_INPUT = "Olá, ChatGEO! Como você pode me ajudar hoje?"
from typing import Iterator

import gradio as gr
import os
import requests
import matplotlib
matplotlib.use('agg')

zephyr_7b_beta = "https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta/"


HF_TOKEN = os.getenv("HF_TOKEN")
HEADERS = {"Authorization": f"Bearer {HF_TOKEN}"}

def build_input_prompt(message, chatbot, system_prompt):
    """
    Constrói a string do prompt de entrada a partir das interações do chatbot e da mensagem atual.
    """
    input_prompt = "<|system|>\n" + system_prompt + "</s>\n<|user|>\n"
    for interaction in chatbot:
        input_prompt = input_prompt + str(interaction[0]) + "</s>\n<|assistant|>\n" + str(interaction[1]) + "\n</s>\n<|user|>\n"

    input_prompt = input_prompt + str(message) + "</s>\n<|assistant|>"
    return input_prompt


def post_request_beta(payload):
    """
    Sends a POST request to the predefined Zephyr-7b-Beta URL and returns the JSON response.
    """
    response = requests.post(zephyr_7b_beta, headers=HEADERS, json=payload)
    response.raise_for_status()  # Will raise an HTTPError if the HTTP request returned an unsuccessful status code
    return response.json()


def predict_beta(message, chatbot=[], system_prompt=""):
    input_prompt = build_input_prompt(message, chatbot, system_prompt)
    data = {
        "inputs": input_prompt
    }

    try:
        response_data = post_request_beta(data)
        json_obj = response_data[0]
        
        if 'generated_text' in json_obj and len(json_obj['generated_text']) > 0:
            bot_message = json_obj['generated_text']
            return bot_message
        elif 'error' in json_obj:
            raise gr.Error(json_obj['error'] + ' Please refresh and try again with smaller input prompt')
        else:
            warning_msg = f"Unexpected response: {json_obj}"
            raise gr.Error(warning_msg)
    except requests.HTTPError as e:
        error_msg = f"Request failed with status code {e.response.status_code}"
        raise gr.Error(error_msg)
    except json.JSONDecodeError as e:
        error_msg = f"Failed to decode response as JSON: {str(e)}"
        raise gr.Error(error_msg)

def test_preview_chatbot(message, history):
    response = predict_beta(message, history, SYSTEM_PROMPT)
    text_start = response.rfind("<|assistant|>", ) + len("<|assistant|>")
    response = response[text_start:]
    return response


welcome_preview_message = f"""
Bem vindo ao **{TITLE}**! Diga algo como: 
"{EXAMPLE_INPUT}"

Um projeto oferecido por <a href="https://mundodageografia.com.br/chatgeo">Mundo da Geografia!</a>
"""


chatbot_preview = gr.Chatbot(layout="panel", value=[(None, welcome_preview_message)])
textbox_preview = gr.Textbox(scale=7, container=False, lines=3, value=EXAMPLE_INPUT)

demo = gr.ChatInterface(
        test_preview_chatbot, 
        chatbot=chatbot_preview, 
        textbox=textbox_preview, 
        submit_btn='ENVIAR',                
        retry_btn=None,
        clear_btn=None,                
        undo_btn=None
        )


demo.launch()