AshenClock commited on
Commit
e623027
·
verified ·
1 Parent(s): ee1f7e6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -2
app.py CHANGED
@@ -29,6 +29,9 @@ def load_rdf_summary():
29
  properties = set()
30
 
31
  for s, _, o in g.triples((None, None, None)):
 
 
 
32
  if "Class" in str(o) or "rdfs:Class" in str(o):
33
  classes.add(s)
34
  if "Property" in str(o):
@@ -71,8 +74,14 @@ def create_system_message(rdf_context):
71
  Sei un assistente esperto nella generazione di query SPARQL basate su ontologie RDF.
72
  Ecco un riassunto dell'ontologia su cui devi lavorare:
73
  {rdf_context}
 
74
  Il tuo compito:
75
  - Genera esclusivamente query SPARQL valide in UNA SOLA RIGA.
 
 
 
 
 
76
  - Rispondi solo se la domanda è pertinente alle classi e proprietà fornite.
77
  - Se non puoi rispondere, di': "Non posso generare una query SPARQL per questa richiesta."
78
  """
@@ -97,6 +106,7 @@ async def generate_response(message, max_tokens, temperature):
97
  stream=False
98
  )
99
  logger.info("Raw Response: %s", response)
 
100
  return response['choices'][0]['message']['content'].replace("\n", " ").strip()
101
  except Exception as e:
102
  logger.error(f"Errore nell'elaborazione: {str(e)}")
@@ -108,10 +118,19 @@ async def generate_query(request: QueryRequest):
108
  response = await generate_response(request.message, request.max_tokens, request.temperature)
109
  logger.info("Risposta generata dal modello: %s", response)
110
 
111
- if not (response.startswith("SELECT") or response.startswith("ASK")):
 
 
 
 
 
 
 
 
 
112
  return {
113
  "query": None,
114
- "explanation": "Non posso generare una query SPARQL per questa richiesta. Assicurati che la domanda sia coerente con i dati RDF forniti."
115
  }
116
 
117
  if not validate_sparql_query(response, RDF_FILE):
 
29
  properties = set()
30
 
31
  for s, _, o in g.triples((None, None, None)):
32
+ # Si fa un controllo basilare per capire se l'oggetto
33
+ # è una definizione di classe o proprietà
34
+ # In RDF/OWL reali si userebbero approcci più rigorosi (rdfs:Class, rdf:Property, etc.)
35
  if "Class" in str(o) or "rdfs:Class" in str(o):
36
  classes.add(s)
37
  if "Property" in str(o):
 
74
  Sei un assistente esperto nella generazione di query SPARQL basate su ontologie RDF.
75
  Ecco un riassunto dell'ontologia su cui devi lavorare:
76
  {rdf_context}
77
+
78
  Il tuo compito:
79
  - Genera esclusivamente query SPARQL valide in UNA SOLA RIGA.
80
+ - Usa SEMPRE il prefisso:
81
+ PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/2024/11/untitled-ontology-39/>
82
+ e fai seguire la SELECT sulla STESSA riga, per esempio:
83
+ PREFIX base: <...> SELECT ...
84
+ - Usa i nomi abbreviati con 'base:' invece di URI complete. Esempio: base:Stanza, base:Contiene, ecc.
85
  - Rispondi solo se la domanda è pertinente alle classi e proprietà fornite.
86
  - Se non puoi rispondere, di': "Non posso generare una query SPARQL per questa richiesta."
87
  """
 
106
  stream=False
107
  )
108
  logger.info("Raw Response: %s", response)
109
+ # Rimuoviamo eventuali a-capo così da avere una singola riga
110
  return response['choices'][0]['message']['content'].replace("\n", " ").strip()
111
  except Exception as e:
112
  logger.error(f"Errore nell'elaborazione: {str(e)}")
 
118
  response = await generate_response(request.message, request.max_tokens, request.temperature)
119
  logger.info("Risposta generata dal modello: %s", response)
120
 
121
+ # Controllo basilare: la query deve iniziare con 'PREFIX' (come da istruzioni)
122
+ # e successivamente con 'SELECT' o 'ASK'
123
+ if not response.startswith("PREFIX"):
124
+ return {
125
+ "query": None,
126
+ "explanation": "Non posso generare una query SPARQL per questa richiesta (manca il PREFIX)."
127
+ }
128
+
129
+ # Potresti anche voler controllare se c'è 'SELECT' o 'ASK' dopo 'PREFIX ...'
130
+ if "SELECT" not in response and "ASK" not in response:
131
  return {
132
  "query": None,
133
+ "explanation": "Non posso generare una query SPARQL per questa richiesta (manca SELECT/ASK)."
134
  }
135
 
136
  if not validate_sparql_query(response, RDF_FILE):