mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
Search finds pages, web_read reads one, research is the whole loop behind a
single door: the live cloud answer engine (api.hanzo.ai /v1/ask, mode=research)
plans queries, searches, reads the best pages and writes an answer that cites
them. It is an action on the same fetch tool, not a new package — search, read
and research are one concern (the web) and share one client and one auth.
The engine replies as server-sent events, which is the cloud's other reply
shape, so HanzoCloud gains stream() beside get/post: the base URL, the auth
header and the error mapping stay in the one place that already owns them.
Each `data:` frame is yielded as a typed event (status | sources | text |
follow_ups | done | error); the terminal [DONE] sentinel ends the stream and is
never an event. Frames accumulate into {answer, sources, follow_ups}; `deep`
normalizes to `research` (one pass, two names) and any other mode is refused
rather than silently downgraded.
hanzo-tools 0.3.4->0.3.5, -net 0.1.3->0.1.4, and -net's floor moves to
hanzo-tools>=0.3.5 so the action cannot install against a client with no
stream(). Tests replay a canned SSE stream through the real parser.
Co-authored-by: Hanzo Dev <[email protected]>
72 lines
1.4 KiB
TOML
72 lines
1.4 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "hanzo-tools-net"
|
|
version = "0.1.4"
|
|
description = "Network tools for Hanzo AI (HIP-0300)"
|
|
readme = "README.md"
|
|
license = "MIT"
|
|
requires-python = ">=3.12"
|
|
authors = [
|
|
{ name = "Hanzo AI Team", email = "[email protected]" },
|
|
]
|
|
keywords = [
|
|
"hanzo",
|
|
"mcp",
|
|
"tools",
|
|
"network",
|
|
"fetch",
|
|
"crawl",
|
|
"search",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
]
|
|
dependencies = [
|
|
"hanzo-tools>=0.3.5",
|
|
"mcp>=1.0.0",
|
|
"httpx>=0.25.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
full = [
|
|
"beautifulsoup4>=4.12.0",
|
|
"lxml>=5.0.0",
|
|
]
|
|
dev = [
|
|
"pytest>=8.0.0",
|
|
"pytest-asyncio>=0.23.0",
|
|
"ruff>=0.1.0",
|
|
]
|
|
|
|
[project.entry-points."hanzo.tools"]
|
|
net = "hanzo_tools.net:TOOLS"
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/hanzoai/python-sdk"
|
|
Documentation = "https://docs.hanzo.ai"
|
|
Repository = "https://github.com/hanzoai/python-sdk"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["hanzo_tools"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py310"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "UP"]
|
|
ignore = ["E501"]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|