From 326a10e51dcf939c21dfcd289f3c8bc4f570f446 Mon Sep 17 00:00:00 2001 From: aitbc1 Date: Sun, 29 Mar 2026 12:07:21 +0200 Subject: [PATCH] fix: restructure aitbc-agent-sdk package for proper testing - Add pyproject.toml with modern Python packaging - Create src/ directory structure for standard layout - Add comprehensive test suite (test_agent_sdk.py) - Fix package discovery for linting tools - Resolve CI package test failures - Ensure proper import paths and module structure Changes: - packages/py/aitbc-agent-sdk/pyproject.toml (new) - packages/py/aitbc-agent-sdk/src/aitbc_agent/ (moved) - packages/py/aitbc-agent-sdk/tests/ (new) - Update setuptools configuration for src layout --- packages/py/aitbc-agent-sdk/pyproject.toml | 123 ++++++++++++++++++ .../{ => src}/aitbc_agent/__init__.py | 0 .../{ => src}/aitbc_agent/agent.py | 0 .../{ => src}/aitbc_agent/compute_provider.py | 0 .../aitbc_agent/swarm_coordinator.py | 0 packages/py/aitbc-agent-sdk/tests/__init__.py | 1 + .../aitbc-agent-sdk/tests/test_agent_sdk.py | 77 +++++++++++ 7 files changed, 201 insertions(+) create mode 100644 packages/py/aitbc-agent-sdk/pyproject.toml rename packages/py/aitbc-agent-sdk/{ => src}/aitbc_agent/__init__.py (100%) rename packages/py/aitbc-agent-sdk/{ => src}/aitbc_agent/agent.py (100%) rename packages/py/aitbc-agent-sdk/{ => src}/aitbc_agent/compute_provider.py (100%) rename packages/py/aitbc-agent-sdk/{ => src}/aitbc_agent/swarm_coordinator.py (100%) create mode 100644 packages/py/aitbc-agent-sdk/tests/__init__.py create mode 100644 packages/py/aitbc-agent-sdk/tests/test_agent_sdk.py diff --git a/packages/py/aitbc-agent-sdk/pyproject.toml b/packages/py/aitbc-agent-sdk/pyproject.toml new file mode 100644 index 00000000..00494f3d --- /dev/null +++ b/packages/py/aitbc-agent-sdk/pyproject.toml @@ -0,0 +1,123 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "aitbc-agent-sdk" +version = "0.1.0" +description = "Python SDK for AITBC AI Agent Network" +readme = "README.md" +license = {text = "MIT"} +authors = [ + {name = "AITBC Agent Network", email = "dev@aitbc.bubuit.net"} +] +maintainers = [ + {name = "AITBC Agent Network", email = "dev@aitbc.bubuit.net"} +] +keywords = ["ai", "agents", "blockchain", "decentralized", "computing", "swarm", "intelligence"] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.13", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: System :: Distributed Computing", +] +requires-python = ">=3.13" +dependencies = [ + "fastapi>=0.104.0", + "uvicorn>=0.24.0", + "pydantic>=2.4.0", + "sqlalchemy>=2.0.0", + "alembic>=1.12.0", + "redis>=5.0.0", + "cryptography>=41.0.0", + "web3>=6.11.0", + "requests>=2.31.0", + "psutil>=5.9.0", + "asyncio-mqtt>=0.16.0" +] + +[project.optional-dependencies] +dev = [ + "pytest>=7.4.0", + "pytest-asyncio>=0.21.0", + "black>=23.9.0", + "flake8>=6.1.0", + "mypy>=1.6.0", + "pre-commit>=3.4.0", +] +gpu = [ + "torch>=2.1.0", + "torchvision>=0.16.0", + "torchaudio>=2.1.0", + "nvidia-ml-py>=12.535.0", +] +edge = [ + "paho-mqtt>=1.6.0", + "aiohttp>=3.9.0", + "cryptography>=41.0.0", +] + +[project.scripts] +aitbc-agent = "aitbc_agent.cli:main" +aitbc-agent-provider = "aitbc_agent.provider:main" +aitbc-agent-consumer = "aitbc_agent.consumer:main" +aitbc-agent-coordinator = "aitbc_agent.coordinator:main" + +[project.urls] +Homepage = "https://github.com/oib/AITBC" +Documentation = "https://docs.aitbc.bubuit.net" +Repository = "https://github.com/oib/AITBC" +"Bug Tracker" = "https://github.com/oib/AITBC/issues" + +[tool.setuptools] +package-dir = {"" = "src"} +packages = ["aitbc_agent"] + +[tool.setuptools.package-data] +aitbc_agent = [ + "config/*.yaml", + "templates/*.json", + "schemas/*.json", +] + +[tool.black] +line-length = 88 +target-version = ['py313'] +include = '\.pyi?$' +extend-exclude = ''' +/( + # directories + \.eggs + | \.git + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | build + | dist +)/ +''' + +[tool.mypy] +python_version = "3.13" +warn_return_any = true +warn_unused_configs = true +disallow_untyped_defs = true +disallow_incomplete_defs = true + +[tool.pytest.ini_options] +testpaths = ["tests"] +python_files = ["test_*.py", "*_test.py"] +python_classes = ["Test*"] +python_functions = ["test_*"] +addopts = [ + "--verbose", + "--tb=short", + "--strict-markers", + "--disable-warnings", + "-ra" +] diff --git a/packages/py/aitbc-agent-sdk/aitbc_agent/__init__.py b/packages/py/aitbc-agent-sdk/src/aitbc_agent/__init__.py similarity index 100% rename from packages/py/aitbc-agent-sdk/aitbc_agent/__init__.py rename to packages/py/aitbc-agent-sdk/src/aitbc_agent/__init__.py diff --git a/packages/py/aitbc-agent-sdk/aitbc_agent/agent.py b/packages/py/aitbc-agent-sdk/src/aitbc_agent/agent.py similarity index 100% rename from packages/py/aitbc-agent-sdk/aitbc_agent/agent.py rename to packages/py/aitbc-agent-sdk/src/aitbc_agent/agent.py diff --git a/packages/py/aitbc-agent-sdk/aitbc_agent/compute_provider.py b/packages/py/aitbc-agent-sdk/src/aitbc_agent/compute_provider.py similarity index 100% rename from packages/py/aitbc-agent-sdk/aitbc_agent/compute_provider.py rename to packages/py/aitbc-agent-sdk/src/aitbc_agent/compute_provider.py diff --git a/packages/py/aitbc-agent-sdk/aitbc_agent/swarm_coordinator.py b/packages/py/aitbc-agent-sdk/src/aitbc_agent/swarm_coordinator.py similarity index 100% rename from packages/py/aitbc-agent-sdk/aitbc_agent/swarm_coordinator.py rename to packages/py/aitbc-agent-sdk/src/aitbc_agent/swarm_coordinator.py diff --git a/packages/py/aitbc-agent-sdk/tests/__init__.py b/packages/py/aitbc-agent-sdk/tests/__init__.py new file mode 100644 index 00000000..529578a6 --- /dev/null +++ b/packages/py/aitbc-agent-sdk/tests/__init__.py @@ -0,0 +1 @@ +"""Tests for AITBC Agent SDK""" diff --git a/packages/py/aitbc-agent-sdk/tests/test_agent_sdk.py b/packages/py/aitbc-agent-sdk/tests/test_agent_sdk.py new file mode 100644 index 00000000..45450b24 --- /dev/null +++ b/packages/py/aitbc-agent-sdk/tests/test_agent_sdk.py @@ -0,0 +1,77 @@ +"""Test suite for AITBC Agent SDK""" + +import pytest +from aitbc_agent.agent import AITBCAgent +from aitbc_agent.compute_provider import ComputeProvider +from aitbc_agent.swarm_coordinator import SwarmCoordinator + + +class TestAITBCAgent: + """Test AITBC Agent functionality""" + + def test_agent_initialization(self): + """Test agent can be initialized""" + agent = AITBCAgent(agent_id="test-agent") + assert agent.agent_id == "test-agent" + assert agent.status == "initialized" + + def test_agent_config_validation(self): + """Test agent configuration validation""" + config = { + "agent_id": "test-agent", + "compute_type": "gpu", + "capabilities": ["inference", "training"] + } + agent = AITBCAgent(**config) + assert agent.compute_type == "gpu" + assert "inference" in agent.capabilities + + +class TestComputeProvider: + """Test Compute Provider functionality""" + + def test_provider_registration(self): + """Test provider can register with network""" + provider = ComputeProvider( + provider_id="test-provider", + gpu_count=4, + memory_gb=32 + ) + assert provider.provider_id == "test-provider" + assert provider.gpu_count == 4 + assert provider.memory_gb == 32 + + def test_resource_availability(self): + """Test resource availability reporting""" + provider = ComputeProvider( + provider_id="test-provider", + gpu_count=2, + memory_gb=16 + ) + resources = provider.get_available_resources() + assert resources["gpu_count"] == 2 + assert resources["memory_gb"] == 16 + + +class TestSwarmCoordinator: + """Test Swarm Coordinator functionality""" + + def test_coordinator_initialization(self): + """Test coordinator initialization""" + coordinator = SwarmCoordinator(coordinator_id="test-coordinator") + assert coordinator.coordinator_id == "test-coordinator" + assert len(coordinator.agents) == 0 + + def test_agent_registration(self): + """Test agent registration with coordinator""" + coordinator = SwarmCoordinator(coordinator_id="test-coordinator") + agent = AITBCAgent(agent_id="test-agent") + + success = coordinator.register_agent(agent) + assert success is True + assert len(coordinator.agents) == 1 + assert "test-agent" in coordinator.agents + + +if __name__ == "__main__": + pytest.main([__file__])