Skip to content

Latest commit

 

History

History
123 lines (99 loc) · 3.14 KB

File metadata and controls

123 lines (99 loc) · 3.14 KB

Configuration

Dimos provides a Configurable base class. See service/spec.py.

This allows using pydantic models to specify configuration structure and default values per module.

from pydantic import ValidationError

from dimos.protocol.service.spec import BaseConfig, Configurable
from rich import print

class Config(BaseConfig):
    x: int = 3
    hello: str = "world"

class MyClass(Configurable):
    config: Config

myclass1 = MyClass()
print(myclass1.config)

# can easily override
myclass2 = MyClass(hello="override")
print(myclass2.config)

# we will raise an error for unspecified keys
try:
    myclass3 = MyClass(something="else")
except (TypeError, ValidationError) as e:
    print(f"Error: {e}")
Config(x=3, hello='world')
Config(x=3, hello='override')
Error: 1 validation error for Config
something
  Extra inputs are not permitted
    For further information visit
https://errors.pydantic.dev/2.12/v/extra_forbidden

Configurable Modules

Modules inherit from Configurable, so all of the above applies. Module configs should inherit from ModuleConfig (core/module.py), which includes shared configuration for all modules like transport protocols, frame IDs, etc.

from dimos.core.core import rpc
from dimos.core.module import Module, ModuleConfig
from dimos.core.stream import In, Out
from rich import print

class Config(ModuleConfig):
    frame_id: str = "world"
    publish_interval: float = 0
    voxel_size: float = 0.05
    device: str = "CUDA:0"

class MyModule(Module):
    config: Config

    def __init__(self, **kwargs) -> None:
        super().__init__(**kwargs)
        print(self.config)


myModule = MyModule(frame_id="frame_id_override", device="CPU")

# In production, use dimos.deploy() instead:
# myModule = dimos.deploy(MyModule, frame_id="frame_id_override")
Config(
    rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>,
    default_rpc_timeout=120.0,
    rpc_timeouts={'build': 86400.0, 'start': 1200.0},
    tf_transport=<class 'dimos.protocol.tf.tf.LCMTF'>,
    frame_id_prefix=None,
    frame_id='frame_id_override',
    g=GlobalConfig(
        robot_ip=None,
        robot_ips=None,
        xarm7_ip=None,
        xarm6_ip=None,
        can_port=None,
        simulation=False,
        replay=False,
        replay_dir='go2_sf_office',
        new_memory=False,
        viewer='rerun',
        n_workers=2,
        memory_limit='auto',
        mujoco_camera_position=None,
        mujoco_room=None,
        mujoco_room_from_occupancy=None,
        mujoco_global_costmap_from_occupancy=None,
        mujoco_global_map_from_pointcloud=None,
        mujoco_start_pos='-1.0, 1.0',
        mujoco_steps_per_frame=7,
        robot_model=None,
        robot_width=0.3,
        robot_rotation_diameter=0.6,
        nerf_speed=1.0,
        planner_robot_speed=None,
        mcp_port=9990,
        dtop=False,
        obstacle_avoidance=True,
        detection_model='moondream',
        listen_host='127.0.0.1'
    ),
    publish_interval=0,
    voxel_size=0.05,
    device='CPU'
)