Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
c7efaa2
switch to create pattern
jeff-hykin Jan 24, 2026
1ce7826
rename ModuleBlueprint to _BlueprintAtom, and ModuleBlueprintSet to B…
jeff-hykin Jan 24, 2026
e273319
add protocol helpers
jeff-hykin Jan 24, 2026
d0458d3
fix lingering name changes
jeff-hykin Jan 24, 2026
4acabab
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 24, 2026
3a550fa
add get_protocol_method_signatures
jeff-hykin Jan 25, 2026
3847994
rename ModuleConnection to Stream to align with docs
jeff-hykin Jan 25, 2026
16aa5a5
add ModuleRef to _BlueprintAtomic, and name StreamRef for consistency
jeff-hykin Jan 25, 2026
11d5ad7
-
jeff-hykin Jan 25, 2026
d612393
organize rerun within build
jeff-hykin Jan 25, 2026
23609fe
add missing type hints for RPCClient
jeff-hykin Jan 26, 2026
a9fbb17
remove completely unused variable
jeff-hykin Jan 26, 2026
962aebe
add missing type hints
jeff-hykin Jan 26, 2026
1d79580
fix arg
jeff-hykin Jan 26, 2026
47821e3
Merge branch 'jeff/blueprint/1' into jeff/blueprint/2
jeff-hykin Jan 26, 2026
65b68ad
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 26, 2026
7dc81e3
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 26, 2026
0140d33
-
jeff-hykin Jan 26, 2026
2e475e4
Merge branch 'jeff/blueprint/4' into jeff/blueprint/5
jeff-hykin Jan 26, 2026
4d956ad
improve type hinting for RPCClient
jeff-hykin Jan 26, 2026
2326277
avoid using builtin name as variable name
jeff-hykin Jan 26, 2026
7eb6419
fixup ModuleProxy
jeff-hykin Jan 26, 2026
3068dd9
add _connect_module_refs
jeff-hykin Jan 26, 2026
544a5b1
formatting
jeff-hykin Jan 26, 2026
656c96c
fix typing of static methods and args
jeff-hykin Jan 26, 2026
1132a0f
Merge branch 'jeff/blueprint/1' into jeff/blueprint/2
jeff-hykin Jan 26, 2026
f7c7fac
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 27, 2026
ea1689f
use stable python interfaces
jeff-hykin Jan 27, 2026
12f34cb
fix annotation-protocol in the pytoml
jeff-hykin Jan 27, 2026
f99f545
fix type annotations
jeff-hykin Jan 27, 2026
7b4bcfc
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 27, 2026
3b16bb5
fix test
jeff-hykin Jan 27, 2026
fec03be
Merge branch 'jeff/blueprint/1' into jeff/blueprint/2
jeff-hykin Jan 27, 2026
6fddab1
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 27, 2026
cdcaa80
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 27, 2026
45b1c76
update tests
jeff-hykin Jan 27, 2026
8d63483
one char test fix
jeff-hykin Jan 27, 2026
6e8f095
Merge branch 'jeff/blueprint/1' into jeff/blueprint/2
jeff-hykin Jan 27, 2026
120b94f
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 27, 2026
5422c2b
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 27, 2026
cc53ffc
Merge branch 'jeff/blueprint/4' into jeff/blueprint/5
jeff-hykin Jan 27, 2026
33e8b75
fixup typing
jeff-hykin Jan 27, 2026
4bb8cb0
Merge branch 'dev' into jeff/blueprint/1
jeff-hykin Jan 27, 2026
6f65b4a
backport changes that were made in future branches
jeff-hykin Jan 27, 2026
6097e8e
Merge branch 'jeff/blueprint/1' into jeff/blueprint/2
jeff-hykin Jan 27, 2026
f046a17
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 27, 2026
f785837
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 27, 2026
e6401b1
Merge branch 'jeff/blueprint/4' into jeff/blueprint/5
jeff-hykin Jan 27, 2026
8b22b8f
Merge branch 'jeff/blueprint/5' into jeff/blueprint/6
jeff-hykin Jan 27, 2026
c6bcc1b
fix start/stop test
jeff-hykin Jan 27, 2026
d9cfc6e
Merge branch 'jeff/blueprint/5' into jeff/blueprint/6
jeff-hykin Jan 27, 2026
bbb243e
-
jeff-hykin Jan 27, 2026
f0301a3
fix naming
jeff-hykin Jan 27, 2026
8fb22c5
Merge branch 'jeff/blueprint/2' into jeff/blueprint/3
jeff-hykin Jan 27, 2026
0a283b8
Merge branch 'jeff/blueprint/3' of github.com:dimensionalOS/dimos int…
jeff-hykin Jan 27, 2026
afc64b8
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 27, 2026
b5c3f05
Merge branch 'jeff/blueprint/4' into jeff/blueprint/5
jeff-hykin Jan 27, 2026
1c15617
Merge branch 'jeff/blueprint/5' into jeff/blueprint/6
jeff-hykin Jan 27, 2026
ae3e568
get module refs working!
jeff-hykin Jan 27, 2026
732b51c
-
jeff-hykin Jan 27, 2026
e722671
Merge branch 'jeff/blueprint/6' of https://github.com/dimensionalOS/d…
jeff-hykin Jan 27, 2026
d859394
fix test
jeff-hykin Jan 28, 2026
03ae99f
fix basic tests
jeff-hykin Jan 28, 2026
8baa553
fixup typing
jeff-hykin Jan 28, 2026
e48b814
CI code cleanup
jeff-hykin Jan 28, 2026
914ef88
fix mypy
jeff-hykin Jan 28, 2026
9e5cff3
Merge branch 'jeff/blueprint/3' into jeff/blueprint/4
jeff-hykin Jan 28, 2026
753d7cb
Merge branch 'jeff/blueprint/4' of https://github.com/dimensionalOS/d…
jeff-hykin Jan 28, 2026
1ce80c5
Merge branch 'jeff/blueprint/4' into jeff/blueprint/5
jeff-hykin Jan 28, 2026
6e9d4de
Merge branch 'jeff/blueprint/5' of https://github.com/dimensionalOS/d…
jeff-hykin Jan 28, 2026
49d9346
Merge branch 'jeff/blueprint/5' into jeff/blueprint/6
jeff-hykin Jan 28, 2026
b668ef0
fix mypy
jeff-hykin Jan 28, 2026
5241dca
fix class checks
jeff-hykin Jan 28, 2026
f3947ca
fix weird merge issues
jeff-hykin Jan 28, 2026
a5857aa
rename "connections" to "streams"
jeff-hykin Jan 30, 2026
b95e4a7
fix isclass check
jeff-hykin Jan 30, 2026
84c9cfe
update docs, rename example
jeff-hykin Jan 30, 2026
3afb227
Merge branch 'dev' into jeff/blueprint/6
jeff-hykin Jan 30, 2026
353b04d
fix types by adding deployer protocol
jeff-hykin Jan 30, 2026
48a75d3
CI code cleanup
jeff-hykin Jan 30, 2026
ba702c4
ignore typing issues
jeff-hykin Jan 30, 2026
32a50aa
fix
jeff-hykin Jan 30, 2026
0821b34
add is_module check for test
jeff-hykin Jan 31, 2026
9ec3df9
-
jeff-hykin Jan 31, 2026
f04524d
Merge branch 'jeff/blueprint/6' into jeff/blueprint/7_proto
jeff-hykin Jan 31, 2026
e0db08a
-
jeff-hykin Jan 31, 2026
eeb9e3f
WIP: improving tests
jeff-hykin Jan 31, 2026
ef8145e
Merge branch 'jeff/blueprint/6' into jeff/blueprint/7_proto
jeff-hykin Jan 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ if __name__ == "__main__":
### Blueprints

Blueprints are how robots are constructed on Dimensional; instructions for how to construct and wire modules. You compose them with
`autoconnect(...)`, which connects streams by `(name, type)` and returns a `ModuleBlueprintSet`.
`autoconnect(...)`, which connects streams by `(name, type)` and returns a `Blueprint`.

Blueprints can be composed, remapped, and have transports overridden if `autoconnect()` fails due to conflicting variable names or `In[]` and `Out[]` message types.

Expand Down
4 changes: 2 additions & 2 deletions dimos/agents/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

from dimos.agents.llm_init import build_llm, build_system_message
from dimos.agents.spec import AgentSpec, Model, Provider
from dimos.core import DimosCluster, rpc
from dimos.core import DaskDeployer, rpc
from dimos.protocol.skill.coordinator import SkillCoordinator, SkillState, SkillStateDict
from dimos.protocol.skill.skill import SkillContainer
from dimos.protocol.skill.type import Output
Expand Down Expand Up @@ -369,7 +369,7 @@ def stop(self) -> None:


def deploy(
dimos: DimosCluster,
dimos: DaskDeployer,
system_prompt: str = "You are a helpful assistant for controlling a Unitree Go2 robot.",
model: Model = Model.GPT_4O,
provider: Provider = Provider.OPENAI, # type: ignore[attr-defined]
Expand Down
20 changes: 11 additions & 9 deletions dimos/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import multiprocessing as mp
import signal
import time
from typing import TYPE_CHECKING, cast

from dask.distributed import Client, LocalCluster
from rich.console import Console

import dimos.core.colors as colors
from dimos.core.core import rpc
from dimos.core.deployer_protocol import DeployerProtocol, ModuleProxy
from dimos.core.module import Module, ModuleBase, ModuleConfig, ModuleConfigT
from dimos.core.rpc_client import RPCClient
from dimos.core.stream import In, Out, RemoteIn, RemoteOut, Transport
Expand All @@ -31,7 +33,7 @@
"LCMRPC",
"LCMTF",
"TF",
"DimosCluster",
"DaskDeployer",
"In",
"LCMTransport",
"Module",
Expand Down Expand Up @@ -86,15 +88,15 @@ def teardown(self, worker) -> None: # type: ignore[no-untyped-def]
def patch_actor(actor, cls) -> None: ... # type: ignore[no-untyped-def]


DimosCluster = Client
class DaskDeployer(Client, DeployerProtocol): ...


def patchdask(dask_client: Client, local_cluster: LocalCluster) -> DimosCluster:
def patchdask(dask_client: Client, local_cluster: LocalCluster) -> DaskDeployer:
def deploy( # type: ignore[no-untyped-def]
actor_class,
actor_class: type[Module],
*args,
**kwargs,
):
) -> ModuleProxy:
logger.info("Deploying module.", module=actor_class.__name__)
actor = dask_client.submit( # type: ignore[no-untyped-call]
actor_class,
Expand All @@ -109,7 +111,7 @@ def deploy( # type: ignore[no-untyped-def]
# Register actor deployment in shared memory
ActorRegistry.update(str(actor), str(worker))

return RPCClient(actor, actor_class)
return cast("ModuleProxy", RPCClient(actor, actor_class))

def check_worker_memory() -> None:
"""Check memory usage of all workers."""
Expand Down Expand Up @@ -225,18 +227,18 @@ def close_all() -> None:
dask_client.check_worker_memory = check_worker_memory # type: ignore[attr-defined]
dask_client.stop = lambda: dask_client.close() # type: ignore[attr-defined, no-untyped-call]
dask_client.close_all = close_all # type: ignore[attr-defined]
return dask_client
return dask_client # type: ignore[return-value]


def start(n: int | None = None, memory_limit: str = "auto") -> DimosCluster:
def start(n: int | None = None, memory_limit: str = "auto") -> DaskDeployer:
"""Start a Dask LocalCluster with specified workers and memory limits.

Args:
n: Number of workers (defaults to CPU count)
memory_limit: Memory limit per worker (e.g., '4GB', '2GiB', or 'auto' for Dask's default)

Returns:
DimosCluster: A patched Dask client with deploy(), check_worker_memory(), stop(), and close_all() methods
DaskDeployer: A patched Dask client with deploy(), check_worker_memory(), stop(), and close_all() methods
"""

console = Console()
Expand Down
Loading
Loading