OpenSpace / openspace /grounding /core /tool /local_tool.py
darkfire514's picture
Upload 160 files
399b80c verified
"""
LocalTool.
Executes entirely inside this Python process.
"""
import asyncio
from typing import Any
from .base import BaseTool
class LocalTool(BaseTool):
def _run(self, **kwargs):
raise NotImplementedError
async def _dispatch_run(self, **kwargs) -> Any:
# Prefer subclass's own _arun if it was overridden
if self.__class__._arun is not LocalTool._arun:
return await super()._arun(**kwargs)
# Else fall back to thread-pooled _run if provided
if self.__class__._run is not LocalTool._run:
loop = asyncio.get_running_loop()
return await loop.run_in_executor(None, lambda: self._run(**kwargs))
raise NotImplementedError(
f"{self.__class__.__name__} must implement _run() or _arun()"
)
async def _arun(self, **kwargs):
return await self._dispatch_run(**kwargs)