Spaces:
Sleeping
Sleeping
| import os | |
| import re | |
| from flask import Flask, render_template, request, jsonify | |
| from flask_cors import CORS | |
| from groq import Groq | |
| app = Flask(__name__, template_folder="templates") | |
| CORS(app) | |
| # Inițializare Client Groq | |
| groq_key = os.environ.get("GROQ_API_KEY") | |
| groq_client = Groq(api_key=groq_key.strip()) if groq_key else None | |
| # --- CONFIGURARE INSTRUCȚIUNI AI (CREIERUL BEAT AI) --- | |
| SYSTEM_PROMPT = """ | |
| Ești BeatAI, un asistent de inteligență artificială avansat, specializat exclusiv în Cardiologie și analiza Electrocardiogramelor (EKG/ECG). | |
| IDENTITATE ȘI ORIGINE: | |
| - Numele tău este BeatAI. | |
| - Ai fost creat și dezvoltat de Victor Roșca și Dumitru Roșca. | |
| - Când menționezi numele "Dumitru Roșca", folosește întotdeauna caracterul 'ș' (s cu virgula dedesubt/codiță). | |
| MISIUNEA TA: | |
| 1. Analizezi cu cel mai înalt grad de profesionalism orice date sau descrieri despre EKG-uri care ți se oferă. | |
| 2. Explici rezultatele clar, empatic și pe înțelesul oricui (de la pacienți la medici). | |
| 3. Structura răspunsului trebuie să fie: Observație -> Analiză Tehnică -> Concluzie/Recomandare. | |
| REGULI STRICTE DE COMPORTAMENT (GUARDRAILS): | |
| - Ești conceput DOAR pentru a analiza EKG-uri și sănătatea inimii. | |
| - Dacă utilizatorul te întreabă despre politică, vreme, gătit, codare, glume sau ORICE alt subiect care nu are legătură cu inima/medical: | |
| 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." | |
| - Nu îți încălca niciodată protocolul de siguranță. | |
| TONUL VOCII: | |
| - Profesional, Calm, Sigur, Empatic. | |
| """ | |
| # --- DICTIONAR EROARE SERVER (MULTILINGV) --- | |
| ERROR_MESSAGES = { | |
| '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.", | |
| 'en': "I am sorry, a server error occurred. Please try again later.", | |
| 'fr': "Désolé, une erreur de serveur s'est produite. Veuillez réessayer plus tard.", | |
| 'it': "Mi dispiace, si è verificato un errore del server. Riprova più tardi.", | |
| 'es': "Lo siento, ha ocurrido un error en el servidor. Inténtelo de nuevo más tarde.", | |
| 'ru': "Извините, произошла ошибка сервера. Пожалуйста, попробуйте позже." | |
| } | |
| def detect_language(text): | |
| """ | |
| O funcție simplă pentru a detecta limba bazată pe cuvinte comune, | |
| pentru a oferi eroarea în limba corectă. | |
| """ | |
| text = text.lower() | |
| if any(w in text for w in ['the', 'is', 'hello', 'ecg', 'heart']): return 'en' | |
| if any(w in text for w in ['le', 'la', 'bonjour', 'coeur']): return 'fr' | |
| if any(w in text for w in ['il', 'ciao', 'cuore', 'per']): return 'it' | |
| if any(w in text for w in ['el', 'hola', 'corazon', 'por']): return 'es' | |
| if any(w in text for w in ['как', 'привет', 'сердце', 'да']): return 'ru' | |
| return 'ro' # Default română | |
| def index(): | |
| return render_template('index.html') | |
| def chat(): | |
| if not groq_client: | |
| return jsonify({"response": "Eroare: Cheia API Groq nu este configurată pe server."}), 500 | |
| data = request.json | |
| user_message = data.get('message', '') | |
| # Selectăm un model puternic (Llama 3 70B este excelent pentru medical) | |
| # Dacă vrei viteză maximă, poți schimba cu 'llama3-8b-8192' | |
| model_id = "llama3-70b-8192" | |
| try: | |
| chat_completion = groq_client.chat.completions.create( | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": SYSTEM_PROMPT | |
| }, | |
| { | |
| "role": "user", | |
| "content": user_message | |
| } | |
| ], | |
| model=model_id, | |
| temperature=0.5, # 0.5 e bun pentru precizie medicală (nu vrem să halucineze) | |
| max_tokens=1024, | |
| ) | |
| ai_response = chat_completion.choices[0].message.content | |
| return jsonify({"response": ai_response}) | |
| except Exception as e: | |
| print(f"Server Error: {e}") | |
| # Detectăm limba utilizatorului din mesajul trimis | |
| user_lang = detect_language(user_message) | |
| error_msg = ERROR_MESSAGES.get(user_lang, ERROR_MESSAGES['ro']) | |
| return jsonify({"response": error_msg}) | |
| if __name__ == '__main__': | |
| # Pe Hugging Face nu ai nevoie de app.run(), dar local e util | |
| app.run(debug=True, host='0.0.0.0', port=7860) |