A Python SDK package that dynamically generates client classes from OpenAPI specifications for Teradata AI/ML platform services.
Version: 20.00.00.00 | Python: ≥ 3.9 (64-bit) | Platform: Windows, macOS, Linux
teradata-agentstack provides a unified framework for interacting with Teradata platform REST APIs. Instead of hand-writing API wrappers, each SDK module reads the bundled OpenAPI JSON specification at import time and automatically creates Python classes and methods:
- OpenAPI Tags are converted to CamelCase Python classes.
- Operation IDs are converted to snake_case instance methods.
- A
blueprint()helper lists all generated classes for a module.
| Module | Client Class | Generated Classes | Service |
|---|---|---|---|
teradata_agentstack.sqlgen |
SqlGenClient |
SqlGenApi, ... |
Teradata SQL Generation |
teradata_agentstack.agentops |
AgentOpsClient |
Definitions, Deployments, Secrets, Health |
Teradata AgentOps |
teradata_agentstack.rayops |
RayClusterManagementClient |
RayClusterManagement, ... |
Ray Cluster Management |
teradata_agentstack.agento11y |
AgentO11yClient |
Traces, Projects, Evaluations, ... |
Agent Observability |
teradata_agentstack.access_manager |
AccessManagerClient |
Keys, Admin, Proxy |
API Access Manager |
teradata_agentstack.inference_engine |
InferenceEngineClient |
Secrets, Pools, Endpoints, ... |
Inference Engine |
teradata_agentstack.mcp_management |
MCPManagementClient |
Servers, ... |
MCP Management Service |
teradata_agentstack.mcp_endpoint_management |
MCPEndpointManagementClient |
Endpoints, ... |
MCP Endpoint Management |
pip install teradata-agentstackNote: A 64-bit Python environment is required. Installation will fail on 32-bit platforms.
| Package | Version |
|---|---|
teradataml |
>=20.00.00.10 |
requests |
≥ 2.33.0 |
oauthlib |
≥ 3.2.2 |
requests-oauthlib |
≥ 2.0.0 |
pydantic |
≥ 2.10.6 |
PyYAML |
≥ 6.0.2 |
pandas |
≥ 0.22 |
All SDK clients accept the same authentication objects, imported from the top-level package:
from teradata_agentstack import ClientCredentialsAuth, DeviceCodeAuth, BearerAuth
from teradata_agentstack._auth_modes import BasicAuthauth = ClientCredentialsAuth(
auth_token_url="https://your-sso/token",
auth_client_id="your_client_id",
auth_client_secret="your_client_secret"
)auth = DeviceCodeAuth(
auth_token_url="https://your-sso/token",
auth_device_auth_url="https://your-sso/device_authorization",
auth_client_id="your_client_id"
)Tokens are cached at
~/.teradataml/sdk/.tokenand reused on subsequent calls.
auth = BearerAuth(auth_bearer="your_bearer_token")auth = BasicAuth(username="user", password="pass")Each configuration value (base_url, auth, ssl_verify) is resolved in the following order. The first source that provides a value wins:
- Constructor arguments — values passed directly to the client (e.g.,
base_url=...,auth=...). - Environment variables — values read from the process environment (e.g.,
BASE_URL,BASE_API_AUTH_MODE). - YAML config file — values loaded from the config file (explicit
config_filepath, or the default~/.teradataml/sdk/config.yaml).
If none of the three sources supplies a required value, a
TeradataMlExceptionis raised.
You can configure authentication without passing an auth object by setting environment variables:
| Variable | Description |
|---|---|
BASE_URL |
Base URL of the API endpoint |
BASE_API_AUTH_MODE |
client_credentials, device_code, bearer, or basic |
BASE_SSL_VERIFY |
true or false |
BASE_API_AUTH_CLIENT_ID |
OAuth2 client ID |
BASE_API_AUTH_CLIENT_SECRET |
OAuth2 client secret |
BASE_API_AUTH_TOKEN_URL |
OAuth2 token endpoint URL |
BASE_API_AUTH_DEVICE_AUTH_URL |
OAuth2 device authorization URL |
BASE_API_AUTH_BEARER_TOKEN |
Static bearer token |
# config.yaml
base_url: https://your-server
ssl_verify: true
auth_mode: client_credentials
auth_client_id: your_client_id
auth_client_secret: your_client_secret
auth_token_url: https://your-sso/tokenPass the path using the config_file argument on any client.
from teradata_agentstack import BearerAuth
from teradata_agentstack.sqlgen import SqlGenClient
auth = BearerAuth(auth_bearer="your_bearer_token")
client = SqlGenClient(
base_url="http://your-server:port",
auth=auth,
hostname="your_db_host",
database="your_database",
vectorstore="your_vectorstore",
ssl_verify=False
)from teradata_agentstack import DeviceCodeAuth
from teradata_agentstack.agentops import AgentOpsClient
from teradata_agentstack.agentops import Definitions, Deployments, Secrets, Health
from teradata_agentstack.agentops.models import (
AgentDefinitionCreateRequest,
DeploymentCreateRequest,
)
auth = DeviceCodeAuth(
auth_token_url="https://your-sso/token",
auth_device_auth_url="https://your-sso/device_authorization",
auth_client_id="your_client_id"
)
client = AgentOpsClient(
base_url="https://your-agentops-server",
auth=auth,
workspace_id="your-workspace-id",
namespace="your-k8s-namespace"
)
# Create API instances
agent_definitions = Definitions(client=client)
deployments = Deployments(client=client)
secrets = Secrets(client=client)
# Create an agent definition — pass Pydantic model directly to body=
created = agent_definitions.create(
body=AgentDefinitionCreateRequest(
name="my-agent",
framework="LangGraph",
artifacts={"storage_type": "zip"},
),
file="/path/to/agent.zip",
)
# Poll until status reaches terminal state (published/failed)
agent_definitions.poll(id=created.id)
# Create a deployment
deployment = deployments.create(body=DeploymentCreateRequest(...))
# Poll until deployment is active/failed/stopped
deployments.poll(id=deployment.agent_id)Note: The old class names (
AgentDefinitions,AgentDeployments,AgentSecrets) still work as backward-compatible aliases.
### Ray Cluster Management SDK
```python
from teradata_agentstack import ClientCredentialsAuth
from teradata_agentstack.rayops import RayClusterManagementClient
auth = ClientCredentialsAuth(
auth_token_url="https://your-sso/token",
auth_client_id="your_client_id",
auth_client_secret="your_client_secret"
)
client = RayClusterManagementClient(
base_url="https://your-ray-server",
auth_data=auth
)
from teradata_agentstack._auth_modes import BearerAuth
from teradata_agentstack.agento11y import AgentO11yClient
auth = BearerAuth(auth_bearer="your_bearer_token")
client = AgentO11yClient(
base_url="https://your-agento11y-server",
auth=auth,
project_id="your-project-id"
)from teradata_agentstack._auth_modes import BearerAuth
from teradata_agentstack.access_manager import AccessManagerClient
auth = BearerAuth(auth_bearer="your_bearer_token")
client = AccessManagerClient(
base_url="https://your-server:9876",
auth=auth
)from teradata_agentstack import ClientCredentialsAuth
from teradata_agentstack.inference_engine import InferenceEngineClient
auth = ClientCredentialsAuth(
auth_token_url="https://your-sso/token",
auth_client_id="your_client_id",
auth_client_secret="your_client_secret"
)
client = InferenceEngineClient(
base_url="https://your-inference-server",
auth=auth,
workspace="your-workspace"
)from teradata_agentstack import ClientCredentialsAuth
from teradata_agentstack.mcp_management import MCPManagementClient
auth = ClientCredentialsAuth(
auth_token_url="https://your-sso/token",
auth_client_id="your_client_id",
auth_client_secret="your_client_secret"
)
client = MCPManagementClient(
base_url="https://your-mcp-server",
auth=auth
)from teradata_agentstack._auth_modes import BasicAuth
from teradata_agentstack.mcp_endpoint_management import MCPEndpointManagementClient
auth = BasicAuth(username="user", password="pass")
client = MCPEndpointManagementClient(
base_url="https://your-mcp-server:8001",
auth=auth
)All SDK modules support passing Pydantic models directly to request body parameters. The SDK automatically serializes models before sending:
from teradata_agentstack.agentops.models import AgentDefinitionCreateRequest
# Pass Pydantic model directly — no need to call .model_dump()
result = agent_definitions.create(
body=AgentDefinitionCreateRequest(name="my-agent", framework="LangGraph", ...),
file="/path/to/agent.zip",
)
# Equivalent to manually serializing (still supported)
result = agent_definitions.create(
body=AgentDefinitionCreateRequest(...).model_dump_json(by_alias=True, exclude_unset=True),
file="/path/to/agent.zip",
)Some SDK classes support a .poll() method for resources that are processed asynchronously:
| Module | Class | Terminal States | Success States |
|---|---|---|---|
agentops |
Definitions |
published, failed |
published |
agentops |
Deployments |
active, failed, stopped |
active |
# Poll until agent definition is published (or failed)
result = agent_definitions.poll(id=agent_def_id, interval=5, max_attempts=20)
# Poll until deployment is active (or failed/stopped)
result = deployments.poll(id=deployment_id, interval=10, max_attempts=30)Parameters:
id(required): Resource ID to pollinterval(optional): Seconds between polls (default varies by resource)max_attempts(optional): Maximum attempts before timeout
Every SDK module exposes a blueprint() function that prints the dynamically generated classes available for that module:
from teradata_agentstack.agentops import blueprint
blueprint()
# ----------------------------------------------------------------
# Available classes for AgentOps SDK:
# * teradata_agentstack.agentops.Definitions
# * teradata_agentstack.agentops.Deployments
# ...
# ----------------------------------------------------------------When you import an SDK module (e.g., from teradata_agentstack.agentops import AgentOpsClient), the module:
- Reads the bundled OpenAPI JSON specification file.
- Converts each tag into a CamelCase Python class (unrecognized tags fall into
DefaultApi). - Converts each operationId into a snake_case method on the corresponding class.
- Validates parameters at call time — checking for required args, correct types, and permitted enum values.
All method arguments must be passed as keyword arguments (positional arguments are not supported).
- Only keyword arguments are accepted in generated API methods; positional arguments are not supported.
- Validations are performed for
string,integer,number,boolean,array, andobjectparameter types. - Pydantic models can be passed directly to
bodyparameters — the SDK auto-serializes them. - TLS certificate verification is enabled by default. Disable only in trusted development environments (
ssl_verify=False).
Copyright 2026 Teradata. All rights reserved. Teradata Confidential and Trade Secret.