# 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)