Metadata-Version: 2.4
Name: memoair-vapi
Version: 0.1.0
Summary: VAPI Custom Knowledge Base integration for MemoAir voice memory
Project-URL: Homepage, https://memoair.dev
Project-URL: Documentation, https://docs.memoair.dev/voice/integrations/vapi
Project-URL: Repository, https://github.com/memoair/memoair-python
Author-email: MemoAir <hello@memoair.dev>
License-Expression: MIT
Keywords: agents,ai,memoair,memory,vapi,voice,voice-agents
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
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: Topic :: Multimedia :: Sound/Audio :: Speech
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.9
Requires-Dist: memoair-voice>=0.3.2
Provides-Extra: dev
Requires-Dist: black>=23.0.0; extra == 'dev'
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Description-Content-Type: text/markdown

# memoair-vapi

Serve [VAPI's Custom Knowledge Base webhook](https://docs.vapi.ai/knowledge-base/custom-knowledge-base)
from MemoAir voice memory. Phase 1 retrieves from the shared org index.

## Install

```bash
pip install memoair-vapi
```

## Quick start

```python
import json

from memoair_vapi import MemoAirVapiSearch, verify_vapi_signature

search = MemoAirVapiSearch(
    api_key="memoair_pk_...",
    project_id="proj_xxx",
    agent_id="agent_xxx",
    top_k=5,
)

# In your webhook handler (raw_body = exact request bytes):
if not verify_vapi_signature(raw_body, signature_header, secret):
    ...  # return 401

payload = json.loads(raw_body)
documents = await search.handle_request(payload)  # -> {"documents": [...]}
```

`handle_request` dispatches on `message.type`: `knowledge-base-request` returns
documents; any other type is acked with `{}`. A malformed knowledge-base request
raises `VapiWebhookError` (map it to HTTP 400). Retrieval failures degrade to
`{"documents": []}` so a live call never breaks.

A runnable FastAPI server is in [`examples/vapi/`](../../examples/vapi/).

## Docs

https://docs.memoair.dev/voice/integrations/vapi
