trustgraph/trustgraph-flow/trustgraph/retrieval/document_rag/document_rag.py

95 lines
2.2 KiB
Python
Raw Normal View History

2025-04-22 10:52:11 +01:00
import asyncio
LABEL="http://www.w3.org/2000/01/rdf-schema#label"
class Query:
def __init__(
self, rag, user, collection, verbose,
doc_limit=20
):
self.rag = rag
self.user = user
self.collection = collection
self.verbose = verbose
self.doc_limit = doc_limit
2025-04-22 10:52:11 +01:00
async def get_vector(self, query):
if self.verbose:
print("Compute embeddings...", flush=True)
2025-04-22 10:52:11 +01:00
qembeds = await self.rag.embeddings_client.embed(query)
if self.verbose:
print("Done.", flush=True)
return qembeds
2025-04-22 10:52:11 +01:00
async def get_docs(self, query):
2025-04-22 10:52:11 +01:00
vectors = await self.get_vector(query)
if self.verbose:
2025-04-22 10:52:11 +01:00
print("Get docs...", flush=True)
2025-04-22 10:52:11 +01:00
docs = await self.rag.doc_embeddings_client.query(
vectors, limit=self.doc_limit,
user=self.user, collection=self.collection,
)
if self.verbose:
print("Docs:", flush=True)
for doc in docs:
print(doc, flush=True)
return docs
class DocumentRag:
def __init__(
2025-04-22 10:52:11 +01:00
self, prompt_client, embeddings_client, doc_embeddings_client,
verbose=False,
):
2025-04-22 10:52:11 +01:00
self.verbose = verbose
2025-04-22 10:52:11 +01:00
self.prompt_client = prompt_client
self.embeddings_client = embeddings_client
self.doc_embeddings_client = doc_embeddings_client
if self.verbose:
print("Initialised", flush=True)
2025-04-22 10:52:11 +01:00
async def query(
self, query, user="trustgraph", collection="default",
doc_limit=20,
):
if self.verbose:
print("Construct prompt...", flush=True)
q = Query(
rag=self, user=user, collection=collection, verbose=self.verbose,
doc_limit=doc_limit
)
2025-04-22 10:52:11 +01:00
docs = await q.get_docs(query)
if self.verbose:
print("Invoke LLM...", flush=True)
print(docs)
print(query)
2025-04-22 10:52:11 +01:00
resp = await self.prompt_client.document_prompt(
query = query,
documents = docs
)
if self.verbose:
print("Done", flush=True)
return resp