Metadata-Version: 2.4
Name: datavibe
Version: 0.1.0
Summary: DataVibe AI Output Governance SDK — Python
Project-URL: Homepage, https://datavibe.cc
Project-URL: Documentation, https://datavibe.cc/docs/integration
Project-URL: Repository, https://github.com/Kshitijbhatt1998/datavibe-monorepo
Project-URL: Bug Tracker, https://github.com/Kshitijbhatt1998/datavibe-monorepo/issues
License: MIT
Keywords: ai,compliance,governance,llm,safety
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: httpx>=0.25.0
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.20.0; extra == 'anthropic'
Provides-Extra: dev
Requires-Dist: langchain-core>=0.2.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Provides-Extra: langchain
Requires-Dist: langchain-core>=0.2.0; extra == 'langchain'
Provides-Extra: openai
Requires-Dist: openai>=1.0.0; extra == 'openai'
Description-Content-Type: text/markdown

# datavibe

**Official Python SDK for [DataVibe](https://datavibe.cc) — AI Execution Security Gateway.**

DataVibe intercepts AI-generated outbound content before it reaches customers. Policy scan → human approval queue → tamper-evident audit log. One API call.

[![PyPI version](https://img.shields.io/pypi/v/datavibe)](https://pypi.org/project/datavibe/)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://pypi.org/project/datavibe/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

---

## Architecture

Your LLM API keys never leave your infrastructure. DataVibe only receives the text your model produced.

```text
Your system:
  response = openai_client.chat.completions.create(...)
             ↑ your key, your model, your network

  verdict = await datavibe.acheck(content=response.choices[0].message.content)
            ↑ only the generated text reaches DataVibe
```

---

## Install

```bash
pip install datavibe
# with LangChain support
pip install datavibe[langchain]
# with OpenAI proxy helper
pip install datavibe[openai]
```

---

## Quickstart

```python
import os
from datavibe import DataVibeClient

client = DataVibeClient(api_key=os.environ["DATAVIBE_API_KEY"])  # dv_live_...
```

Get your API key at [app.datavibe.cc/settings/api-keys](https://app.datavibe.cc/settings/api-keys).

---

## Three APIs

### `acheck()` — Governance verdict on any AI output

```python
import openai
from datavibe import DataVibeClient

openai_client = openai.AsyncOpenAI()  # your key stays here
datavibe = DataVibeClient(api_key=os.environ["DATAVIBE_API_KEY"])

response = await openai_client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Write a sales email to Acme Corp."}],
)
ai_output = response.choices[0].message.content

verdict = await datavibe.acheck(
    content=ai_output,
    content_type="email",
    source_model="gpt-4o",  # model name only — never an API key
)

if verdict.verdict == "safe":
    await send_email(ai_output)
elif verdict.verdict == "review_required":
    print(f"Review at: {verdict.review_url}")
else:  # "blocked"
    print(f"Blocked by: {[v.rule for v in verdict.violations]}")
```

### `aintercept()` — Full outbound email governance workflow

```python
result = await datavibe.aintercept(
    recipient=prospect.email,
    subject=ai_subject,
    body_html=ai_generated_email,
    source_model="claude-sonnet-4-6",
    metadata={"deal_id": deal.id, "rep_id": rep.id},
)

if result.status == "BLOCKED":
    await notify_rep(result.policy_violations)
elif result.status == "QUEUED":
    await notify_reviewer(result.review_url)
else:  # SENT
    print(f"Dispatched, action_id: {result.action_id}")
```

### `agenerate_and_check()` — Single-call generate + govern

```python
result = await datavibe.agenerate_and_check(
    messages=[{"role": "user", "content": "Write a sales email to Acme Corp."}],
    content_type="email",
    model="gpt-4o-mini",
)

if result.verdict == "safe":
    await send_email(result.content)
elif result.verdict == "review_required":
    await route_to_approval_queue(result.review_url)
else:
    print(f"Blocked: {[v.rule for v in result.violations]}")
```

---

## LangChain Integration

Install: `pip install datavibe[langchain]`

### Callback Handler (recommended)

Automatically governance-checks every LLM output in your chain.

```python
import os
from datavibe import DataVibeClient
from datavibe.integrations import DataVibeCallbackHandler
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

client = DataVibeClient(api_key=os.environ["DATAVIBE_API_KEY"])
handler = DataVibeCallbackHandler(
    client,
    content_type="email",
    on_blocked=lambda v: print(f"Blocked: {v.violations[0].rule}"),
)

llm = ChatOpenAI(model="gpt-4o")
response = await llm.ainvoke(
    [HumanMessage(content="Write a sales email to Acme Corp.")],
    config={"callbacks": [handler]},
)
```

---

## HIPAA / FINRA / EU AI Act compliance

DataVibe ships compliance policy packs for regulated industries. See [datavibe.cc/governance/packages](https://datavibe.cc/governance/packages).

```python
# Healthcare — intercept patient support bot reply before delivery
result = await datavibe.aintercept(
    recipient=patient.email,
    subject="Re: Your appointment inquiry",
    body_html=bot_generated_reply,
    source_model="claude-haiku-4-5",
    metadata={"patient_id": patient.id, "session_id": session_id},
)

if result.status == "BLOCKED":
    # PHI detected — never sent, escalate to clinical ops
    await escalate_to_clinical_ops(patient.id, result.policy_violations)
```

---

## Error handling

```python
from datavibe.exceptions import DataVibeGatewayTimeoutError

try:
    verdict = await datavibe.acheck(content=ai_output)
except DataVibeGatewayTimeoutError as e:
    # e.retryable is True — safe to retry with backoff
    print(f"Gateway timeout: {e}")
```

---

## Configuration

| Parameter          | Type    | Default                      | Description                                     |
| ------------------ | ------- | ---------------------------- | ----------------------------------------------- |
| `api_key`          | `str`   | required                     | Workspace API key (`dv_live_...`)               |
| `base_url`         | `str`   | `https://gate.datavibe.cc`   | Override the gateway URL                        |
| `timeout_ms`       | `int`   | `10000`                      | Request timeout in milliseconds                 |

---

## Links

- **Dashboard**: [app.datavibe.cc](https://app.datavibe.cc)
- **API docs**: [gate.datavibe.cc/docs](https://gate.datavibe.cc/docs)
- **Integration guide**: [datavibe.cc/docs/integration](https://datavibe.cc/docs/integration)
- **TypeScript SDK**: [`@datavibe/sdk` on npm](https://www.npmjs.com/package/@datavibe/sdk)

---

## License

MIT © [DataVibe](https://datavibe.cc)
