richardblythman's picture
Upload folder using huggingface_hub
4ae0b03 verified
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)