mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-21 11:11:03 +02:00
Triples query
This commit is contained in:
parent
a8b621f32e
commit
e76cdc0f12
2 changed files with 147 additions and 0 deletions
34
test-triples-query-api
Executable file
34
test-triples-query-api
Executable file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
url = "http://localhost:8088/api/v1/"
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
input = {
|
||||||
|
"p": "http://www.w3.org/2000/01/rdf-schema#label",
|
||||||
|
"limit": 10
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = requests.post(
|
||||||
|
f"{url}triples-query",
|
||||||
|
json=input,
|
||||||
|
)
|
||||||
|
|
||||||
|
print(resp.text)
|
||||||
|
resp = resp.json()
|
||||||
|
|
||||||
|
|
||||||
|
print(resp)
|
||||||
|
if "error" in resp:
|
||||||
|
print(f"Error: {resp['error']}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print(resp["response"])
|
||||||
|
|
||||||
|
sys.exit(0)
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
|
@ -27,6 +27,10 @@ from trustgraph.schema import GraphRagQuery, GraphRagResponse
|
||||||
from trustgraph.schema import graph_rag_request_queue
|
from trustgraph.schema import graph_rag_request_queue
|
||||||
from trustgraph.schema import graph_rag_response_queue
|
from trustgraph.schema import graph_rag_response_queue
|
||||||
|
|
||||||
|
from trustgraph.schema import TriplesQueryRequest, TriplesQueryResponse, Value
|
||||||
|
from trustgraph.schema import triples_request_queue
|
||||||
|
from trustgraph.schema import triples_response_queue
|
||||||
|
|
||||||
logger = logging.getLogger("api")
|
logger = logging.getLogger("api")
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
|
@ -131,10 +135,22 @@ class Api:
|
||||||
JsonSchema(GraphRagResponse)
|
JsonSchema(GraphRagResponse)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.triples_query_out = Publisher(
|
||||||
|
pulsar_host, triples_request_queue,
|
||||||
|
schema=JsonSchema(TriplesQueryRequest)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.triples_query_in = Subscriber(
|
||||||
|
pulsar_host, triples_response_queue,
|
||||||
|
"api-gateway", "api-gateway",
|
||||||
|
JsonSchema(TriplesQueryResponse)
|
||||||
|
)
|
||||||
|
|
||||||
self.app.add_routes([
|
self.app.add_routes([
|
||||||
web.post("/api/v1/text-completion", self.llm),
|
web.post("/api/v1/text-completion", self.llm),
|
||||||
web.post("/api/v1/prompt", self.prompt),
|
web.post("/api/v1/prompt", self.prompt),
|
||||||
web.post("/api/v1/graph-rag", self.graph_rag),
|
web.post("/api/v1/graph-rag", self.graph_rag),
|
||||||
|
web.post("/api/v1/triples-query", self.triples_query),
|
||||||
])
|
])
|
||||||
|
|
||||||
async def llm(self, request):
|
async def llm(self, request):
|
||||||
|
|
@ -274,6 +290,96 @@ class Api:
|
||||||
finally:
|
finally:
|
||||||
await self.graph_rag_in.unsubscribe(id)
|
await self.graph_rag_in.unsubscribe(id)
|
||||||
|
|
||||||
|
async def triples_query(self, request):
|
||||||
|
|
||||||
|
id = str(uuid.uuid4())
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
data = await request.json()
|
||||||
|
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
q = await self.triples_query_in.subscribe(id)
|
||||||
|
|
||||||
|
if "s" in data:
|
||||||
|
if data["s"].startswith("http:") or data["s"].startswith("https:"):
|
||||||
|
s = Value(value=data["s"], is_uri=True)
|
||||||
|
else:
|
||||||
|
s = Value(value=data["s"], is_uri=True)
|
||||||
|
else:
|
||||||
|
s = None
|
||||||
|
|
||||||
|
if "p" in data:
|
||||||
|
if data["p"].startswith("http:") or data["p"].startswith("https:"):
|
||||||
|
p = Value(value=data["p"], is_uri=True)
|
||||||
|
else:
|
||||||
|
p = Value(value=data["p"], is_uri=True)
|
||||||
|
else:
|
||||||
|
p = None
|
||||||
|
|
||||||
|
if "o" in data:
|
||||||
|
if data["o"].startswith("http:") or data["o"].startswith("https:"):
|
||||||
|
o = Value(value=data["o"], is_uri=True)
|
||||||
|
else:
|
||||||
|
o = Value(value=data["o"], is_uri=True)
|
||||||
|
else:
|
||||||
|
o = None
|
||||||
|
|
||||||
|
limit = int(data.get("limit", 10000))
|
||||||
|
|
||||||
|
await self.triples_query_out.send(
|
||||||
|
id,
|
||||||
|
TriplesQueryRequest(
|
||||||
|
s = s, p = p, o = o,
|
||||||
|
limit = limit,
|
||||||
|
user = data.get("user", "trustgraph"),
|
||||||
|
collection = data.get("collection", "default"),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
resp = await asyncio.wait_for(q.get(), TIME_OUT)
|
||||||
|
except:
|
||||||
|
raise RuntimeError("Timeout waiting for response")
|
||||||
|
|
||||||
|
if resp.error:
|
||||||
|
return web.json_response(
|
||||||
|
{ "error": resp.error.message }
|
||||||
|
)
|
||||||
|
|
||||||
|
return web.json_response(
|
||||||
|
{
|
||||||
|
"response": [
|
||||||
|
{
|
||||||
|
"s": {
|
||||||
|
"v": t.s.value,
|
||||||
|
"e": t.s.is_uri,
|
||||||
|
},
|
||||||
|
"p": {
|
||||||
|
"v": t.p.value,
|
||||||
|
"e": t.p.is_uri,
|
||||||
|
},
|
||||||
|
"o": {
|
||||||
|
"v": t.o.value,
|
||||||
|
"e": t.o.is_uri,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for t in resp.triples
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Exception: {e}")
|
||||||
|
|
||||||
|
return web.json_response(
|
||||||
|
{ "error": str(e) }
|
||||||
|
)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
await self.graph_rag_in.unsubscribe(id)
|
||||||
|
|
||||||
async def app_factory(self):
|
async def app_factory(self):
|
||||||
|
|
||||||
self.llm_pub_task = asyncio.create_task(self.llm_in.run())
|
self.llm_pub_task = asyncio.create_task(self.llm_in.run())
|
||||||
|
|
@ -285,6 +391,13 @@ class Api:
|
||||||
self.graph_rag_pub_task = asyncio.create_task(self.graph_rag_in.run())
|
self.graph_rag_pub_task = asyncio.create_task(self.graph_rag_in.run())
|
||||||
self.graph_rag_sub_task = asyncio.create_task(self.graph_rag_out.run())
|
self.graph_rag_sub_task = asyncio.create_task(self.graph_rag_out.run())
|
||||||
|
|
||||||
|
self.triples_query_pub_task = asyncio.create_task(
|
||||||
|
self.triples_query_in.run()
|
||||||
|
)
|
||||||
|
self.triples_query_sub_task = asyncio.create_task(
|
||||||
|
self.triples_query_out.run()
|
||||||
|
)
|
||||||
|
|
||||||
return self.app
|
return self.app
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue