Update app.py
Browse files
app.py
CHANGED
|
@@ -17,7 +17,7 @@ load_dotenv()
|
|
| 17 |
|
| 18 |
# Configura il logging
|
| 19 |
logging.basicConfig(
|
| 20 |
-
level=logging.
|
| 21 |
format="%(asctime)s - %(levelname)s - %(message)s",
|
| 22 |
handlers=[logging.FileHandler("app.log"), logging.StreamHandler()]
|
| 23 |
)
|
|
@@ -35,7 +35,7 @@ client = InferenceClient(token=API_KEY)
|
|
| 35 |
# Definisci i percorsi dei file
|
| 36 |
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
| 37 |
RDF_FILE = os.path.join(BASE_DIR, "Ontologia.rdf")
|
| 38 |
-
HF_MODEL = "Qwen/Qwen2.5-72B-Instruct"
|
| 39 |
|
| 40 |
MAX_CLASSES = 30
|
| 41 |
MAX_PROPERTIES = 30
|
|
@@ -171,7 +171,7 @@ def prepare_retrieval():
|
|
| 171 |
else:
|
| 172 |
logger.info(f"File RDF trovato: {RDF_FILE}")
|
| 173 |
|
| 174 |
-
# Verifica se documents.json esiste, altrimenti
|
| 175 |
if not os.path.exists(DOCUMENTS_FILE):
|
| 176 |
logger.info(f"File {DOCUMENTS_FILE} non trovato. Estrazione dell'ontologia.")
|
| 177 |
try:
|
|
@@ -182,7 +182,7 @@ def prepare_retrieval():
|
|
| 182 |
else:
|
| 183 |
logger.info(f"File {DOCUMENTS_FILE} trovato.")
|
| 184 |
|
| 185 |
-
# Verifica se faiss.index esiste, altrimenti
|
| 186 |
if not os.path.exists(FAISS_INDEX_FILE):
|
| 187 |
logger.info(f"File {FAISS_INDEX_FILE} non trovato. Creazione dell'indice FAISS.")
|
| 188 |
try:
|
|
@@ -307,11 +307,11 @@ REGOLE STRINGENTI:
|
|
| 307 |
4) Se la domanda è generica (tipo 'Ciao, come stai?'), rispondi breve.
|
| 308 |
5) Se trovi risultati, la risposta finale deve essere la query SPARQL (una sola riga).
|
| 309 |
6) Se non trovi nulla, rispondi con 'Nessuna info.'
|
| 310 |
-
7) Non multiline. Esempio: PREFIX base: <...> SELECT ?x WHERE {
|
| 311 |
|
| 312 |
Esempio:
|
| 313 |
Utente: Chi ha creato l'opera 'Amore e Psiche'?
|
| 314 |
-
Risposta: PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettoMuseo#> SELECT ?creatore WHERE {
|
| 315 |
|
| 316 |
FINE REGOLE
|
| 317 |
"""
|
|
@@ -324,7 +324,7 @@ Ho ottenuto questi risultati SPARQL:
|
|
| 324 |
Ora fornisci una breve spiegazione museale (massimo ~10 righe), senza inventare oltre i risultati.
|
| 325 |
"""
|
| 326 |
|
| 327 |
-
async def call_hf_model(prompt: str, temperature=0.5, max_tokens=1024) -> str:
|
| 328 |
"""Chiama il modello Hugging Face e gestisce la risposta."""
|
| 329 |
logger.debug("Chiamo HF con il seguente prompt:")
|
| 330 |
content_preview = (prompt[:300] + '...') if len(prompt) > 300 else prompt
|
|
@@ -332,15 +332,17 @@ async def call_hf_model(prompt: str, temperature=0.5, max_tokens=1024) -> str:
|
|
| 332 |
try:
|
| 333 |
resp = client.text_generation(
|
| 334 |
model=HF_MODEL,
|
| 335 |
-
|
| 336 |
parameters={
|
| 337 |
"temperature": temperature,
|
| 338 |
"max_new_tokens": max_tokens,
|
| 339 |
"top_p": 0.9
|
| 340 |
}
|
| 341 |
)
|
| 342 |
-
# La struttura della risposta
|
| 343 |
-
raw = resp
|
|
|
|
|
|
|
| 344 |
# Forza la risposta su una singola linea se multilinea
|
| 345 |
single_line = " ".join(raw.splitlines())
|
| 346 |
logger.debug(f"Risposta HF single-line: {single_line}")
|
|
|
|
| 17 |
|
| 18 |
# Configura il logging
|
| 19 |
logging.basicConfig(
|
| 20 |
+
level=logging.INFO, # Riduci il livello di logging per migliorare le prestazioni
|
| 21 |
format="%(asctime)s - %(levelname)s - %(message)s",
|
| 22 |
handlers=[logging.FileHandler("app.log"), logging.StreamHandler()]
|
| 23 |
)
|
|
|
|
| 35 |
# Definisci i percorsi dei file
|
| 36 |
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
| 37 |
RDF_FILE = os.path.join(BASE_DIR, "Ontologia.rdf")
|
| 38 |
+
HF_MODEL = "Qwen/Qwen2.5-72B-Instruct" # Assicurati che il modello sia supportato
|
| 39 |
|
| 40 |
MAX_CLASSES = 30
|
| 41 |
MAX_PROPERTIES = 30
|
|
|
|
| 171 |
else:
|
| 172 |
logger.info(f"File RDF trovato: {RDF_FILE}")
|
| 173 |
|
| 174 |
+
# Verifica se documents.json esiste, altrimenti generarlo
|
| 175 |
if not os.path.exists(DOCUMENTS_FILE):
|
| 176 |
logger.info(f"File {DOCUMENTS_FILE} non trovato. Estrazione dell'ontologia.")
|
| 177 |
try:
|
|
|
|
| 182 |
else:
|
| 183 |
logger.info(f"File {DOCUMENTS_FILE} trovato.")
|
| 184 |
|
| 185 |
+
# Verifica se faiss.index esiste, altrimenti crearlo
|
| 186 |
if not os.path.exists(FAISS_INDEX_FILE):
|
| 187 |
logger.info(f"File {FAISS_INDEX_FILE} non trovato. Creazione dell'indice FAISS.")
|
| 188 |
try:
|
|
|
|
| 307 |
4) Se la domanda è generica (tipo 'Ciao, come stai?'), rispondi breve.
|
| 308 |
5) Se trovi risultati, la risposta finale deve essere la query SPARQL (una sola riga).
|
| 309 |
6) Se non trovi nulla, rispondi con 'Nessuna info.'
|
| 310 |
+
7) Non multiline. Esempio: PREFIX base: <...> SELECT ?x WHERE { ... }.
|
| 311 |
|
| 312 |
Esempio:
|
| 313 |
Utente: Chi ha creato l'opera 'Amore e Psiche'?
|
| 314 |
+
Risposta: PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettoMuseo#> SELECT ?creatore WHERE { ?opera base:hasName "Amore e Psiche" . ?opera base:creatoDa ?creatore . }
|
| 315 |
|
| 316 |
FINE REGOLE
|
| 317 |
"""
|
|
|
|
| 324 |
Ora fornisci una breve spiegazione museale (massimo ~10 righe), senza inventare oltre i risultati.
|
| 325 |
"""
|
| 326 |
|
| 327 |
+
async def call_hf_model(prompt: str, temperature: float = 0.5, max_tokens: int = 1024) -> str:
|
| 328 |
"""Chiama il modello Hugging Face e gestisce la risposta."""
|
| 329 |
logger.debug("Chiamo HF con il seguente prompt:")
|
| 330 |
content_preview = (prompt[:300] + '...') if len(prompt) > 300 else prompt
|
|
|
|
| 332 |
try:
|
| 333 |
resp = client.text_generation(
|
| 334 |
model=HF_MODEL,
|
| 335 |
+
prompt, # Passa il prompt come argomento posizionale
|
| 336 |
parameters={
|
| 337 |
"temperature": temperature,
|
| 338 |
"max_new_tokens": max_tokens,
|
| 339 |
"top_p": 0.9
|
| 340 |
}
|
| 341 |
)
|
| 342 |
+
# La struttura della risposta potrebbe variare; verifica il campo corretto
|
| 343 |
+
raw = resp.get("generated_text", "")
|
| 344 |
+
if not raw:
|
| 345 |
+
raise ValueError("Nessun testo generato dal modello.")
|
| 346 |
# Forza la risposta su una singola linea se multilinea
|
| 347 |
single_line = " ".join(raw.splitlines())
|
| 348 |
logger.debug(f"Risposta HF single-line: {single_line}")
|