[fix] Ensure key is reflective of data arg in CCv2 instances#12950
Merged
sfc-gh-bnisco merged 10 commits intodevelopfrom Nov 25, 2025
Merged
[fix] Ensure key is reflective of data arg in CCv2 instances#12950sfc-gh-bnisco merged 10 commits intodevelopfrom
sfc-gh-bnisco merged 10 commits intodevelopfrom
Conversation
Contributor
✅ 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. |
Contributor
✅ PR preview is ready!
|
Contributor
There was a problem hiding this comment.
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 |
398a2e1 to
b3de8a2
Compare
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
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.