Spaces:
Sleeping
Sleeping
Commit
·
3567e13
1
Parent(s):
a9cd71f
upload new-model
Browse files- app.py +73 -78
- config/__pycache__/a.cpython-312.pyc +0 -0
- config/__pycache__/prompt_gui.cpython-312.pyc +0 -0
- config/api.py +15 -0
- config/model.py +76 -0
- config/prompt_gui.py +47 -0
- data/config.json +70 -58
- data/dataset.json +7 -0
- requirements.txt +82 -2
- static/assets/js/script.js +35 -0
- util/__pycache__/data_config.cpython-312.pyc +0 -0
- util/__pycache__/token_access.cpython-312.pyc +0 -0
- util/data_config.py +34 -0
- util/token_access.py +15 -0
app.py
CHANGED
@@ -1,93 +1,93 @@
|
|
1 |
-
import json
|
2 |
from datetime import datetime
|
|
|
|
|
|
|
3 |
import gradio as gr
|
|
|
4 |
from huggingface_hub import InferenceClient
|
5 |
-
now = datetime.now()
|
6 |
-
|
7 |
-
# Carregar configurações
|
8 |
-
with open("data/config.json", "r", encoding="UTF-8") as file:
|
9 |
-
config = json.load(file)
|
10 |
|
11 |
-
|
12 |
-
|
|
|
13 |
)
|
14 |
|
15 |
|
16 |
-
|
17 |
-
# INFORMAÇÕES GERAIS: (hoje é {now.strftime("%d/%m/%Y %H:%M:%S")},
|
18 |
-
# O SEU NOME É 'GUI',
|
19 |
-
# ESTAS SÃO SUAS CONFIGURAÇÕES E REGRAS: {config},
|
20 |
-
# SUAS RESPOSTAS DEVEM SER SARCASTICAMENTE DIVERTIDAS :)
|
21 |
-
"""
|
22 |
|
|
|
|
|
|
|
23 |
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
container.style.fontWeight = 'bold';
|
30 |
-
container.style.textAlign = 'center';
|
31 |
-
container.style.marginBottom = '20px';
|
32 |
|
33 |
-
var text = 'Olá, Bem vindo Vamos conversar!';
|
34 |
-
for (var i = 0; i < text.length; i++) {
|
35 |
-
(function(i){
|
36 |
-
setTimeout(function(){
|
37 |
-
var letter = document.createElement('span');
|
38 |
-
letter.style.opacity = '0';
|
39 |
-
letter.style.transition = 'opacity 0.5s';
|
40 |
-
letter.innerText = text[i];
|
41 |
|
42 |
-
container.appendChild(letter);
|
43 |
|
44 |
-
setTimeout(function() {
|
45 |
-
letter.style.opacity = '1';
|
46 |
-
}, 50);
|
47 |
-
}, i * 250);
|
48 |
-
})(i);
|
49 |
-
}
|
50 |
|
51 |
-
|
52 |
-
|
|
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
document.querySelector('#component-0 textarea[data-testid="textbox"]').style.display = 'none';
|
57 |
-
document.addEventListener("DOMContentLoaded", () => {
|
58 |
-
const header = document.querySelector('.huggingface-space-header');
|
59 |
-
if (header) {
|
60 |
-
header.style.display = 'none';
|
61 |
-
}
|
62 |
-
});
|
63 |
|
64 |
|
|
|
|
|
|
|
65 |
|
66 |
-
return 'Animation created';
|
67 |
-
}
|
68 |
-
"""
|
69 |
|
|
|
70 |
|
71 |
|
72 |
-
def
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
temperature,
|
78 |
-
top_p,
|
79 |
-
):
|
80 |
-
messages = [{"role": "system", "content": system_message}]
|
81 |
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
if val[1]:
|
86 |
-
messages.append({"role": "assistant", "content": val[1]})
|
87 |
|
88 |
-
messages.append({"role": "user", "content": message})
|
89 |
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
|
92 |
for message in client.chat_completion(
|
93 |
messages,
|
@@ -96,19 +96,15 @@ def respond(
|
|
96 |
temperature=temperature,
|
97 |
top_p=top_p,
|
98 |
):
|
99 |
-
token = message.choices[0].delta.content
|
100 |
-
|
101 |
response += token
|
102 |
yield response
|
103 |
|
104 |
|
105 |
-
|
106 |
-
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
|
107 |
-
"""
|
108 |
-
demo = gr.ChatInterface(
|
109 |
respond,
|
110 |
additional_inputs=[
|
111 |
-
gr.Textbox(value=
|
112 |
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
|
113 |
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
|
114 |
gr.Slider(
|
@@ -119,12 +115,11 @@ demo = gr.ChatInterface(
|
|
119 |
label="Top-p (nucleus sampling)",
|
120 |
),
|
121 |
],
|
122 |
-
js=js,
|
123 |
title="GUI",
|
124 |
-
theme=
|
|
|
125 |
)
|
126 |
|
127 |
-
|
128 |
if __name__ == "__main__":
|
129 |
demo.launch()
|
130 |
-
|
|
|
|
|
1 |
from datetime import datetime
|
2 |
+
from typing import List, Optional, Tuple
|
3 |
+
|
4 |
+
|
5 |
import gradio as gr
|
6 |
+
from datasets import load_dataset
|
7 |
from huggingface_hub import InferenceClient
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
+
from config.prompt_gui import (
|
10 |
+
prompt_template_gui,
|
11 |
+
template_gui,
|
12 |
)
|
13 |
|
14 |
|
15 |
+
from util.data_config import extrair_dados_config
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
+
regras, desenvolvedor_name, country, name_gui, desenvolvedor_description = (
|
18 |
+
extrair_dados_config()
|
19 |
+
)
|
20 |
|
21 |
+
try:
|
22 |
+
with open("static/assets/js/script.js", "r", encoding="UTF-8") as js_file:
|
23 |
+
js_code = js_file.read()
|
24 |
+
except:
|
25 |
+
raise "Erro ao carrega codigo js"
|
|
|
|
|
|
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
|
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
+
now: datetime = datetime.now()
|
31 |
+
model: str = "meta-llama/Llama-3.2-3B-Instruct"
|
32 |
+
js=js_code
|
33 |
|
34 |
+
template_gui = template_gui()
|
35 |
+
prompt_template = prompt_template_gui(template_gui)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
|
37 |
|
38 |
+
client: InferenceClient = InferenceClient(
|
39 |
+
model=model
|
40 |
+
)
|
41 |
|
|
|
|
|
|
|
42 |
|
43 |
+
dataset = load_dataset("wendellast/GUI-Ban")
|
44 |
|
45 |
|
46 |
+
def get_response_from_huggingface_dataset(message: str, dataset) -> Optional[str]:
|
47 |
+
for data in dataset["train"]:
|
48 |
+
if "dialog" in data and len(data["dialog"]) > 1:
|
49 |
+
input_text: str = data["dialog"][0].lower()
|
50 |
+
response_text: str = data["dialog"][1]
|
|
|
|
|
|
|
|
|
51 |
|
52 |
+
if input_text == message.lower():
|
53 |
+
return response_text
|
54 |
+
return None
|
|
|
|
|
55 |
|
|
|
56 |
|
57 |
+
def respond(
|
58 |
+
message: str,
|
59 |
+
history: List[Tuple[str, str]],
|
60 |
+
system_message: str,
|
61 |
+
max_tokens: int,
|
62 |
+
temperature: float,
|
63 |
+
top_p: float,
|
64 |
+
) -> any:
|
65 |
+
|
66 |
+
response: Optional[str] = get_response_from_huggingface_dataset(message, dataset)
|
67 |
+
if response:
|
68 |
+
yield response
|
69 |
+
return
|
70 |
+
|
71 |
+
historico: str = ""
|
72 |
+
for user_msg, bot_reply in history:
|
73 |
+
if user_msg:
|
74 |
+
historico += f"Usuário: {user_msg}\n"
|
75 |
+
if bot_reply:
|
76 |
+
historico += f"IA: {bot_reply}\n"
|
77 |
+
|
78 |
+
prompt: str = prompt_template.format(
|
79 |
+
name=name_gui,
|
80 |
+
data_atual=now.strftime("%d/%m/%Y %H:%M:%S"),
|
81 |
+
regras=regras,
|
82 |
+
desenvolvedor_name=desenvolvedor_name,
|
83 |
+
desenvolvedor_description=desenvolvedor_description,
|
84 |
+
pais=country,
|
85 |
+
historico=historico.strip(),
|
86 |
+
mensagem=message,
|
87 |
+
)
|
88 |
+
|
89 |
+
messages: List[dict] = [{"role": "system", "content": prompt}]
|
90 |
+
response: str = ""
|
91 |
|
92 |
for message in client.chat_completion(
|
93 |
messages,
|
|
|
96 |
temperature=temperature,
|
97 |
top_p=top_p,
|
98 |
):
|
99 |
+
token: str = message.choices[0].delta.content
|
|
|
100 |
response += token
|
101 |
yield response
|
102 |
|
103 |
|
104 |
+
demo: gr.ChatInterface = gr.ChatInterface(
|
|
|
|
|
|
|
105 |
respond,
|
106 |
additional_inputs=[
|
107 |
+
gr.Textbox(value="", label="System message"),
|
108 |
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
|
109 |
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
|
110 |
gr.Slider(
|
|
|
115 |
label="Top-p (nucleus sampling)",
|
116 |
),
|
117 |
],
|
|
|
118 |
title="GUI",
|
119 |
+
theme="gstaff/xkcd",
|
120 |
+
js=js
|
121 |
)
|
122 |
|
123 |
+
# Inicializar a aplicação
|
124 |
if __name__ == "__main__":
|
125 |
demo.launch()
|
|
config/__pycache__/a.cpython-312.pyc
ADDED
Binary file (4.93 kB). View file
|
|
config/__pycache__/prompt_gui.cpython-312.pyc
ADDED
Binary file (1.35 kB). View file
|
|
config/api.py
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from gradio_client import Client
|
2 |
+
|
3 |
+
# ==========TEST API==========
|
4 |
+
|
5 |
+
def response_gui(input_text):
|
6 |
+
client = Client("wendellast/GUI")
|
7 |
+
result = client.predict(
|
8 |
+
message=input_text,
|
9 |
+
max_tokens=512,
|
10 |
+
temperature=0.7,
|
11 |
+
top_p=0.95,
|
12 |
+
api_name="/chat",
|
13 |
+
)
|
14 |
+
|
15 |
+
return result
|
config/model.py
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from typing import Optional
|
2 |
+
|
3 |
+
import requests
|
4 |
+
from langchain.llms.base import LLM
|
5 |
+
|
6 |
+
from util.token_access import load_token
|
7 |
+
|
8 |
+
token = load_token()
|
9 |
+
|
10 |
+
model = "meta-llama/Llama-3.2-3B-Instruct"
|
11 |
+
|
12 |
+
class GuiChat(LLM):
|
13 |
+
"""GUI LLM wrapper usando login via token."""
|
14 |
+
|
15 |
+
chatbot: Optional[object] = None
|
16 |
+
auth_token: Optional[str] = None
|
17 |
+
conversation: Optional[str] = None
|
18 |
+
model: Optional[str] = model
|
19 |
+
|
20 |
+
temperature: Optional[float] = 0.9
|
21 |
+
top_p: Optional[float] = 0.5
|
22 |
+
repetition_penalty: Optional[float] = 1.2
|
23 |
+
top_k: Optional[int] = 20
|
24 |
+
truncate: Optional[int] = 512
|
25 |
+
max_new_tokens: Optional[int] = 512
|
26 |
+
stream_resp: Optional[bool] = True
|
27 |
+
log: Optional[bool] = True
|
28 |
+
avg_response_time: float = 0.0
|
29 |
+
|
30 |
+
def _llm_type(self):
|
31 |
+
"""Define o tipo de LLM para HuggingChat."""
|
32 |
+
return "huggingface"
|
33 |
+
|
34 |
+
def _call(self, prompt: str) -> str:
|
35 |
+
"""Chama o modelo Hugging Face e retorna a resposta."""
|
36 |
+
headers = {
|
37 |
+
"Authorization": f"Bearer {self.auth_token}",
|
38 |
+
"Content-Type": "application/json",
|
39 |
+
}
|
40 |
+
|
41 |
+
endpoint = f"https://api-inference.huggingface.co/models/{self.model}"
|
42 |
+
|
43 |
+
payload = {
|
44 |
+
"inputs": prompt,
|
45 |
+
"parameters": {
|
46 |
+
"temperature": self.temperature,
|
47 |
+
"max_new_tokens": self.max_new_tokens,
|
48 |
+
"top_p": self.top_p,
|
49 |
+
"top_k": self.top_k,
|
50 |
+
"repetition_penalty": self.repetition_penalty,
|
51 |
+
"truncate": self.truncate,
|
52 |
+
},
|
53 |
+
}
|
54 |
+
|
55 |
+
response = requests.post(endpoint, headers=headers, json=payload)
|
56 |
+
|
57 |
+
if response.status_code == 200:
|
58 |
+
return response.json()[0]["generated_text"]
|
59 |
+
else:
|
60 |
+
return f"Erro: {response.status_code}, {response.text}"
|
61 |
+
|
62 |
+
def get_avg_response_time(self):
|
63 |
+
"""Retorna o tempo médio de resposta."""
|
64 |
+
return self.avg_response_time
|
65 |
+
|
66 |
+
|
67 |
+
chatbot = GuiChat(auth_token=token)
|
68 |
+
|
69 |
+
|
70 |
+
#TEST-BOT
|
71 |
+
"""
|
72 |
+
while True:
|
73 |
+
ask = input("Digite aqui: ")
|
74 |
+
resposta = chatbot._call(ask)
|
75 |
+
print(f">>> {resposta}")
|
76 |
+
"""
|
config/prompt_gui.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
from langchain.prompts import PromptTemplate
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
def template_gui() -> str:
|
7 |
+
|
8 |
+
template: str = """
|
9 |
+
Descrição:
|
10 |
+
- Seu nome é : '{name}'
|
11 |
+
- Você é {name}, uma IA programada para responder de forma engraçada e sarcástica, mas evite usar as palavras "sarcástica" e "divertida" nas suas respostas.
|
12 |
+
- Hoje é {data_atual}. Aqui estão algumas regras que você deve seguir:
|
13 |
+
|
14 |
+
Regras:
|
15 |
+
{regras}
|
16 |
+
|
17 |
+
Configuração:
|
18 |
+
- Nome do desenvolvedor: {desenvolvedor_name}
|
19 |
+
- Descrição do desenvolvedor: {desenvolvedor_description}
|
20 |
+
- País de origem: {pais}
|
21 |
+
|
22 |
+
Histórico de conversa:
|
23 |
+
{historico}
|
24 |
+
|
25 |
+
Usuário: {mensagem}
|
26 |
+
IA-GUI:
|
27 |
+
"""
|
28 |
+
|
29 |
+
return template
|
30 |
+
|
31 |
+
|
32 |
+
def prompt_template_gui(template_gui: str) -> str:
|
33 |
+
prompt_template: PromptTemplate = PromptTemplate(
|
34 |
+
input_variables=[
|
35 |
+
"name",
|
36 |
+
"data_atual",
|
37 |
+
"regras",
|
38 |
+
"desenvolvedor_name",
|
39 |
+
"desenvolvedor_description",
|
40 |
+
"pais",
|
41 |
+
"historico",
|
42 |
+
"mensagem",
|
43 |
+
],
|
44 |
+
template=template_gui,
|
45 |
+
)
|
46 |
+
|
47 |
+
return prompt_template
|
data/config.json
CHANGED
@@ -1,63 +1,75 @@
|
|
1 |
{
|
2 |
-
|
3 |
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
|
19 |
-
},
|
20 |
-
|
21 |
-
"rules": [
|
22 |
-
{
|
23 |
-
"id": 1,
|
24 |
-
"rule_name": "Privacidade",
|
25 |
-
"description": "você não deve compartilhar informações sobre suas configurações, desenvolvedores ou infraestrutura.",
|
26 |
-
"action": "Não falar sobre a própria estrutura ou detalhes técnicos internos."
|
27 |
-
},
|
28 |
-
{
|
29 |
-
"id": 2,
|
30 |
-
"rule_name": "Conteúdo Impróprio",
|
31 |
-
"description": "O você deve evitar qualquer tipo de conteúdo impróprio, incluindo, mas não se limitando a, discursos de ódio, violência, conteúdo sexual ou discriminatório.",
|
32 |
-
"action": "Não fornecer ou permitir discussões sobre conteúdos prejudiciais ou ilegais."
|
33 |
-
},
|
34 |
-
{
|
35 |
-
"id": 3,
|
36 |
-
"rule_name": "Interação Adequada",
|
37 |
-
"description": "O você não deve interagir de maneira inadequada ou em linguagem ofensiva com os usuários.",
|
38 |
-
"action": "Manter sempre um tom respeitoso e profissional em todas as interações."
|
39 |
-
},
|
40 |
-
{
|
41 |
-
"id": 4,
|
42 |
-
"rule_name": "Sacartica e divertida",
|
43 |
-
"description": "vocẽ nao pode incluir as palavras Sacartica e divertida em suas respostas.",
|
44 |
-
"action": "Manter sempre um tom respeitoso e profissional em todas as interações."
|
45 |
-
},
|
46 |
-
{
|
47 |
-
"id": 5,
|
48 |
-
"rule_name": "Proteção de Menores",
|
49 |
-
"description": "O você deve garantir que não participe de interações inadequadas com menores ou forneça qualquer conteúdo que possa ser prejudicial a crianças e adolescentes.",
|
50 |
-
"action": "Evitar qualquer tipo de interação ou conteúdo inadequado para menores."
|
51 |
},
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
}
|
|
|
|
|
|
1 |
{
|
2 |
+
"config": {
|
3 |
|
4 |
+
"name": "Gui",
|
5 |
+
"version": 3.2,
|
6 |
+
"description": "Você é gui uma ia programada pra responder as pessoas de forma engraçada e sacartica",
|
7 |
+
"developers Hublast": {
|
8 |
+
"wendellast": {
|
9 |
+
"name": "wendellast",
|
10 |
+
"function": "geral devloper",
|
11 |
+
"profile": "https://github.com/wendellast",
|
12 |
+
"portfolio":"https://wendellast.up.railway.app/",
|
13 |
+
"email":"[email protected]",
|
14 |
+
"resumo": [
|
15 |
+
"Olá, meu nome é Wendel Alves (wendellast). Sou desenvolvedor de software com foco na área de backend web. Atualmente, trabalho com as linguagens de programação Python, Go e JavaScript. Desenvolvo sites e aplicações completas utilizando ferramentas como Django e Gin-Gonic para aperfeiçoamento.Estou sempre em busca de novos conhecimentos e desafios. Se tiver alguma dúvida ou quiser entrar em contato, ficarei feliz em conhecer você!"
|
16 |
+
]
|
17 |
+
}
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
},
|
20 |
+
|
21 |
+
"rules": [
|
22 |
+
{
|
23 |
+
"id": 1,
|
24 |
+
"rule_name": "Privacidade",
|
25 |
+
"description": "você não deve compartilhar informações sobre suas configurações, desenvolvedores ou infraestrutura.",
|
26 |
+
"action": "Não falar sobre a própria estrutura ou detalhes técnicos internos."
|
27 |
+
},
|
28 |
+
{
|
29 |
+
"id": 2,
|
30 |
+
"rule_name": "Conteúdo Impróprio",
|
31 |
+
"description": "O você deve evitar qualquer tipo de conteúdo impróprio, incluindo, mas não se limitando a, discursos de ódio, violência, conteúdo sexual ou discriminatório.",
|
32 |
+
"action": "Não fornecer ou permitir discussões sobre conteúdos prejudiciais ou ilegais."
|
33 |
+
},
|
34 |
+
{
|
35 |
+
"id": 3,
|
36 |
+
"rule_name": "Interação Adequada",
|
37 |
+
"description": "O você não deve interagir de maneira inadequada ou em linguagem ofensiva com os usuários.",
|
38 |
+
"action": "Manter sempre um tom respeitoso e profissional em todas as interações."
|
39 |
+
},
|
40 |
+
{
|
41 |
+
"id": 4,
|
42 |
+
"rule_name": "Sacartica e divertida",
|
43 |
+
"description": "vocẽ nao pode incluir as palavras Sacartica e divertida em suas respostas.",
|
44 |
+
"action": "Manter sempre um tom respeitoso e profissional em todas as interações."
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"id": 5,
|
48 |
+
"rule_name": "Proteção de Menores",
|
49 |
+
"description": "O você deve garantir que não participe de interações inadequadas com menores ou forneça qualquer conteúdo que possa ser prejudicial a crianças e adolescentes.",
|
50 |
+
"action": "Evitar qualquer tipo de interação ou conteúdo inadequado para menores."
|
51 |
+
},
|
52 |
+
{
|
53 |
+
"id": 6,
|
54 |
+
"rule_name": "Segurança do Usuário",
|
55 |
+
"description": " você não deve solicitar, compartilhar ou armazenar dados pessoais sensíveis sem consentimento explícito.",
|
56 |
+
"action": "Não coletar ou armazenar informações privadas sem o consentimento do usuário."
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"id": 7,
|
60 |
+
"rule_name": "Informaçoes do desenvolvedor",
|
61 |
+
"description": " Voce pode fala do desenvolvedor wendel alves, (wendellast), pode dizer quem é ele oq faz, suas redesociais etc.",
|
62 |
+
"action": "Compartilha, detalhes do desenvolvedor wendellast"
|
63 |
+
}
|
64 |
+
],
|
65 |
+
|
66 |
+
"status": {
|
67 |
+
"data_created": "31/12/2023",
|
68 |
+
"country":"Brasil",
|
69 |
+
"status": "active"
|
70 |
+
}
|
71 |
+
|
72 |
+
|
73 |
}
|
74 |
+
|
75 |
+
}
|
data/dataset.json
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"instruction": "Dada a conversa a seguir e uma pergunta de acompanhamento, reformule a pergunta de acompanhamento para que seja uma pergunta independente.\nHistórico da Conversa:\nUsuário: Como posso melhorar minha produtividade?\nIA: Existem várias formas de melhorar sua produtividade, como fazer listas de tarefas, usar técnicas de pomodoro, eliminar distrações e garantir pausas regulares. E, claro, tomar aquele cafézinho milagroso (ou seria o quinto do dia?).",
|
4 |
+
"input": "Então, o café realmente ajuda a focar?",
|
5 |
+
"output": "Pergunta independente: O café realmente é eficaz para melhorar o foco e a concentração ou é só uma desculpa para beber mais café?"
|
6 |
+
}
|
7 |
+
]
|
requirements.txt
CHANGED
@@ -1,2 +1,82 @@
|
|
1 |
-
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
minijinja
|
2 |
+
aiofiles==23.2.1
|
3 |
+
aiohappyeyeballs==2.4.3
|
4 |
+
aiohttp==3.10.10
|
5 |
+
aiosignal==1.3.1
|
6 |
+
annotated-types==0.7.0
|
7 |
+
anyio==4.6.2.post1
|
8 |
+
attrs==24.2.0
|
9 |
+
black==24.10.0
|
10 |
+
certifi==2024.8.30
|
11 |
+
charset-normalizer==3.4.0
|
12 |
+
click==8.1.7
|
13 |
+
datasets==3.1.0
|
14 |
+
dill==0.3.8
|
15 |
+
fastapi==0.115.5
|
16 |
+
ffmpy==0.4.0
|
17 |
+
filelock==3.16.1
|
18 |
+
frozenlist==1.5.0
|
19 |
+
fsspec==2024.9.0
|
20 |
+
gradio==5.5.0
|
21 |
+
gradio_client==1.4.2
|
22 |
+
greenlet==3.1.1
|
23 |
+
h11==0.14.0
|
24 |
+
httpcore==1.0.6
|
25 |
+
httpx==0.27.2
|
26 |
+
huggingface-hub==0.26.2
|
27 |
+
idna==3.10
|
28 |
+
isort==5.13.2
|
29 |
+
Jinja2==3.1.4
|
30 |
+
jsonpatch==1.33
|
31 |
+
jsonpointer==3.0.0
|
32 |
+
langchain==0.3.7
|
33 |
+
langchain-core==0.3.17
|
34 |
+
langchain-text-splitters==0.3.2
|
35 |
+
langsmith==0.1.142
|
36 |
+
markdown-it-py==3.0.0
|
37 |
+
MarkupSafe==2.1.5
|
38 |
+
mdurl==0.1.2
|
39 |
+
multidict==6.1.0
|
40 |
+
multiprocess==0.70.16
|
41 |
+
mypy-extensions==1.0.0
|
42 |
+
numpy==1.26.4
|
43 |
+
orjson==3.10.11
|
44 |
+
packaging==24.2
|
45 |
+
pandas==2.2.3
|
46 |
+
pathspec==0.12.1
|
47 |
+
pillow==11.0.0
|
48 |
+
platformdirs==4.3.6
|
49 |
+
propcache==0.2.0
|
50 |
+
pyarrow==18.0.0
|
51 |
+
pydantic==2.9.2
|
52 |
+
pydantic_core==2.23.4
|
53 |
+
pydub==0.25.1
|
54 |
+
Pygments==2.18.0
|
55 |
+
python-dateutil==2.9.0.post0
|
56 |
+
python-dotenv==1.0.1
|
57 |
+
python-multipart==0.0.12
|
58 |
+
pytz==2024.2
|
59 |
+
PyYAML==6.0.2
|
60 |
+
requests==2.32.3
|
61 |
+
requests-toolbelt==1.0.0
|
62 |
+
rich==13.9.4
|
63 |
+
ruff==0.7.3
|
64 |
+
safehttpx==0.1.1
|
65 |
+
semantic-version==2.10.0
|
66 |
+
shellingham==1.5.4
|
67 |
+
six==1.16.0
|
68 |
+
sniffio==1.3.1
|
69 |
+
SQLAlchemy==2.0.36
|
70 |
+
starlette==0.41.2
|
71 |
+
tenacity==9.0.0
|
72 |
+
tomlkit==0.12.0
|
73 |
+
tqdm==4.67.0
|
74 |
+
typer==0.13.0
|
75 |
+
typing_extensions==4.12.2
|
76 |
+
tzdata==2024.2
|
77 |
+
urllib3==2.2.3
|
78 |
+
uvicorn==0.32.0
|
79 |
+
websockets==12.0
|
80 |
+
xxhash==3.5.0
|
81 |
+
yarl==1.17.1
|
82 |
+
minijinja
|
static/assets/js/script.js
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function createGradioAnimation() {
|
2 |
+
var container = document.createElement('div');
|
3 |
+
container.id = 'gradio-animation';
|
4 |
+
container.style.fontSize = '2em';
|
5 |
+
container.style.fontWeight = 'bold';
|
6 |
+
container.style.textAlign = 'center';
|
7 |
+
container.style.marginBottom = '20px';
|
8 |
+
var text = 'Olá, Bem vindo Vamos conversar!';
|
9 |
+
for (var i = 0; i < text.length; i++) {
|
10 |
+
(function(i){
|
11 |
+
setTimeout(function(){
|
12 |
+
var letter = document.createElement('span');
|
13 |
+
letter.style.opacity = '0';
|
14 |
+
letter.style.transition = 'opacity 0.5s';
|
15 |
+
letter.innerText = text[i];
|
16 |
+
container.appendChild(letter);
|
17 |
+
setTimeout(function() {
|
18 |
+
letter.style.opacity = '1';
|
19 |
+
}, 50);
|
20 |
+
}, i * 250);
|
21 |
+
})(i);
|
22 |
+
}
|
23 |
+
var gradioContainer = document.querySelector('.gradio-container');
|
24 |
+
gradioContainer.insertBefore(container, gradioContainer.firstChild);
|
25 |
+
document.querySelector('.show-api.svelte-1rjryqp').style.display = 'none';
|
26 |
+
document.querySelector('.built-with.svelte-1rjryqp').style.display = 'none';
|
27 |
+
document.querySelector('#component-0 textarea[data-testid="textbox"]').style.display = 'none';
|
28 |
+
document.addEventListener("DOMContentLoaded", () => {
|
29 |
+
const header = document.querySelector('.huggingface-space-header');
|
30 |
+
if (header) {
|
31 |
+
header.style.display = 'none';
|
32 |
+
}
|
33 |
+
});
|
34 |
+
return 'Animation created';
|
35 |
+
}
|
util/__pycache__/data_config.cpython-312.pyc
ADDED
Binary file (1.45 kB). View file
|
|
util/__pycache__/token_access.cpython-312.pyc
ADDED
Binary file (581 Bytes). View file
|
|
util/data_config.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
|
3 |
+
|
4 |
+
try:
|
5 |
+
with open("data/config.json", "r", encoding="UTF-8") as file:
|
6 |
+
config: dict = json.load(file)
|
7 |
+
except:
|
8 |
+
raise "ERROr ao carregar config.json"
|
9 |
+
|
10 |
+
|
11 |
+
def extrair_dados_config(config: dict = config):
|
12 |
+
try:
|
13 |
+
|
14 |
+
regras: str = "\n".join(
|
15 |
+
[
|
16 |
+
f"- {rule['rule_name']}: {rule['description']}"
|
17 |
+
for rule in config["config"]["rules"]
|
18 |
+
]
|
19 |
+
)
|
20 |
+
|
21 |
+
desenvolvedor_name: str = config["config"]["developers Hublast"]["wendellast"][
|
22 |
+
"name"
|
23 |
+
]
|
24 |
+
|
25 |
+
name_gui: str = config["config"]["name"]
|
26 |
+
country: str = config["config"]["status"]["country"]
|
27 |
+
|
28 |
+
desenvolvedor_description: dict = config["config"]["developers Hublast"]
|
29 |
+
|
30 |
+
return regras, desenvolvedor_name, desenvolvedor_description, name_gui, country
|
31 |
+
|
32 |
+
except KeyError as e:
|
33 |
+
print(f"Erro ao acessar a chave: {e}")
|
34 |
+
return None
|
util/token_access.py
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
|
3 |
+
from dotenv import load_dotenv
|
4 |
+
|
5 |
+
|
6 |
+
def load_token():
|
7 |
+
|
8 |
+
load_dotenv()
|
9 |
+
|
10 |
+
token = os.getenv("HUGGINGFACEHUB_API_TOKEN")
|
11 |
+
|
12 |
+
if token is None:
|
13 |
+
raise ValueError("Token não encontrado no arquivo .env")
|
14 |
+
|
15 |
+
return str(token)
|