Source code for mllm_shap.viz.labels

"""Token label helpers for attribution renderers.

@domain viz
@see [[knowledge/architecture/viz]]
@tested-by [[tests/viz/test_labels.py]]
"""

from collections.abc import Sequence

from ..domain.conversation import ConversationSnapshot
from ..domain.players import PlayerSet


[docs] def token_labels( snapshot: ConversationSnapshot, player_set: PlayerSet, ) -> tuple[str, ...]: """Return every player's ``PlayerSpan.display_label`` in mask order. Raises: ValueError: If the player set has no spans or its spans do not match ``snapshot``. """ messages = snapshot.messages() if not player_set.spans: msg = "player set has no spans; build it with a partitioner" raise ValueError(msg) for span in player_set.spans: if ( span.message_index >= len(messages) or messages[span.message_index].text[span.start : span.end] != span.text ): msg = "player set does not align with the snapshot" raise ValueError(msg) return tuple(span.display_label for span in player_set.spans)
[docs] def check_attribution(labels: Sequence[str], values: Sequence[float]) -> None: """Raise ``ValueError`` unless ``labels`` and ``values`` are equal and non-empty.""" if len(labels) != len(values): msg = "labels and values must have the same length" raise ValueError(msg) if not labels: msg = "cannot render an empty attribution" raise ValueError(msg)