Metadata-Version: 2.4
Name: datarobot-genai
Version: 0.13.2
Summary: Generic helpers for GenAI
Author: DataRobot, Inc.
License: Apache-2.0
Project-URL: Homepage, https://github.com/datarobot-oss/datarobot-genai
Requires-Python: <3.14,>=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: AUTHORS
Provides-Extra: core
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "core"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "core"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "core"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "core"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "core"
Requires-Dist: ragas<0.4.0,>=0.3.8; extra == "core"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "core"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "core"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "core"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "core"
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5; extra == "core"
Requires-Dist: opentelemetry-instrumentation-threading<1.0.0,>=0.43b0; extra == "core"
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.14; extra == "core"
Requires-Dist: pyarrow==21.0.0; extra == "core"
Provides-Extra: crewai
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "crewai"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "crewai"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "crewai"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "crewai"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "crewai"
Requires-Dist: ragas<0.4.0,>=0.3.8; extra == "crewai"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "crewai"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "crewai"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "crewai"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "crewai"
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5; extra == "crewai"
Requires-Dist: opentelemetry-instrumentation-threading<1.0.0,>=0.43b0; extra == "crewai"
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.14; extra == "crewai"
Requires-Dist: pyarrow==21.0.0; extra == "crewai"
Requires-Dist: anthropic<1.0.0,~=0.71.0; extra == "crewai"
Requires-Dist: azure-ai-inference<2.0.0,>=1.0.0b9; extra == "crewai"
Requires-Dist: crewai[litellm]<2.0.0,>=1.1.0; extra == "crewai"
Requires-Dist: litellm<2.0.0,>=1.83.0; extra == "crewai"
Requires-Dist: crewai-tools[mcp]<0.77.0,>=0.69.0; extra == "crewai"
Requires-Dist: nvidia-nat-crewai==1.4.1; extra == "crewai"
Requires-Dist: opentelemetry-instrumentation-crewai<1.0.0,>=0.40.5; extra == "crewai"
Requires-Dist: pybase64<2.0.0,>=1.4.2; extra == "crewai"
Provides-Extra: langgraph
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "langgraph"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "langgraph"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "langgraph"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "langgraph"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "langgraph"
Requires-Dist: ragas<0.4.0,>=0.3.8; extra == "langgraph"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "langgraph"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "langgraph"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "langgraph"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "langgraph"
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5; extra == "langgraph"
Requires-Dist: opentelemetry-instrumentation-threading<1.0.0,>=0.43b0; extra == "langgraph"
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.14; extra == "langgraph"
Requires-Dist: pyarrow==21.0.0; extra == "langgraph"
Requires-Dist: langchain-mcp-adapters<0.2.0,>=0.1.12; extra == "langgraph"
Requires-Dist: langgraph<1.1.0,>=1.0.0; extra == "langgraph"
Requires-Dist: langgraph-prebuilt<1.1.0,>=1.0.0; extra == "langgraph"
Requires-Dist: litellm<2.0.0,>=1.83.0; extra == "langgraph"
Requires-Dist: nvidia-nat-langchain==1.4.1; extra == "langgraph"
Requires-Dist: opentelemetry-instrumentation-langchain<1.0.0,>=0.40.5; extra == "langgraph"
Provides-Extra: llamaindex
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "llamaindex"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "llamaindex"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "llamaindex"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "llamaindex"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "llamaindex"
Requires-Dist: ragas<0.4.0,>=0.3.8; extra == "llamaindex"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "llamaindex"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "llamaindex"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "llamaindex"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "llamaindex"
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5; extra == "llamaindex"
Requires-Dist: opentelemetry-instrumentation-threading<1.0.0,>=0.43b0; extra == "llamaindex"
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.14; extra == "llamaindex"
Requires-Dist: pyarrow==21.0.0; extra == "llamaindex"
Requires-Dist: llama-index<0.15.0,>=0.14.0; extra == "llamaindex"
Requires-Dist: llama-index-core<0.15.0,>=0.14.0; extra == "llamaindex"
Requires-Dist: llama-index-llms-langchain<0.8.0,>=0.6.1; extra == "llamaindex"
Requires-Dist: llama-index-llms-litellm<0.7.0,>=0.4.1; extra == "llamaindex"
Requires-Dist: litellm<2.0.0,>=1.83.0; extra == "llamaindex"
Requires-Dist: llama-index-llms-openai<0.7.0,>=0.6.0; extra == "llamaindex"
Requires-Dist: llama-index-tools-mcp<0.5.0,>=0.1.0; extra == "llamaindex"
Requires-Dist: nvidia-nat-llama-index==1.4.1; extra == "llamaindex"
Requires-Dist: opentelemetry-instrumentation-llamaindex<1.0.0,>=0.40.5; extra == "llamaindex"
Requires-Dist: pypdf<7.0.0,>=6.9.2; extra == "llamaindex"
Provides-Extra: nat
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "nat"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "nat"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "nat"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "nat"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "nat"
Requires-Dist: ragas<0.4.0,>=0.3.8; extra == "nat"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "nat"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "nat"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "nat"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "nat"
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5; extra == "nat"
Requires-Dist: opentelemetry-instrumentation-threading<1.0.0,>=0.43b0; extra == "nat"
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.14; extra == "nat"
Requires-Dist: pyarrow==21.0.0; extra == "nat"
Requires-Dist: litellm<2.0.0,>=1.83.0; extra == "nat"
Requires-Dist: nvidia-nat==1.4.1; extra == "nat"
Requires-Dist: nvidia-nat-a2a==1.4.1; extra == "nat"
Requires-Dist: nvidia-nat-opentelemetry==1.4.1; extra == "nat"
Requires-Dist: nvidia-nat-langchain==1.4.1; extra == "nat"
Requires-Dist: nvidia-nat-mcp==1.4.1; extra == "nat"
Requires-Dist: anyio==4.11.0; extra == "nat"
Provides-Extra: auth
Requires-Dist: datarobot[auth]<4.0.0,>=3.10.0; extra == "auth"
Requires-Dist: aiohttp<4.0.0,>=3.13.3; extra == "auth"
Requires-Dist: pydantic<3.0.0,>=2.6.1; extra == "auth"
Provides-Extra: drmcp
Requires-Dist: datarobot[auth]<4.0.0,>=3.10.0; extra == "drmcp"
Requires-Dist: aiohttp<4.0.0,>=3.13.3; extra == "drmcp"
Requires-Dist: pydantic<3.0.0,>=2.6.1; extra == "drmcp"
Requires-Dist: beautifulsoup4<5.0.0,>=4.12.0; extra == "drmcp"
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == "drmcp"
Requires-Dist: tavily-python<1.0.0,>=0.7.20; extra == "drmcp"
Requires-Dist: perplexityai<1.0,>=0.27; extra == "drmcp"
Requires-Dist: pypdf<7.0.0,>=6.9.2; extra == "drmcp"
Requires-Dist: polars<2.0.0,>=1.0.0; extra == "drmcp"
Requires-Dist: pyarrow<22.0.0,>=21.0.0; extra == "drmcp"
Requires-Dist: python-dateutil<3.0.0,>=2.9.0; extra == "drmcp"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "drmcp"
Requires-Dist: pydantic<3.0.0,>=2.6.1; extra == "drmcp"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "drmcp"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "drmcp"
Requires-Dist: aiohttp<4.0.0,>=3.13.3; extra == "drmcp"
Requires-Dist: boto3<2.0.0,>=1.34.0; extra == "drmcp"
Requires-Dist: fastmcp<4.0.0,>=3.2.0; extra == "drmcp"
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "drmcp"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "drmcp"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "drmcp"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "drmcp"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "drmcp"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "drmcp"
Requires-Dist: rich<16.0.0,>=13.0.0; extra == "drmcp"
Requires-Dist: datarobot-asgi-middleware<1.0.0,>=0.2.0; extra == "drmcp"
Requires-Dist: python-dotenv<2.0.0,>=1.1.0; extra == "drmcp"
Requires-Dist: boto3<2.0.0,>=1.34.0; extra == "drmcp"
Requires-Dist: pydantic-settings<3.0.0,>=2.1.0; extra == "drmcp"
Requires-Dist: opentelemetry-api<2.0.0,>=1.22.0; extra == "drmcp"
Requires-Dist: opentelemetry-sdk<2.0.0,>=1.22.0; extra == "drmcp"
Requires-Dist: opentelemetry-exporter-otlp<2.0.0,>=1.22.0; extra == "drmcp"
Requires-Dist: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.22.0; extra == "drmcp"
Requires-Dist: aiohttp-retry<3.0.0,>=2.8.3; extra == "drmcp"
Provides-Extra: drtools
Requires-Dist: datarobot[auth]<4.0.0,>=3.10.0; extra == "drtools"
Requires-Dist: aiohttp<4.0.0,>=3.13.3; extra == "drtools"
Requires-Dist: pydantic<3.0.0,>=2.6.1; extra == "drtools"
Requires-Dist: beautifulsoup4<5.0.0,>=4.12.0; extra == "drtools"
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == "drtools"
Requires-Dist: tavily-python<1.0.0,>=0.7.20; extra == "drtools"
Requires-Dist: perplexityai<1.0,>=0.27; extra == "drtools"
Requires-Dist: pypdf<7.0.0,>=6.9.2; extra == "drtools"
Requires-Dist: polars<2.0.0,>=1.0.0; extra == "drtools"
Requires-Dist: pyarrow<22.0.0,>=21.0.0; extra == "drtools"
Requires-Dist: python-dateutil<3.0.0,>=2.9.0; extra == "drtools"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "drtools"
Requires-Dist: pydantic<3.0.0,>=2.6.1; extra == "drtools"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "drtools"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "drtools"
Requires-Dist: aiohttp<4.0.0,>=3.13.3; extra == "drtools"
Requires-Dist: boto3<2.0.0,>=1.34.0; extra == "drtools"
Provides-Extra: dragent
Requires-Dist: requests<3.0.0,>=2.32.4; extra == "dragent"
Requires-Dist: datarobot<4.0.0,>=3.10.0; extra == "dragent"
Requires-Dist: datarobot-early-access==3.14.0.2026.3.18.162920; extra == "dragent"
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2; extra == "dragent"
Requires-Dist: openai<3.0.0,>=2.0.0; extra == "dragent"
Requires-Dist: ragas<0.4.0,>=0.3.8; extra == "dragent"
Requires-Dist: pyjwt<3.0.0,>=2.12.0; extra == "dragent"
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0; extra == "dragent"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0; extra == "dragent"
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0; extra == "dragent"
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5; extra == "dragent"
Requires-Dist: opentelemetry-instrumentation-threading<1.0.0,>=0.43b0; extra == "dragent"
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.14; extra == "dragent"
Requires-Dist: pyarrow==21.0.0; extra == "dragent"
Requires-Dist: litellm<2.0.0,>=1.83.0; extra == "dragent"
Requires-Dist: nvidia-nat==1.4.1; extra == "dragent"
Requires-Dist: nvidia-nat-a2a==1.4.1; extra == "dragent"
Requires-Dist: nvidia-nat-opentelemetry==1.4.1; extra == "dragent"
Requires-Dist: nvidia-nat-langchain==1.4.1; extra == "dragent"
Requires-Dist: nvidia-nat-mcp==1.4.1; extra == "dragent"
Requires-Dist: anyio==4.11.0; extra == "dragent"
Requires-Dist: fastapi<0.133.0; extra == "dragent"
Requires-Dist: starlette<1.0.0; extra == "dragent"
Provides-Extra: memory
Requires-Dist: mem0ai<2.0.0,>=1.0.4; python_version < "3.13" and extra == "memory"
Dynamic: license-file
Dynamic: provides-extra

<p align="center">
  <a href="https://github.com/datarobot-oss/datarobot-genai">
    <img src="docs/img/datarobot_logo.avif" width="600px" alt="DataRobot Logo"/>
  </a>
</p>
<h3 align="center">DataRobot GenAI Library</h3>

<p align="center">
  <a href="https://www.datarobot.com/">Homepage</a>
  ·
  <a href="https://pypi.org/project/datarobot-genai/">PyPI</a>
  ·
  <a href="https://docs.datarobot.com/en/docs/get-started/troubleshooting/general-help.html">Support</a>
</p>

<p align="center">
  <a href="/LICENSE">
    <img src="https://img.shields.io/github/license/datarobot-oss/datarobot-genai" alt="License">
  </a>
  <a href="https://pypi.org/project/datarobot-genai/">
    <img src="https://img.shields.io/pypi/v/datarobot-genai" alt="PyPI version">
  </a>
</p>


## Features
- Utilities for common GenAI workflows
- Integrations: CrewAI, LangGraph, LlamaIndex, NAT, MCP

## Installation
- Requires Python 3.10–3.13.
- Install:
```bash
pip install --upgrade pip
pip install "datarobot-genai"
```
- Optional extras:
```bash
pip install "datarobot-genai[crewai]"
pip install "datarobot-genai[langgraph]"
pip install "datarobot-genai[llamaindex]"
# Multiple extras
pip install "datarobot-genai[crewai,langgraph,llamaindex]"
```
  Available extras include: `crewai`, `langgraph`, `llamaindex`, `nat`, `drmcp`, `pydanticai`.

## Development
Prerequisites: Python 3.11–3.14, uv, Task CLI, pre-commit.
```bash
uv sync --all-extras --dev
pre-commit install
task test
```

### Semantic versioning
Every change requires a patch version change. It also requires an entry to CHANGELOG.md.
Changes breaking backward compatibility requires a minor version change.

### Test pypi
To build and publish a dev version of a package, comment `/build` on a PR.

## Publishing
- PRs (same-repo): comment `/build` to publish dev builds to TestPyPI (`.devN`).
- Merge to `main`: tags `v{version}` and publishes to PyPI automatically.
- Pushing a `v*` tag also triggers PyPI publish.
- Optional: `task release:tag-and-push` creates and pushes `v{version}` locally.

## Links
- Home: https://github.com/datarobot-oss/datarobot-genai
- PyPI: https://pypi.org/project/datarobot-genai/
- TestPyPI: https://test.pypi.org/project/datarobot-genai/

## License
Apache-2.0
