akra35567 commited on
Commit
2832986
·
verified ·
1 Parent(s): 4380c35

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -36
app.py CHANGED
@@ -1,7 +1,7 @@
1
- # app.py — AKIRA V31Gemma2:2b + Fine-tune automático (HF Space otimizado)
 
2
  import re
3
- import json
4
- import datetime
5
  import requests
6
  from flask import Flask, request, jsonify
7
  from loguru import logger
@@ -11,77 +11,92 @@ from treinamento import Treinamento
11
 
12
  app = Flask(__name__)
13
 
14
- # Ollama URL (HF Space já tem Ollama instalado)
15
  OLLAMA_URL = "http://localhost:11434"
16
 
17
- db = Database("/app/akira.db")
 
18
  treinamento = Treinamento(db, min_interactions=20, interval_hours=3)
19
 
20
- def check_ollama():
21
- try:
22
- r = requests.get(f"{OLLAMA_URL}/api/tags", timeout=5)
23
- return r.status_code == 200
24
- except:
25
- return False
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  @app.route("/")
28
  def index():
29
  return '''
30
  <div style="font-family: monospace; text-align: center; margin: 50px; background: #000; color: #0f0; padding: 40px;">
31
- <h1>AKIRA V31 — LUANDA FULL DEBOCHE</h1>
32
- <p>POST /api/generate → {"mensagem": "oi kota", "usuario": "Isaac", "numero": "244937..."}</p>
33
- <p>Fine-tune automático a cada 20 mensagens</p>
 
34
  </div>
35
  ''', 200
36
 
37
  @app.route("/health")
38
  def health():
39
- return jsonify({"status": "OK" if check_ollama() else "Ollama acordando..."}), 200
 
 
 
 
40
 
41
  @app.route("/api/generate", methods=["POST"])
42
  def generate():
43
- if not check_ollama():
44
- return jsonify({"resposta": "Epá, tô acordando... espera 15 segundos kota!"}), 503
45
-
46
  data = request.get_json() or {}
47
  mensagem = data.get("mensagem", "").strip()
48
- usuario = data.get("usuario", "kota").split()[0]
49
  numero = data.get("numero", "244999999999")
50
 
51
  if not mensagem:
52
  return jsonify({"error": "manda a mensagem puto"}), 400
53
 
54
- # Prompt ULTRA FORÇADO (Gemma2:2b só obedece assim)
 
 
55
  prompt = f"""<start_of_turn>user
56
  {mensagem}<end_of_turn>
57
  <start_of_turn>model
58
- Epá {usuario}, """
59
 
60
  payload = {
61
- "model": config.OLLAMA_MODEL, # muda automaticamente quando fine-tune roda
62
  "prompt": prompt,
63
  "stream": False,
64
  "options": {
65
  "temperature": 0.9,
66
- "num_predict": 180,
67
- "top_p": 0.9,
68
- "stop": ["<end_of_turn>", "\n\n", "user:", "<|eot_id|>"],
69
- "num_ctx": 4096
70
  }
71
  }
72
 
73
  try:
74
- r = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=90)
75
  r.raise_for_status()
76
  resposta_bruta = r.json().get("response", "").strip()
77
 
78
- # Limpeza pesada (nunca deixa escapar merda)
79
- resposta = re.sub(r'[\*\_\`\[\]\(\)\<\>]', '', resposta_bruta)
80
  resposta = resposta.split("<end_of_turn>")[0].split("\n")[0].strip()
81
  resposta = resposta[:280]
82
 
83
- if not resposta or len(resposta) < 6:
84
- resposta = "Epá, tá mbora? kkkkk"
85
 
86
  # Salva e treina
87
  db.salvar_mensagem(usuario, mensagem, resposta, numero)
@@ -90,10 +105,9 @@ Epá {usuario}, """
90
  return jsonify({"resposta": resposta})
91
 
92
  except Exception as e:
93
- logger.error(f"Ollama erro: {e}")
94
- return jsonify({"resposta": "Puto o servidor tá na merda agora, tenta já já."}), 500
95
-
96
 
97
  if __name__ == "__main__":
98
- logger.info("AKIRA V31INICIANDO")
99
- app.run(host="0.0.0.0", port=7860)
 
1
+ # app.py — AKIRA V36 FINAL ZERO 503 + RESPOSTA RÁPIDA + FINE-TUNE FUNCIONANDO
2
+ import os
3
  import re
4
+ import time
 
5
  import requests
6
  from flask import Flask, request, jsonify
7
  from loguru import logger
 
11
 
12
  app = Flask(__name__)
13
 
14
+ # Ollama URL
15
  OLLAMA_URL = "http://localhost:11434"
16
 
17
+ # Instancia DB e treinamento
18
+ db = Database("/app/data/akira.db") # /app/data pra garantir persistência no HF
19
  treinamento = Treinamento(db, min_interactions=20, interval_hours=3)
20
 
21
+ # FUNÇÃO QUE ESPERA OLLAMA ATÉ ACORDAR (ADEUS 503!)
22
+ def wait_ollama_ready(max_wait=120):
23
+ logger.info("Akira acordando Ollama... espera aí kota")
24
+ for i in range(max_wait):
25
+ try:
26
+ r = requests.get(f"{OLLAMA_URL}/api/tags", timeout=10)
27
+ if r.status_code == 200 and "models" in r.text:
28
+ logger.success("Ollama pronto! Gemma2 carregada e quente!")
29
+ return True
30
+ except:
31
+ pass
32
+ time.sleep(1)
33
+ logger.error("Ollama não acordou a tempo...")
34
+ return False
35
+
36
+ # Espera Ollama na inicialização do app
37
+ wait_ollama_ready()
38
 
39
  @app.route("/")
40
  def index():
41
  return '''
42
  <div style="font-family: monospace; text-align: center; margin: 50px; background: #000; color: #0f0; padding: 40px;">
43
+ <h1>AKIRA V36 — LUANDA FULL DEBOCHE</h1>
44
+ <h2 style="color:#ff0">POST /api/generate</h2>
45
+ <p>Responde em < 6s • Sem 503 • Fine-tune automático</p>
46
+ <p>Bué fixe, Isaac! Manda aí kota 🇦🇴🔥</p>
47
  </div>
48
  ''', 200
49
 
50
  @app.route("/health")
51
  def health():
52
+ try:
53
+ requests.get(f"{OLLAMA_URL}/api/tags", timeout=5)
54
+ return jsonify({"status": "OK", "model": config.OLLAMA_MODEL}), 200
55
+ except:
56
+ return jsonify({"status": "Ollama dormindo..."}), 503
57
 
58
  @app.route("/api/generate", methods=["POST"])
59
  def generate():
 
 
 
60
  data = request.get_json() or {}
61
  mensagem = data.get("mensagem", "").strip()
62
+ usuario = data.get("usuario", "kota")
63
  numero = data.get("numero", "244999999999")
64
 
65
  if not mensagem:
66
  return jsonify({"error": "manda a mensagem puto"}), 400
67
 
68
+ logger.info(f"[{usuario} | {numero}] {mensagem[:60]}")
69
+
70
+ # Prompt ultra forçado pra Gemma2:2b obedecer
71
  prompt = f"""<start_of_turn>user
72
  {mensagem}<end_of_turn>
73
  <start_of_turn>model
74
+ Epá {usuario.split(' ', 1)[0] if usuario != 'kota' else 'kota'}, """
75
 
76
  payload = {
77
+ "model": config.OLLAMA_MODEL,
78
  "prompt": prompt,
79
  "stream": False,
80
  "options": {
81
  "temperature": 0.9,
82
+ "num_predict": 200,
83
+ "top_p": 0.92,
84
+ "stop": ["<end_of_turn>", "<|eot_id|>", "\nuser:", "\n\n"]
 
85
  }
86
  }
87
 
88
  try:
89
+ r = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=60)
90
  r.raise_for_status()
91
  resposta_bruta = r.json().get("response", "").strip()
92
 
93
+ # Limpeza pesada
94
+ resposta = re.sub(r'[\*\_\`\<\>\[\]\(\)\#\@\!\$\%\^\&\+\=]', '', resposta_bruta)
95
  resposta = resposta.split("<end_of_turn>")[0].split("\n")[0].strip()
96
  resposta = resposta[:280]
97
 
98
+ if len(resposta) < 8:
99
+ resposta = "Epá, tá mbora? kkkkkk"
100
 
101
  # Salva e treina
102
  db.salvar_mensagem(usuario, mensagem, resposta, numero)
 
105
  return jsonify({"resposta": resposta})
106
 
107
  except Exception as e:
108
+ logger.error(f"Erro Ollama: {e}")
109
+ return jsonify({"resposta": "Epá, hoje o sistema tá na merda total... tenta já já kota!"}), 500
 
110
 
111
  if __name__ == "__main__":
112
+ logger.success("AKIRA V36 RODANDO PRONTA PRA DEBOCHAR")
113
+ app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)))