hanzo 0.2.2__py3-none-any.whl → 0.2.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of hanzo might be problematic. Click here for more details.
- hanzo/__init__.py +4 -93
- hanzo/__main__.py +6 -0
- hanzo/cli.py +232 -8
- hanzo/commands/__init__.py +3 -0
- hanzo/commands/agent.py +112 -0
- hanzo/commands/auth.py +324 -0
- hanzo/commands/chat.py +183 -0
- hanzo/commands/cluster.py +428 -0
- hanzo/commands/config.py +240 -0
- hanzo/commands/mcp.py +235 -0
- hanzo/commands/miner.py +323 -0
- hanzo/commands/network.py +333 -0
- hanzo/commands/repl.py +186 -0
- hanzo/commands/tools.py +335 -0
- hanzo/interactive/__init__.py +3 -0
- hanzo/interactive/dashboard.py +125 -0
- hanzo/interactive/repl.py +184 -0
- hanzo/router/__init__.py +13 -7
- hanzo/utils/__init__.py +3 -0
- hanzo/utils/config.py +170 -0
- hanzo/utils/output.py +103 -0
- hanzo-0.2.5.dist-info/METADATA +137 -0
- hanzo-0.2.5.dist-info/RECORD +27 -0
- hanzo-0.2.2.dist-info/METADATA +0 -74
- hanzo-0.2.2.dist-info/RECORD +0 -9
- {hanzo-0.2.2.dist-info → hanzo-0.2.5.dist-info}/WHEEL +0 -0
- {hanzo-0.2.2.dist-info → hanzo-0.2.5.dist-info}/entry_points.txt +0 -0
hanzo/utils/config.py
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"""Configuration utilities for Hanzo CLI."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any, Dict, Optional
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_config_paths() -> Dict[str, Path]:
|
|
12
|
+
"""Get configuration file paths."""
|
|
13
|
+
paths = {}
|
|
14
|
+
|
|
15
|
+
# System config
|
|
16
|
+
if os.name == "nt": # Windows
|
|
17
|
+
paths["system"] = Path(os.environ.get("PROGRAMDATA", "C:\\ProgramData")) / "hanzo" / "config.yaml"
|
|
18
|
+
else: # Unix-like
|
|
19
|
+
paths["system"] = Path("/etc/hanzo/config.yaml")
|
|
20
|
+
|
|
21
|
+
# Global config (user)
|
|
22
|
+
config_home = Path(os.environ.get("XDG_CONFIG_HOME", Path.home() / ".config"))
|
|
23
|
+
paths["global"] = config_home / "hanzo" / "config.yaml"
|
|
24
|
+
|
|
25
|
+
# Local config (project)
|
|
26
|
+
cwd = Path.cwd()
|
|
27
|
+
for parent in [cwd] + list(cwd.parents):
|
|
28
|
+
config_file = parent / ".hanzo" / "config.yaml"
|
|
29
|
+
if config_file.exists():
|
|
30
|
+
paths["local"] = config_file
|
|
31
|
+
break
|
|
32
|
+
else:
|
|
33
|
+
# Default local path even if it doesn't exist
|
|
34
|
+
paths["local"] = cwd / ".hanzo" / "config.yaml"
|
|
35
|
+
|
|
36
|
+
return paths
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def load_config(path: Path) -> Dict[str, Any]:
|
|
40
|
+
"""Load configuration from file."""
|
|
41
|
+
if not path.exists():
|
|
42
|
+
return {}
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
with open(path, "r") as f:
|
|
46
|
+
if path.suffix == ".json":
|
|
47
|
+
return json.load(f)
|
|
48
|
+
else:
|
|
49
|
+
return yaml.safe_load(f) or {}
|
|
50
|
+
except Exception:
|
|
51
|
+
return {}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def save_config(path: Path, config: Dict[str, Any]):
|
|
55
|
+
"""Save configuration to file."""
|
|
56
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
57
|
+
|
|
58
|
+
with open(path, "w") as f:
|
|
59
|
+
if path.suffix == ".json":
|
|
60
|
+
json.dump(config, f, indent=2)
|
|
61
|
+
else:
|
|
62
|
+
yaml.dump(config, f, default_flow_style=False)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_config_value(key: str, default: Any = None, scope: Optional[str] = None) -> Any:
|
|
66
|
+
"""Get configuration value from merged configs."""
|
|
67
|
+
paths = get_config_paths()
|
|
68
|
+
|
|
69
|
+
# Load configs in priority order (local > global > system)
|
|
70
|
+
configs = []
|
|
71
|
+
|
|
72
|
+
if scope == "system" or scope is None:
|
|
73
|
+
if paths["system"].exists():
|
|
74
|
+
configs.append(load_config(paths["system"]))
|
|
75
|
+
|
|
76
|
+
if scope == "global" or scope is None:
|
|
77
|
+
if paths["global"].exists():
|
|
78
|
+
configs.append(load_config(paths["global"]))
|
|
79
|
+
|
|
80
|
+
if scope == "local" or scope is None:
|
|
81
|
+
if paths.get("local") and paths["local"].exists():
|
|
82
|
+
configs.append(load_config(paths["local"]))
|
|
83
|
+
|
|
84
|
+
# Merge configs (later ones override earlier)
|
|
85
|
+
merged = {}
|
|
86
|
+
for config in configs:
|
|
87
|
+
merged.update(config)
|
|
88
|
+
|
|
89
|
+
# Get nested key
|
|
90
|
+
keys = key.split(".")
|
|
91
|
+
current = merged
|
|
92
|
+
|
|
93
|
+
try:
|
|
94
|
+
for k in keys:
|
|
95
|
+
current = current[k]
|
|
96
|
+
return current
|
|
97
|
+
except (KeyError, TypeError):
|
|
98
|
+
return default
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def set_config_value(key: str, value: Any, scope: str = "global"):
|
|
102
|
+
"""Set configuration value."""
|
|
103
|
+
paths = get_config_paths()
|
|
104
|
+
path = paths.get(scope, paths["global"])
|
|
105
|
+
|
|
106
|
+
config = load_config(path) if path.exists() else {}
|
|
107
|
+
|
|
108
|
+
# Set nested key
|
|
109
|
+
keys = key.split(".")
|
|
110
|
+
current = config
|
|
111
|
+
|
|
112
|
+
for k in keys[:-1]:
|
|
113
|
+
if k not in current:
|
|
114
|
+
current[k] = {}
|
|
115
|
+
current = current[k]
|
|
116
|
+
|
|
117
|
+
current[keys[-1]] = value
|
|
118
|
+
|
|
119
|
+
save_config(path, config)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def init_config() -> Dict[str, Path]:
|
|
123
|
+
"""Initialize configuration structure."""
|
|
124
|
+
paths = get_config_paths()
|
|
125
|
+
|
|
126
|
+
# Create global config if it doesn't exist
|
|
127
|
+
if not paths["global"].exists():
|
|
128
|
+
default_config = {
|
|
129
|
+
"default_model": "llama-3.2-3b",
|
|
130
|
+
"default_provider": "local",
|
|
131
|
+
"mcp": {
|
|
132
|
+
"allowed_paths": [str(Path.home())],
|
|
133
|
+
"enable_all_tools": True
|
|
134
|
+
},
|
|
135
|
+
"cluster": {
|
|
136
|
+
"default_name": "hanzo-local",
|
|
137
|
+
"default_port": 8000
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
save_config(paths["global"], default_config)
|
|
141
|
+
|
|
142
|
+
return paths
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def get_default_model() -> str:
|
|
146
|
+
"""Get default model from config or environment."""
|
|
147
|
+
return os.environ.get("HANZO_DEFAULT_MODEL") or get_config_value("default_model", "llama-3.2-3b")
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def get_api_key(provider: str) -> Optional[str]:
|
|
151
|
+
"""Get API key for provider."""
|
|
152
|
+
# Check environment first
|
|
153
|
+
env_map = {
|
|
154
|
+
"openai": "OPENAI_API_KEY",
|
|
155
|
+
"anthropic": "ANTHROPIC_API_KEY",
|
|
156
|
+
"hanzo": "HANZO_API_KEY",
|
|
157
|
+
"groq": "GROQ_API_KEY",
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if env_key := env_map.get(provider.lower()):
|
|
161
|
+
if key := os.environ.get(env_key):
|
|
162
|
+
return key
|
|
163
|
+
|
|
164
|
+
# Check config
|
|
165
|
+
return get_config_value(f"api_keys.{provider}")
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def is_local_preferred() -> bool:
|
|
169
|
+
"""Check if local execution is preferred."""
|
|
170
|
+
return os.environ.get("HANZO_USE_LOCAL", "").lower() == "true" or get_config_value("prefer_local", False)
|
hanzo/utils/output.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"""Output utilities for Hanzo CLI."""
|
|
2
|
+
|
|
3
|
+
from functools import wraps
|
|
4
|
+
from typing import Any, Callable
|
|
5
|
+
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.theme import Theme
|
|
8
|
+
|
|
9
|
+
# Custom theme
|
|
10
|
+
hanzo_theme = Theme({
|
|
11
|
+
"info": "cyan",
|
|
12
|
+
"warning": "yellow",
|
|
13
|
+
"error": "red",
|
|
14
|
+
"success": "green",
|
|
15
|
+
"dim": "dim white",
|
|
16
|
+
"highlight": "bold cyan",
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
# Global console instance
|
|
20
|
+
console = Console(theme=hanzo_theme)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def handle_errors(func: Callable) -> Callable:
|
|
24
|
+
"""Decorator to handle errors in CLI commands."""
|
|
25
|
+
@wraps(func)
|
|
26
|
+
async def async_wrapper(*args, **kwargs):
|
|
27
|
+
try:
|
|
28
|
+
return await func(*args, **kwargs)
|
|
29
|
+
except KeyboardInterrupt:
|
|
30
|
+
console.print("\n[yellow]Interrupted[/yellow]")
|
|
31
|
+
except Exception as e:
|
|
32
|
+
console.print(f"[error]Error: {e}[/error]")
|
|
33
|
+
if console.is_debug:
|
|
34
|
+
console.print_exception()
|
|
35
|
+
|
|
36
|
+
@wraps(func)
|
|
37
|
+
def sync_wrapper(*args, **kwargs):
|
|
38
|
+
try:
|
|
39
|
+
return func(*args, **kwargs)
|
|
40
|
+
except KeyboardInterrupt:
|
|
41
|
+
console.print("\n[yellow]Interrupted[/yellow]")
|
|
42
|
+
except Exception as e:
|
|
43
|
+
console.print(f"[error]Error: {e}[/error]")
|
|
44
|
+
if console.is_debug:
|
|
45
|
+
console.print_exception()
|
|
46
|
+
|
|
47
|
+
if asyncio.iscoroutinefunction(func):
|
|
48
|
+
return async_wrapper
|
|
49
|
+
return sync_wrapper
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def print_json(data: Any, indent: int = 2):
|
|
53
|
+
"""Print JSON data with syntax highlighting."""
|
|
54
|
+
console.print_json(data=data, indent=indent)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def print_table(data: list[dict], title: str = None):
|
|
58
|
+
"""Print data as a table."""
|
|
59
|
+
if not data:
|
|
60
|
+
console.print("[dim]No data[/dim]")
|
|
61
|
+
return
|
|
62
|
+
|
|
63
|
+
from rich.table import Table
|
|
64
|
+
|
|
65
|
+
table = Table(title=title)
|
|
66
|
+
|
|
67
|
+
# Add columns from first row
|
|
68
|
+
for key in data[0].keys():
|
|
69
|
+
table.add_column(key.replace("_", " ").title())
|
|
70
|
+
|
|
71
|
+
# Add rows
|
|
72
|
+
for row in data:
|
|
73
|
+
table.add_row(*[str(v) for v in row.values()])
|
|
74
|
+
|
|
75
|
+
console.print(table)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def confirm(message: str, default: bool = False) -> bool:
|
|
79
|
+
"""Ask for confirmation."""
|
|
80
|
+
from rich.prompt import Confirm
|
|
81
|
+
return Confirm.ask(message, default=default)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def prompt(message: str, default: str = None, password: bool = False) -> str:
|
|
85
|
+
"""Prompt for input."""
|
|
86
|
+
from rich.prompt import Prompt
|
|
87
|
+
return Prompt.ask(message, default=default, password=password)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def progress(description: str):
|
|
91
|
+
"""Context manager for progress indicator."""
|
|
92
|
+
return console.status(description)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# Export common methods
|
|
96
|
+
print = console.print
|
|
97
|
+
print_exception = console.print_exception
|
|
98
|
+
rule = console.rule
|
|
99
|
+
clear = console.clear
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
# Import asyncio for the decorator
|
|
103
|
+
import asyncio
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hanzo
|
|
3
|
+
Version: 0.2.5
|
|
4
|
+
Summary: Hanzo AI - Complete AI Infrastructure Platform with CLI, Router, MCP, and Agent Runtime
|
|
5
|
+
Project-URL: Homepage, https://hanzo.ai
|
|
6
|
+
Project-URL: Repository, https://github.com/hanzoai/python-sdk
|
|
7
|
+
Project-URL: Documentation, https://docs.hanzo.ai/cli
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/hanzoai/python-sdk/issues
|
|
9
|
+
Author-email: Hanzo AI <dev@hanzo.ai>
|
|
10
|
+
Keywords: agents,ai,cli,hanzo,llm,local-ai,mcp,private-ai
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Requires-Python: >=3.8
|
|
25
|
+
Requires-Dist: click>=8.1.0
|
|
26
|
+
Requires-Dist: httpx>=0.23.0
|
|
27
|
+
Requires-Dist: prompt-toolkit>=3.0.0
|
|
28
|
+
Requires-Dist: pydantic>=2.0.0
|
|
29
|
+
Requires-Dist: pyyaml>=6.0
|
|
30
|
+
Requires-Dist: rich>=13.0.0
|
|
31
|
+
Requires-Dist: typer>=0.9.0
|
|
32
|
+
Provides-Extra: agents
|
|
33
|
+
Requires-Dist: hanzo-agents>=0.1.0; extra == 'agents'
|
|
34
|
+
Requires-Dist: hanzo-network>=0.1.0; extra == 'agents'
|
|
35
|
+
Provides-Extra: ai
|
|
36
|
+
Requires-Dist: hanzoai>=1.0.0; extra == 'ai'
|
|
37
|
+
Provides-Extra: all
|
|
38
|
+
Requires-Dist: hanzo-aci>=0.2.8; extra == 'all'
|
|
39
|
+
Requires-Dist: hanzo-agents>=0.1.0; extra == 'all'
|
|
40
|
+
Requires-Dist: hanzo-mcp>=0.7.0; extra == 'all'
|
|
41
|
+
Requires-Dist: hanzo-memory>=1.0.0; extra == 'all'
|
|
42
|
+
Requires-Dist: hanzo-network>=0.1.0; extra == 'all'
|
|
43
|
+
Requires-Dist: hanzo-repl>=0.1.0; extra == 'all'
|
|
44
|
+
Requires-Dist: hanzoai>=1.0.0; extra == 'all'
|
|
45
|
+
Provides-Extra: dev
|
|
46
|
+
Requires-Dist: hanzo-aci>=0.2.8; extra == 'dev'
|
|
47
|
+
Provides-Extra: mcp
|
|
48
|
+
Requires-Dist: hanzo-mcp>=0.7.0; extra == 'mcp'
|
|
49
|
+
Provides-Extra: repl
|
|
50
|
+
Requires-Dist: hanzo-repl>=0.1.0; extra == 'repl'
|
|
51
|
+
Provides-Extra: router
|
|
52
|
+
Description-Content-Type: text/markdown
|
|
53
|
+
|
|
54
|
+
# Hanzo AI - Complete AI Infrastructure Platform
|
|
55
|
+
|
|
56
|
+
The main SDK for the Hanzo AI ecosystem, providing unified access to all Hanzo tools and services.
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Install base package with CLI
|
|
62
|
+
pip install hanzo
|
|
63
|
+
|
|
64
|
+
# Install with all components
|
|
65
|
+
pip install hanzo[all]
|
|
66
|
+
|
|
67
|
+
# Install specific components
|
|
68
|
+
pip install hanzo[ai] # AI SDK (same as standalone hanzoai package)
|
|
69
|
+
pip install hanzo[router] # LLM gateway router (replaces litellm)
|
|
70
|
+
pip install hanzo[mcp] # Model Context Protocol server
|
|
71
|
+
pip install hanzo[agents] # Agent runtime and orchestration
|
|
72
|
+
pip install hanzo[repl] # Interactive REPL with AI chat
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Features
|
|
76
|
+
|
|
77
|
+
- **Unified LLM Gateway**: Use `hanzo.router` instead of litellm for 100+ LLM providers
|
|
78
|
+
- **MCP Integration**: Full Model Context Protocol support for AI tools
|
|
79
|
+
- **Agent Runtime**: Build and deploy AI agents with the agent framework
|
|
80
|
+
- **Interactive REPL**: Chat with AI models directly from the command line
|
|
81
|
+
- **Complete SDK**: Import all Hanzo components from a single package
|
|
82
|
+
|
|
83
|
+
## Quick Start
|
|
84
|
+
|
|
85
|
+
### Command Line
|
|
86
|
+
```bash
|
|
87
|
+
# Main CLI
|
|
88
|
+
hanzo --help
|
|
89
|
+
|
|
90
|
+
# Start MCP server
|
|
91
|
+
hanzo-mcp
|
|
92
|
+
|
|
93
|
+
# Interactive AI chat
|
|
94
|
+
hanzo-ai
|
|
95
|
+
hanzo-chat
|
|
96
|
+
|
|
97
|
+
# REPL interface
|
|
98
|
+
hanzo-repl
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Python SDK
|
|
102
|
+
```python
|
|
103
|
+
import hanzo
|
|
104
|
+
|
|
105
|
+
# Use router for LLM calls (replaces litellm)
|
|
106
|
+
from hanzo import router
|
|
107
|
+
response = router.completion(
|
|
108
|
+
model="gpt-4",
|
|
109
|
+
messages=[{"role": "user", "content": "Hello!"}]
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
# Use agents
|
|
113
|
+
from hanzo import Agent, Network
|
|
114
|
+
agent = Agent(name="assistant")
|
|
115
|
+
|
|
116
|
+
# Use MCP tools
|
|
117
|
+
from hanzo import Tool, MCPServer
|
|
118
|
+
|
|
119
|
+
# Access AI SDK
|
|
120
|
+
from hanzo import Client
|
|
121
|
+
client = Client(api_key="...")
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Components
|
|
125
|
+
|
|
126
|
+
- **hanzo.router**: Unified LLM gateway (replaces litellm)
|
|
127
|
+
- **hanzo.mcp**: Model Context Protocol server and tools
|
|
128
|
+
- **hanzo.agents**: Agent runtime and orchestration
|
|
129
|
+
- **hanzo.memory**: Memory systems for agents
|
|
130
|
+
- **hanzo.Client**: Main AI SDK client
|
|
131
|
+
|
|
132
|
+
## Documentation
|
|
133
|
+
|
|
134
|
+
- [Hanzo AI Docs](https://docs.hanzo.ai)
|
|
135
|
+
- [Router Documentation](https://docs.hanzo.ai/router)
|
|
136
|
+
- [MCP Documentation](https://docs.hanzo.ai/mcp)
|
|
137
|
+
- [Agent Documentation](https://docs.hanzo.ai/agents)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
hanzo/__init__.py,sha256=_nqVYfS2Zw03KZbODuZL7wT7vGjTTEMCQJ6T97eQj48,168
|
|
2
|
+
hanzo/__main__.py,sha256=qRjwG8-7MHPOy3czoyDP9VK1GhEaJJsVeZcz2AG9NV0,104
|
|
3
|
+
hanzo/cli.py,sha256=rsVF_KJo8CIAGk27ivoE3aIMqJWoR8hsvP8cDb_X3Fw,9754
|
|
4
|
+
hanzo/mcp_server.py,sha256=FBqcXhaJgV8_9O83H3fUy_pv4cV1707XCYm7FXaJeWY,422
|
|
5
|
+
hanzo/repl.py,sha256=sC7EXbIBn7Oxnmzqey6neAg5-116gfpmrF0YFDYrhAQ,1014
|
|
6
|
+
hanzo/commands/__init__.py,sha256=vXfIgioA6eakIYEN5ff5k_5BqOYQCJggD_MW40gb56w,138
|
|
7
|
+
hanzo/commands/agent.py,sha256=YNemAPH-s1UqtkbZAvAHxCnxVF98iKOeC8PDFifDc74,3561
|
|
8
|
+
hanzo/commands/auth.py,sha256=-2WTKAaOXEzFhyCWdFJv07SNqgBDl3CQvNUsOCD4bkY,11550
|
|
9
|
+
hanzo/commands/chat.py,sha256=tegi0mU8UT3USrSso_bDroHF3GO5xajFkaAlS9mZDUY,6876
|
|
10
|
+
hanzo/commands/cluster.py,sha256=GD0SrhdLe8u3kcYxsOImyFafPpe_CnyjNCf7uxesLJY,15603
|
|
11
|
+
hanzo/commands/config.py,sha256=Nz_W8c6-tSGwh7B2TJ31E0Ge8XHS0LJj7ayehrk8HC0,7682
|
|
12
|
+
hanzo/commands/mcp.py,sha256=jomUJdUj5guPLzBbRmEQ9KOo38RZhsDtLVRe3EcGicw,7555
|
|
13
|
+
hanzo/commands/miner.py,sha256=KzJfGkoBrVsy0FwFefRgg-SyQ1diO_NENrhf5btyoko,11799
|
|
14
|
+
hanzo/commands/network.py,sha256=qnb6mgbRM_3xjscZvr-wWPiW1biGFJ25zTglnWNrRPg,11671
|
|
15
|
+
hanzo/commands/repl.py,sha256=JakB2yQVCRdthIundDGsvhVbFwQwKUqzcKLmgMlUzoY,6135
|
|
16
|
+
hanzo/commands/tools.py,sha256=HD2CHcjrBE-Sqxt6B7mmM9J-9w9NgV2_CmXFeZW_Y7M,10929
|
|
17
|
+
hanzo/interactive/__init__.py,sha256=izefD45Ztws902J5ZLjrbbJX4ONqfxleJylzEau60hY,73
|
|
18
|
+
hanzo/interactive/dashboard.py,sha256=5JkJz9PX7KlT-54rACncHY80x_aWxV85atjuGJbaTD4,4066
|
|
19
|
+
hanzo/interactive/repl.py,sha256=-SwCSxwIHLiZBJOEShvqa4tgg2c7YYMf00zYRHazyIY,5781
|
|
20
|
+
hanzo/router/__init__.py,sha256=7Ulou75xQF8KKVzxOd4xXrmn3_Ti52M0NsAf6jXgGhk,913
|
|
21
|
+
hanzo/utils/__init__.py,sha256=zmCH4YxefrpWmR-netV99UeECqrXjkKbi3ZjbcD79dw,68
|
|
22
|
+
hanzo/utils/config.py,sha256=RU27eiSxGWAT9fI5-CjRdEJZEeT_xjMxjlMVeKC1gMg,4830
|
|
23
|
+
hanzo/utils/output.py,sha256=lROF8RDOkck7ySt1kiTlVlHZqx1E0B-PqcJc78ZHYOs,2694
|
|
24
|
+
hanzo-0.2.5.dist-info/METADATA,sha256=od4EnWzBDiPqBoAlmhLlnLR8wsImVU_J-ZCpZdpQuqc,4315
|
|
25
|
+
hanzo-0.2.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
26
|
+
hanzo-0.2.5.dist-info/entry_points.txt,sha256=pQLPMdqOXU_2BfTcMDhkqTCDNk_H6ApvYuSaWcuQOOw,171
|
|
27
|
+
hanzo-0.2.5.dist-info/RECORD,,
|
hanzo-0.2.2.dist-info/METADATA
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: hanzo
|
|
3
|
-
Version: 0.2.2
|
|
4
|
-
Summary: Hanzo AI - Complete AI Infrastructure Platform with CLI, Router, MCP, and Agent Runtime
|
|
5
|
-
Project-URL: Homepage, https://hanzo.ai
|
|
6
|
-
Project-URL: Repository, https://github.com/hanzoai/python-sdk
|
|
7
|
-
Project-URL: Documentation, https://docs.hanzo.ai/cli
|
|
8
|
-
Project-URL: Bug Tracker, https://github.com/hanzoai/python-sdk/issues
|
|
9
|
-
Author-email: Hanzo AI <dev@hanzo.ai>
|
|
10
|
-
Keywords: agents,ai,cli,hanzo,llm,local-ai,mcp,private-ai
|
|
11
|
-
Classifier: Development Status :: 4 - Beta
|
|
12
|
-
Classifier: Environment :: Console
|
|
13
|
-
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
-
Classifier: Operating System :: OS Independent
|
|
16
|
-
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
-
Requires-Python: >=3.8
|
|
25
|
-
Requires-Dist: click>=8.1.0
|
|
26
|
-
Requires-Dist: hanzo-cli>=0.1.0
|
|
27
|
-
Requires-Dist: rich>=13.0.0
|
|
28
|
-
Provides-Extra: agents
|
|
29
|
-
Requires-Dist: hanzo-agents>=0.1.0; extra == 'agents'
|
|
30
|
-
Requires-Dist: hanzo-network>=0.1.0; extra == 'agents'
|
|
31
|
-
Provides-Extra: ai
|
|
32
|
-
Requires-Dist: hanzoai>=1.0.0; extra == 'ai'
|
|
33
|
-
Provides-Extra: all
|
|
34
|
-
Requires-Dist: hanzo-aci>=0.2.8; extra == 'all'
|
|
35
|
-
Requires-Dist: hanzo-agents>=0.1.0; extra == 'all'
|
|
36
|
-
Requires-Dist: hanzo-mcp-client>=0.1.0; extra == 'all'
|
|
37
|
-
Requires-Dist: hanzo-mcp>=0.7.0; extra == 'all'
|
|
38
|
-
Requires-Dist: hanzo-memory>=1.0.0; extra == 'all'
|
|
39
|
-
Requires-Dist: hanzo-network>=0.1.0; extra == 'all'
|
|
40
|
-
Requires-Dist: hanzo-repl>=0.1.0; extra == 'all'
|
|
41
|
-
Requires-Dist: hanzo-router>=1.74.3; extra == 'all'
|
|
42
|
-
Requires-Dist: hanzoai>=1.0.0; extra == 'all'
|
|
43
|
-
Provides-Extra: dev
|
|
44
|
-
Requires-Dist: hanzo-aci>=0.2.8; extra == 'dev'
|
|
45
|
-
Provides-Extra: mcp
|
|
46
|
-
Requires-Dist: hanzo-mcp>=0.7.0; extra == 'mcp'
|
|
47
|
-
Provides-Extra: repl
|
|
48
|
-
Requires-Dist: hanzo-repl>=0.1.0; extra == 'repl'
|
|
49
|
-
Requires-Dist: hanzo-router>=1.74.3; extra == 'repl'
|
|
50
|
-
Provides-Extra: router
|
|
51
|
-
Requires-Dist: hanzo-router>=1.74.3; extra == 'router'
|
|
52
|
-
Description-Content-Type: text/markdown
|
|
53
|
-
|
|
54
|
-
# Hanzo AI CLI
|
|
55
|
-
|
|
56
|
-
This is the main `hanzo` package that provides the Hanzo AI CLI tool.
|
|
57
|
-
|
|
58
|
-
## Installation
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
pip install hanzo
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Usage
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
hanzo --help
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
For more information, see the [hanzo-cli](https://pypi.org/project/hanzo-cli/) package.
|
|
71
|
-
|
|
72
|
-
## Note
|
|
73
|
-
|
|
74
|
-
This package is a convenience wrapper around `hanzo-cli`. Both packages provide the same `hanzo` command-line tool.
|
hanzo-0.2.2.dist-info/RECORD
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
hanzo/__init__.py,sha256=0k__FKhxePI7TwN29mKW5kjP1uWxXF0bR8YFzv69HAY,1951
|
|
2
|
-
hanzo/cli.py,sha256=uLfrVV5FqW7D75N9rlYtHS5JwlXPiW6Wax9TVku6FRI,486
|
|
3
|
-
hanzo/mcp_server.py,sha256=FBqcXhaJgV8_9O83H3fUy_pv4cV1707XCYm7FXaJeWY,422
|
|
4
|
-
hanzo/repl.py,sha256=sC7EXbIBn7Oxnmzqey6neAg5-116gfpmrF0YFDYrhAQ,1014
|
|
5
|
-
hanzo/router/__init__.py,sha256=OkhSdzExF0KBEfkDiGpGp6_schsPDG0mSw-arq98OHc,822
|
|
6
|
-
hanzo-0.2.2.dist-info/METADATA,sha256=101ZA4VYkZi_JOUq8xPGVKiVlxzdn4z1_A_gfmjpaOI,2689
|
|
7
|
-
hanzo-0.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
8
|
-
hanzo-0.2.2.dist-info/entry_points.txt,sha256=pQLPMdqOXU_2BfTcMDhkqTCDNk_H6ApvYuSaWcuQOOw,171
|
|
9
|
-
hanzo-0.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|