SDK to build kin used in DigitalKin
Project description
DigitalKin Python SDK
The DigitalKin Python SDK for building and managing modules within the DigitalKin agentic mesh. Create custom Tools and Archetypes that communicate over gRPC, register with a service mesh, and scale independently.
Features
- Async-native gRPC module system — every module is a gRPC server built on
grpciowith full async support - Typed module contracts — Pydantic models for Input, Output, Setup, and Secret schemas with protocol-based trigger dispatch
- Module-to-module communication — tools and archetypes discover each other via the registry and exchange requests over gRPC
- Tool resolution — archetypes dynamically resolve and invoke tool modules at runtime
- Admission queue & backpressure — built-in request admission with configurable concurrency limits
- Healthcheck protocols — automatic ping, services, and status healthcheck triggers registered on every module
- Profiling — optional
[profiling]extra with asyncio-inspector, pyinstrument, viztracer, and yappi - Batched history writes — efficient storage writes for conversation history
- Redis Streams — durable message passing, crash recovery, and reconnection
Installation
# With uv (recommended)
uv add digitalkin
# With pip
pip install digitalkin
Optional extras:
# Async profiling tools
uv add "digitalkin[profiling]"
# uvloop for faster event loop
uv add "digitalkin[performance]"
Quick Start
1. Define your models
from pydantic import BaseModel
from digitalkin.models.module.base_types import DataModel, DataTrigger
class MessageInput(DataTrigger):
protocol: str = "message"
content: str
class InputModel(DataModel[MessageInput]):
root: MessageInput
class MessageOutput(DataTrigger):
protocol: str = "message"
reply: str
class OutputModel(DataModel[MessageOutput]):
root: MessageOutput
2. Create a module and trigger
from digitalkin import ArchetypeModule, ModuleContext, TriggerHandler
from digitalkin.models.module.setup_types import SetupModel
class MyArchetype(ArchetypeModule[InputModel, OutputModel, SetupModel, BaseModel]):
async def initialize(self, context: ModuleContext, setup_data: SetupModel) -> None:
pass
async def cleanup(self, context: ModuleContext) -> None:
pass
@MyArchetype.register
class MessageTrigger(TriggerHandler[InputModel, SetupModel, OutputModel]):
protocol = "message"
input_format = InputModel
output_format = OutputModel
def __init__(self, context: ModuleContext) -> None:
super().__init__(context)
async def handle(
self,
input_data: InputModel,
setup_data: SetupModel,
context: ModuleContext,
) -> None:
output = OutputModel(root=MessageOutput(reply=f"Echo: {input_data.root.content}"))
await self.send_message(context, output)
3. Run the server
import asyncio
from digitalkin.grpc_servers.module_server import ModuleServer
async def main() -> None:
server = ModuleServer(MyArchetype)
await server.start_async()
await server.await_termination()
asyncio.run(main())
Redis Gateway
The embedded gateway enables real-time bidirectional communication between modules via Redis Streams, with crash recovery and horizontal scaling.
- Durable Streaming: Output persisted to Redis Streams — reconnection via
from_seq. - Zero-Copy Proto: Binary proto serialization to Redis — no JSON intermediary.
- Horizontal Scaling: Each module instance embeds its own gateway. Scale by adding replicas behind a load balancer.
Development
Prerequisites
Setup
git clone --recurse-submodules https://github.com/DigitalKin-ai/digitalkin.git
cd digitalkin
task setup-dev
source .venv/bin/activate
Common Tasks
task linter # Format + lint (ruff) + type check (mypy)
task check # Linter + mypy + tests
task run-tests # Run pytest via Docker
task build-package # Build distribution
task bump-version -- patch|minor|major
task docs-serve # Serve docs locally (mkdocs)
task docs-build # Build docs
task generate-certificates # Generate mTLS certs for gRPC
task clean # Remove build artifacts + __pycache__
task clean-all # Above + remove .venv
Publishing Process
- Update code and commit changes (following conventional branch/commit standard).
- Use
task bump-version -- major|minor|patchto commit the new version. - Use GitHub "Create Release" workflow to publish the new version.
- Workflow automatically publishes to Test PyPI and PyPI.
License
This project is licensed under the terms specified in the LICENSE file.
For more information, visit our Documentation or report issues on our Issues page.
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
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 digitalkin-1.0.0.dev11.tar.gz.
File metadata
- Download URL: digitalkin-1.0.0.dev11.tar.gz
- Upload date:
- Size: 242.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60c1e9354195840e906325f2b5dd48741f36b387bf7634e70175fa9b5475a64f
|
|
| MD5 |
39e8defb12be40cb075f902fc5b44949
|
|
| BLAKE2b-256 |
365c2c27dd6bfaec17fa8c70dbfe4f0ef9f0438d9743db173d517ac51fb54b09
|
Provenance
The following attestation bundles were made for digitalkin-1.0.0.dev11.tar.gz:
Publisher:
release.yml on DigitalKin-ai/digitalkin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
digitalkin-1.0.0.dev11.tar.gz -
Subject digest:
60c1e9354195840e906325f2b5dd48741f36b387bf7634e70175fa9b5475a64f - Sigstore transparency entry: 1601846526
- Sigstore integration time:
-
Permalink:
DigitalKin-ai/digitalkin@81458640de31fb81bb95d021a910fe6a14cb78c7 -
Branch / Tag:
refs/tags/v1.0.0.dev11 - Owner: https://github.com/DigitalKin-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@81458640de31fb81bb95d021a910fe6a14cb78c7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file digitalkin-1.0.0.dev11-py3-none-any.whl.
File metadata
- Download URL: digitalkin-1.0.0.dev11-py3-none-any.whl
- Upload date:
- Size: 332.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c26c89ef1644a51452590371ed0eae2778570676905841179ce57e2fbf4a8588
|
|
| MD5 |
de3585664c348fe96f097a1cd6edf97d
|
|
| BLAKE2b-256 |
f4de50f141e1af77161a48d293e71c887a542489925c685c898055aba04798ad
|
Provenance
The following attestation bundles were made for digitalkin-1.0.0.dev11-py3-none-any.whl:
Publisher:
release.yml on DigitalKin-ai/digitalkin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
digitalkin-1.0.0.dev11-py3-none-any.whl -
Subject digest:
c26c89ef1644a51452590371ed0eae2778570676905841179ce57e2fbf4a8588 - Sigstore transparency entry: 1601846532
- Sigstore integration time:
-
Permalink:
DigitalKin-ai/digitalkin@81458640de31fb81bb95d021a910fe6a14cb78c7 -
Branch / Tag:
refs/tags/v1.0.0.dev11 - Owner: https://github.com/DigitalKin-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@81458640de31fb81bb95d021a910fe6a14cb78c7 -
Trigger Event:
release
-
Statement type: