Metadata-Version: 2.5
Name: elbi-core
Version: 0.1.0
Summary: Author data context as code and serve it to agents over MCP.
Project-URL: Homepage, https://github.com/Intelligible/elbi
Project-URL: Documentation, https://intelligible.github.io/elbi/
Project-URL: Source, https://github.com/Intelligible/elbi
Project-URL: Issues, https://github.com/Intelligible/elbi/issues
Project-URL: Changelog, https://github.com/Intelligible/elbi/blob/main/CHANGELOG.md
Author-email: "Intelligible, Inc." <open-source@intelligible.ai>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: agents,data,derivations,llm,mcp
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3 :: Only
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: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: huggingface-hub>=0.30
Requires-Dist: jsonschema>=4.26
Requires-Dist: mlflow-skinny>=3.0
Requires-Dist: model2vec>=0.8
Requires-Dist: numpy>=1.26
Requires-Dist: onnxruntime<1.24,>=1.20; python_version < '3.11'
Requires-Dist: onnxruntime>=1.20; python_version >= '3.11'
Requires-Dist: pyyaml>=6.0
Requires-Dist: tokenizers>=0.20
Requires-Dist: uv>=0.9
Provides-Extra: autogluon
Requires-Dist: autogluon-tabular[catboost,lightgbm,xgboost]==1.5.0; extra == 'autogluon'
Requires-Dist: evidently>=0.7; extra == 'autogluon'
Requires-Dist: flaml[automl]>=2.6; extra == 'autogluon'
Requires-Dist: mlflow>=3.14; extra == 'autogluon'
Requires-Dist: optuna>=4.0; extra == 'autogluon'
Requires-Dist: pandas>=2.2; extra == 'autogluon'
Requires-Dist: psycopg2-binary>=2.9; extra == 'autogluon'
Requires-Dist: scikit-learn>=1.6; extra == 'autogluon'
Requires-Dist: shap>=0.46; extra == 'autogluon'
Provides-Extra: aws
Requires-Dist: boto3>=1.40; extra == 'aws'
Provides-Extra: azure
Requires-Dist: azure-identity>=1.25; extra == 'azure'
Requires-Dist: azure-storage-blob>=12.26; extra == 'azure'
Provides-Extra: bigquery
Requires-Dist: sqlalchemy-bigquery>=1.17; extra == 'bigquery'
Requires-Dist: sqlalchemy>=2.0; extra == 'bigquery'
Provides-Extra: certificate
Requires-Dist: cryptography>=42; extra == 'certificate'
Provides-Extra: cli
Requires-Dist: elbi-cli>=0.1.0; extra == 'cli'
Provides-Extra: data
Requires-Dist: pyarrow>=16.0; extra == 'data'
Provides-Extra: duckdb
Requires-Dist: duckdb>=1.4; extra == 'duckdb'
Requires-Dist: pyarrow>=16.0; extra == 'duckdb'
Provides-Extra: engines
Requires-Dist: duckdb>=1.4; extra == 'engines'
Requires-Dist: polars>=1.40; extra == 'engines'
Requires-Dist: pyarrow>=16.0; extra == 'engines'
Provides-Extra: gcp
Requires-Dist: google-auth>=2.40; extra == 'gcp'
Provides-Extra: ml
Requires-Dist: evidently>=0.7; extra == 'ml'
Requires-Dist: flaml[automl]>=2.6; extra == 'ml'
Requires-Dist: mlflow>=3.14; extra == 'ml'
Requires-Dist: optuna>=4.0; extra == 'ml'
Requires-Dist: pandas>=2.2; extra == 'ml'
Requires-Dist: psycopg2-binary>=2.9; extra == 'ml'
Requires-Dist: scikit-learn>=1.6; extra == 'ml'
Requires-Dist: shap>=0.46; extra == 'ml'
Provides-Extra: mssql
Requires-Dist: pyodbc>=5.3; extra == 'mssql'
Requires-Dist: sqlalchemy>=2.0; extra == 'mssql'
Provides-Extra: mysql
Requires-Dist: pymysql>=1.2; extra == 'mysql'
Requires-Dist: sqlalchemy>=2.0; extra == 'mysql'
Provides-Extra: polars
Requires-Dist: polars>=1.40; extra == 'polars'
Requires-Dist: pyarrow>=16.0; extra == 'polars'
Provides-Extra: postgres
Requires-Dist: psycopg[binary]>=3.3.4; extra == 'postgres'
Requires-Dist: sqlalchemy>=2.0; extra == 'postgres'
Provides-Extra: snowflake
Requires-Dist: snowflake-sqlalchemy>=1.10; extra == 'snowflake'
Requires-Dist: sqlalchemy>=2.0; extra == 'snowflake'
Provides-Extra: sql
Requires-Dist: sqlalchemy>=2.0; extra == 'sql'
Provides-Extra: tabicl
Requires-Dist: evidently>=0.7; extra == 'tabicl'
Requires-Dist: flaml[automl]>=2.6; extra == 'tabicl'
Requires-Dist: mlflow>=3.14; extra == 'tabicl'
Requires-Dist: optuna>=4.0; extra == 'tabicl'
Requires-Dist: pandas>=2.2; extra == 'tabicl'
Requires-Dist: psycopg2-binary>=2.9; extra == 'tabicl'
Requires-Dist: scikit-learn>=1.6; extra == 'tabicl'
Requires-Dist: shap>=0.46; extra == 'tabicl'
Requires-Dist: tabicl>=2; extra == 'tabicl'
Description-Content-Type: text/markdown

# elbi-core

The SDK for building **derivations**: versioned, testable functions that transform
your data and serve the result to AI agents over the
[Model Context Protocol](https://modelcontextprotocol.io).

```bash
pip install elbi-core          # the SDK on its own
pip install "elbi-core[cli]"   # and the `elbi` command line
pip install "elbi-core[data]"  # and columnar formats (parquet)
```

For the chat app and web UI as well, install `elbi` instead.

```python
from elbi import Artifact, Context, Dataset, derivation, serve


@derivation(
    inputs={"sales": Dataset("sales")},
    serve=serve.table(title="Churn risk", max_rows=50),
)
def churn_risk(ctx: Context) -> Artifact:
    """Per-customer churn-risk scores."""
    rows = ctx.input("sales").rows
    scored = [
        {"customer_id": r["customer_id"], "risk": 1 / (1 + float(r["amount"]))}
        for r in rows
    ]
    return Artifact.table(scored)
```

See the [repository README](https://github.com/Intelligible/elbi) and
[the Open Derivation Spec](https://github.com/Intelligible/elbi/tree/main/spec)
for more.

Licensed under [Apache-2.0](https://github.com/Intelligible/elbi/blob/main/LICENSE).
