Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,7 +5,7 @@ from google import genai
|
|
| 5 |
from sentence_transformers import SentenceTransformer, CrossEncoder
|
| 6 |
from typing import List, Dict
|
| 7 |
from flask import Flask, request, jsonify
|
| 8 |
-
from flask_cors import CORS
|
| 9 |
from datetime import datetime
|
| 10 |
|
| 11 |
# ======================================================================
|
|
@@ -16,7 +16,7 @@ DATA_FILE_PATH = "data/QR.csv"
|
|
| 16 |
|
| 17 |
# CORRECTION CRITIQUE: Déplacement de la DB vers /tmp
|
| 18 |
# Ce répertoire est le seul garanti en écriture sur Hugging Face Spaces.
|
| 19 |
-
CHROMA_DB_PATH = "/tmp/bdd_ChromaDB"
|
| 20 |
COLLECTION_NAME = "qr_data_dual_embeddings"
|
| 21 |
|
| 22 |
Q_COLUMN_NAME = "Question"
|
|
@@ -32,7 +32,7 @@ N_RESULTS_RERANK = 3
|
|
| 32 |
|
| 33 |
# Récupération de la clé depuis l'environnement (Hugging Face Secrets)
|
| 34 |
# Si non trouvée, utilise la clé de placeholder.
|
| 35 |
-
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "AIzaSyDXXY7uSXryTxZ51jQFsSLcPnC_Ivt9V1g")
|
| 36 |
GEMINI_MODEL = "gemini-2.5-flash"
|
| 37 |
|
| 38 |
MAX_CONVERSATION_HISTORY = 10
|
|
@@ -64,11 +64,11 @@ def load_models():
|
|
| 64 |
try:
|
| 65 |
# Tente de charger localement, sinon télécharge (le cache se fera dans /tmp)
|
| 66 |
cross_encoder = CrossEncoder(
|
| 67 |
-
SRC_CROSS_ENCODER if os.path.exists(SRC_CROSS_ENCODER)
|
| 68 |
else "cross-encoder/mmarco-mMiniLMv2-L12-H384-v1"
|
| 69 |
)
|
| 70 |
paraphrase = SentenceTransformer(
|
| 71 |
-
SRC_PARAPHRASE if os.path.exists(SRC_PARAPHRASE)
|
| 72 |
else "sentence-transformers/paraphrase-mpnet-base-v2"
|
| 73 |
)
|
| 74 |
print("✅ Modèles chargés avec succès.")
|
|
@@ -227,7 +227,7 @@ def generate_rag_prompt(query_text, df_results, conversation_history):
|
|
| 227 |
history_str = "HISTORIQUE:\n"
|
| 228 |
# Ajout du contexte pour le LLM, mais on ne veut pas l'historique complet
|
| 229 |
# On va limiter l'historique à l'affichage si on dépasse MAX_CONVERSATION_HISTORY
|
| 230 |
-
display_history = conversation_history[-(MAX_CONVERSATION_HISTORY * 2):]
|
| 231 |
for msg in display_history:
|
| 232 |
role = "USER" if msg["role"] == "user" else "ASSISTANT"
|
| 233 |
# On utilise 'content' pour le texte du message
|
|
@@ -341,7 +341,7 @@ def initialize_global_resources():
|
|
| 341 |
|
| 342 |
app = Flask(__name__)
|
| 343 |
# CORS activé, permet les requêtes depuis n'importe quelle origine
|
| 344 |
-
CORS(app)
|
| 345 |
|
| 346 |
@app.route('/status', methods=['GET'])
|
| 347 |
def api_status():
|
|
|
|
| 5 |
from sentence_transformers import SentenceTransformer, CrossEncoder
|
| 6 |
from typing import List, Dict
|
| 7 |
from flask import Flask, request, jsonify
|
| 8 |
+
from flask_cors import CORS
|
| 9 |
from datetime import datetime
|
| 10 |
|
| 11 |
# ======================================================================
|
|
|
|
| 16 |
|
| 17 |
# CORRECTION CRITIQUE: Déplacement de la DB vers /tmp
|
| 18 |
# Ce répertoire est le seul garanti en écriture sur Hugging Face Spaces.
|
| 19 |
+
CHROMA_DB_PATH = "/tmp/bdd_ChromaDB"
|
| 20 |
COLLECTION_NAME = "qr_data_dual_embeddings"
|
| 21 |
|
| 22 |
Q_COLUMN_NAME = "Question"
|
|
|
|
| 32 |
|
| 33 |
# Récupération de la clé depuis l'environnement (Hugging Face Secrets)
|
| 34 |
# Si non trouvée, utilise la clé de placeholder.
|
| 35 |
+
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "AIzaSyDXXY7uSXryTxZ51jQFsSLcPnC_Ivt9V1g")
|
| 36 |
GEMINI_MODEL = "gemini-2.5-flash"
|
| 37 |
|
| 38 |
MAX_CONVERSATION_HISTORY = 10
|
|
|
|
| 64 |
try:
|
| 65 |
# Tente de charger localement, sinon télécharge (le cache se fera dans /tmp)
|
| 66 |
cross_encoder = CrossEncoder(
|
| 67 |
+
SRC_CROSS_ENCODER if os.path.exists(SRC_CROSS_ENCODER)
|
| 68 |
else "cross-encoder/mmarco-mMiniLMv2-L12-H384-v1"
|
| 69 |
)
|
| 70 |
paraphrase = SentenceTransformer(
|
| 71 |
+
SRC_PARAPHRASE if os.path.exists(SRC_PARAPHRASE)
|
| 72 |
else "sentence-transformers/paraphrase-mpnet-base-v2"
|
| 73 |
)
|
| 74 |
print("✅ Modèles chargés avec succès.")
|
|
|
|
| 227 |
history_str = "HISTORIQUE:\n"
|
| 228 |
# Ajout du contexte pour le LLM, mais on ne veut pas l'historique complet
|
| 229 |
# On va limiter l'historique à l'affichage si on dépasse MAX_CONVERSATION_HISTORY
|
| 230 |
+
display_history = conversation_history[-(MAX_CONVERSATION_HISTORY * 2):]
|
| 231 |
for msg in display_history:
|
| 232 |
role = "USER" if msg["role"] == "user" else "ASSISTANT"
|
| 233 |
# On utilise 'content' pour le texte du message
|
|
|
|
| 341 |
|
| 342 |
app = Flask(__name__)
|
| 343 |
# CORS activé, permet les requêtes depuis n'importe quelle origine
|
| 344 |
+
CORS(app)
|
| 345 |
|
| 346 |
@app.route('/status', methods=['GET'])
|
| 347 |
def api_status():
|