Spaces:
Paused
Paused
File size: 1,613 Bytes
8d1819a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import asyncio
from python.helpers.tool import Tool, Response
from python.helpers.document_query import DocumentQueryHelper
class DocumentQueryTool(Tool):
async def execute(self, **kwargs):
document_uri = kwargs.get("document")
document_uris = []
if isinstance(document_uri, list):
document_uris = document_uri
elif isinstance(document_uri, str):
document_uris = [document_uri]
if not document_uris:
return Response(message="Error: no document provided", break_loop=False)
queries = (
kwargs["queries"]
if "queries" in kwargs
else [kwargs["query"]]
if ("query" in kwargs and kwargs["query"])
else []
)
try:
progress = []
# logging callback
def progress_callback(msg):
progress.append(msg)
self.log.update(progress="\n".join(progress))
helper = DocumentQueryHelper(self.agent, progress_callback)
if not queries:
contents = await asyncio.gather(
*[helper.document_get_content(uri) for uri in document_uris]
)
content = "\n\n---\n\n".join(contents)
else:
_, content = await helper.document_qa(document_uris, queries)
return Response(message=content, break_loop=False)
except Exception as e: # pylint: disable=broad-exception-caught
return Response(message=f"Error processing document: {e}", break_loop=False)
|