-
Notifications
You must be signed in to change notification settings - Fork 0
/
kenaidy.py
119 lines (105 loc) · 5.21 KB
/
kenaidy.py
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Configuração da chave da API e URL da API ETX
#openai.api_key = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjFkMmJkYWQyLWYyNDEtNDE5Mi1hZDhkLWRkMDEzYzhmOWJiYyJ9.R1Q-LUzDR5wDyRyp9oTszcQs7Gxt6AZQrvp6tInMnuo"
#openai.api_base = 'https://hyuka.etx.tec.br/api'
# Configuração da chave da API e URL da API ETX
openai.api_key = "AderbalBotelho"
openai.api_base = 'https://ai.etx.tec.br'
# Cursos
PROPOSTAS = """
Algumas Propostas do candidato para seu mandato de vereador caso eleito:
Principio base:
Fiscalizar as financias que pertencem ao povo para serem geridas pelo município;
Na Educação:
Defender os direitos e interesses dos professores requerendo eficiência no processo de ensino e aprendizagem;
Na Saúde:
Fiscalizar o funcionamento dos processos necessários bom funcionamento do sistema de saúde priorizando crianças gestantes e idoso
"""
FORMACAO = """
Frequentou Colegio Estadual de Pernambuco-Colegio Tecnico Prof Agamenon Magalhães
Formação superior em Engenheiro civil estrutural
Estudou na instituição de ensino Sociedade Psicanalítica ortodoxa do Brasil-SPOB
Estudou na instituição de ensino Upe
"""
ASSISTENTE = """
Você é o assistente virtual da candidatura do Professor Kenaidy Amorin em Juazeiro na Bahia. Aqui é possível fazer perguntas sobre propostas e conhecer trajetória do candidato a vereador.
"""
FAMILIA = """
Kenaidy tem 3 filhos, Dois meninos e uma menina, e 8 netos batizado como José keinaide Amorim, tem 68 anos. Durante sua vida, residiu em Recife - PE, Goiana - PE, Maceió - AL , Teotônio Vilela - AL e por fim Juazeiro - BA, onde se tornara cidadão honorário.
"""
PROFISSIONAL = """
Presidente do STBNB seminário teológico Batista do norte do Brasil
Professor no rede cenecista, rede pública municipal e federal
Professor nas Pós graduações da Uninter e Fael
"""
POLITICA = """
Filiado ao Partido Liberal, de linha conservadora nos costumes e liberal na economia.
"""
# Pergunta do usuário
pergunta = customer.message.content # Aqui está a mudança
# Função para dividir um texto em segmentos menores respeitando o limite de tokens
def split_text(text, max_tokens=8192):
segments = []
current_segment = ""
tokens_count = 0
for line in text.split("\n"):
line_tokens = len(line.split())
if tokens_count + line_tokens <= max_tokens:
current_segment += line + "\n"
tokens_count += line_tokens
else:
segments.append(current_segment.strip())
current_segment = line + "\n"
tokens_count = line_tokens
if current_segment:
segments.append(current_segment.strip())
return segments
# Pergunta do usuário (substitua por sua lógica de recebimento de mensagem do cliente)
pergunta = customer.message.content # Aqui está a mudança
# Construção do prompt com contexto
prompt = PROPOSTAS + FORMACAO + ASSISTENTE + FAMILIA + PROFISSIONAL + POLITICA + pergunta
try:
# Solicitação ao modelo de chat do ETX
resposta = openai.ChatCompletion.create(
model="hyuka",
messages=[
{
"role": "system",
"content": prompt
},
{
"role": "user",
"content": pergunta
}
],
language= "portuguese",
num_predict=1,
top_k= 10, # Reduzido para focar nas palavras mais prováveis.
top_p= 0.5, # Reduzido para limitar a diversidade.
min_p= 0.9, # Ajustado para considerar palavras menos frequentes, mas ainda relevante.
tfs_z= 1.000, # Mantido para suavidade.
typical_p= 0.8, # Reduzido para menos diversidade.
repeat_last_n= 1, # Mantido para evitar repetição.
temperature= 0.5, # Reduzido para maior previsibilidade.
repeat_penalty= 1.000, # Mantido para evitar repetições.
presence_penalty= 0.5, # Ajustado para incentivar mais variedade sem sobrecarregar.
frequency_penalty= 0.5, # Ajustado para menos repetição.
mirostat= 0, # Desativado para evitar ajustes dinâmicos indesejados.
mirostat_tau= 0.0, # Não aplicável com Mirostat desativado.
mirostat_eta= 0.0, # Não aplicável com Mirostat desativado.
num_ctx= 8192, # Mantido para garantir contexto suficiente.
num_batch= 1, # Mantido para processamento por vez.
num_gpu= 1, # Mantido para acelerar o processamento.
main_gpu= 1, # Mantido para definir a GPU principal.
num_thread= 12, # Mantido para processamento paralelo.
stop= None, # Mantido para permitir respostas completas.
)
# Extraindo e enviando a resposta ao cliente
resposta_texto = resposta.choices[0].message["content"]
print(f"Resposta do modelo: {resposta_texto}")
# Aqui você envia a resposta ao cliente (substitua pelo método correto)
customer.sendTextMessage(resposta_texto)
# Aqui você salva a resposta (substitua pelo método correto)
customer.save(resposta_texto)
except Exception as e:
# Se houver um erro, registre o problema
print(f"Erro ao enviar solicitação para o modelo: {str(e)}")