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)