Metadata-Version: 2.4
Name: kumoai
Version: 3.0.0.dev202607171833
Summary: AI on the Modern Data Stack
Author-email: "Kumo.AI" <hello@kumo.ai>
License-Expression: MIT
Project-URL: homepage, https://kumo.ai
Project-URL: documentation, https://kumo.ai/docs
Keywords: deep-learning,graph-neural-networks,cloud-data-warehouse
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas
Requires-Dist: pyarrow>=8.0.0
Requires-Dist: requests>=2.28.2
Requires-Dist: urllib3
Requires-Dist: plotly
Requires-Dist: typing_extensions>=4.5.0
Requires-Dist: kumo-api<4.0.0,>=3.0.0
Requires-Dist: tqdm>=4.66.0
Requires-Dist: aiohttp>=3.10.0
Requires-Dist: pydantic>=1.10.21
Requires-Dist: rich>=9.0.0
Requires-Dist: jinja2
Provides-Extra: doc
Requires-Dist: sphinx; extra == "doc"
Requires-Dist: sphinx-book-theme; extra == "doc"
Requires-Dist: sphinx-copybutton; extra == "doc"
Requires-Dist: sphinx-autodoc-typehints; extra == "doc"
Requires-Dist: graphviz; extra == "doc"
Requires-Dist: mermaid-py; extra == "doc"
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-mock; extra == "test"
Requires-Dist: requests-mock; extra == "test"
Provides-Extra: sqlite
Requires-Dist: adbc_driver_sqlite; extra == "sqlite"
Provides-Extra: duckdb
Requires-Dist: duckdb>=1.5.0; extra == "duckdb"
Provides-Extra: snowflake
Requires-Dist: numpy<2.0; extra == "snowflake"
Requires-Dist: snowflake-connector-python; extra == "snowflake"
Requires-Dist: pyyaml; extra == "snowflake"
Requires-Dist: mermaid-py; extra == "snowflake"
Provides-Extra: databricks
Requires-Dist: databricks-sql-connector>=3.0.0; extra == "databricks"
Provides-Extra: sagemaker
Requires-Dist: boto3<2.0,>=1.30.0; extra == "sagemaker"
Provides-Extra: test-sagemaker
Requires-Dist: sagemaker<3.0; extra == "test-sagemaker"
Requires-Dist: protobuf<4.0.0; extra == "test-sagemaker"
Dynamic: license-file
Dynamic: requires-dist

<p align="center">
  <img height="180" src="https://kumo-sdk-public.s3.us-west-2.amazonaws.com/kumo-logo-pink.svg" />
</p>

______________________________________________________________________

The Kumo SDK implements a pythonic interface for users to programmatically
interact with the Kumo machine learning platform
([documentation](https://kumo-ai.github.io/kumo-sdk/docs/#)).

## Installation

The Kumo SDK is available for Python 3.10 to Python 3.14. To install, simply run

```
pip install kumoai
```

Optional database connectors can be installed with extras, for example:

```
pip install kumoai[sqlite]
pip install kumoai[duckdb]
pip install kumoai[snowflake]
```

## Looking up projects

Every SDK session has one active project. You can retrieve another visible
project by its display name or immutable Kumo ID without changing that active
project:

```python
import kumoai

kumoai.init()  # Selects the canonical Default project.
fraud = kumoai.get_project("Fraud Detection")

assert kumoai.current_project().name == "Default"

# Pass the stable ID to project-scoped objects when needed.
events = kumoai.BigQueryConnector(
    name="events",
    project_id="company-data-prod",  # Google Cloud project ID
    dataset_id="events",
    kumo_project_id=fraud.id,         # Kumo project ID
)
```

Use `kumoai.set_project(fraud)` when you do want to change the active project.

## Multi-categorical string columns

For a scalar string containing several categories, set the proven delimiter
on the column. Kumo persists it in the table definition, so metadata
validation, snapshots, and training all split the values identically. Comma,
pipe, semicolon, and tab are supported.

```python
interests = kumoai.Column(
    name="interests",
    stype="multicategorical",
    dtype="string",
    multicategorical_delimiter="|",
)
```

Do not set a delimiter for native `stringlist` or `intlist` columns; their
array structure already separates categories. When metadata inference detects
a delimiter, the SDK retains the inferred value automatically.

## Google identities stay credential-free in the SDK

Administrators assign BigQuery and GCS identities to project-owning groups.
Users can inspect the safe authentication mode and pass the identity to any
number of project connectors, but private keys and workload tokens never enter
SDK code. Workload identity is preferred when the deployment enables it.

```python
identity = kumoai.get_identity("Production Google")
print(identity.config.authentication.mode)
# "workload_identity" or "service_account_key"

events = kumoai.BigQueryConnector(
    name="events",
    project_id="company-data-prod",
    dataset_id="events",
    identity=identity,
)
```

Omit `identity` to ask the server to select the only authorized identity that
can access the exact connector target. Connector constructors never accept
Google keys, source credentials, or access tokens.
