The runtime for agents that act in the real world.
Project description
dendrux
Python SDK for Dendrux — the framework for building agents with tools, persistence, and observability.
Version: 0.1.0a1
Install
pip install "dendrux[all]" # Everything
pip install "dendrux[anthropic,db]" # Just Anthropic + SQLite
pip install "dendrux[openai,db]" # Just OpenAI + SQLite
Quick Example
import asyncio
from dendrux import Agent, tool
from dendrux.llm.anthropic import AnthropicProvider
@tool()
async def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
async def main():
async with Agent(
provider=AnthropicProvider(model="claude-sonnet-4-6"),
prompt="You are a calculator.",
tools=[add],
) as agent:
result = await agent.run("What is 15 + 27?")
print(result.answer)
asyncio.run(main())
Providers
| Provider | Import | Use case |
|---|---|---|
| Anthropic | from dendrux.llm.anthropic import AnthropicProvider |
Claude models |
| OpenAI | from dendrux.llm.openai import OpenAIProvider |
GPT models + vLLM, SGLang, Groq, Ollama |
| OpenAI Responses | from dendrux.llm.openai_responses import OpenAIResponsesProvider |
GPT + built-in tools (web search) |
| Mock | from dendrux.llm.mock import MockLLM |
Deterministic testing |
API Quick Reference
from pathlib import Path
from dendrux.observers.console import ConsoleObserver
async with Agent(
provider=provider, # Required: LLM provider
prompt="...", # Required: system prompt
tools=[add], # Optional: tool functions
database_url=f"sqlite+aiosqlite:///{Path.home() / '.dendrux' / 'dendrux.db'}",
redact=my_scrubber, # Optional: scrub persisted strings
) as agent:
result = await agent.run(
"What is 15 + 27?",
observer=ConsoleObserver(), # Optional: terminal output
tenant_id="org-123", # Optional: multi-tenant isolation
metadata={"thread": "t1"}, # Optional: your linking data
)
RunResult
result.answer # str | None — the agent's final answer
result.status # RunStatus — SUCCESS, ERROR, MAX_ITERATIONS, WAITING_CLIENT_TOOL, CANCELLED
result.steps # list[AgentStep] — full reasoning chain
result.iteration_count # int — how many loop iterations ran
result.usage # UsageStats — input_tokens, output_tokens, total_tokens
result.run_id # str — unique run identifier (ULID)
result.error # str | None — error message if status is ERROR
Tool Options
@tool() # Basic server tool
@tool(target="client") # Client-side — agent pauses
@tool(max_calls_per_run=3) # Limit calls per run
@tool(timeout_seconds=120) # Custom timeout (default 120s)
@tool(parallel=False) # Run alone, not concurrently
Full Documentation
See the full documentation on GitHub for provider setup, configuration, database guide, CLI, dashboard, observer system, and examples.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dendrux-0.2.0a6.tar.gz
(1.7 MB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dendrux-0.2.0a6.tar.gz.
File metadata
- Download URL: dendrux-0.2.0a6.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a586cef5c5f203ffb132fa6dd69b112d98393d2a5e3642667bd1a41e1d19197d
|
|
| MD5 |
ba958f2ec9c6c7503c4b2fe795b5dd06
|
|
| BLAKE2b-256 |
e112466b4a55c2a30694ecb1de894e1fea65c6927ea5af34347300b5ca20f278
|
File details
Details for the file dendrux-0.2.0a6-py3-none-any.whl.
File metadata
- Download URL: dendrux-0.2.0a6-py3-none-any.whl
- Upload date:
- Size: 1.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c80d275a8b6985045045dd1699ab5d9400fcb8d0cb666b776c764f45d718e62
|
|
| MD5 |
a7fe2335592e4824127f5d9f83bcb22f
|
|
| BLAKE2b-256 |
c36999ea8b24e7e0b9d12eb194148e983ab25e53650bb10b40c68eb3960b8d70
|