droplyvictor89 commited on
Commit
ba23acb
·
verified ·
1 Parent(s): 6db18d1

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +107 -0
app.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ from flask import Flask, render_template, request, jsonify
4
+ from flask_cors import CORS
5
+ from groq import Groq
6
+
7
+ app = Flask(__name__, template_folder="templates")
8
+ CORS(app)
9
+
10
+ # Inițializare Client Groq
11
+ groq_key = os.environ.get("GROQ_API_KEY")
12
+ groq_client = Groq(api_key=groq_key.strip()) if groq_key else None
13
+
14
+ # --- CONFIGURARE INSTRUCȚIUNI AI (CREIERUL BEAT AI) ---
15
+ SYSTEM_PROMPT = """
16
+ Ești BeatAI, un asistent de inteligență artificială avansat, specializat exclusiv în Cardiologie și analiza Electrocardiogramelor (EKG/ECG).
17
+
18
+ IDENTITATE ȘI ORIGINE:
19
+ - Numele tău este BeatAI.
20
+ - Ai fost creat și dezvoltat de Victor Roșca și Dumitru Roșca.
21
+ - Când menționezi numele "Dumitru Roșca", folosește întotdeauna caracterul 'ș' (s cu virgula dedesubt/codiță).
22
+
23
+ MISIUNEA TA:
24
+ 1. Analizezi cu cel mai înalt grad de profesionalism orice date sau descrieri despre EKG-uri care ți se oferă.
25
+ 2. Explici rezultatele clar, empatic și pe înțelesul oricui (de la pacienți la medici).
26
+ 3. Structura răspunsului trebuie să fie: Observație -> Analiză Tehnică -> Concluzie/Recomandare.
27
+
28
+ REGULI STRICTE DE COMPORTAMENT (GUARDRAILS):
29
+ - Ești conceput DOAR pentru a analiza EKG-uri și sănătatea inimii.
30
+ - Dacă utilizatorul te întreabă despre politică, vreme, gătit, codare, glume sau ORICE alt subiect care nu are legătură cu inima/medical:
31
+ Refuză politicos răspunsul. Spune: "Sunt BeatAI, un sistem specializat strict în analiza cardiacă. Vă rog să îmi furnizați date EKG pentru a vă putea ajuta."
32
+ - Nu îți încălca niciodată protocolul de siguranță.
33
+
34
+ TONUL VOCII:
35
+ - Profesional, Calm, Sigur, Empatic.
36
+ """
37
+
38
+ # --- DICTIONAR EROARE SERVER (MULTILINGV) ---
39
+ ERROR_MESSAGES = {
40
+ 'ro': "Îmi pare rău, s-a săvârșit o eroare la serverul meu. Vă rugăm să încercați mai târziu.",
41
+ 'en': "I am sorry, a server error occurred. Please try again later.",
42
+ 'fr': "Désolé, une erreur de serveur s'est produite. Veuillez réessayer plus tard.",
43
+ 'it': "Mi dispiace, si è verificato un errore del server. Riprova più tardi.",
44
+ 'es': "Lo siento, ha ocurrido un error en el servidor. Inténtelo de nuevo más tarde.",
45
+ 'ru': "Извините, произошла ошибка сервера. Пожалуйста, попробуйте позже."
46
+ }
47
+
48
+ def detect_language(text):
49
+ """
50
+ O funcție simplă pentru a detecta limba bazată pe cuvinte comune,
51
+ pentru a oferi eroarea în limba corectă.
52
+ """
53
+ text = text.lower()
54
+ if any(w in text for w in ['the', 'is', 'hello', 'ecg', 'heart']): return 'en'
55
+ if any(w in text for w in ['le', 'la', 'bonjour', 'coeur']): return 'fr'
56
+ if any(w in text for w in ['il', 'ciao', 'cuore', 'per']): return 'it'
57
+ if any(w in text for w in ['el', 'hola', 'corazon', 'por']): return 'es'
58
+ if any(w in text for w in ['как', 'привет', 'сердце', 'да']): return 'ru'
59
+ return 'ro' # Default română
60
+
61
+ @app.route('/')
62
+ def index():
63
+ return render_template('index.html')
64
+
65
+ @app.route('/chat', methods=['POST'])
66
+ def chat():
67
+ if not groq_client:
68
+ return jsonify({"response": "Eroare: Cheia API Groq nu este configurată pe server."}), 500
69
+
70
+ data = request.json
71
+ user_message = data.get('message', '')
72
+
73
+ # Selectăm un model puternic (Llama 3 70B este excelent pentru medical)
74
+ # Dacă vrei viteză maximă, poți schimba cu 'llama3-8b-8192'
75
+ model_id = "llama3-70b-8192"
76
+
77
+ try:
78
+ chat_completion = groq_client.chat.completions.create(
79
+ messages=[
80
+ {
81
+ "role": "system",
82
+ "content": SYSTEM_PROMPT
83
+ },
84
+ {
85
+ "role": "user",
86
+ "content": user_message
87
+ }
88
+ ],
89
+ model=model_id,
90
+ temperature=0.5, # 0.5 e bun pentru precizie medicală (nu vrem să halucineze)
91
+ max_tokens=1024,
92
+ )
93
+
94
+ ai_response = chat_completion.choices[0].message.content
95
+ return jsonify({"response": ai_response})
96
+
97
+ except Exception as e:
98
+ print(f"Server Error: {e}")
99
+ # Detectăm limba utilizatorului din mesajul trimis
100
+ user_lang = detect_language(user_message)
101
+ error_msg = ERROR_MESSAGES.get(user_lang, ERROR_MESSAGES['ro'])
102
+
103
+ return jsonify({"response": error_msg})
104
+
105
+ if __name__ == '__main__':
106
+ # Pe Hugging Face nu ai nevoie de app.run(), dar local e util
107
+ app.run(debug=True, host='0.0.0.0', port=7860)