-
Notifications
You must be signed in to change notification settings - Fork 6
Feature/warp node #85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- initialize client part (subject to change) - initialize server part (subject to change) - experiment with grpc (subject to change) - define initial proto definition
- warp config.toml has assignation signal typo, - the `SendMessage` implementation in _remote_service.py has been deleted
- refactor MessagingServiceImpl to use a dispatching thread for concurrent requests - add `--node-mark` argument to _remote_service.py to specify node implementation - fix typo in Warp node gRPC connection - fix deserialization logic in utils.py - correctly extract `data` from ObjectProtoPayload using `from_dict` - update PassthroughIdentity to propagate metadata correctly - add integration test Note: this is an initial implementation; code is experimental and may require heavy refactoring.
- code commented for further improvement - changing the expected response type in warp - in remote service, messages with no correlation ids are discarded - add a ResponseContext to better futures handling
- align BytesPayload - refactor proto helpers - add codec property to VideoPayload - export BasePayload correctly
2743150 to
75ec316
Compare
b3by
reviewed
Jan 19, 2026
- move warp node into the nodes folder - create the proc module in nodes folder - limit the deepcopy overwrite to the ObjectPayload only - move remote_context in its own module - improve elif and fix other minor code issue in remote service - add a new dependency group in pyconfig.toml
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces the Remotizer module, a new gRPC-based distributed execution system that enables Juturna nodes to be deployed and executed remotely. The system allows nodes to run as standalone services while maintaining full compatibility with the existing pipeline architecture through a proxy pattern.
The implementation consists of:
_remote_service.py) that wraps any Juturna node and exposes it via RPCWarp) that transparently forwards messages to remote nodesThis enables horizontal scaling, language-agnostic node implementation, and deployment flexibility without modifying existing pipeline code.
PR type
Key modifications and changes
Core Infrastructure:
uturna/remotizer/module with gRPC server and client implementationspayloads.proto,messaging_service.proto) defining wire format for all message types_remote_service.py: async gRPC server with request correlation, timeout handling, and statistics trackingWarpnode: client-side proxy that forwards messages to remote services via gRPCSerialization Layer:
Payload Enhancements:
BasePayload.__deepcopy__()for proper deep copying of dataclass payloadscodecfield toVideoPayloadBasePayloadinpayloads/__init__.pyTesting & Build:
test_remote_integration.pywith end-to-end tests for remote node executioncompile_protos.shscript for generating Python code from Protocol Buffersremote_pipes/to.gitignorefor runtime artifacts.tool-versionsspecifying Python 3.12.12Bug Fixes:
PassthroughIdentityto properly copy message metadata in responsesBasePayloadto supportObjectPayloadsAffected components
New components:
juturna/remotizer/(complete new module)juturna/remotizer/_warp/(Warp proxy node)Build system:
remotizer/requirements.txtAdditional context
Architecture Overview: The Remotizer uses a request-response pattern over gRPC:
Key Features:
correlation_idtracked in a dispatcher threadUsage Example:
In pipeline config, replace a node with its remote proxy:
Before Merging
Required actions before accepting this PR:
juturna/remotizer/_warp/toplugins/nodes/proc/warp/following the standard plugin structure._remote_service.py,utils.py, Protocol Buffers) in thecomponentsmodule as part of the frameworkFuture Work:
"warp": "<ip>:<port>"parameter to the node configuration. The pipeline builder will automatically detect this parameter during warmup and transform the node into a Warp proxy with the original configuration forwarded to the remote service