-
Notifications
You must be signed in to change notification settings - Fork 4k
[fix] Ensure key is reflective of data arg in CCv2 instances #12950
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
Conversation
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
✅ PR preview is ready!
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements deterministic identity computation for bidirectional components (CCv2) to ensure that unkeyed component instances change their backend ID when serialized data changes, while keyed instances maintain stable IDs regardless of data changes. This addresses component identity stability requirements for proper state management and rendering.
Key Changes
- Introduced
_build_bidi_identity_kwargs()method to construct identity parameters based on the populated protobuf's data field - Changed Arrow blob ref IDs from random UUIDs to content-addressed MD5 hashes for deterministic placeholders
- Moved ID computation to occur after proto population so the serialized data can contribute to identity
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
lib/streamlit/components/v2/bidi_component/main.py |
Added _build_bidi_identity_kwargs() method and moved ID computation after proto population to include serialized data in identity calculation |
lib/streamlit/components/v2/bidi_component/serialization.py |
Replaced UUID-based ref IDs with MD5-based content-addressed IDs for Arrow blob stability |
lib/tests/streamlit/components/v2/test_bidi_component.py |
Added comprehensive test class BidiComponentIdentityTest with 11 tests covering keyed/unkeyed identity scenarios |
lib/tests/streamlit/components/v2/bidi_component/test_serialization.py |
Added test for Arrow serialization fallback behavior |
lib/tests/streamlit/components/v2/bidi_component/test_serialization.py
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.
lukasmasuch
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
398a2e1 to
b3de8a2
Compare
Describe your changes
dataarg, especially as it relates to creating akey.dataarg tocompute_and_register_element_idbefore this change. Now we do so, but in order to support the many different data shapes, we calculate a stable identifier for the content first before passing it in.dataparam is stable, we move from a UUID-based placeholder to an MD5-based placeholder for serialized arrow data to ensure it is deterministic. Previously, it would be a new UUID on each run, which is inefficient.datashapes.GitHub Issue Link (if applicable)
Testing Plan
Contribution License Agreement
By submitting this pull request you agree that all contributions to this project are made under the Apache 2.0 license.