Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
e902e24
multiprocess experiments
leshy Jun 17, 2025
c5db556
video processing work
leshy Jun 17, 2025
6e2ca79
less verbosity, small changes
leshy Jun 17, 2025
941e02c
lcm Vector3
leshy Jun 18, 2025
7f1e0c6
stricter vector tests
leshy Jun 18, 2025
2a974b1
typing fixes for vector init
leshy Jun 18, 2025
ce81d85
multiple dispatch beartype version of Vector3
leshy Jun 18, 2025
2b6cf21
pep 585 type hints
leshy Jun 18, 2025
f0db57e
correct typing for Vector3
leshy Jun 18, 2025
3699f00
removed Vector3 typevar
leshy Jun 18, 2025
34b3b52
cleaning up typing for mypy
leshy Jun 18, 2025
aebbf2c
resolved all typing issues
leshy Jun 18, 2025
f7ca202
workflow fix
leshy Jun 18, 2025
dba6a39
rebuild py trigger
leshy Jun 18, 2025
edb3b38
added quaternion type
leshy Jun 18, 2025
f01b7ca
euler conversion
leshy Jun 18, 2025
e0d32a1
pitch/yaw/roll accessors for vector3
leshy Jun 18, 2025
4f9b6de
quaternion <-> euler conversions
leshy Jun 18, 2025
719b6e2
mypy check within dev repo
leshy Jun 18, 2025
1402cdc
Merge branch 'lcm_unitree_client' of github.com:dimensionalOS/dimos i…
leshy Jun 18, 2025
0e1bb2f
small vector fixes
leshy Jun 18, 2025
cc77e70
Pose message implemented
leshy Jun 18, 2025
b94477f
vector dimensionality set to 3
leshy Jun 18, 2025
7bc5f69
vector3 simple data storage
leshy Jun 18, 2025
3258d5e
lcm msgs are now installable
leshy Jun 18, 2025
70b534e
vector lcm encode/decode
leshy Jun 19, 2025
c55cda1
mypy precommit is problematic for now
leshy Jun 19, 2025
69027bf
testing LCM encode/decode
leshy Jun 19, 2025
70d08ed
attempt to fix install
leshy Jun 19, 2025
4eb83ad
type check in commit hooks
leshy Jun 19, 2025
51072b8
small msg cleanup
leshy Jun 19, 2025
954df92
protocol spec work, pubsub, rpc, service
leshy Jun 19, 2025
ef71385
new service default config implementation, redis recode
leshy Jun 19, 2025
59e81ba
generic message encoder/decoder sketch
leshy Jun 20, 2025
2dc9a3d
encoder/decoder mixin tests
leshy Jun 20, 2025
ecccef6
better encoder spec
leshy Jun 20, 2025
0517ae1
tests fixed
leshy Jun 20, 2025
d4a7b25
LCM encoder work
leshy Jun 20, 2025
a6e337b
tests fix
leshy Jun 20, 2025
056dfcb
added type validation to test workflow
leshy Jun 20, 2025
4eaaf59
mypy -v
leshy Jun 20, 2025
d0f3238
mypy should check protocol/ dir
leshy Jun 20, 2025
d3f728a
no verbose mypy
leshy Jun 20, 2025
5117d39
mypy ignore import-not-found
leshy Jun 20, 2025
2fb44ec
streams test fix
leshy Jun 21, 2025
54c7f20
meta api design
leshy Jun 22, 2025
c74c779
actors2
leshy Jun 22, 2025
7e68fcd
full pipeline sketch
leshy Jun 22, 2025
566d2fc
idk
leshy Jun 23, 2025
d5eff21
encode/deode mixin updates
leshy Jun 24, 2025
9aea67c
environment modification for in-image lcm
leshy Jun 24, 2025
2f023a5
unifying pubsub spec
leshy Jun 24, 2025
c7c5c28
pubsub tests passing
leshy Jun 24, 2025
fe8838c
functional unsubscribe for pubsub
leshy Jun 24, 2025
1bd413a
tests/types fixes
leshy Jun 24, 2025
2800312
geometry_msgs updated for new lcm encode/decode API
leshy Jun 24, 2025
861f73e
passing geometry types through LCM in tests
leshy Jun 24, 2025
e829ccc
Merge branch 'dev' into lcm_unitree_client
leshy Jun 28, 2025
b280e61
Merge branch 'dev' into lcm_unitree_client
leshy Jun 28, 2025
c167ce7
image type implemented
leshy Jun 28, 2025
55b2c3c
image and data bugfixes, encoding tests
leshy Jun 28, 2025
fc2b543
starting lidar message conversion
leshy Jun 29, 2025
5c6eebe
removed dataclass from msgs, lidar msg compatible with pointcloud2
leshy Jun 29, 2025
4f05fa2
lidar replay
leshy Jun 29, 2025
99ec461
pointcloud encode/decode test, sensor reply fix, timeseries fix
leshy Jun 29, 2025
9196996
mini changes to sensor replay
leshy Jun 29, 2025
4b5d5ae
Merge branch 'lcm_unitree_client' into dask_lcm_multiprocess
leshy Jun 29, 2025
0fe478f
experimental actor comms
leshy Jun 29, 2025
fcc2fcd
lots of work on reference passing sketch
leshy Jun 30, 2025
e5a17aa
first pubsub pass
leshy Jun 30, 2025
1637e1d
debugging pubsub issue
leshy Jun 30, 2025
833ec1d
vibe fix
leshy Jun 30, 2025
c8d8ea3
lcm vs pickle timing tests
leshy Jun 30, 2025
6b55644
settling down on API
leshy Jun 30, 2025
044c5f5
smart connections
leshy Jun 30, 2025
1023aed
stream introspection
leshy Jun 30, 2025
559664b
remoteOut localOut stream def split
leshy Jun 30, 2025
916e9ef
generic stream pubsub API defined
leshy Jun 30, 2025
15beed6
ioloop issue
leshy Jun 30, 2025
43b0540
custom o3d pointcloud picklers
leshy Jun 30, 2025
ddbc892
need graphs, not trees
leshy Jun 30, 2025
8791dc6
graph connections done
leshy Jul 1, 2025
e57a1ef
tests refactor
leshy Jul 1, 2025
436d3e6
test
leshy Jul 1, 2025
e8bb0dc
Transport protocol sketch
leshy Jul 1, 2025
52a1cf8
let's build the actual robot
leshy Jul 1, 2025
df60de1
actors 3 sketch
leshy Jul 1, 2025
327e73d
clean API
leshy Jul 1, 2025
38b2021
transport passing
leshy Jul 1, 2025
daabc2d
correct stream transport settings passing
leshy Jul 1, 2025
8fbb63c
LCM/Zenoh transport stub
leshy Jul 1, 2025
8cde9e9
pickle lcm transport
leshy Jul 1, 2025
9b5824d
LCM transport working
leshy Jul 1, 2025
4f44189
lcm encoder transport
leshy Jul 1, 2025
ef738ba
finished multiprocess architecture
leshy Jul 1, 2025
51668a7
test fix
leshy Jul 1, 2025
03ca7d6
finalized multiprocess
leshy Jul 1, 2025
74accea
dimos core built
leshy Jul 1, 2025
83336ab
removed multiprocess experiments
leshy Jul 1, 2025
b169519
update dev docker
leshy Jul 1, 2025
19225ec
bug with typing, removed for now
leshy Jul 1, 2025
172f9ac
python needs a rebuild
leshy Jul 1, 2025
084df6d
forgot timestamped type
leshy Jul 2, 2025
04252a2
-e or something
leshy Jul 2, 2025
f383362
small changes. fixed test (no LCM in CI)
leshy Jul 2, 2025
34736df
touch requirements
leshy Jul 2, 2025
feee732
attempting to pass tests
leshy Jul 2, 2025
549d32e
Merge branch 'dev' into dask_lcm_multiprocess
leshy Jul 2, 2025
38b3ad9
debug log in load_one
leshy Jul 2, 2025
bc2c4cb
vector3 is not iterable
leshy Jul 2, 2025
cb6d408
full rebuild
leshy Jul 2, 2025
1bf899c
check disk space if tests have failed
leshy Jul 2, 2025
ff2bf3e
free disk space before running tests
leshy Jul 2, 2025
a057fd9
correct tests disk cleanup
leshy Jul 2, 2025
5bf2564
full build
leshy Jul 2, 2025
0e4f0b5
disabled core test
leshy Jul 3, 2025
fa00cc7
attempting CI dask fix
leshy Jul 3, 2025
8c0076f
checking if we can re-introduce core test with 1 worker
leshy Jul 3, 2025
bf225f3
fixed tests
leshy Jul 3, 2025
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
5 changes: 4 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,8 @@
},
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
}
},
"runArgs": [
"--cap-add=NET_ADMIN"
]
}
1 change: 1 addition & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ jobs:
- .github/workflows/docker.yml
- docker/python/**
- requirements*.txt
- requirements.txt

dev:
- docker/dev/**
Expand Down
29 changes: 23 additions & 6 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,38 @@ permissions:
packages: read

jobs:

# cleanup:
# runs-on: dimos-runner-ubuntu-2204
# steps:
# - name: exit early
# if: ${{ !inputs.should-run }}
# run: |
# exit 0

# - name: Free disk space
# run: |
# sudo rm -rf /opt/ghc
# sudo rm -rf /usr/share/dotnet
# sudo rm -rf /usr/local/share/boost
# sudo rm -rf /usr/local/lib/android

run-tests:
runs-on: dimos-runner-ubuntu-2204

container:
image: ghcr.io/dimensionalos/${{ inputs.dev-image }}

steps:
- name: exit early
if: ${{ !inputs.should-run }}
run: |
exit 0

- uses: actions/checkout@v4

- name: Run tests
run: |
git config --global --add safe.directory '*'
/entrypoint.sh bash -c "${{ inputs.cmd }}"

- name: check disk space
if: failure()
run: |
df -h

13 changes: 13 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,17 @@ repos:
name: format json
args: [ --autofix, --no-sort-keys ]

# - repo: local
# hooks:
# - id: mypy
# name: Type check
# # possible to also run within the dev image
# #entry: "./bin/dev mypy"
# entry: "./bin/mypy"
# language: python
# additional_dependencies: ["mypy==1.15.0", "numpy>=1.26.4,<2.0.0"]
# types: [python]

- repo: local
hooks:
- id: lfs_check
Expand All @@ -48,3 +59,5 @@ repos:
pass_filenames: false
entry: bin/lfs_check
language: script


3 changes: 3 additions & 0 deletions data/.lfs/video.tar.gz
Git LFS file not shown
51 changes: 51 additions & 0 deletions dimos/core/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import multiprocessing as mp

import pytest
from dask.distributed import Client, LocalCluster

import dimos.core.colors as colors
from dimos.core.core import In, Out, RemoteOut, rpc
from dimos.core.module_dask import Module
from dimos.core.transport import LCMTransport, ZenohTransport, pLCMTransport


def patchdask(dask_client: Client):
def deploy(actor_class, *args, **kwargs):
actor = dask_client.submit(
actor_class,
*args,
**kwargs,
actor=True,
).result()

actor.set_ref(actor).result()
print(colors.green(f"Subsystem deployed: {actor}"))
return actor

dask_client.deploy = deploy
return dask_client


@pytest.fixture
def dimos():
process_count = 3 # we chill
client = start(process_count)
yield client
stop(client)


def start(n):
if not n:
n = mp.cpu_count()
print(colors.green(f"Initializing dimos local cluster with {n} workers"))
cluster = LocalCluster(
n_workers=n,
threads_per_worker=3,
)
client = Client(cluster)
return patchdask(client)


def stop(client: Client):
client.close()
client.cluster.close()
43 changes: 43 additions & 0 deletions dimos/core/colors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Copyright 2025 Dimensional Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


def green(text: str) -> str:
"""Return the given text in green color."""
return f"\033[92m{text}\033[0m"


def blue(text: str) -> str:
"""Return the given text in blue color."""
return f"\033[94m{text}\033[0m"


def red(text: str) -> str:
"""Return the given text in red color."""
return f"\033[91m{text}\033[0m"


def yellow(text: str) -> str:
"""Return the given text in yellow color."""
return f"\033[93m{text}\033[0m"


def cyan(text: str) -> str:
"""Return the given text in cyan color."""
return f"\033[96m{text}\033[0m"


def orange(text: str) -> str:
"""Return the given text in orange color."""
return f"\033[38;5;208m{text}\033[0m"
Loading