mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
chore: update hanzoai SDK and tests
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
# Import new modules
|
||||
from . import mcp, auth, grpo, types, agents, cluster
|
||||
|
||||
+11
-11
@@ -414,14 +414,14 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
||||
# Don't set these headers if they were already set or removed by the caller. We check
|
||||
# `custom_headers`, which can contain `Omit()`, instead of `headers` to account for the removal case.
|
||||
lower_custom_headers = [header.lower() for header in custom_headers]
|
||||
if "x-stainless-retry-count" not in lower_custom_headers:
|
||||
headers["x-stainless-retry-count"] = str(retries_taken)
|
||||
if "x-stainless-read-timeout" not in lower_custom_headers:
|
||||
if "x-hanzo-retry-count" not in lower_custom_headers:
|
||||
headers["x-hanzo-retry-count"] = str(retries_taken)
|
||||
if "x-hanzo-read-timeout" not in lower_custom_headers:
|
||||
timeout = self.timeout if isinstance(options.timeout, NotGiven) else options.timeout
|
||||
if isinstance(timeout, Timeout):
|
||||
timeout = timeout.read
|
||||
if timeout is not None:
|
||||
headers["x-stainless-read-timeout"] = str(timeout)
|
||||
headers["x-hanzo-read-timeout"] = str(timeout)
|
||||
|
||||
return headers
|
||||
|
||||
@@ -742,7 +742,7 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
||||
return False
|
||||
|
||||
def _idempotency_key(self) -> str:
|
||||
return f"stainless-python-retry-{uuid.uuid4()}"
|
||||
return f"hanzo-python-retry-{uuid.uuid4()}"
|
||||
|
||||
|
||||
class _DefaultHttpxClient(httpx.Client):
|
||||
@@ -1916,12 +1916,12 @@ def get_platform() -> Platform:
|
||||
@lru_cache(maxsize=None)
|
||||
def platform_headers(version: str, *, platform: Platform | None) -> Dict[str, str]:
|
||||
return {
|
||||
"X-Stainless-Lang": "python",
|
||||
"X-Stainless-Package-Version": version,
|
||||
"X-Stainless-OS": str(platform or get_platform()),
|
||||
"X-Stainless-Arch": str(get_architecture()),
|
||||
"X-Stainless-Runtime": get_python_runtime(),
|
||||
"X-Stainless-Runtime-Version": get_python_version(),
|
||||
"X-Hanzo-Lang": "python",
|
||||
"X-Hanzo-Package-Version": version,
|
||||
"X-Hanzo-OS": str(platform or get_platform()),
|
||||
"X-Hanzo-Arch": str(get_architecture()),
|
||||
"X-Hanzo-Runtime": get_python_runtime(),
|
||||
"X-Hanzo-Runtime-Version": get_python_version(),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -307,7 +307,7 @@ class Hanzo(SyncAPIClient):
|
||||
def default_headers(self) -> dict[str, str | Omit]:
|
||||
return {
|
||||
**super().default_headers,
|
||||
"X-Stainless-Async": "false",
|
||||
"X-Hanzo-Async": "false",
|
||||
**self._custom_headers,
|
||||
}
|
||||
|
||||
@@ -617,7 +617,7 @@ class AsyncHanzo(AsyncAPIClient):
|
||||
def default_headers(self) -> dict[str, str | Omit]:
|
||||
return {
|
||||
**super().default_headers,
|
||||
"X-Stainless-Async": f"async:{get_async_library()}",
|
||||
"X-Hanzo-Async": f"async:{get_async_library()}",
|
||||
**self._custom_headers,
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
import httpx
|
||||
|
||||
RAW_RESPONSE_HEADER = "X-Stainless-Raw-Response"
|
||||
OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
|
||||
RAW_RESPONSE_HEADER = "X-Hanzo-Raw-Response"
|
||||
OVERRIDE_CAST_TO_HEADER = "____hanzo_override_cast_to"
|
||||
|
||||
# default timeout is 1 minute
|
||||
DEFAULT_TIMEOUT = httpx.Timeout(timeout=60, connect=5.0)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -370,7 +370,7 @@ def get_required_header(headers: HeadersLike, header: str) -> str:
|
||||
if k.lower() == lower_header and isinstance(v, str):
|
||||
return v
|
||||
|
||||
# to deal with the case where the header looks like Stainless-Event-Id
|
||||
# to deal with the case where the header looks like Hanzo-Event-Id
|
||||
intercaps_header = re.sub(
|
||||
r"([^\w])(\w)",
|
||||
lambda pat: pat.group(1) + pat.group(2).upper(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
__title__ = "hanzoai"
|
||||
__version__ = "2.0.2" # x-release-please-version
|
||||
__version__ = "2.1.2" # x-release-please-version
|
||||
|
||||
@@ -99,6 +99,110 @@ class HanzoAuth:
|
||||
|
||||
return {"api_key": api_key, **user_info}
|
||||
|
||||
async def login_with_device_code(
|
||||
self,
|
||||
open_browser: bool = True,
|
||||
poll_interval: float = 5.0,
|
||||
timeout: float = 300.0,
|
||||
) -> Dict[str, Any]:
|
||||
"""Login with Device Code flow (works on remote/headless systems).
|
||||
|
||||
This is the recommended auth method for CLI tools. User visits a URL
|
||||
and enters a code, no local server required.
|
||||
|
||||
Args:
|
||||
open_browser: Whether to automatically open browser (default True)
|
||||
poll_interval: Seconds between polling attempts (default 5)
|
||||
timeout: Max seconds to wait for auth (default 300)
|
||||
|
||||
Returns:
|
||||
User information and tokens
|
||||
"""
|
||||
import time
|
||||
|
||||
async with httpx.AsyncClient() as client:
|
||||
# Step 1: Request device code
|
||||
response = await client.post(
|
||||
f"{self.base_url}/api/device/code",
|
||||
json={
|
||||
"client_id": "hanzo-cli",
|
||||
"scope": "openid profile email",
|
||||
},
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
||||
data = response.json()
|
||||
device_code = data["device_code"]
|
||||
user_code = data["user_code"]
|
||||
verification_url = data.get("verification_uri", f"{self.base_url}/device")
|
||||
verification_url_complete = data.get(
|
||||
"verification_uri_complete",
|
||||
f"{verification_url}?user_code={user_code}"
|
||||
)
|
||||
expires_in = data.get("expires_in", timeout)
|
||||
interval = data.get("interval", poll_interval)
|
||||
|
||||
# Step 2: Display instructions to user
|
||||
print(f"\n\033[1;36mTo sign in, visit:\033[0m {verification_url}")
|
||||
print(f"\033[1;33mEnter code:\033[0m {user_code}\n")
|
||||
|
||||
# Optionally open browser
|
||||
if open_browser:
|
||||
try:
|
||||
webbrowser.open(verification_url_complete)
|
||||
print("\033[2m(Browser opened automatically)\033[0m\n")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Step 3: Poll for completion
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < min(expires_in, timeout):
|
||||
await asyncio.sleep(interval)
|
||||
|
||||
try:
|
||||
token_response = await client.post(
|
||||
f"{self.base_url}/api/device/token",
|
||||
json={
|
||||
"client_id": "hanzo-cli",
|
||||
"device_code": device_code,
|
||||
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
|
||||
},
|
||||
)
|
||||
|
||||
if token_response.status_code == 200:
|
||||
token_data = token_response.json()
|
||||
self._token = token_data.get("access_token")
|
||||
|
||||
# Get user info
|
||||
user_info = await self.get_user_info()
|
||||
print("\033[1;32m✓ Authentication successful!\033[0m\n")
|
||||
|
||||
return {"token": self._token, **user_info}
|
||||
|
||||
elif token_response.status_code == 400:
|
||||
error_data = token_response.json()
|
||||
error = error_data.get("error")
|
||||
|
||||
if error == "authorization_pending":
|
||||
# User hasn't completed auth yet, keep polling
|
||||
continue
|
||||
elif error == "slow_down":
|
||||
# Server asking us to slow down
|
||||
interval += 5
|
||||
continue
|
||||
elif error == "expired_token":
|
||||
raise RuntimeError("Device code expired. Please try again.")
|
||||
elif error == "access_denied":
|
||||
raise RuntimeError("Authentication denied by user.")
|
||||
else:
|
||||
raise RuntimeError(f"Authentication error: {error}")
|
||||
|
||||
except httpx.HTTPStatusError as e:
|
||||
if e.response.status_code != 400:
|
||||
raise
|
||||
|
||||
raise RuntimeError("Authentication timed out. Please try again.")
|
||||
|
||||
async def login_with_sso(self) -> Dict[str, Any]:
|
||||
"""Login with SSO (browser-based).
|
||||
|
||||
@@ -376,3 +480,131 @@ def setup_auth_from_env():
|
||||
pass
|
||||
|
||||
return None
|
||||
|
||||
|
||||
# Agent Runtime Authentication
|
||||
class AgentAuth:
|
||||
"""Authentication helper for agent runtime environments.
|
||||
|
||||
Provides seamless auth for agents running in:
|
||||
- Local development
|
||||
- Remote VMs
|
||||
- Docker containers (Operative, etc.)
|
||||
- Kubernetes pods
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self._hanzo_auth = None
|
||||
|
||||
async def ensure_authenticated(
|
||||
self,
|
||||
require_interactive: bool = False,
|
||||
headless: bool = True,
|
||||
) -> HanzoAuth:
|
||||
"""Ensure agent is authenticated, prompting if necessary.
|
||||
|
||||
Args:
|
||||
require_interactive: Force device code flow even if token exists
|
||||
headless: Don't try to open browser (for containers)
|
||||
|
||||
Returns:
|
||||
Authenticated HanzoAuth instance
|
||||
|
||||
Raises:
|
||||
RuntimeError: If authentication fails
|
||||
"""
|
||||
# 1. Check environment variables first (highest priority)
|
||||
if api_key := os.environ.get("HANZO_API_KEY"):
|
||||
self._hanzo_auth = HanzoAuth(api_key=api_key)
|
||||
return self._hanzo_auth
|
||||
|
||||
if token := os.environ.get("HANZO_AUTH_TOKEN"):
|
||||
self._hanzo_auth = HanzoAuth()
|
||||
self._hanzo_auth._token = token
|
||||
return self._hanzo_auth
|
||||
|
||||
# 2. Check saved credentials
|
||||
config_file = Path.home() / ".hanzo" / "auth.json"
|
||||
if config_file.exists() and not require_interactive:
|
||||
try:
|
||||
self._hanzo_auth = HanzoAuth()
|
||||
await self._hanzo_auth.load_credentials(config_file)
|
||||
if await self._hanzo_auth.is_authenticated():
|
||||
return self._hanzo_auth
|
||||
except Exception:
|
||||
pass # Fall through to device code flow
|
||||
|
||||
# 3. Device code flow for interactive authentication
|
||||
self._hanzo_auth = HanzoAuth()
|
||||
result = await self._hanzo_auth.login_with_device_code(
|
||||
open_browser=not headless
|
||||
)
|
||||
|
||||
# Save credentials for future use
|
||||
await self._hanzo_auth.save_credentials(config_file)
|
||||
|
||||
return self._hanzo_auth
|
||||
|
||||
@property
|
||||
def token(self) -> Optional[str]:
|
||||
"""Get current auth token."""
|
||||
if self._hanzo_auth:
|
||||
return self._hanzo_auth.api_key or self._hanzo_auth._token
|
||||
return None
|
||||
|
||||
def get_headers(self) -> Dict[str, str]:
|
||||
"""Get auth headers for API requests."""
|
||||
if self._hanzo_auth:
|
||||
return self._hanzo_auth._get_headers()
|
||||
return {}
|
||||
|
||||
|
||||
async def authenticate_agent(
|
||||
headless: bool = True,
|
||||
require_interactive: bool = False,
|
||||
) -> AgentAuth:
|
||||
"""Authenticate an agent in any environment.
|
||||
|
||||
This is the recommended entry point for agent authentication.
|
||||
Works in:
|
||||
- Local CLI (opens browser for device code)
|
||||
- Remote SSH (displays device code)
|
||||
- Docker containers (uses HANZO_API_KEY or device code)
|
||||
- Kubernetes pods (uses service account or device code)
|
||||
|
||||
Args:
|
||||
headless: Don't try to open browser (True for containers)
|
||||
require_interactive: Force device code even if cached token exists
|
||||
|
||||
Returns:
|
||||
AgentAuth instance with authenticated session
|
||||
|
||||
Example:
|
||||
async def main():
|
||||
auth = await authenticate_agent()
|
||||
# Agent is now authenticated
|
||||
headers = auth.get_headers()
|
||||
# Use headers for API requests
|
||||
"""
|
||||
agent_auth = AgentAuth()
|
||||
await agent_auth.ensure_authenticated(
|
||||
require_interactive=require_interactive,
|
||||
headless=headless,
|
||||
)
|
||||
return agent_auth
|
||||
|
||||
|
||||
def sync_authenticate_agent(
|
||||
headless: bool = True,
|
||||
require_interactive: bool = False,
|
||||
) -> AgentAuth:
|
||||
"""Synchronous wrapper for authenticate_agent.
|
||||
|
||||
For use in non-async contexts.
|
||||
"""
|
||||
return asyncio.run(
|
||||
authenticate_agent(
|
||||
headless=headless,
|
||||
require_interactive=require_interactive,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
File generated from our OpenAPI spec by Stainless.
|
||||
# Hanzo AI SDK
|
||||
|
||||
This directory can be used to store custom files to expand the SDK.
|
||||
It is ignored by Stainless code generation and its content (other than this keep file) won't be touched.
|
||||
This directory can be used to store custom files to expand the SDK.
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .audio import (
|
||||
AudioResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .cancel import (
|
||||
CancelResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .cache import (
|
||||
CacheResource,
|
||||
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .chat import (
|
||||
ChatResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .config import (
|
||||
ConfigResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .chat import (
|
||||
ChatResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .files import (
|
||||
FilesResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .jobs import (
|
||||
JobsResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .jobs import (
|
||||
JobsResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .spend import (
|
||||
SpendResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .images import (
|
||||
ImagesResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .key import (
|
||||
KeyResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .info import (
|
||||
InfoResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .openai import (
|
||||
OpenAIResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .chat import (
|
||||
ChatResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .info import (
|
||||
InfoResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .responses import (
|
||||
ResponsesResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .team import (
|
||||
TeamResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from .runs import (
|
||||
RunsResource,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from typing import Optional
|
||||
from typing_extensions import Literal
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from typing import Optional
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from typing import List
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
|
||||
from ..._models import BaseModel
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
# Hanzo AI SDK
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user