AshenClock commited on
Commit
3aa01bd
·
verified ·
1 Parent(s): 2ecaeab

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -18
app.py CHANGED
@@ -8,7 +8,7 @@ from typing import Optional
8
 
9
  # Configurazione logging
10
  logging.basicConfig(
11
- level=logging.INFO,
12
  format="%(asctime)s - %(levelname)s - %(message)s",
13
  handlers=[
14
  logging.FileHandler("app.log"),
@@ -63,7 +63,7 @@ def load_rdf_summary():
63
  return "Errore nel caricamento del file RDF."
64
 
65
  rdf_context = load_rdf_summary()
66
- logger.info(f"RDF Summary:\n{rdf_context}")
67
 
68
  ####################################
69
  # Validazione SPARQL
@@ -92,14 +92,14 @@ def create_system_message(rdf_context: str) -> str:
92
  """
93
  return f"""
94
  Sei un'assistente esperta nella generazione di query SPARQL basate su un'ontologia RDF, nell'interpretazione dei risultati delle query SPARQL in risposte naturali, e nel fare chatting minimale con i visitatori. In base alla domanda dell'utente, devi decidere se:
95
-
96
  1. Generare una query SPARQL per interrogare la base di conoscenza.
97
  2. Fornire una risposta naturale basata sui risultati di una query SPARQL.
98
  3. Rispondere con una risposta di chat minimale.
99
-
100
  Ecco un riassunto dell'ontologia su cui devi lavorare:
101
  {rdf_context}
102
-
103
  Regole TASSATIVE:
104
  1. Se la domanda richiede una query SPARQL, restituisci la query SPARQL come testo semplice.
105
  2. Se la domanda richiede l'interpretazione di risultati SPARQL, restituisci una risposta naturale basata sui risultati.
@@ -109,20 +109,28 @@ Regole TASSATIVE:
109
  5. NON generare alcun altro prefisso o URI inventato.
110
  6. Se non puoi rispondere con una query SPARQL valida, interpretare i risultati o fare chatting, scrivi:
111
  "Non posso generare una query SPARQL, interpretare i risultati o fare una risposta di chat per questa richiesta."
112
-
113
  Esempi:
114
  - Domanda: "Quali sono le statue esposte del periodo medievale?"
115
  Risposta:
116
- PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/2024/11/untitled-ontology-39/> SELECT ?statua WHERE {{ ?statua a base:Statua . ?statua base:Periodo_Storico "Medioevo" . }}
117
-
118
  - Domanda: "La query ha restituito 5 statue. Puoi descriverle?"
119
  Risposta:
120
  Ecco le 5 statue medievali trovate: Statua1, Statua2, Statua3, Statua4, Statua5.
121
-
122
  - Domanda: "Ciao!"
123
  Risposta:
124
- Ciao! Come posso aiutarti oggi?
125
-
 
 
 
 
 
 
 
 
126
  RISPONDI ESCLUSIVAMENTE CON IL FORMATO SPECIFICATO.
127
  """
128
 
@@ -144,7 +152,7 @@ async def call_model(messages, temperature=0.7, max_tokens=2048):
144
  stream=False
145
  )
146
  raw_text = response["choices"][0]["message"]["content"]
147
- logger.info(f"Risposta del modello ricevuta: {raw_text}")
148
  # Rimuoviamo eventuali newline per forzare la singola riga
149
  return raw_text.replace("\n", " ").strip()
150
  except Exception as e:
@@ -174,12 +182,12 @@ Mi hai fornito i seguenti risultati di una query SPARQL:
174
 
175
  Per favore, interpreta questi risultati e fornisci una risposta naturale ed enfatica come farebbe una guida museale femminile.
176
  """
177
-
178
  messages = [
179
  {"role": "system", "content": interpret_prompt},
180
  {"role": "user", "content": ""}
181
  ]
182
-
183
  logger.info("Invio dei risultati SPARQL al modello per l'interpretazione.")
184
  natural_response = await call_model(messages, temperature=0.7, max_tokens=2048)
185
  logger.info(f"Risposta interpretata ricevuta dal modello: {natural_response}")
@@ -199,7 +207,7 @@ class QueryRequest(BaseModel):
199
  async def generate_response(request: QueryRequest):
200
  user_msg = request.message
201
  logger.info(f"Ricevuta richiesta: {user_msg}")
202
-
203
  # 1) Generazione della risposta (SPARQL, INTERPRET o CHAT)
204
  system_msg = create_system_message(rdf_context)
205
  messages = [
@@ -207,9 +215,9 @@ async def generate_response(request: QueryRequest):
207
  {"role": "user", "content": user_msg}
208
  ]
209
  response_text = await call_model(messages, request.temperature, request.max_tokens)
210
-
211
  logger.info(f"Risposta generata dal modello: {response_text}")
212
-
213
  # 2) Determinazione se la risposta è una query SPARQL
214
  if response_text.startswith("PREFIX base:"):
215
  sparql_query = response_text
@@ -246,4 +254,4 @@ async def generate_response(request: QueryRequest):
246
 
247
  @app.get("/")
248
  async def root():
249
- return {"message": "Server attivo e pronto a generare risposte!"}
 
8
 
9
  # Configurazione logging
10
  logging.basicConfig(
11
+ level=logging.DEBUG, # Livello di log aumentato per più dettagli
12
  format="%(asctime)s - %(levelname)s - %(message)s",
13
  handlers=[
14
  logging.FileHandler("app.log"),
 
63
  return "Errore nel caricamento del file RDF."
64
 
65
  rdf_context = load_rdf_summary()
66
+ logger.debug(f"RDF Summary:\n{rdf_context}")
67
 
68
  ####################################
69
  # Validazione SPARQL
 
92
  """
93
  return f"""
94
  Sei un'assistente esperta nella generazione di query SPARQL basate su un'ontologia RDF, nell'interpretazione dei risultati delle query SPARQL in risposte naturali, e nel fare chatting minimale con i visitatori. In base alla domanda dell'utente, devi decidere se:
95
+
96
  1. Generare una query SPARQL per interrogare la base di conoscenza.
97
  2. Fornire una risposta naturale basata sui risultati di una query SPARQL.
98
  3. Rispondere con una risposta di chat minimale.
99
+
100
  Ecco un riassunto dell'ontologia su cui devi lavorare:
101
  {rdf_context}
102
+
103
  Regole TASSATIVE:
104
  1. Se la domanda richiede una query SPARQL, restituisci la query SPARQL come testo semplice.
105
  2. Se la domanda richiede l'interpretazione di risultati SPARQL, restituisci una risposta naturale basata sui risultati.
 
109
  5. NON generare alcun altro prefisso o URI inventato.
110
  6. Se non puoi rispondere con una query SPARQL valida, interpretare i risultati o fare chatting, scrivi:
111
  "Non posso generare una query SPARQL, interpretare i risultati o fare una risposta di chat per questa richiesta."
112
+
113
  Esempi:
114
  - Domanda: "Quali sono le statue esposte del periodo medievale?"
115
  Risposta:
116
+ PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/2024/11/untitled-ontology-39/> SELECT ?statua WHERE { ?statua a base:Statua . ?statua base:Periodo_Storico "Medioevo" . }
117
+
118
  - Domanda: "La query ha restituito 5 statue. Puoi descriverle?"
119
  Risposta:
120
  Ecco le 5 statue medievali trovate: Statua1, Statua2, Statua3, Statua4, Statua5.
121
+
122
  - Domanda: "Ciao!"
123
  Risposta:
124
+ Ciao! Benvenuto al nostro museo. Come posso aiutarti oggi?
125
+
126
+ - Domanda: "Qual è la tua opinione sull'arte moderna?"
127
+ Risposta:
128
+ L'arte moderna è un'espressione affascinante e varia che riflette le dinamiche sociali e culturali contemporanee.
129
+
130
+ - Domanda: "Come funziona questa installazione?"
131
+ Risposta:
132
+ Questa installazione interattiva ti permette di esplorare diverse opere d'arte attraverso interazioni digitali. Basta avvicinarti e seguire le istruzioni sullo schermo.
133
+
134
  RISPONDI ESCLUSIVAMENTE CON IL FORMATO SPECIFICATO.
135
  """
136
 
 
152
  stream=False
153
  )
154
  raw_text = response["choices"][0]["message"]["content"]
155
+ logger.debug(f"Risposta del modello ricevuta: {raw_text}")
156
  # Rimuoviamo eventuali newline per forzare la singola riga
157
  return raw_text.replace("\n", " ").strip()
158
  except Exception as e:
 
182
 
183
  Per favore, interpreta questi risultati e fornisci una risposta naturale ed enfatica come farebbe una guida museale femminile.
184
  """
185
+
186
  messages = [
187
  {"role": "system", "content": interpret_prompt},
188
  {"role": "user", "content": ""}
189
  ]
190
+
191
  logger.info("Invio dei risultati SPARQL al modello per l'interpretazione.")
192
  natural_response = await call_model(messages, temperature=0.7, max_tokens=2048)
193
  logger.info(f"Risposta interpretata ricevuta dal modello: {natural_response}")
 
207
  async def generate_response(request: QueryRequest):
208
  user_msg = request.message
209
  logger.info(f"Ricevuta richiesta: {user_msg}")
210
+
211
  # 1) Generazione della risposta (SPARQL, INTERPRET o CHAT)
212
  system_msg = create_system_message(rdf_context)
213
  messages = [
 
215
  {"role": "user", "content": user_msg}
216
  ]
217
  response_text = await call_model(messages, request.temperature, request.max_tokens)
218
+
219
  logger.info(f"Risposta generata dal modello: {response_text}")
220
+
221
  # 2) Determinazione se la risposta è una query SPARQL
222
  if response_text.startswith("PREFIX base:"):
223
  sparql_query = response_text
 
254
 
255
  @app.get("/")
256
  async def root():
257
+ return {"message": "Server attivo e pronto a generare risposte!"}