Releases: dora-rs/dora
Dora v0.3.7
Making Dora simpler
dora run
command now removes the need fordora up
and removes the need for background process: #703
dora run examples/camera/dataflow.yml
- You can now build, run and start URL dataflow. #682
dora build/start https://raw.githubusercontent.com/dora-rs/dora/refs/heads/main/examples/camera/dataflow.yml
- You can now pip install the dora cli for Linux, as well as all rust written nodes. #706
pip install dora-rs-cli
pip install dora-rerun
Releasing additional nodes
- Vision Language Model (VLM): Qwenvl2 with data recording and finetuning with llama factory
dora build examples/vlm/dataflow.yml
dora run examples/vlm/dataflow.yml
Screencast.from.2024-11-18.04-23-10.webm
- Audio: Whisper Turbo, Sidero Voice Activity Detection(VAD), Opus translation
speech-to-text
example:
dora build examples/speech-to-text/dataflow.yml
dora run examples/speech-to-text/dataflow.yml
Screencast.from.2024-11-18.04-28-33.webm
translation
example:
dora build examples/translation/dataflow_en_fr.yml
dora run examples/translation/dataflow_en_fr.yml
- visualisation: Dora rerun with 3D visualisation. Time series and now in pip.
dora build examples/piper/play_dummy_inference.yml
dora run examples/piper/play_dummy_inference.yml
Screencast.from.2024-11-18.05-30-19.webm
Please checkout piper examples.
- Hardware: Agilex Piper sdk, Astra camera with PyOrbbeckSdk and tracer mobile base
What's Changed
- Post release
0.3.6
small fix by @haixuanTao in #638 - Changes to template by @XxChang in #639
- Add appending to PATH instruction inside installation script by @Hennzau in #641
- Make the benchmark run in release and at full speed by @Hennzau in #644
- Use the new node syntax for examples dataflow by @Hennzau in #643
- Improve beginner experience by @Hennzau in #645
- improve node-hub pytest by @haixuanTao in #640
- Fix not-null terminated string print within C template by @haixuanTao in #654
- Raise error if dora-coordinator is not connected when calling
dora destroy
by @haixuanTao in #655 - Coordinator stopped on bad control command by @Hennzau in #650
- Add support for Qwenvl2 by @haixuanTao in #646
- Fix distributed node by @haixuanTao in #658
- Small install script update for bash by @haixuanTao in #657
- Add additional image encoding by @haixuanTao in #661
dora-echo
replicate the topic received with the topic send by @haixuanTao in #663- Update dependencies by @renovate in #656
- Bump pyo3 and arrow versions by @haixuanTao in #667
- Fix ros2 bridge incompatibility with CI Ubuntu 24 and with pyo3 22 by @haixuanTao in #670
- Add transformers version pinning for qwenvl2 by @haixuanTao in #665
- Remove cli dataflow path check by @haixuanTao in #662
- Better error handling for unknown output by @haixuanTao in #675
- Fix llama recorder multi image recorder by @haixuanTao in #677
- Dora openai server example by @haixuanTao in #676
- Update dependencies by @renovate in #674
- Create Rust-based openai api proxy server in node hub by @phil-opp in #678
- Update dependencies by @renovate in #679
- Update Rust crate hyper to v0.14.30 by @renovate in #680
- Fix hanged coordinator when failing to connect to the daemon on destroy command by @haixuanTao in #664
- Small example improvement using pyarrow assertion by @haixuanTao in #669
- Fix dora list listing twice a stopping dataflow when using multiple daemon. by @haixuanTao in #668
- Add package flake by @Ben-PH in #685
- Add jpeg format to qwenvl2 by @haixuanTao in #684
- Enable downloading remote dataflow by @haixuanTao in #682
- Enable multiline build for better packaging of dora node. by @haixuanTao in #683
- Bump rerun version to 0.18 by @haixuanTao in #686
- Temporary fix qwenvl2 queue error by @haixuanTao in #688
- Make daemon loop over coordinator connection to make it possible to create a system service awaiting coordinator connection by @haixuanTao in #689
- Add translation example from chinese, french to english by @haixuanTao in #681
- Update dependencies by @renovate in #690
- Fix macos 14 yolo error by @haixuanTao in #696
- Update dependencies by @renovate in #692
- Publish rust project on pip to make it simpler to deploy dora node on different machine without requiring installing cargo by @haixuanTao in #695
- Docs: README by @Radovenchyk in #697
- Update README.md by @pucedoteth in #705
- Bump rust toolchains 1.81 by @haixuanTao in #707
- Make dora cli pip installable by @haixuanTao in #706
- Add urdf visualization in rerun by @haixuanTao in #704
- Fix child process receiving ctrl-c by setting own process group by @haixuanTao in #712
- Move more types from
dora-core
todora-message
to avoid dependency by @phil-opp in #711 - Implement
dora run
command by @phil-opp in #703 - Adding Agilex Piper node, PyOrbbeckSDK node, Agilex UGV node by @haixuanTao in #709
- Make the node hub CI/CD parallel for faster testing as well as having more granular integration control by @haixuanTao in #710
- Add time series to dora rerun by @haixuanTao in #713
New Contributors
- @Ben-PH made their first contribution in #685
- @Radovenchyk made their first contribution in #697
- @pucedoteth made their first contribution in #705
v0.3.7rc2
Fix piper version
v0.3.7rc1
Fix CI/CD for pip release
v0.3.7rc0
What's Changed
- Post release
0.3.6
small fix by @haixuanTao in #638 - Changes to template by @XxChang in #639
- Add appending to PATH instruction inside installation script by @Hennzau in #641
- Make the benchmark run in release and at full speed by @Hennzau in #644
- Use the new node syntax for examples dataflow by @Hennzau in #643
- Improve beginner experience by @Hennzau in #645
- improve node-hub pytest by @haixuanTao in #640
- Fix not-null terminated string print within C template by @haixuanTao in #654
- Raise error if dora-coordinator is not connected when calling
dora destroy
by @haixuanTao in #655 - Coordinator stopped on bad control command by @Hennzau in #650
- Add support for Qwenvl2 by @haixuanTao in #646
- Fix distributed node by @haixuanTao in #658
- Small install script update for bash by @haixuanTao in #657
- Add additional image encoding by @haixuanTao in #661
dora-echo
replicate the topic received with the topic send by @haixuanTao in #663- Update dependencies by @renovate in #656
- Bump pyo3 and arrow versions by @haixuanTao in #667
- Fix ros2 bridge incompatibility with CI Ubuntu 24 and with pyo3 22 by @haixuanTao in #670
- Add transformers version pinning for qwenvl2 by @haixuanTao in #665
- Remove cli dataflow path check by @haixuanTao in #662
- Better error handling for unknown output by @haixuanTao in #675
- Fix llama recorder multi image recorder by @haixuanTao in #677
- Dora openai server example by @haixuanTao in #676
- Update dependencies by @renovate in #674
- Create Rust-based openai api proxy server in node hub by @phil-opp in #678
- Update dependencies by @renovate in #679
- Update Rust crate hyper to v0.14.30 by @renovate in #680
- Fix hanged coordinator when failing to connect to the daemon on destroy command by @haixuanTao in #664
- Small example improvement using pyarrow assertion by @haixuanTao in #669
- Fix dora list listing twice a stopping dataflow when using multiple daemon. by @haixuanTao in #668
- Add package flake by @Ben-PH in #685
- Add jpeg format to qwenvl2 by @haixuanTao in #684
- Enable downloading remote dataflow by @haixuanTao in #682
- Enable multiline build for better packaging of dora node. by @haixuanTao in #683
- Bump rerun version to 0.18 by @haixuanTao in #686
- Temporary fix qwenvl2 queue error by @haixuanTao in #688
- Make daemon loop over coordinator connection to make it possible to create a system service awaiting coordinator connection by @haixuanTao in #689
- Add translation example from chinese, french to english by @haixuanTao in #681
New Contributors
Full Changelog: v0.3.6...v0.3.7rc0
v0.3.6
Dora v0.3.6 Release
New Website Frontpage!
We've been doing a lot of demo at dora, and it was about time to put them in front so that people get a better understanding of what dora-rs stand for
Preview
Quicker installer!
As we're adding support for more platform such as linux arm musl, it was time to make installation simpler. So we copied other project installation script so that people can install dora in one line:
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/dora-rs/dora/main/install.sh | bash
Shipping the Node-Hub!
We have released a node-hub, that should make it a lot easier to get started with dora.
The idea is that, we will be able to directly pull pre-packaged node from pip and cargo and use them in our own project.
For example to get started with a video stream, instead of writing code or copying code from the dora project you can just write:
nodes:
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/20
outputs:
- image
env:
CAPTURE_PATH: 0
IMAGE_WIDTH: 640
IMAGE_HEIGHT: 480
- id: plot
build: pip install opencv-plot
path: opencv-plot
inputs:
image:
source: camera/image
queue_size: 1
Then, use:
dora build dataflow.yml
dora up
dora start dataflow.yml
This should reduce the necessity to copy paste code from one place to another as well as reduce the risk of path issues.
You can copy our CI/CD github worklfow : https://github.com/dora-rs/dora/blob/main/.github/workflows/node-hub-ci-cd.yml so that your nodes within your node-hub folder are tested and published on cargo and pip.
Dora Node should now be compatible between version from 0.3.6 forward!
Thanks to @phil-opp, we know have an independant dora-message crate that will be responsible for the communication of messages, and should be able to handle dora nodes from multiple version as long as dora-message
version are compatible.
C++ Documentation :)
Thanks to @starlitxiling, we now have a first experimental C++ documentation to make it easier for people to get started in C++
https://dora-rs.ai/cpp/cpp-api.html
Preview
Fix dynamic node initialisation issues
We have noticed that dora sometimes had issues with initializing dynamic node and this release should fix this issue.
What's Changed
- Update dependencies by @renovate in #579
- Don't wait for non-started dynamic nodes on stop by @phil-opp in #583
- add a comment on read_dora_input_id by @XxChang in #580
- Update dependencies by @renovate in #584
- Update dependencies by @renovate in #585
- Add domain unix socket supports by @XxChang in #594
- Check build for cross-compiled targets on CI by @phil-opp in #597
- Test pip release creation as part of normal CI by @phil-opp in #596
- Add-armv7-musleabihf-prebuilt-release by @haixuanTao in #578
- Update dependencies by @renovate in #602
- Delay dropping of
DoraNode
in Python until all event data is freed by @phil-opp in #601 - Add install script by @haixuanTao in #600
- Nodes hub to store and reuse commonly used node by @haixuanTao in #569
- Ros2-bridge action attempt by @starlitxiling in #567
- Update dependencies by @renovate in #605
- Add a CI/CD for the node-hub by @haixuanTao in #604
- Update dependencies by @renovate in #608
- Remove dynamic node from pending nodes before starting a dataflow by @haixuanTao in #606
- Fix alignment of atomics in shared memory communication channel by @phil-opp in #612
- Update dependencies by @renovate in #622
- Refactor: Move message definitions to
dora-message
crate by @phil-opp in #613 - Update README.md by @heyong4725 in #623
- Update Rust crate serde to v1.0.207 by @renovate in #624
- fix clippy warnings by @Michael-J-Ward in #626
- Update dependencies by @renovate in #629
- Update dependencies by @renovate in #630
- Update Rust crate reqwest to v0.12.7 by @renovate in #632
- Fix typos by @omahs in #633
- Fix errors reported in #628 by @phil-opp in #631
- Update dependencies by @renovate in #636
- Make dora versions compatible by using separate versioning for
dora-message
crate by @phil-opp in #614 - Adding additional node in the node-hub by @haixuanTao in #620
- Bump version v0.3.6 by @haixuanTao in #637
New Contributors
- @starlitxiling made their first contribution in #567
- @heyong4725 made their first contribution in #623
- @omahs made their first contribution in #633
Full Changelog: v0.3.5...v0.3.6
v0.3.6-rc0
What's Changed
- Update dependencies by @renovate in #579
- Don't wait for non-started dynamic nodes on stop by @phil-opp in #583
- add a comment on read_dora_input_id by @XxChang in #580
- Update dependencies by @renovate in #584
- Update dependencies by @renovate in #585
- Add domain unix socket supports by @XxChang in #594
- Check build for cross-compiled targets on CI by @phil-opp in #597
- Test pip release creation as part of normal CI by @phil-opp in #596
- Add-armv7-musleabihf-prebuilt-release by @haixuanTao in #578
- Update dependencies by @renovate in #602
- Delay dropping of
DoraNode
in Python until all event data is freed by @phil-opp in #601 - Add install script by @haixuanTao in #600
- Nodes hub to store and reuse commonly used node by @haixuanTao in #569
- Ros2-bridge action attempt by @starlitxiling in #567
- Update dependencies by @renovate in #605
- Add a CI/CD for the node-hub by @haixuanTao in #604
- Update dependencies by @renovate in #608
- Remove dynamic node from pending nodes before starting a dataflow by @haixuanTao in #606
- Fix alignment of atomics in shared memory communication channel by @phil-opp in #612
- Update dependencies by @renovate in #622
- Refactor: Move message definitions to
dora-message
crate by @phil-opp in #613 - Update README.md by @heyong4725 in #623
- Update Rust crate serde to v1.0.207 by @renovate in #624
- fix clippy warnings by @Michael-J-Ward in #626
New Contributors
- @starlitxiling made their first contribution in #567
- @heyong4725 made their first contribution in #623
Full Changelog: v0.3.5-fix7...v0.3.5.6-rc0
v0.3.5-fix7
Add installl shell
v0.3.5-fix6
Zip only binary
v0.3.5
dora 0.3.5 Release
Better Error Logging and Graceful Stopping
Before
018ffe79-1c0c-7b68-8886-d8cff079c232
2024-06-09T19:28:22.877741Z ERROR dora_daemon::spawn: 018ffe79-1c0c-7b68-8886-d8cff079c232/webcam:
Traceback (most recent call last):
File "/home/peter/Documents/work/dora/examples/python-dataflow/webcam.py", line 11, in <module>
node = Node()
RuntimeError: failed to init event stream
Caused by:
subscribe failed: Some nodes exited before subscribing to dora: {NodeId("plot")}
This is typically happens when an initialization error occurs
in the node or operator. To check the output of the failed
nodes, run `dora logs 018ffe79-1c0c-7b68-8886-d8cff079c232 plot`.
Location:
apis/rust/node/src/event_stream/mod.rs:90:17
at binaries/daemon/src/spawn.rs:371
2024-06-09T19:28:23.263843Z ERROR dora_daemon:
018ffe79-1c0c-7b68-8886-d8cff079c232/object_detection failed with exit code 1.
Check logs using: dora logs 018ffe79-1c0c-7b68-8886-d8cff079c232 object_detection
at binaries/daemon/src/lib.rs:1077
2024-06-09T19:28:23.264003Z ERROR dora_coordinator: some nodes failed:
- webcam:
018ffe79-1c0c-7b68-8886-d8cff079c232/webcam failed with exit code 1.
Check logs using: dora logs 018ffe79-1c0c-7b68-8886-d8cff079c232 webcam
Location:
/home/peter/Documents/work/dora/binaries/coordinator/src/listener.rs:90:56
at binaries/coordinator/src/lib.rs:279
dataflow failed: errors occurred in dataflow 018ffe79-1c0c-7b68-8886-d8cff079c232:
- machine ``:
some nodes failed:
- webcam:
018ffe79-1c0c-7b68-8886-d8cff079c232/webcam failed with exit code 1.
Check logs using: dora logs 018ffe79-1c0c-7b68-8886-d8cff079c232 webcam
Location:
/home/peter/Documents/work/dora/binaries/coordinator/src/listener.rs:90:56
After
01907807-9461-738c-a503-c92b82e0d4c2
attaching to dataflow (use `--detach` to run in background)
ERROR webcam: exited with code 1 with stderr output:
---------------------------------------------------------------------------------
Traceback (most recent call last):
File "/home/peter/Documents/work/dora/examples/python-dataflow/webcam.py", line 12, in <module>
assert False, "could not start dataflow"
AssertionError: could not start dataflow
---------------------------------------------------------------------------------
INFO plot: node finished successfully
INFO object_detection: node finished successfully
[ERROR]
Dataflow 01907807-9461-738c-a503-c92b82e0d4c2 failed:
Node `webcam` failed: exited with code 1 with stderr output:
---------------------------------------------------------------------------------
Traceback (most recent call last):
File "/home/peter/Documents/work/dora/examples/python-dataflow/webcam.py", line 12, in <module>
assert False, "could not start dataflow"
AssertionError: could not start dataflow
---------------------------------------------------------------------------------
Dynamic Node
We're introducing dynamic node, to run node in a native way, whether it is by calling python, jupyter or cargo. All you have to do is specify that the node is dynamic in the dataflow and specify the node id within the node code and you will be able to run the node natively without using dora start
.
Warning
We have noticed some bugs on MacOS/Windows with dynamic node: ##575
Getting Started
You can try minimal example:
cd examples/python-dataflow
dora start dataflow_dynamic.yml
# In another terminal
python plot_dynamic.py
- Then starting the dataflow
dora start dataflow.yaml
- Then using one of the following method to start the node:
Using interactive python:
$ python
>>> from dora import Node
>>> node = Node("node_0")
>>> event = node.next()
>>> event
{'id': 'tick', 'type': 'INPUT', 'value': <pyarrow.lib.NullArray object at 0x7bda86924460>
0 nulls, 'kind': 'dora', 'metadata': {'open_telemetry_context': ''}}
Using Python
$ python my_script.py # <-- node = Node("node_0")
# Log will appear in your terminal
Using Rust
$ cargo run my_node # <-- DoraNode::init_from_node_id(node_id);
# Log will appear in your terminal
Using a jupyter notebook
Made all dora python object representable in python
All dora-rs now implements: __str__, __repr__, __dir__, __dict__
Meaning that from Python, you will always be able to represent dora object as a Python Object.
>>> node
Node()
>>> event = node.next()
>>> event
{'id': 'tick', 'type': 'INPUT', 'value': <pyarrow.lib.NullArray object at 0x7bda86924460>
0 nulls, 'kind': 'dora', 'metadata': {'open_telemetry_context': ''}}
>>>
>>> from dora import Ros2NodeOptions, Ros2QosPolicies
>>>
>>> policies = Ros2QosPolicies()
>>> policies
Ros2QosPolicies(durability=Ros2Durability.Volatile, liveliness=Ros2Liveliness.Automatic, lease_duration=inf, reliable=false, max_blocking_time=0.0, keep_all=false, keep_last=1)
>>> policies.__dict__
{'keep_all': False, 'keep_last': 1, 'liveliness': Ros2Liveliness.Automatic, 'durability': Ros2Durability.Volatile, 'reliable': False, 'max_blocking_time': 0.0, 'lease_duration': inf}
Thanks a million to @EricLBuehler!
Simplified the dataflow
We removed one level of hierarchy by removing custom
that was referencing custom node.
We also use the keyword path
instead of source
that might be a bit too confusing.
This change is backward compatible and you can keep the state of your previous dataflow.
Before:
- id: idefics2
custom:
source: ../nodes/idefics2_node_demo.py
inputs:
text: whisper/text_llm
outputs:
- speak
- control
After:
- id: idefics2
path: ../nodes/idefics2_node_demo.py
inputs:
text: whisper/text_llm
outputs:
- speak
- control
Enabled dora on multiple machines
We can now experiment dora on different machine!
You can getting started with our multi-daemon example
A very minimalist setup would look like this
# On machine A
dora coordinator
dora daemon --machine-id A
# On machine B
dora daemon --machine-id B --coordinator-addr <COORDINATOR_IP>:53290
# On machine A or B
dora start ./examples/multiple-daemons/dataflow.yml
nodes:
- id: rust-node
_unstable_deploy:
machine: A
path: abs/path/to/target/debug/rust-node
inputs:
tick: dora/timer/millis/10
outputs:
- random
- id: rust-sink
_unstable_deploy:
machine: B
path: abs/path/to/target/debug/rust-sink
inputs:
message: rust-node/random
Thanks a million to @Gege-Wang and @XxChang!
I would also thanks @Michael-J-Ward and @LyonRust for their help on this release as well!!!
Full Changelog
- chore: Support RISCV64 by @LyonRust in #505
- Json schemas for VSCode YAML Support by @haixuanTao in #497
- Pretty Print Rust object when called from Python print by @haixuanTao in #503
- Fix
Cargo.lock
by @phil-opp in #506 - Use dependabot for automatic lockfile updates by @phil-opp in #507
- Run cargo update by @phil-opp in #508
- Allow top-level fields in node declaration by @phil-opp in #478
- Configure Renovate by @renovate in #509
- Make non-UTF8 stdout/stderr from nodes non-fatal by @phil-opp in #510
- Make dora cli connect to remote coordinator by @Gege-Wang in #513
- Provide help messages for CLI by @phil-opp in #519
- Renovate: group all dependency updates in single PR by @phil-opp in #524
- chore(deps): update dependencies by @renovate in #529
- Improve coordinator port config by @phil-opp in #520
- Fix some typos and add automatic typos check to CI by @EricLBuehler in #539
- Update Pyo3 bounds by @Michael-J-Ward in #472
- chore(deps): update dependencies by @renovate in #543
- Small logging improvements by @phil-opp in #537
- Refuse relative path for remote in coordinator by @XxChang in #538
- chore(deps): update rust crate clap to v4.5.7 by @renovate in #546
- Add
--quiet
flag to daemon and coordinator by @phil-opp in #548 - Implement file-based logging in daemon and coordinator by @phil-opp in #549
- Spawn daemon and coordinator in quiet mode on
dora up
by @phil-opp in #550 - Run dynamic node by @haixuanTao in #517
- Update dora new by @XxChang in #553
- fix event_as_input bug by @XxChang in #556
- Transform custom PyEvent into standard python dictionary for easi...
v0.3.5-rc1
bumping to v0.3.5-rc1