From 4cf15938b02178890e76248d09abcba76b09ec44 Mon Sep 17 00:00:00 2001 From: Etherl <61019402+Etherll@users.noreply.github.com> Date: Wed, 15 Jul 2026 20:45:17 +0300 Subject: [PATCH] Studio: fix duplicate response model labels and hover (#7049) * Studio: fix response model badge placement * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Studio: gate response model badge pointer-events behind message hover --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: danielhanchen --- .../message-response-details-sheet.tsx | 2 +- .../src/components/assistant-ui/reasoning.tsx | 8 ++---- .../src/components/assistant-ui/thread.tsx | 11 +++----- .../test_chat_response_details_ui_contract.py | 27 ++++++++++++------- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/studio/frontend/src/components/assistant-ui/message-response-details-sheet.tsx b/studio/frontend/src/components/assistant-ui/message-response-details-sheet.tsx index 331a06a4c6..cca61b766a 100644 --- a/studio/frontend/src/components/assistant-ui/message-response-details-sheet.tsx +++ b/studio/frontend/src/components/assistant-ui/message-response-details-sheet.tsx @@ -288,7 +288,7 @@ export const MessageResponseModelBadge: FC<{ className?: string }> = ({ return (
- - - -
+
{isOpen && !isReasoningStreaming && ( )} diff --git a/studio/frontend/src/components/assistant-ui/thread.tsx b/studio/frontend/src/components/assistant-ui/thread.tsx index ad5016aae1..ce37313486 100644 --- a/studio/frontend/src/components/assistant-ui/thread.tsx +++ b/studio/frontend/src/components/assistant-ui/thread.tsx @@ -3550,9 +3550,6 @@ const AssistantMessage: FC = () => { const aui = useAui(); const messageId = useAuiState(({ message }) => message.id); const messageContent = useAuiState(({ message }) => message.content); - const hasReasoningParts = useAuiState(({ message }) => - message.parts.some((part) => part.type === "reasoning"), - ); const incognito = useChatRuntimeStore((s) => s.incognito); // Use global store for editing state to ensure a single source of truth @@ -3638,11 +3635,9 @@ const AssistantMessage: FC = () => {
) : ( <> - {!hasReasoningParts ? ( -
- -
- ) : null} +
+ +
diff --git a/tests/studio/test_chat_response_details_ui_contract.py b/tests/studio/test_chat_response_details_ui_contract.py index 89d3000629..8714951883 100644 --- a/tests/studio/test_chat_response_details_ui_contract.py +++ b/tests/studio/test_chat_response_details_ui_contract.py @@ -44,7 +44,7 @@ def test_response_details_sheet_uses_unsloth_sheet_and_key_sections(): assert f'label="{field}"' in src -def test_response_model_chip_is_user_configurable_and_rendered_in_metadata_rows(): +def test_response_model_badge_is_user_configurable_and_rendered_once_per_message(): prefs_src = CHAT_PREFS_TS.read_text() chat_tab_src = CHAT_TAB_TSX.read_text() thread_src = THREAD_TSX.read_text() @@ -55,17 +55,24 @@ def test_response_model_chip_is_user_configurable_and_rendered_in_metadata_rows( assert "showResponseModel: saved?.showResponseModel ?? false" in prefs_src assert "Show response model" in chat_tab_src assert "setShowResponseModel" in chat_tab_src - assert "aui-response-model-badge inline-flex min-h-5" in DETAILS_TSX.read_text() - assert "leading-5" in DETAILS_TSX.read_text() - assert "group-hover/assistant-message:opacity-100" in DETAILS_TSX.read_text() - assert "MessageResponseModelBadge" in thread_src - assert "hasReasoningParts" in thread_src + details_src = DETAILS_TSX.read_text() + assert ( + "aui-response-model-badge pointer-events-none relative inline-flex min-h-5" in details_src + ) + assert "cursor-text select-text" in details_src + assert "leading-5" in details_src + assert "after:top-full after:h-1" in details_src + assert "hover:opacity-100" in details_src + assert "group-hover/assistant-message:opacity-100" in details_src + # Pointer events gated behind hover/focus so the hidden badge stays inert when idle. + assert "group-hover/assistant-message:pointer-events-auto" in details_src + assert "group-focus-within/assistant-message:pointer-events-auto" in details_src + assert thread_src.count("