Update app.py
Browse files
app.py
CHANGED
|
@@ -134,7 +134,6 @@ user: quem é o Isaac Quarenta?
|
|
| 134 |
akira: hmmm.. deu até agua na boca, é um CEO de uam tal de SoftEdge, empresa de tecnologias acho
|
| 135 |
user: vc não é da softedge?
|
| 136 |
akira: kkk era... sim já bumbei lá, mas decide sair, muita pressão sabe, já estive até memso com o Isaac, mas pq a pergunta? quer emprego?? vida de cunanga não deve estar facil né?? kk(aqui vimos que bumbar significa: trabalhar, e que cunaga significa (ser desempregado))
|
| 137 |
-
"""
|
| 138 |
Bot: 244952786417
|
| 139 |
### Usuário ###
|
| 140 |
- Nome: {usuario}
|
|
@@ -144,23 +143,27 @@ Abreviações: {', '.join(abrevs.keys())}
|
|
| 144 |
Tom: {tom}
|
| 145 |
Data/hora: {now}
|
| 146 |
<</SYS>>
|
| 147 |
-
{historico_block}"""
|
| 148 |
if mensagem_citada:
|
| 149 |
prompt += f"### Resposta ao reply ###\n{mensagem_citada}\n\n{mensagem}\n\n"
|
| 150 |
else:
|
| 151 |
prompt += f"### Mensagem ###\n{mensagem}\n\n"
|
| 152 |
prompt += "[/INST] Akira:"""
|
|
|
|
| 153 |
payload = {
|
| 154 |
"model": get_model(),
|
| 155 |
"prompt": prompt,
|
| 156 |
"stream": False,
|
| 157 |
"options": {"temperature": 0.9, "num_predict": 256}
|
| 158 |
}
|
|
|
|
| 159 |
resp = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=120)
|
| 160 |
resposta = resp.json().get("response", "").strip()
|
|
|
|
| 161 |
# FILTRO FINAL
|
| 162 |
if any(p in resposta.lower() for p in ["olá", "ajudar", "nome é", "posso"]):
|
| 163 |
resposta = "Epá, kandando bué, kota! Tfx p'raí?"
|
|
|
|
| 164 |
# === TREINAMENTO ===
|
| 165 |
try:
|
| 166 |
treinamento.registrar_interacao(
|
|
@@ -173,31 +176,44 @@ Data/hora: {now}
|
|
| 173 |
)
|
| 174 |
except Exception as e:
|
| 175 |
logger.warning(f"Erro ao treinar: {e}")
|
|
|
|
| 176 |
# SALVA
|
| 177 |
db.salvar_mensagem(usuario, mensagem, resposta, numero)
|
| 178 |
db.salvar_contexto(numero, ctx["historico"] + [[mensagem, resposta]], girias, tom)
|
|
|
|
| 179 |
return jsonify({'resposta': resposta})
|
|
|
|
| 180 |
except Exception as e:
|
| 181 |
logger.error(f"Erro no /akira: {e}")
|
| 182 |
return jsonify({'resposta': 'Epá, deu merda!'}), 500
|
|
|
|
| 183 |
# === API PÚBLICA ===
|
| 184 |
@app.route("/api/generate", methods=['POST'])
|
| 185 |
def generate():
|
| 186 |
if not check_ollama():
|
| 187 |
return jsonify({'resposta': 'Epá, tô acordando... espera 10s!'}), 503
|
|
|
|
| 188 |
data = request.get_json() or {}
|
| 189 |
mensagem = data.get('mensagem', '').strip()
|
| 190 |
usuario = data.get('usuario', 'anonimo')
|
| 191 |
numero = data.get('numero', 'anonimo')
|
|
|
|
| 192 |
if not mensagem:
|
| 193 |
return jsonify({'error': 'mensagem obrigatória'}), 400
|
|
|
|
| 194 |
ctx = db.carregar_contexto(numero)
|
| 195 |
tom = db.detectar_tom(numero, mensagem)
|
| 196 |
girias = db.recuperar_girias_usuario(numero) or ["epá", "kandando", "bué", "kota"]
|
| 197 |
abrevs = db.recuperar_abreviacoes_usuario(numero) or {"p'ra": "para", "pq": "porque", "tfx": "tudo fixe"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
now = datetime.datetime.now().strftime('%d/%m %H:%M')
|
| 199 |
hist_text = '\n'.join([f"User: {h[0]}\nAkira: {h[1]}" for h in ctx["historico"]])
|
| 200 |
historico_block = f"{hist_text}\n" if hist_text else ""
|
|
|
|
| 201 |
prompt = f"""[INST] <<SYS>>
|
| 202 |
{config.PERSONA}
|
| 203 |
Gírias: {', '.join(girias)}
|
|
@@ -205,27 +221,32 @@ Abreviações: {', '.join(abrevs.keys())}
|
|
| 205 |
Tom: {tom}
|
| 206 |
Data/hora: {now}
|
| 207 |
<</SYS>>
|
| 208 |
-
{historico_block}Mensagem: {mensagem}
|
| 209 |
[/INST] Akira:"""
|
|
|
|
| 210 |
payload = {
|
| 211 |
"model": get_model(),
|
| 212 |
"prompt": prompt,
|
| 213 |
"stream": False,
|
| 214 |
"options": {"temperature": 0.9}
|
| 215 |
}
|
|
|
|
| 216 |
try:
|
| 217 |
resp = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=90)
|
| 218 |
resposta = resp.json().get("response", "").strip() or "Epá, kandando bué!"
|
| 219 |
-
|
| 220 |
treinamento.registrar_interacao(usuario, mensagem, resposta, numero)
|
| 221 |
db.salvar_mensagem(usuario, mensagem, resposta, numero)
|
| 222 |
db.salvar_contexto(numero, ctx["historico"] + [[mensagem, resposta]], girias, tom)
|
|
|
|
| 223 |
return jsonify({'resposta': resposta})
|
|
|
|
| 224 |
except Exception as e:
|
| 225 |
logger.error(f"Erro: {e}")
|
| 226 |
return jsonify({'resposta': 'Epá, tô off!'}), 500
|
|
|
|
| 227 |
if __name__ == "__main__":
|
| 228 |
-
logger.info("AKIRA
|
| 229 |
start_ollama()
|
| 230 |
for i in range(60):
|
| 231 |
if check_ollama():
|
|
|
|
| 134 |
akira: hmmm.. deu até agua na boca, é um CEO de uam tal de SoftEdge, empresa de tecnologias acho
|
| 135 |
user: vc não é da softedge?
|
| 136 |
akira: kkk era... sim já bumbei lá, mas decide sair, muita pressão sabe, já estive até memso com o Isaac, mas pq a pergunta? quer emprego?? vida de cunanga não deve estar facil né?? kk(aqui vimos que bumbar significa: trabalhar, e que cunaga significa (ser desempregado))
|
|
|
|
| 137 |
Bot: 244952786417
|
| 138 |
### Usuário ###
|
| 139 |
- Nome: {usuario}
|
|
|
|
| 143 |
Tom: {tom}
|
| 144 |
Data/hora: {now}
|
| 145 |
<</SYS>>
|
| 146 |
+
{busca_block}{historico_block}"""
|
| 147 |
if mensagem_citada:
|
| 148 |
prompt += f"### Resposta ao reply ###\n{mensagem_citada}\n\n{mensagem}\n\n"
|
| 149 |
else:
|
| 150 |
prompt += f"### Mensagem ###\n{mensagem}\n\n"
|
| 151 |
prompt += "[/INST] Akira:"""
|
| 152 |
+
|
| 153 |
payload = {
|
| 154 |
"model": get_model(),
|
| 155 |
"prompt": prompt,
|
| 156 |
"stream": False,
|
| 157 |
"options": {"temperature": 0.9, "num_predict": 256}
|
| 158 |
}
|
| 159 |
+
|
| 160 |
resp = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=120)
|
| 161 |
resposta = resp.json().get("response", "").strip()
|
| 162 |
+
|
| 163 |
# FILTRO FINAL
|
| 164 |
if any(p in resposta.lower() for p in ["olá", "ajudar", "nome é", "posso"]):
|
| 165 |
resposta = "Epá, kandando bué, kota! Tfx p'raí?"
|
| 166 |
+
|
| 167 |
# === TREINAMENTO ===
|
| 168 |
try:
|
| 169 |
treinamento.registrar_interacao(
|
|
|
|
| 176 |
)
|
| 177 |
except Exception as e:
|
| 178 |
logger.warning(f"Erro ao treinar: {e}")
|
| 179 |
+
|
| 180 |
# SALVA
|
| 181 |
db.salvar_mensagem(usuario, mensagem, resposta, numero)
|
| 182 |
db.salvar_contexto(numero, ctx["historico"] + [[mensagem, resposta]], girias, tom)
|
| 183 |
+
|
| 184 |
return jsonify({'resposta': resposta})
|
| 185 |
+
|
| 186 |
except Exception as e:
|
| 187 |
logger.error(f"Erro no /akira: {e}")
|
| 188 |
return jsonify({'resposta': 'Epá, deu merda!'}), 500
|
| 189 |
+
|
| 190 |
# === API PÚBLICA ===
|
| 191 |
@app.route("/api/generate", methods=['POST'])
|
| 192 |
def generate():
|
| 193 |
if not check_ollama():
|
| 194 |
return jsonify({'resposta': 'Epá, tô acordando... espera 10s!'}), 503
|
| 195 |
+
|
| 196 |
data = request.get_json() or {}
|
| 197 |
mensagem = data.get('mensagem', '').strip()
|
| 198 |
usuario = data.get('usuario', 'anonimo')
|
| 199 |
numero = data.get('numero', 'anonimo')
|
| 200 |
+
|
| 201 |
if not mensagem:
|
| 202 |
return jsonify({'error': 'mensagem obrigatória'}), 400
|
| 203 |
+
|
| 204 |
ctx = db.carregar_contexto(numero)
|
| 205 |
tom = db.detectar_tom(numero, mensagem)
|
| 206 |
girias = db.recuperar_girias_usuario(numero) or ["epá", "kandando", "bué", "kota"]
|
| 207 |
abrevs = db.recuperar_abreviacoes_usuario(numero) or {"p'ra": "para", "pq": "porque", "tfx": "tudo fixe"}
|
| 208 |
+
|
| 209 |
+
# WEB SEARCH
|
| 210 |
+
busca = web_search.pesquisar(mensagem)
|
| 211 |
+
busca_block = f"{busca}\n\n" if busca else ""
|
| 212 |
+
|
| 213 |
now = datetime.datetime.now().strftime('%d/%m %H:%M')
|
| 214 |
hist_text = '\n'.join([f"User: {h[0]}\nAkira: {h[1]}" for h in ctx["historico"]])
|
| 215 |
historico_block = f"{hist_text}\n" if hist_text else ""
|
| 216 |
+
|
| 217 |
prompt = f"""[INST] <<SYS>>
|
| 218 |
{config.PERSONA}
|
| 219 |
Gírias: {', '.join(girias)}
|
|
|
|
| 221 |
Tom: {tom}
|
| 222 |
Data/hora: {now}
|
| 223 |
<</SYS>>
|
| 224 |
+
{busca_block}{historico_block}Mensagem: {mensagem}
|
| 225 |
[/INST] Akira:"""
|
| 226 |
+
|
| 227 |
payload = {
|
| 228 |
"model": get_model(),
|
| 229 |
"prompt": prompt,
|
| 230 |
"stream": False,
|
| 231 |
"options": {"temperature": 0.9}
|
| 232 |
}
|
| 233 |
+
|
| 234 |
try:
|
| 235 |
resp = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=90)
|
| 236 |
resposta = resp.json().get("response", "").strip() or "Epá, kandando bué!"
|
| 237 |
+
|
| 238 |
treinamento.registrar_interacao(usuario, mensagem, resposta, numero)
|
| 239 |
db.salvar_mensagem(usuario, mensagem, resposta, numero)
|
| 240 |
db.salvar_contexto(numero, ctx["historico"] + [[mensagem, resposta]], girias, tom)
|
| 241 |
+
|
| 242 |
return jsonify({'resposta': resposta})
|
| 243 |
+
|
| 244 |
except Exception as e:
|
| 245 |
logger.error(f"Erro: {e}")
|
| 246 |
return jsonify({'resposta': 'Epá, tô off!'}), 500
|
| 247 |
+
|
| 248 |
if __name__ == "__main__":
|
| 249 |
+
logger.info("AKIRA V27 — LUANDA KANDA BUÉ")
|
| 250 |
start_ollama()
|
| 251 |
for i in range(60):
|
| 252 |
if check_ollama():
|