projectdavid — Python SDK
The Python SDK for Project David — the open source, GDPR compliant successor to the OpenAI Assistants API.
Same primitives. Every model. Your infrastructure.
What is Project David?
Project David is a full-scale, containerized LLM orchestration platform built around the same primitives as the OpenAI Assistants API — Assistants, Threads, Messages, Runs, and Tools — but without the lock-in.
- Provider agnostic — Hyperbolic, TogetherAI, Ollama, or any OpenAI-compatible endpoint. Point at any inference provider and the platform normalizes the stream.
- Every model — hosted APIs today, raw local weights tomorrow. Bring your own model.
- Your infrastructure — fully self-hostable, open source, GDPR compliant, security audited.
- Production grade — sandboxed code execution (FireJail), multi-agent delegation, file serving with signed URLs, real-time streaming frontend.
Project Uni5 — the next milestone.
transformers, GGUF, and vLLM adapters that mean a model straight off a training run has a full orchestration platform in minutes. From the lab to enterprise grade orchestration — instantly.
Project Activity & Reach
| Metric | Status |
|---|---|
| Total Downloads | |
| Monthly Reach | |
| Open Source Activity | |
| Analytics | View Live Download Trends on ClickPy → |
Installation
pip install projectdavid
Requirements: Python 3.10+ · A running Project David platform instance
Quick Start
import os
from dotenv import load_dotenv
from projectdavid import Entity
load_dotenv()
client = Entity(
base_url=os.getenv("BASE_URL"), # default: http://localhost:80
api_key=os.getenv("ENTITIES_API_KEY"),
)
# Create an assistant
assistant = client.assistants.create_assistant(
name="my_assistant",
instructions="You are a helpful AI assistant.",
)
# Create a thread and send a message
thread = client.threads.create_thread()
message = client.messages.create_message(
thread_id=thread.id,
role="user",
content="Tell me about the latest trends in AI.",
assistant_id=assistant.id,
)
# Create a run
run = client.runs.create_run(
assistant_id=assistant.id,
thread_id=thread.id,
)
# Stream the response
stream = client.synchronous_inference_stream
stream.setup(
user_id=os.getenv("ENTITIES_USER_ID"),
thread_id=thread.id,
assistant_id=assistant.id,
message_id=message.id,
run_id=run.id,
api_key=os.getenv("PROVIDER_API_KEY"),
)
for chunk in stream.stream_chunks(
model="hyperbolic/deepseek-ai/DeepSeek-V3-0324",
timeout_per_chunk=15.0,
):
content = chunk.get("content", "")
if content:
print(content, end="", flush=True)
See the Quick Start guide for the event-driven interface, tool calling, and advanced usage.
Why Project David?
| OpenAI Assistants API | LangChain | Project David | |
|---|---|---|---|
| Assistants / Threads / Runs primitives | ✅ | ❌ | ✅ |
| Provider agnostic | ❌ | Partial | ✅ |
| Local model support | ❌ | Partial | ✅ |
| Raw weights → orchestration | ❌ | ❌ | ✅ (Uni5) |
| Sandboxed code execution | ✅ Black box | ❌ | ✅ FireJail PTY |
| Multi-agent delegation | Limited | ❌ | ✅ |
| Self-hostable | ❌ | ✅ | ✅ |
| GDPR compliant | ❌ | N/A | ✅ |
| Security audited | N/A | N/A | ✅ |
| Open source | ❌ | ✅ | ✅ |
| Community Adoption | Proprietary | High |
Supported Inference Providers
Full list of supported providers and endpoints →
Works with any OpenAI-compatible endpoint out of the box — including Ollama for fully local inference.
Environment Variables
| Variable | Description |
|---|---|
ENTITIES_API_KEY |
Your Entities API key |
ENTITIES_USER_ID |
Your user ID |
BASE_URL |
Platform base URL (default: http://localhost:80) |
PROVIDER_API_KEY |
Your inference provider API key |
Documentation
Documentation
| Topic | Link |
|---|---|
| Full Documentation | docs.projectdavid.co.uk |
| Quick Start | docs.projectdavid.co.uk/docs/sdk-quick-start |
| Assistants | docs.projectdavid.co.uk/docs/sdk-assistants |
| Threads | docs.projectdavid.co.uk/docs/sdk-threads |
| Messages | docs.projectdavid.co.uk/docs/sdk-messages |
| Runs | docs.projectdavid.co.uk/docs/sdk-runs |
| Inference | docs.projectdavid.co.uk/docs/sdk-inference |
| Tools | docs.projectdavid.co.uk/docs/sdk-tools |
| Function Calls | docs.projectdavid.co.uk/docs/sdk-function-calls |
| Code Interpreter | docs.projectdavid.co.uk/docs/sdk-code-interpreter |
| Files | docs.projectdavid.co.uk/docs/sdk-files |
| Vector Store | docs.projectdavid.co.uk/docs/sdk-vector-store |
| Stream Contract | docs.projectdavid.co.uk/docs/sdk-stream-contract |
| Providers | docs.projectdavid.co.uk/docs/providers |
Full hosted docs coming at
docs.projectdavid.co.uk
Related Repositories
| Repo | Description |
|---|---|
| projectdavid-core | Runtime API engine |
| projectdavid-platform | Docker orchestration layer |
| projectdavid-common | Shared utilities and validation |
| projectdavid-docs | Documentation site |
| entities_cook_book | Minimal tested examples |
License
Metadata
Release files for projectdavid 1.105.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| projectdavid-1.105.0.tar.gz | 129.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| projectdavid-1.105.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 212.2 kB
Release files / projectdavid-1.105.0.tar.gz
| Download URL | projectdavid-1.105.0.tar.gz |
|---|---|
| Size | 129.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eb1f9aa0b97794695f67c3e34d5dc28cea946e2bcba68645f9db3b709a5c403f
|
|
BLAKE2b-256 checksum How to use checksums |
31c2eb157fe076e53e0221f27def0a8996048b3bb204652f7d175514eb02e996
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / projectdavid-1.105.0-py3-none-any.whl
| Download URL | projectdavid-1.105.0-py3-none-any.whl |
|---|---|
| Size | 82.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d23a1abe0b271d5a510ffff3f46379d101c3c14d78371587c5dc6610d5b91236
|
|
BLAKE2b-256 checksum How to use checksums |
9721744aefcc9e0e6358d67afc7b1146e7433af8cdd6823f62131e9e9ccaf473
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|