mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
fix: resolve all I001 import sorting errors across monorepo
Auto-fix 75 import sorting violations detected by ruff check across hanzo-mcp, hanzo-network, hanzo-tools-*, and other packages. Verified clean with both ruff 0.14.6 and 0.14.14 (CI version).
This commit is contained in:
@@ -13,12 +13,12 @@ import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
from hanzo_mcp.tools.common.batch_tool import BatchTool
|
||||
from hanzo_tools.agent.agent_tool import AgentTool
|
||||
from hanzo_tools.agent.swarm_tool import SwarmTool
|
||||
from hanzo_tools.filesystem import DirectoryTree, Read, Write
|
||||
from mcp.server.fastmcp import Context as MCPContext
|
||||
|
||||
from hanzo_mcp.tools.common.batch_tool import BatchTool
|
||||
from hanzo_mcp.tools.common.permissions import PermissionManager
|
||||
|
||||
|
||||
|
||||
@@ -9,10 +9,11 @@ This example shows how to:
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
|
||||
from hanzo_network import (
|
||||
create_agent,
|
||||
create_tool,
|
||||
create_distributed_network,
|
||||
create_tool,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -2,11 +2,12 @@
|
||||
"""Demo of hanzo-network with local LLM (Ollama)."""
|
||||
|
||||
import asyncio
|
||||
|
||||
from hanzo_network import (
|
||||
check_local_llm_status,
|
||||
create_local_agent,
|
||||
create_local_distributed_network,
|
||||
create_tool,
|
||||
check_local_llm_status,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
"""Test distributed network functionality."""
|
||||
|
||||
import asyncio
|
||||
from hanzo_network import create_distributed_network, create_agent, create_tool
|
||||
|
||||
from hanzo_network import create_agent, create_distributed_network, create_tool
|
||||
|
||||
|
||||
async def echo_tool(message: str) -> str:
|
||||
|
||||
@@ -18,26 +18,27 @@ from .distributed_network import (
|
||||
create_distributed_network,
|
||||
)
|
||||
|
||||
# Import LLM providers
|
||||
from .llm import HanzoNetProvider, LocalLLMProvider, MLXProvider, OllamaProvider
|
||||
from .local_network import (
|
||||
check_local_llm_status,
|
||||
create_local_agent,
|
||||
create_local_distributed_network,
|
||||
check_local_llm_status,
|
||||
)
|
||||
|
||||
# Import LLM providers
|
||||
from .llm import HanzoNetProvider, LocalLLMProvider, OllamaProvider, MLXProvider
|
||||
|
||||
# Local compute capabilities
|
||||
try:
|
||||
from .local_compute import (
|
||||
InferenceRequest,
|
||||
LocalComputeNode,
|
||||
LocalComputeOrchestrator,
|
||||
InferenceRequest,
|
||||
InferenceResult as LocalInferenceResult,
|
||||
ModelConfig,
|
||||
ModelProvider,
|
||||
orchestrator,
|
||||
)
|
||||
from .local_compute import (
|
||||
InferenceResult as LocalInferenceResult,
|
||||
)
|
||||
|
||||
LOCAL_COMPUTE_AVAILABLE = True
|
||||
except ImportError:
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
"""Agent implementation for Hanzo Network."""
|
||||
|
||||
from typing import Any, Dict, List, Optional, Callable, Union
|
||||
from dataclasses import dataclass, field
|
||||
from enum import Enum
|
||||
from typing import Any, Callable, Dict, List, Optional, Union
|
||||
|
||||
from .state import Message, NetworkState
|
||||
from .tool import Tool
|
||||
from .state import NetworkState, Message
|
||||
|
||||
|
||||
class ModelProvider(Enum):
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
"""Network implementation for orchestrating multiple agents."""
|
||||
|
||||
from typing import Any, Dict, List, Optional, Union, TypeVar, Generic
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Generic, List, Optional, TypeVar, Union
|
||||
|
||||
from .agent import Agent
|
||||
from .router import (
|
||||
Router,
|
||||
RouterFunction,
|
||||
RouterArgs,
|
||||
RouterFunction,
|
||||
RoutingAgent,
|
||||
get_default_routing_agent,
|
||||
)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"""Router system for agent networks in Hanzo Network."""
|
||||
|
||||
from typing import Any, Callable, Dict, Optional, Union, Protocol
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from typing import Any, Callable, Dict, Optional, Protocol, Union
|
||||
|
||||
from .agent import Agent, ModelConfig
|
||||
from .state import NetworkState
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"""Network state management for agent networks."""
|
||||
|
||||
from typing import Any, Dict, List, Optional, TypeVar, Generic
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Generic, List, Optional, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
"""Tool system for agents in Hanzo Network."""
|
||||
|
||||
from typing import Any, Callable, Dict, Optional, Protocol, TypedDict
|
||||
from dataclasses import dataclass
|
||||
import inspect
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Callable, Dict, Optional, Protocol, TypedDict
|
||||
|
||||
from pydantic import BaseModel, create_model
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import List
|
||||
|
||||
from .peer_handle import PeerHandle
|
||||
|
||||
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
import grpc
|
||||
import numpy as np
|
||||
import asyncio
|
||||
from typing import Optional, List
|
||||
|
||||
from . import node_service_pb2
|
||||
from . import node_service_pb2_grpc
|
||||
|
||||
from ..peer_handle import PeerHandle
|
||||
from .inference.shard import Shard
|
||||
from .topology.topology import Topology
|
||||
from .topology.device_capabilities import DeviceCapabilities, DeviceFlops
|
||||
from .helpers import DEBUG
|
||||
import json
|
||||
import platform
|
||||
from typing import List, Optional
|
||||
|
||||
import grpc
|
||||
import numpy as np
|
||||
|
||||
from ..peer_handle import PeerHandle
|
||||
from . import node_service_pb2, node_service_pb2_grpc
|
||||
from .helpers import DEBUG
|
||||
from .inference.shard import Shard
|
||||
from .topology.device_capabilities import DeviceCapabilities, DeviceFlops
|
||||
from .topology.topology import Topology
|
||||
|
||||
if platform.system().lower() == "darwin" and platform.machine().lower() == "arm64":
|
||||
import mlx.core as mx
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
import grpc
|
||||
from concurrent import futures
|
||||
import numpy as np
|
||||
from asyncio import CancelledError
|
||||
|
||||
import json
|
||||
import platform
|
||||
from asyncio import CancelledError
|
||||
from concurrent import futures
|
||||
|
||||
from . import node_service_pb2
|
||||
from . import node_service_pb2_grpc
|
||||
import grpc
|
||||
import numpy as np
|
||||
from net import DEBUG
|
||||
|
||||
from . import node_service_pb2, node_service_pb2_grpc
|
||||
from .inference.shard import Shard
|
||||
from .orchestration import Node
|
||||
import json
|
||||
|
||||
if platform.system().lower() == "darwin" and platform.machine().lower() == "arm64":
|
||||
import mlx.core as mx
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"""Simplified gRPC server for distributed Hanzo networks."""
|
||||
|
||||
from typing import Dict, Any
|
||||
from typing import Any, Dict
|
||||
|
||||
|
||||
class GRPCServer:
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import os
|
||||
import asyncio
|
||||
from typing import Dict, List, Callable, Optional
|
||||
import os
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import Callable, Dict, List, Optional
|
||||
|
||||
from .networking.discovery import Discovery
|
||||
from .topology.device_capabilities import DeviceCapabilities
|
||||
from .networking.manual.network_topology_config import NetworkTopology, PeerConfig
|
||||
from .helpers import DEBUG_DISCOVERY
|
||||
from .networking.discovery import Discovery
|
||||
from .networking.manual.network_topology_config import NetworkTopology, PeerConfig
|
||||
from .networking.peer_handle import PeerHandle
|
||||
from .topology.device_capabilities import DeviceCapabilities
|
||||
|
||||
|
||||
class ManualDiscovery(Discovery):
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from typing import Dict
|
||||
|
||||
from pydantic import BaseModel, ValidationError
|
||||
|
||||
from .topology.device_capabilities import DeviceCapabilities
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import json
|
||||
import asyncio
|
||||
import json
|
||||
import unittest
|
||||
from unittest import mock
|
||||
from .networking.manual.manual_discovery import ManualDiscovery
|
||||
from .networking.manual.network_topology_config import NetworkTopology
|
||||
|
||||
from .networking.grpc.grpc_peer_handle import GRPCPeerHandle
|
||||
from .networking.grpc.grpc_server import GRPCServer
|
||||
from .networking.manual.manual_discovery import ManualDiscovery
|
||||
from .networking.manual.network_topology_config import NetworkTopology
|
||||
from .orchestration.node import Node
|
||||
|
||||
root_path = "./exo/networking/manual/test_data/test_config.json"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
"""Minimal discovery implementation for testing."""
|
||||
|
||||
from typing import List, Dict, Any, Optional
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from ..device_capabilities import DeviceCapabilities
|
||||
from .discovery import Discovery
|
||||
from .simplified_peer_handle import SimplifiedPeerHandle
|
||||
from ..device_capabilities import DeviceCapabilities
|
||||
|
||||
|
||||
class MinimalPeerHandle(SimplifiedPeerHandle):
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Optional, List
|
||||
from typing import List, Optional
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..inference.shard import Shard
|
||||
from ..topology.device_capabilities import DeviceCapabilities
|
||||
from ..topology.topology import Topology
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
"""Simplified peer handle for distributed networking without full inference support."""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Optional, Any, Dict
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from ..topology.device_capabilities import DeviceCapabilities
|
||||
|
||||
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
import asyncio
|
||||
import time
|
||||
import traceback
|
||||
from typing import List, Dict, Callable, Tuple
|
||||
from typing import Callable, Dict, List, Tuple
|
||||
|
||||
from .helpers import DEBUG, DEBUG_DISCOVERY
|
||||
from .networking.discovery import Discovery
|
||||
from .networking.peer_handle import PeerHandle
|
||||
from .tailscale_helpers import (
|
||||
Device,
|
||||
get_device_attributes,
|
||||
get_device_id,
|
||||
get_tailscale_devices,
|
||||
update_device_attributes,
|
||||
)
|
||||
from .topology.device_capabilities import (
|
||||
UNKNOWN_DEVICE_CAPABILITIES,
|
||||
DeviceCapabilities,
|
||||
device_capabilities,
|
||||
UNKNOWN_DEVICE_CAPABILITIES,
|
||||
)
|
||||
from .helpers import DEBUG, DEBUG_DISCOVERY
|
||||
from .tailscale_helpers import (
|
||||
get_device_id,
|
||||
update_device_attributes,
|
||||
get_device_attributes,
|
||||
get_tailscale_devices,
|
||||
Device,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import json
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import json
|
||||
import re
|
||||
from typing import Dict, Any, Tuple, List, Optional
|
||||
from datetime import datetime, timezone
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
import aiohttp
|
||||
|
||||
from .helpers import DEBUG_DISCOVERY
|
||||
from .topology.device_capabilities import DeviceCapabilities, DeviceFlops
|
||||
from datetime import datetime, timezone
|
||||
|
||||
|
||||
class Device:
|
||||
|
||||
+3
-2
@@ -1,8 +1,9 @@
|
||||
import os
|
||||
import asyncio
|
||||
import os
|
||||
import unittest
|
||||
from .networking.tailscale.tailscale_discovery import TailscaleDiscovery
|
||||
|
||||
from .networking.peer_handle import PeerHandle
|
||||
from .networking.tailscale.tailscale_discovery import TailscaleDiscovery
|
||||
|
||||
|
||||
class TestTailscaleDiscovery(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import asyncio
|
||||
import unittest
|
||||
from unittest import mock
|
||||
from .networking.udp.udp_discovery import UDPDiscovery
|
||||
|
||||
from .networking.grpc.grpc_peer_handle import GRPCPeerHandle
|
||||
from .networking.grpc.grpc_server import GRPCServer
|
||||
from .networking.udp.udp_discovery import UDPDiscovery
|
||||
from .orchestration.node import Node
|
||||
|
||||
|
||||
|
||||
@@ -3,20 +3,21 @@ import json
|
||||
import socket
|
||||
import time
|
||||
import traceback
|
||||
from typing import List, Dict, Callable, Tuple, Coroutine, Optional
|
||||
from .networking.discovery import Discovery
|
||||
from .networking.peer_handle import PeerHandle
|
||||
from .topology.device_capabilities import (
|
||||
DeviceCapabilities,
|
||||
device_capabilities,
|
||||
UNKNOWN_DEVICE_CAPABILITIES,
|
||||
)
|
||||
from typing import Callable, Coroutine, Dict, List, Optional, Tuple
|
||||
|
||||
from .helpers import (
|
||||
DEBUG,
|
||||
DEBUG_DISCOVERY,
|
||||
get_all_ip_addresses_and_interfaces,
|
||||
get_interface_priority_and_type,
|
||||
)
|
||||
from .networking.discovery import Discovery
|
||||
from .networking.peer_handle import PeerHandle
|
||||
from .topology.device_capabilities import (
|
||||
UNKNOWN_DEVICE_CAPABILITIES,
|
||||
DeviceCapabilities,
|
||||
device_capabilities,
|
||||
)
|
||||
|
||||
|
||||
class ListenProtocol(asyncio.DatagramProtocol):
|
||||
|
||||
@@ -4,11 +4,11 @@ import asyncio
|
||||
import json
|
||||
import socket
|
||||
import time
|
||||
from typing import List, Dict, Tuple
|
||||
from typing import Dict, List, Tuple
|
||||
|
||||
from ..device_capabilities import DeviceCapabilities
|
||||
from .discovery import Discovery
|
||||
from .minimal_discovery import MinimalPeerHandle
|
||||
from ..device_capabilities import DeviceCapabilities
|
||||
|
||||
|
||||
def get_broadcast_address(ip_addr: str) -> str:
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
"""Distributed Network implementation using Hanzo Net infrastructure."""
|
||||
|
||||
import asyncio
|
||||
from typing import Any, Dict, List, Optional, Union, TypeVar
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Dict, List, Optional, TypeVar, Union
|
||||
|
||||
from .core.network import Network, NetworkConfig
|
||||
from .core.agent import Agent
|
||||
from .core.network import Network, NetworkConfig
|
||||
from .core.router import Router, RouterFunction, RoutingAgent
|
||||
from .core.state import NetworkState
|
||||
from .distributed.discovery import Discovery
|
||||
from .distributed.grpc_server import GRPCServer
|
||||
from .distributed.simplified_peer_handle import SimplifiedPeerHandle as PeerHandle
|
||||
from .distributed.udp_discovery import UDPDiscovery
|
||||
from .distributed.grpc_server import GRPCServer
|
||||
from .topology.device_capabilities import DeviceCapabilities, device_capabilities
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Shard downloader for distributed model loading."""
|
||||
|
||||
from typing import Optional, Dict, Any
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
class ShardDownloader:
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
"""Helper functions for distributed Hanzo networks."""
|
||||
|
||||
import os
|
||||
import asyncio
|
||||
import socket
|
||||
import random
|
||||
import os
|
||||
import platform
|
||||
import psutil
|
||||
import random
|
||||
import socket
|
||||
import subprocess
|
||||
from typing import Tuple, List
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import List, Tuple
|
||||
|
||||
import psutil
|
||||
|
||||
DEBUG = int(os.getenv("DEBUG", default="0"))
|
||||
DEBUG_DISCOVERY = int(os.getenv("DEBUG_DISCOVERY", default="0"))
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import asyncio
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .inference.inference_engine import InferenceEngine
|
||||
from .inference.shard import Shard
|
||||
from .inference.tinygrad.inference import TinygradDynamicShardInferenceEngine
|
||||
import asyncio
|
||||
import numpy as np
|
||||
|
||||
|
||||
# An inference engine should work the same for any number of Shards, as long as the Shards are continuous.
|
||||
@@ -11,9 +13,10 @@ async def test_inference_engine(
|
||||
inference_engine_2: InferenceEngine,
|
||||
model_id: str,
|
||||
):
|
||||
from .inference.tinygrad.inference import Tokenizer
|
||||
from pathlib import Path
|
||||
|
||||
from .inference.tinygrad.inference import Tokenizer
|
||||
|
||||
_tokenizer = Tokenizer(str(Path(model_id) / "tokenizer.model"))
|
||||
|
||||
prompt = "In a single word only, what is the last name of the president of the United States? "
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
from typing import Optional
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .inference.inference_engine import InferenceEngine
|
||||
from .inference.shard import Shard
|
||||
from .inference.tokenizers import DummyTokenizer
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import numpy as np
|
||||
import os
|
||||
from .helpers import DEBUG # Make sure to import DEBUG
|
||||
|
||||
from typing import Optional
|
||||
from abc import ABC, abstractmethod
|
||||
from .shard import Shard
|
||||
from typing import Optional
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .download.shard_download import ShardDownloader
|
||||
from .helpers import DEBUG # Make sure to import DEBUG
|
||||
from .shard import Shard
|
||||
|
||||
|
||||
class InferenceEngine(ABC):
|
||||
@@ -82,9 +83,10 @@ def get_inference_engine(inference_engine_name: str, shard_downloader: ShardDown
|
||||
|
||||
return MLXDynamicShardInferenceEngine(shard_downloader)
|
||||
elif inference_engine_name == "tinygrad":
|
||||
from .inference.tinygrad.inference import TinygradDynamicShardInferenceEngine
|
||||
import tinygrad.helpers
|
||||
|
||||
from .inference.tinygrad.inference import TinygradDynamicShardInferenceEngine
|
||||
|
||||
tinygrad.helpers.DEBUG.value = int(os.getenv("TINYGRAD_DEBUG", default="0"))
|
||||
|
||||
return TinygradDynamicShardInferenceEngine(shard_downloader)
|
||||
|
||||
@@ -1,23 +1,21 @@
|
||||
# Adapted from https://github.com/ml-explore/mlx-examples/blob/main/stable_diffusion/stable_diffusion/__init__.py
|
||||
|
||||
import time
|
||||
import inspect
|
||||
import time
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from pathlib import Path
|
||||
|
||||
from tqdm import tqdm
|
||||
|
||||
from .sd_models.vae import ModelArgs as VAEArgs
|
||||
from .sd_models.vae import Autoencoder
|
||||
from .sd_models.tokenizer import load_tokenizer
|
||||
from .inference.shard import Shard
|
||||
from .sd_models.clip import CLIPTextModel
|
||||
from .sd_models.clip import ModelArgs as CLIPArgs
|
||||
from .sd_models.tokenizer import load_tokenizer
|
||||
from .sd_models.unet import UNetConfig, UNetModel
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from .inference.shard import Shard
|
||||
from .sd_models.vae import Autoencoder
|
||||
from .sd_models.vae import ModelArgs as VAEArgs
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from typing import Optional
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from mlx_lm.models.cache import KVCache
|
||||
|
||||
@@ -3,9 +3,9 @@ from typing import Optional
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from mlx_lm.models.cache import KVCache
|
||||
from mlx_lm.models.deepseek_v2 import ModelArgs, DeepseekV2DecoderLayer
|
||||
from mlx_lm.models.deepseek_v2 import DeepseekV2DecoderLayer, ModelArgs
|
||||
|
||||
from .base import IdentityBlock
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
@@ -3,12 +3,14 @@ from typing import Optional
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from mlx_lm.models.cache import KVCache
|
||||
from mlx_lm.models.deepseek_v3 import (
|
||||
ModelArgs as V3ModelArgs,
|
||||
DeepseekV3DecoderLayer,
|
||||
)
|
||||
from mlx_lm.models.deepseek_v3 import (
|
||||
ModelArgs as V3ModelArgs,
|
||||
)
|
||||
|
||||
from .base import IdentityBlock
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
@@ -2,9 +2,8 @@ from dataclasses import dataclass, field
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from mlx_lm.models.base import create_attention_mask
|
||||
from mlx_lm.models.gemma2 import TransformerBlock, ModelArgs, RMSNorm
|
||||
from mlx_lm.models.gemma2 import ModelArgs, RMSNorm, TransformerBlock
|
||||
|
||||
from ...shard import Shard
|
||||
from .base import IdentityBlock
|
||||
|
||||
@@ -2,9 +2,8 @@ from dataclasses import dataclass, field
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from mlx_lm.models.base import create_attention_mask
|
||||
from mlx_lm.models.llama import TransformerBlock, ModelArgs
|
||||
from mlx_lm.models.llama import ModelArgs, TransformerBlock
|
||||
|
||||
from ...shard import Shard
|
||||
from .base import IdentityBlock
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
# Copyright © 2024 Apple Inc.
|
||||
|
||||
import math
|
||||
import inspect
|
||||
import math
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Optional, Dict, Union
|
||||
from typing import Dict, Optional, Union
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from mlx_lm.models.base import BaseModelArgs, KVCache
|
||||
from .inference.shard import Shard
|
||||
from .base import IdentityBlock
|
||||
import numpy as np
|
||||
from mlx_lm.models.base import BaseModelArgs, KVCache
|
||||
|
||||
from .base import IdentityBlock
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -2,9 +2,8 @@ from dataclasses import dataclass, field
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from mlx_lm.models.base import create_attention_mask
|
||||
from mlx_lm.models.phi3 import TransformerBlock, ModelArgs
|
||||
from mlx_lm.models.phi3 import ModelArgs, TransformerBlock
|
||||
|
||||
from ...shard import Shard
|
||||
from .base import IdentityBlock
|
||||
|
||||
@@ -2,9 +2,8 @@ from dataclasses import dataclass, field
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from mlx_lm.models.base import create_attention_mask
|
||||
from mlx_lm.models.qwen2 import TransformerBlock, ModelArgs
|
||||
from mlx_lm.models.qwen2 import ModelArgs, TransformerBlock
|
||||
|
||||
from ...shard import Shard
|
||||
from .base import IdentityBlock
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# Adapted from https://github.com/ml-explore/mlx-examples/blob/main/stable_diffusion/stable_diffusion/clip.py
|
||||
|
||||
import math
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass, field
|
||||
from typing import List, Optional
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from dataclasses import field
|
||||
from .inference.shard import Shard
|
||||
|
||||
from .inference.mlx.models.base import IdentityBlock
|
||||
from .inference.shard import Shard
|
||||
|
||||
_ACTIVATIONS = {"quick_gelu": nn.gelu_fast_approx, "gelu": nn.gelu}
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
# adapted from https://github.com/ml-explore/mlx-examples/blob/main/stable_diffusion/stable_diffusion/tokenizer.py
|
||||
|
||||
import regex
|
||||
import json
|
||||
import glob
|
||||
import json
|
||||
|
||||
import regex
|
||||
|
||||
|
||||
class Tokenizer:
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# Adapted from https://github.com/ml-explore/mlx-examples/blob/main/stable_diffusion/stable_diffusion/unet.py
|
||||
|
||||
import math
|
||||
from typing import Optional
|
||||
from dataclasses import dataclass, field
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Tuple, List
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
# Adapted from https://github.com/ml-explore/mlx-examples/blob/main/stable_diffusion/stable_diffusion/vae.py
|
||||
|
||||
import inspect
|
||||
import math
|
||||
from typing import List
|
||||
from dataclasses import dataclass, field
|
||||
from typing import List, Tuple
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from .unet import ResnetBlock2D, upsample_nearest
|
||||
from dataclasses import dataclass, field
|
||||
from .inference.shard import Shard
|
||||
from typing import Tuple
|
||||
import inspect
|
||||
from ..base import IdentityBlock
|
||||
from .inference.shard import Shard
|
||||
from .unet import ResnetBlock2D, upsample_nearest
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
import numpy as np
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from mlx_lm.sample_utils import make_sampler
|
||||
import mlx.optimizers as optim
|
||||
from ..inference_engine import InferenceEngine
|
||||
from .sharded_utils import load_model_shard, resolve_tokenizer
|
||||
from .losses import loss_fns
|
||||
from ..shard import Shard
|
||||
from typing import Optional
|
||||
from .download.shard_download import ShardDownloader
|
||||
import asyncio
|
||||
from collections import OrderedDict
|
||||
from mlx_lm.models.cache import make_prompt_cache
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import Optional
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
import mlx.optimizers as optim
|
||||
import numpy as np
|
||||
from mlx_lm.models.cache import make_prompt_cache
|
||||
from mlx_lm.sample_utils import make_sampler
|
||||
|
||||
from ..inference_engine import InferenceEngine
|
||||
from ..shard import Shard
|
||||
from .download.shard_download import ShardDownloader
|
||||
from .losses import loss_fns
|
||||
from .sharded_utils import load_model_shard, resolve_tokenizer
|
||||
|
||||
|
||||
class MLXDynamicShardInferenceEngine(InferenceEngine):
|
||||
|
||||
@@ -1,26 +1,25 @@
|
||||
# Adapted from https://github.com/ml-explore/mlx-examples/blob/main/llms/mlx_lm/utils.py
|
||||
|
||||
import base64
|
||||
import glob
|
||||
import importlib
|
||||
import json
|
||||
import logging
|
||||
import aiohttp
|
||||
import traceback
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
from typing import Optional, Tuple
|
||||
from PIL import Image
|
||||
from io import BytesIO
|
||||
import base64
|
||||
import traceback
|
||||
|
||||
import aiohttp
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from mlx_lm.tokenizer_utils import TokenizerWrapper
|
||||
from net import DEBUG
|
||||
from PIL import Image
|
||||
from transformers import AutoProcessor
|
||||
|
||||
from mlx_lm.tokenizer_utils import TokenizerWrapper
|
||||
|
||||
from net import DEBUG
|
||||
from .inference.tokenizers import resolve_tokenizer
|
||||
from ..shard import Shard
|
||||
from .inference.tokenizers import resolve_tokenizer
|
||||
|
||||
|
||||
class ModelNotFoundError(Exception):
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import asyncio
|
||||
import time
|
||||
from .inference.mlx.sharded_inference_engine import MLXDynamicShardInferenceEngine
|
||||
from collections import deque
|
||||
|
||||
from .download.new_shard_download import NewShardDownloader
|
||||
from .inference.mlx.sharded_inference_engine import MLXDynamicShardInferenceEngine
|
||||
from .inference.shard import Shard
|
||||
from .models import build_base_shard
|
||||
from collections import deque
|
||||
|
||||
|
||||
async def test_non_blocking():
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
from .inference.shard import Shard
|
||||
from typing import Optional
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
from typing import Optional
|
||||
import numpy as np
|
||||
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
class DummyModel(nn.Module):
|
||||
def __init__(self, shard: Optional[Shard] = None):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import pytest
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from .inference.dummy_inference_engine import DummyInferenceEngine
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
from .inference.mlx.sharded_inference_engine import MLXDynamicShardInferenceEngine
|
||||
from .inference.inference_engine import InferenceEngine
|
||||
from .download.new_shard_download import NewShardDownloader
|
||||
from .inference.shard import Shard
|
||||
import os
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .download.new_shard_download import NewShardDownloader
|
||||
from .inference.inference_engine import InferenceEngine
|
||||
from .inference.mlx.sharded_inference_engine import MLXDynamicShardInferenceEngine
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
# An inference engine should work the same for any number of Shards, as long as the Shards are continuous.
|
||||
async def test_inference_engine(
|
||||
@@ -80,8 +82,10 @@ asyncio.run(
|
||||
)
|
||||
|
||||
if os.getenv("RUN_TINYGRAD", default="0") == "1":
|
||||
import tinygrad
|
||||
import os
|
||||
|
||||
import tinygrad
|
||||
|
||||
from .inference.tinygrad.inference import TinygradDynamicShardInferenceEngine
|
||||
|
||||
tinygrad.helpers.DEBUG.value = int(os.getenv("TINYGRAD_DEBUG", default="0"))
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
from pathlib import Path
|
||||
import asyncio
|
||||
import os
|
||||
from collections import OrderedDict
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
import numpy as np
|
||||
from tinygrad import Context, Tensor, nn
|
||||
from tinygrad.nn.state import get_state_dict, load_state_dict, safe_load, safe_save
|
||||
|
||||
from .download.shard_download import ShardDownloader
|
||||
from .inference.inference_engine import InferenceEngine
|
||||
from .inference.shard import Shard
|
||||
from .inference.tinygrad.models.llama import (
|
||||
Transformer,
|
||||
TransformerShard,
|
||||
@@ -7,20 +19,10 @@ from .inference.tinygrad.models.llama import (
|
||||
fix_bf16,
|
||||
sample_logits,
|
||||
)
|
||||
from .inference.shard import Shard
|
||||
from .inference.tokenizers import resolve_tokenizer
|
||||
from tinygrad.nn.state import safe_save, safe_load, get_state_dict, load_state_dict
|
||||
from tinygrad import Tensor, nn, Context
|
||||
from .inference.inference_engine import InferenceEngine
|
||||
import numpy as np
|
||||
from .inference.tinygrad.tinygrad_helpers import concat_weights, load
|
||||
from .download.shard_download import ShardDownloader
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from .stateful_model import make_prompt_state
|
||||
from .inference.tokenizers import resolve_tokenizer
|
||||
from .losses import length_masked_ce_loss
|
||||
from collections import OrderedDict
|
||||
import asyncio
|
||||
from typing import Optional
|
||||
from .stateful_model import make_prompt_state
|
||||
|
||||
Tensor.no_grad = True
|
||||
# default settings
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from tinygrad import Tensor, dtypes
|
||||
import numpy as np
|
||||
from tinygrad import Tensor, dtypes
|
||||
|
||||
|
||||
def length_masked_ce_loss(model, inputs, targets, lengths):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from typing import Tuple, Union, Optional, Dict, Any, List
|
||||
from tinygrad import Tensor, Variable, TinyJit, dtypes, nn, Device
|
||||
from typing import Any, Dict, List, Optional, Tuple, Union
|
||||
|
||||
from tinygrad import Device, Tensor, TinyJit, Variable, dtypes, nn
|
||||
from tinygrad.helpers import getenv
|
||||
|
||||
from .inference.shard import Shard
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from tinygrad import Tensor
|
||||
from typing import List
|
||||
from os import getenv
|
||||
from typing import List
|
||||
|
||||
from tinygrad import Tensor
|
||||
|
||||
|
||||
def create_kv_cache(x: Tensor, layer):
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
from tinygrad.nn.state import safe_load, torch_load
|
||||
from tinygrad import Tensor
|
||||
from pathlib import Path
|
||||
import json
|
||||
from typing import List
|
||||
from .inference.shard import Shard
|
||||
from .helpers import DEBUG
|
||||
from .download.hf.hf_helpers import get_allow_patterns
|
||||
from fnmatch import fnmatch
|
||||
import re
|
||||
from fnmatch import fnmatch
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
from tinygrad import Tensor
|
||||
from tinygrad.nn.state import safe_load, torch_load
|
||||
|
||||
from .download.hf.hf_helpers import get_allow_patterns
|
||||
from .helpers import DEBUG
|
||||
from .inference.shard import Shard
|
||||
|
||||
|
||||
# **** helper functions ****
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import traceback
|
||||
from os import PathLike
|
||||
from typing import Union
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .helpers import DEBUG
|
||||
|
||||
# Lazy imports to avoid dependencies when not needed
|
||||
@@ -11,7 +13,7 @@ except ImportError:
|
||||
aios = None
|
||||
|
||||
try:
|
||||
from transformers import AutoTokenizer, AutoProcessor
|
||||
from transformers import AutoProcessor, AutoTokenizer
|
||||
except ImportError:
|
||||
AutoTokenizer = None
|
||||
AutoProcessor = None
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"""Local LLM support for Hanzo Network."""
|
||||
|
||||
from .local_llm import LocalLLMProvider, HanzoNetProvider, OllamaProvider, MLXProvider
|
||||
from .local_llm import HanzoNetProvider, LocalLLMProvider, MLXProvider, OllamaProvider
|
||||
|
||||
__all__ = [
|
||||
"LocalLLMProvider",
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
"""Local LLM providers using hanzo/net distributed inference."""
|
||||
|
||||
import asyncio
|
||||
from typing import Any, Dict, List, Optional
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
# Commenting out missing imports - need to implement these
|
||||
# from .inference.inference_engine import get_inference_engine
|
||||
# from .inference.shard import Shard
|
||||
# from .download.shard_download import ShardDownloader
|
||||
|
||||
# Define Message locally for now
|
||||
from typing import TypedDict
|
||||
from typing import Any, Dict, List, Optional, TypedDict
|
||||
|
||||
|
||||
class Message(TypedDict):
|
||||
|
||||
@@ -5,13 +5,13 @@ various models and hardware acceleration, integrated with the Hanzo network
|
||||
for decentralized coordination and payments.
|
||||
"""
|
||||
|
||||
import time
|
||||
import hashlib
|
||||
import asyncio
|
||||
import hashlib
|
||||
import json
|
||||
from typing import Dict, Any, List, Optional
|
||||
import time
|
||||
from dataclasses import dataclass, field
|
||||
from enum import Enum
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
# Try to import ML dependencies
|
||||
try:
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
"""Helper functions for creating local networks with local LLMs."""
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
from .core.agent import Agent, ModelConfig, ModelProvider, create_agent
|
||||
from .core.tool import Tool
|
||||
from .distributed_network import create_distributed_network, DistributedNetwork
|
||||
from .distributed_network import DistributedNetwork, create_distributed_network
|
||||
|
||||
|
||||
def create_local_agent(
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
"""Memory tools for agents using the hanzo-memory package."""
|
||||
|
||||
from typing import Any, Dict, List, Optional
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from .core.tool import Tool, create_tool, ToolContext
|
||||
from .core.tool import Tool, ToolContext, create_tool
|
||||
|
||||
# Import from hanzo-memory package when available
|
||||
try:
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
"""Device capabilities for distributed Hanzo networks."""
|
||||
|
||||
from typing import Any
|
||||
from pydantic import BaseModel
|
||||
import platform
|
||||
from typing import Any
|
||||
|
||||
import psutil
|
||||
from pydantic import BaseModel
|
||||
|
||||
DEBUG = 0 # Default debug level
|
||||
TFLOPS = 1.00
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import List
|
||||
from dataclasses import dataclass
|
||||
from .topology import Topology
|
||||
from typing import List
|
||||
|
||||
from .inference.shard import Shard
|
||||
from .topology import Topology
|
||||
|
||||
|
||||
# Partitions shard-space into pieces of contiguous shards, represented by floating point range [start, end) between 0 and 1
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
from typing import List
|
||||
from .partitioning_strategy import PartitioningStrategy
|
||||
|
||||
from .partitioning_strategy import Partition, PartitioningStrategy
|
||||
from .topology import Topology
|
||||
from .partitioning_strategy import Partition
|
||||
|
||||
|
||||
class RingMemoryWeightedPartitioningStrategy(PartitioningStrategy):
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
import pytest
|
||||
from unittest.mock import patch, Mock
|
||||
|
||||
from .topology.device_capabilities import (
|
||||
mac_device_capabilities,
|
||||
TFLOPS,
|
||||
DeviceCapabilities,
|
||||
DeviceFlops,
|
||||
TFLOPS,
|
||||
device_capabilities,
|
||||
mac_device_capabilities,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import unittest
|
||||
from typing import List
|
||||
from .topology.partitioning_strategy import Partition, map_partitions_to_shards
|
||||
|
||||
from .inference.shard import Shard
|
||||
from .topology.partitioning_strategy import Partition, map_partitions_to_shards
|
||||
|
||||
|
||||
class TestRingMemoryWeightedPartitioningStrategy(unittest.TestCase):
|
||||
|
||||
+3
-2
@@ -1,10 +1,11 @@
|
||||
import unittest
|
||||
|
||||
from .topology.device_capabilities import DeviceCapabilities, DeviceFlops
|
||||
from .topology.partitioning_strategy import Partition
|
||||
from .topology.ring_memory_weighted_partitioning_strategy import (
|
||||
RingMemoryWeightedPartitioningStrategy,
|
||||
)
|
||||
from .topology.topology import Topology
|
||||
from .topology.device_capabilities import DeviceCapabilities, DeviceFlops
|
||||
from .topology.partitioning_strategy import Partition
|
||||
|
||||
|
||||
class TestRingMemoryWeightedPartitioningStrategy(unittest.TestCase):
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from .device_capabilities import DeviceCapabilities
|
||||
from typing import Dict, Set, Optional
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, Optional, Set
|
||||
|
||||
from .device_capabilities import DeviceCapabilities
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
"""Tests for distributed network functionality."""
|
||||
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from hanzo_network import create_agent, create_distributed_network, create_tool
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user