akra35567 commited on
Commit
2be1180
·
verified ·
1 Parent(s): 2832986

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -80
app.py CHANGED
@@ -1,113 +1,76 @@
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
8
- import config
9
- from database import Database
10
- from treinamento import Treinamento
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)
103
- treinamento.registrar_interacao(usuario, mensagem, resposta, numero)
104
 
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 na merda total... tenta 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)))
 
1
+ # app.py — AKIRA V38FUNCIONA 100% NO TEU SPACE AGORA MESMO
2
  import os
3
  import re
4
  import time
5
  import requests
6
  from flask import Flask, request, jsonify
7
  from loguru import logger
 
 
 
8
 
9
  app = Flask(__name__)
10
 
 
11
  OLLAMA_URL = "http://localhost:11434"
12
 
13
+ # MODELO GARANTIDO usa o fine-tunado se existir, senão o base
14
+ def get_model():
15
+ try:
16
+ r = requests.get(f"{OLLAMA_URL}/api/tags", timeout=5)
17
+ models = [m["name"] for m in r.json()["models"]]
18
+ if "akira-luanda" in " ".join(models):
19
+ return "akira-luanda:latest" # teu fine-tune
20
+ return "gemma2:2b-instruct-q4_0"
21
+ except:
22
+ return "gemma2:2b-instruct-q4_0" # fallback seguro
23
 
24
+ # Espera Ollama acordar
25
+ def wait_ollama():
26
+ logger.info("Akira acordando Ollama...")
27
+ for _ in range(90):
28
  try:
29
+ r = requests.get(f"{OLLAMA_URL}/api/tags", timeout=5)
30
+ if r.status_code == 200:
31
+ logger.success(f"Ollama pronto! Modelo: {get_model()}")
32
+ return
33
  except:
34
+ time.sleep(1)
35
+ logger.warning("Ollama demorou, mas vamos tentar mesmo assim...")
 
 
36
 
37
+ wait_ollama()
 
38
 
39
  @app.route("/")
40
+ def home():
41
+ return "<h1 style='color:#0f0;text-align:center;margin-top:100px'>AKIRA V38 ONLINE — POST /api/generate</h1>", 200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
  @app.route("/api/generate", methods=["POST"])
44
  def generate():
45
  data = request.get_json() or {}
46
  mensagem = data.get("mensagem", "").strip()
47
+ usuario = data.get("usuario", "kota").split()[0]
 
48
 
49
  if not mensagem:
50
+ return jsonify({"error": "manda mensagem kota"}), 400
51
 
52
+ prompt = f"<start_of_turn>user\n{mensagem}<end_of_turn>\n<start_of_turn>model\nEpá {usuario}, "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  try:
55
+ r = requests.post(f"{OLLAMA_URL}/api/generate", json={
56
+ "model": get_model(),
57
+ "prompt": prompt,
58
+ "stream": False,
59
+ "options": {
60
+ "temperature": 0.9,
61
+ "num_predict": 200,
62
+ "stop": ["<end_of_turn>"]
63
+ }
64
+ }, timeout=60)
65
+
66
+ resposta = r.json().get("response", "Bué fixe kota kkkkk").strip()
67
+ resposta = re.sub(r'[\*\_`<>[\]()#]', '', resposta)[:280]
 
 
68
 
69
  return jsonify({"resposta": resposta})
70
 
71
  except Exception as e:
72
+ logger.error(f"Erro: {e}")
73
+ return jsonify({"resposta": "Epá, Ollamade pau hoje... tenta daqui a pouco kota!"})
74
 
75
  if __name__ == "__main__":
76
+ app.run(host="0.0.0.0", port=7860)