|
import inspect |
|
import os |
|
from naptha_sdk.agent_service_engine import run_agent_service |
|
from naptha_sdk.code_extraction import create_poetry_package, extract_packages, install_poetry_packages, publish_hf_package, transform_code_as |
|
from naptha_sdk.schemas import ModuleRunInput |
|
from naptha_sdk.utils import get_logger, AsyncMixin |
|
|
|
logger = get_logger(__name__) |
|
|
|
class AgentService(AsyncMixin): |
|
def __init__(self, name, fn, worker_node, orchestrator_node, flow_run=None): |
|
self.name = name |
|
self.fn = fn |
|
if isinstance(self.fn, str): |
|
self.module_name = self.fn |
|
else: |
|
self.module_name = self.fn.__name__ |
|
self.worker_node = worker_node |
|
self.orchestrator_node = orchestrator_node |
|
self.flow_run = flow_run |
|
self.repo_id = f"as_{self.module_name}" |
|
super().__init__() |
|
|
|
async def __ainit__(self): |
|
self.publish_package() |
|
await self.register_module() |
|
await self.register_service() |
|
|
|
def publish_package(self, naptha): |
|
logger.info(f"Publishing Package...") |
|
as_code = inspect.getsource(self.fn) |
|
as_code = transform_code_as(as_code) |
|
packages = extract_packages(as_code) |
|
logger.info(f"PACKAGES: {packages}") |
|
create_poetry_package(self.module_name) |
|
install_poetry_packages(self.module_name, packages) |
|
publish_hf_package(naptha.hf, self.module_name, self.repo_id, as_code, naptha.hf_username) |
|
|
|
async def register_module(self, naptha): |
|
module_config = { |
|
"name": self.module_name, |
|
"description": self.module_name, |
|
"author": f"user:{naptha.hf_username}", |
|
"url": f"https://huggingface.co/{naptha.hf_username}/{self.repo_id}", |
|
"type": "template" |
|
} |
|
logger.info(f"Registering Agent Module {module_config}") |
|
module = await naptha.hub.create_module(module_config) |
|
|
|
async def register_service(self, naptha): |
|
agent_service_name = self.name |
|
agent_service_config = { |
|
"name": agent_service_name, |
|
"description": agent_service_name, |
|
"module_name": self.module_name, |
|
"worker_node_url": self.worker_node.node_url, |
|
} |
|
logger.info(f"Registering Agent Service {agent_service_config}") |
|
service = await naptha.hub.create_service(agent_service_config) |
|
|
|
async def __call__(self, *args, **kwargs): |
|
return await run_agent_service(agent_service=self, flow_run=self.flow_run, parameters=kwargs) |
|
|