Update app.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
return {
|
113 |
"query": None,
|
114 |
-
"explanation": "Non posso generare una query SPARQL per questa richiesta
|
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):
|