File size: 3,166 Bytes
09ac632 440898e 09ac632 f3b7acc 440898e 09ac632 440898e 09ac632 440898e 09ac632 a96588e 440898e 4fed00b 64b6538 440898e a96588e 440898e 4fed00b f3b7acc 09ac632 440898e 09ac632 f3b7acc 09ac632 f3b7acc 09ac632 f3b7acc 09ac632 f3b7acc 09ac632 f3b7acc 09ac632 f3b7acc 09ac632 4fed00b 09ac632 f3b7acc 09ac632 440898e f3b7acc 09ac632 440898e 09ac632 440898e 4fed00b f3b7acc 09ac632 4fed00b 09ac632 a96588e 440898e 09ac632 440898e 09ac632 | 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 | # app.py — V22 — PROMPT DINÂMICO COM GÍRIAS + ABREVIÇÕES DO BANCO
import subprocess
import time
import requests
import json
import datetime
from flask import Flask, request, jsonify
from loguru import logger
from database import Database
app = Flask(__name__)
OLLAMA_URL = "http://localhost:11434"
db = Database()
def check_ollama():
try: return requests.get(f"{OLLAMA_URL}/api/tags", timeout=10).status_code == 200
except: return False
def start_ollama():
subprocess.Popen(["ollama", "serve"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
@app.route("/api/generate", methods=['POST'])
def generate():
if not check_ollama():
return jsonify({'resposta': 'Epá, tô acordando... espera 10s!'}), 503
data = request.get_json() or {}
mensagem = data.get('mensagem', '').strip()
usuario = data.get('usuario', 'anonimo')
numero = data.get('numero', 'anonimo')
if not mensagem:
return jsonify({'error': 'mensagem obrigatória'}), 400
# === PUXA DO BANCO ===
ctx = db.carregar_contexto(numero)
tom = db.detectar_tom(numero, mensagem)
# Gírias do usuário
girias = db.recuperar_girias_usuario(numero)
if not girias:
girias = ["epá", "kandando", "bué", "kota"]
# Abreviações do usuário
abrevs = db.recuperar_abreviacoes_usuario(numero)
if not abrevs:
abrevs = {"p'ra": "para", "pq": "porque", "tfx": "tudo fixe"}
# Aprende novas
for abrev, completa in abrevs.items():
if abrev in mensagem.lower():
db.aprender_abreviacao(numero, abrev, completa)
for g in girias:
if g in mensagem.lower():
db.aprender_giria(numero, g)
# === PROMPT DINÂMICO ===
now = datetime.datetime.now().strftime('%d/%m %H:%M')
hist_text = '\n'.join([f"Usuário: {h[0]}\nAkira: {h[1]}" for h in ctx["historico"]])
prompt = f"""Você é Akira, angolana debochada.
Fala com gírias: {', '.join(girias)}
Abreviações: {', '.join(abrevs.keys())}
Tom: {tom}
Data/hora: {now}
### Usuário: {usuario} ({numero}) ###
{hist_text and f"### Histórico ###\n{hist_text}\n\n"}
### Mensagem ###
{mensagem}
Akira:"""
# === GERA ===
payload = {
"model": "phi3.5:mini-instruct-q4_0",
"prompt": prompt,
"stream": False,
"options": {"temperature": 0.9, "num_predict": 256}
}
try:
resp = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=90)
resposta = resp.json().get("response", "").strip() or "Epá, kandando bué!"
# SALVA
db.salvar_mensagem(usuario, mensagem, resposta, numero)
novo_hist = ctx["historico"] + [[mensagem, resposta]]
db.salvar_contexto(numero, novo_hist, girias, tom)
return jsonify({'resposta': resposta})
except Exception as e:
logger.error(f"Erro: {e}")
return jsonify({'resposta': 'Epá, tô off... tenta de novo!'}), 500
if __name__ == "__main__":
logger.info("AKIRA V22 — PROMPT DINÂMICO COM BANCO")
start_ollama()
for i in range(60):
if check_ollama(): break
time.sleep(2)
app.run(host="0.0.0.0", port=7860) |