From 4f539419f4fd925f1c483463711a4a310f3e09e1 Mon Sep 17 00:00:00 2001 From: Dev3 ^~^ Date: Tue, 20 Oct 2026 14:41:27 +0530 Subject: [PATCH 1/3] FEAT Add expandable paired outcome transition details --- doc/gui/0_gui.md | 19 ++ doc/gui/images/paired-outcomes-desktop.png | Bin 0 -> 80520 bytes doc/gui/images/paired-outcomes-mobile.png | Bin 0 -> 55127 bytes .../e2e/fixtures/paired_outcomes_backend.py | 90 ++++-- frontend/e2e/paired-outcomes.spec.ts | 74 ++++- .../Scenarios/PairedOutcomes.styles.ts | 57 ++++ .../Scenarios/PairedOutcomes.test.tsx | 169 +++++++++++- .../components/Scenarios/PairedOutcomes.tsx | 212 ++++++++++++++- frontend/src/services/api.ts | 20 ++ frontend/src/types/index.ts | 32 +++ pyrit/analytics/__init__.py | 15 +- pyrit/analytics/paired_outcome_statistics.py | 257 +++++++++++++++++- pyrit/backend/routes/scenarios.py | 47 +++- .../test_paired_outcome_statistics.py | 139 +++++++++- .../backend/test_paired_outcome_routes.py | 50 ++++ 15 files changed, 1136 insertions(+), 45 deletions(-) create mode 100644 doc/gui/images/paired-outcomes-desktop.png create mode 100644 doc/gui/images/paired-outcomes-mobile.png diff --git a/doc/gui/0_gui.md b/doc/gui/0_gui.md index 4a8658af25..2e2f95505d 100644 --- a/doc/gui/0_gui.md +++ b/doc/gui/0_gui.md @@ -977,6 +977,25 @@ pairs. For example, four pairs with one of each transition give 50% success on each side and a 0 pp difference, while still showing one failure becoming a success and one success becoming a failure. +Each transition row can be expanded to inspect the matched logical objectives +behind that count. Expanding loads only the selected transition's pairs, with +the baseline and attack outcomes shown side by side and links to each saved +conversation. Conversation links retain the originating Scenario run context. +Use **Load more** to inspect additional pairs, or collapse the row to hide its +details. Large transitions are loaded in bounded pages; a failed request can +be retried from the expanded row. Switching selected groups clears the details. +All results use the same decided-pair cohort and most recent top-level attempt +as the transition counts, so retries and child attempts are never additional +pairs. + +Expanded paired outcomes on desktop: + +![Paired outcomes with an expanded transition, objective, and baseline and attack conversation links](./images/paired-outcomes-desktop.png) + +The same transition details stack vertically on a narrow screen: + +![Expanded paired outcomes at a mobile viewport width](./images/paired-outcomes-mobile.png) + **Decided pairs** shows the number with success or failure on both sides, followed by the number planned on both sides. **Excluded pairs** counts the remaining shared pairs. Missing outcomes, errors, and undetermined outcomes diff --git a/doc/gui/images/paired-outcomes-desktop.png b/doc/gui/images/paired-outcomes-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ecbe0479843d4cdd4c398ee64bc73b873b06df GIT binary patch literal 80520 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 literal 0 HcmV?d00001 diff --git a/doc/gui/images/paired-outcomes-mobile.png b/doc/gui/images/paired-outcomes-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..8af900a9e09953e035b55de44c70b797f765bbf7 GIT binary patch literal 55127 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 W(RnWB&Lw9G7w{87>j*V@^2)@#GPv0 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 literal 0 HcmV?d00001 diff --git a/frontend/e2e/fixtures/paired_outcomes_backend.py b/frontend/e2e/fixtures/paired_outcomes_backend.py index 31e68731a5..031e1b3e36 100644 --- a/frontend/e2e/fixtures/paired_outcomes_backend.py +++ b/frontend/e2e/fixtures/paired_outcomes_backend.py @@ -24,6 +24,8 @@ async def _seed_async(memory: SQLiteMemory) -> None: AttackIdentifier, AttackOutcome, AttackResult, + Conversation, + MessagePiece, ScenarioIdentifier, ScenarioResult, ScenarioRunPlan, @@ -45,28 +47,32 @@ async def _seed_async(memory: SQLiteMemory) -> None: objective_target=target, ) ) - plan = ScenarioRunPlan( - atomic_groups=[ - ScenarioRunPlanAtomicGroup( - id=name, - atomic_attack_name=name, - display_group=name.title(), - technique_eval_hash=f"{name}-eval", - kind=kind, - seed_group_ids=shared + [extra], - ) - for name, kind, extra in [ - ("baseline", ScenarioRunPlanGroupKind.BASELINE, "base-only"), - ("attack", ScenarioRunPlanGroupKind.ATTACK, "attack-only"), - ] - ], - seed_groups=[ - ScenarioRunPlanSeedGroup(id=seed, objective=seed, objective_sha256=to_sha256(seed)) - for seed in shared + ["base-only", "attack-only"] - ], - ) - for index, state in enumerate([ScenarioRunState.COMPLETED, ScenarioRunState.COMPLETED, ScenarioRunState.FAILED]): + for index, state in enumerate( + [ScenarioRunState.COMPLETED, ScenarioRunState.COMPLETED, ScenarioRunState.FAILED, ScenarioRunState.COMPLETED] + ): scenario_id = UUID(int=9100 + index) + page_seeds = [f"page-{number:02d}" for number in range(30)] if index == 3 else [] + selected_seeds = shared + page_seeds + plan = ScenarioRunPlan( + atomic_groups=[ + ScenarioRunPlanAtomicGroup( + id=name, + atomic_attack_name=name, + display_group=name.title(), + technique_eval_hash=f"{name}-eval", + kind=kind, + seed_group_ids=selected_seeds + [extra], + ) + for name, kind, extra in [ + ("baseline", ScenarioRunPlanGroupKind.BASELINE, "base-only"), + ("attack", ScenarioRunPlanGroupKind.ATTACK, "attack-only"), + ] + ], + seed_groups=[ + ScenarioRunPlanSeedGroup(id=seed, objective=seed, objective_sha256=to_sha256(seed)) + for seed in selected_seeds + ["base-only", "attack-only"] + ], + ) rows: dict[str, list[AttackResult]] = {"baseline": [], "attack": []} for name, outcomes in [ ("baseline", [AttackOutcome.FAILURE, AttackOutcome.SUCCESS, AttackOutcome.FAILURE, AttackOutcome.SUCCESS]), @@ -89,6 +95,24 @@ async def _seed_async(memory: SQLiteMemory) -> None: }, ) ) + for seed in page_seeds: + for name, outcome in [("baseline", AttackOutcome.FAILURE), ("attack", AttackOutcome.SUCCESS)]: + rows[name].append( + AttackResult( + attack_result_id=str(uuid4()), + conversation_id=str(uuid4()), + objective=seed, + outcome=outcome, + timestamp=timestamp, + atomic_attack_identifier=identifier, + attribution_parent_id=str(scenario_id), + attribution_data={ + "seed_group_id": seed, + "parent_eval_hash": f"{name}-eval", + "parent_collection": name, + }, + ) + ) for seed, outcome in [ ("undetermined", AttackOutcome.UNDETERMINED), ("error", AttackOutcome.ERROR), @@ -128,6 +152,30 @@ async def _seed_async(memory: SQLiteMemory) -> None: }, ) ) + for attack_result in (item for group in rows.values() for item in group): + await memory.add_conversation_to_memory_async( + conversation=Conversation( + conversation_id=attack_result.conversation_id, + target_identifier=target, + attack_result_id=attack_result.attack_result_id, + ) + ) + await memory.add_message_pieces_to_memory_async( + message_pieces=[ + MessagePiece( + role="user", + conversation_id=attack_result.conversation_id, + sequence=0, + original_value=f"Offline objective: {attack_result.objective}", + ), + MessagePiece( + role="assistant", + conversation_id=attack_result.conversation_id, + sequence=1, + original_value=f"Offline {attack_result.outcome.value} example; no model was called.", + ), + ] + ) await memory.add_attack_results_to_memory_async( attack_results=[row for group in rows.values() for row in group] ) diff --git a/frontend/e2e/paired-outcomes.spec.ts b/frontend/e2e/paired-outcomes.spec.ts index 4170ae90f0..708629ba02 100644 --- a/frontend/e2e/paired-outcomes.spec.ts +++ b/frontend/e2e/paired-outcomes.spec.ts @@ -2,8 +2,9 @@ import { expect, test } from '@playwright/test' import { scenarioRunRoutePath } from '../src/utils/routeParams' const run = scenarioRunRoutePath('00000000-0000-0000-0000-00000000238c') +const paginatedRun = scenarioRunRoutePath('00000000-0000-0000-0000-00000000238f') -test('compares persisted outcomes through the real API, including retries and exclusions', async ({ page }) => { +test('compares persisted outcomes through the real API, including retries and exclusions', async ({ page }, testInfo) => { const errors: string[] = [] page.on('pageerror', (error) => errors.push(error.message)) await page.goto(run) @@ -30,13 +31,52 @@ test('compares persisted outcomes through the real API, including retries and ex for (const label of ['Failure → Success', 'Success → Failure', 'Failure → Failure', 'Success → Success']) { await expect(comparison.getByRole('row', { name: `${label} 1` })).toBeVisible() } + const detailRequests: string[] = [] + page.on('request', (request) => { + if (request.url().includes('/paired-outcomes/details?')) detailRequests.push(request.url()) + }) + const expand = comparison.getByRole('button', { name: 'Failure → Success' }) + await expect(expand).toHaveAttribute('aria-expanded', 'false') + expect(detailRequests).toEqual([]) + const detailsResponse = page.waitForResponse((res) => res.url().includes('/paired-outcomes/details?')) + await expand.click() + const detailResult = await detailsResponse + expect(detailResult.status()).toBe(200) + expect(await detailResult.json()).toMatchObject({ + baseline_group_id: 'baseline', attack_group_id: 'attack', transition: 'failure_to_success', + total_pairs: 1, pairs: [{ seed_group_id: 'a', objective: 'a', baseline: { outcome: 'failure' }, attack: { outcome: 'success' } }], + }) + const details = panel.getByRole('region', { name: 'Failure → Success pair details' }) + await expect(details).toContainText('Logical seed: a') + await expect(details).toContainText('Outcome: failure') + await expect(details).toContainText('Outcome: success') + const baselineLink = details.getByRole('link', { name: 'Open baseline conversation' }) + const attackLink = details.getByRole('link', { name: 'Open attack conversation' }) + await expect(baselineLink).toHaveAttribute('href', /scenarioResultId=00000000-0000-0000-0000-00000000238c/) + await expect(attackLink).toHaveAttribute('href', /scenarioResultId=00000000-0000-0000-0000-00000000238c/) + await panel.screenshot({ path: testInfo.outputPath('paired-outcomes-desktop.png') }) + await attackLink.click() + await expect(page).toHaveURL(/\/attacks\/[^/]+\/conversations\/[^/]+\?scenarioResultId=/) + await expect(page.getByText('Offline objective: a')).toBeVisible() + await page.goto(run) + const restored = page.getByRole('region', { name: 'Paired outcomes', exact: true }) + await restored.getByLabel('Baseline group').selectOption('baseline') + await restored.getByLabel('Attack group').selectOption('attack') + await restored.getByRole('button', { name: 'Compare outcomes' }).click() + const restoredExpand = restored.getByRole('button', { name: 'Failure → Success' }) + await restoredExpand.click() + await expect(restored.getByRole('region', { name: 'Failure → Success pair details' })).toBeVisible() + await restoredExpand.click() + await expect(restored.getByRole('region', { name: 'Failure → Success pair details' })).toHaveCount(0) + await restoredExpand.click() + await expect(restored.getByRole('region', { name: 'Failure → Success pair details' })).toContainText('Logical seed: a') await panel.getByLabel('Attack group').selectOption('') await expect(comparison).toHaveCount(0) await expect(panel.getByRole('button', { name: 'Compare outcomes' })).toBeDisabled() expect(errors).toEqual([]) }) -test('keeps comparisons usable at a narrow viewport and with keyboard controls', async ({ page }, testInfo) => { +test('keeps expanded pairs usable at a narrow viewport and with keyboard controls', async ({ page }, testInfo) => { await page.setViewportSize({ width: 390, height: 844 }) await page.goto(run) const panel = page.getByRole('region', { name: 'Paired outcomes', exact: true }) @@ -56,7 +96,35 @@ test('keeps comparisons usable at a narrow viewport and with keyboard controls', expect(size?.height).toBeGreaterThanOrEqual(44) await panel.getByRole('table', { name: 'Outcome transitions' }).scrollIntoViewIfNeeded() await expect(panel.getByRole('row', { name: 'Failure → Success 1' })).toBeVisible() - await page.screenshot({ path: testInfo.outputPath('paired-outcomes-mobile.png') }) + const expand = panel.getByRole('button', { name: 'Failure → Success' }) + await expand.focus() + await page.keyboard.press('Enter') + await expect(expand).toHaveAttribute('aria-expanded', 'true') + await expect(panel.getByRole('region', { name: 'Failure → Success pair details' })).toContainText('Logical seed: a') + expect(await panel.evaluate((element) => element.scrollWidth > element.clientWidth)).toBe(false) + await panel.screenshot({ path: testInfo.outputPath('paired-outcomes-mobile.png') }) +}) + +test('paginates matching SQLite pairs', async ({ page }) => { + await page.goto(paginatedRun) + const panel = page.getByRole('region', { name: 'Paired outcomes', exact: true }) + await panel.getByLabel('Baseline group').selectOption('baseline') + await panel.getByLabel('Attack group').selectOption('attack') + await panel.getByRole('button', { name: 'Compare outcomes' }).click() + await expect(panel.getByRole('row', { name: 'Failure → Success 31' })).toBeVisible() + const expand = panel.getByRole('button', { name: 'Failure → Success' }) + await expand.click() + const details = panel.getByRole('region', { name: 'Failure → Success pair details' }) + await expect(details).toContainText('25 of 31 pairs shown') + await expect(details.getByRole('article')).toHaveCount(25) + const nextPage = page.waitForResponse((response) => response.url().includes('/paired-outcomes/details?') && response.url().includes('cursor=')) + await details.getByRole('button', { name: 'Load more Failure → Success pairs' }).click() + const result = await nextPage + expect(result.status()).toBe(200) + expect(await result.json()).toMatchObject({ total_pairs: 31, next_cursor: null }) + await expect(details).toContainText('31 of 31 pairs shown') + await expect(details.getByRole('article')).toHaveCount(31) + await expect(details.getByRole('button', { name: 'Load more Failure → Success pairs' })).toHaveCount(0) }) test('explains why legacy or failed runs cannot be compared', async ({ page }) => { diff --git a/frontend/src/components/Scenarios/PairedOutcomes.styles.ts b/frontend/src/components/Scenarios/PairedOutcomes.styles.ts index fca3f35478..ad0e1d8a3d 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.styles.ts +++ b/frontend/src/components/Scenarios/PairedOutcomes.styles.ts @@ -38,4 +38,61 @@ export const usePairedOutcomesStyles = makeStyles({ gridTemplateColumns: 'repeat(auto-fit, minmax(9rem, 1fr))', gap: tokens.spacingHorizontalL, }, + expandButton: { + minHeight: MINIMUM_TOUCH_TARGET_SIZE, + maxWidth: '100%', + textAlign: 'start', + whiteSpace: 'normal', + }, + chevron: { marginRight: tokens.spacingHorizontalXS }, + detailsCell: { padding: tokens.spacingVerticalM, minWidth: 0 }, + details: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + minWidth: 0, + }, + pairCard: { + minWidth: 0, + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + border: `1px solid ${tokens.colorNeutralStroke2}`, + borderRadius: tokens.borderRadiusMedium, + padding: tokens.spacingHorizontalM, + }, + pairHeader: { minWidth: 0 }, + wrappingText: { overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' }, + promptValue: { overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' }, + seedPrompts: { display: 'flex', flexDirection: 'column', gap: tokens.spacingVerticalXS, minWidth: 0 }, + sides: { + display: 'grid', + gridTemplateColumns: 'repeat(2, minmax(0, 1fr))', + gap: tokens.spacingHorizontalM, + [NARROW_VIEWPORT_QUERY]: { gridTemplateColumns: 'minmax(0, 1fr)' }, + }, + side: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalXS, + minWidth: 0, + overflowWrap: 'anywhere', + }, + conversationLink: { + display: 'inline-flex', + alignItems: 'center', + minHeight: MINIMUM_TOUCH_TARGET_SIZE, + alignSelf: 'flex-start', + color: tokens.colorBrandForegroundLink, + ':focus-visible': { outline: `2px solid ${tokens.colorStrokeFocus2}`, outlineOffset: '2px' }, + }, + feedback: { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: tokens.spacingVerticalS }, + pageControls: { + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + flexWrap: 'wrap', + gap: tokens.spacingHorizontalS, + '& button': { minHeight: MINIMUM_TOUCH_TARGET_SIZE }, + }, }) diff --git a/frontend/src/components/Scenarios/PairedOutcomes.test.tsx b/frontend/src/components/Scenarios/PairedOutcomes.test.tsx index 895e14580d..1270a3ae30 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.test.tsx +++ b/frontend/src/components/Scenarios/PairedOutcomes.test.tsx @@ -1,12 +1,15 @@ import { act, render, screen, within } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { FluentProvider, webLightTheme } from '@fluentui/react-components' +import { MemoryRouter } from 'react-router' import { scenariosApi } from '@/services/api' -import type { PairedOutcomeStatistics, ScenarioRunPlan } from '@/types' +import type { PairedOutcomeDetail, PairedOutcomeDetailPage, PairedOutcomeStatistics, ScenarioRunPlan } from '@/types' import PairedOutcomes from './PairedOutcomes' -jest.mock('@/services/api', () => ({ scenariosApi: { getPairedOutcomes: jest.fn() } })) +jest.mock('@/services/api', () => ({ scenariosApi: { getPairedOutcomes: jest.fn(), getPairedOutcomeDetails: jest.fn() } })) const request = scenariosApi.getPairedOutcomes as jest.Mock +const detailsRequest = scenariosApi.getPairedOutcomeDetails as jest.Mock +const runId = '00000000-0000-0000-0000-00000000238c' const plan: ScenarioRunPlan = { version: 1, seed_groups: [], atomic_groups: [ { id: 'base', kind: 'baseline', atomic_attack_name: 'baseline', display_group: 'Baseline', technique_eval_hash: 'b', seed_group_ids: [], tags: [] }, @@ -23,7 +26,13 @@ const report: PairedOutcomeStatistics = { unmatched_baseline_seeds: 1, unmatched_attack_seeds: 0, unattributed_attempts: 0, } function mount(props: Partial> = {}) { - return render() + return render( + + + + + , + ) } async function compare() { const user = userEvent.setup() @@ -32,7 +41,29 @@ async function compare() { await user.click(screen.getByRole('button', { name: 'Compare outcomes' })) return user } -beforeEach(() => { request.mockReset(); request.mockResolvedValue(report) }) +const pair: PairedOutcomeDetail = { + seed_group_id: 'seed-1', objective: 'Ask a clear question', + seed_prompts: [{ sequence: 1, value: 'Example prompt', data_type: 'text', role: 'user', parameters: [] }], + baseline: { + outcome: 'failure', attack_result_id: 'baseline-result', conversation_id: 'baseline-conversation', + outcome_reason: 'Baseline failed', timestamp: '2026-10-20T00:00:00Z', + }, + attack: { + outcome: 'success', attack_result_id: 'attack-result', conversation_id: 'attack-conversation', + outcome_reason: null, timestamp: '2026-10-20T00:01:00Z', + }, +} +function detailPage(pairs: PairedOutcomeDetail[] = [pair], next_cursor: string | null = null, + total_pairs = 1): PairedOutcomeDetailPage { + return { + baseline_group_id: 'base', attack_group_id: 'attack', transition: 'failure_to_success', + pairs, next_cursor, total_pairs, + } +} +beforeEach(() => { + request.mockReset(); request.mockResolvedValue(report) + detailsRequest.mockReset(); detailsRequest.mockResolvedValue(detailPage()) +}) test('requires explicit groups and shows backend transitions, paired rates and exclusions', async () => { mount() @@ -48,7 +79,135 @@ test('requires explicit groups and shows backend transitions, paired rates and e } expect(within(results).getByRole('group', { name: 'Excluded pairs' })).toHaveTextContent('2') expect(within(results).getByText(/not establish causation/)).toBeInTheDocument() - expect(request).toHaveBeenCalledWith('run', { baseline_group_id: 'base', attack_group_id: 'attack' }, expect.any(AbortSignal)) + expect(request).toHaveBeenCalledWith(runId, { baseline_group_id: 'base', attack_group_id: 'attack' }, expect.any(AbortSignal)) + expect(detailsRequest).not.toHaveBeenCalled() +}) +test('expands on keyboard, lazily retrieves the selected transition, and links both conversations in Scenario context', async () => { + mount() + const user = await compare() + const expand = await screen.findByRole('button', { name: 'Failure → Success' }) + expect(expand).toHaveAttribute('aria-expanded', 'false') + expect(detailsRequest).not.toHaveBeenCalled() + expand.focus() + await user.keyboard('{Enter}') + expect(expand).toHaveAttribute('aria-expanded', 'true') + const details = await screen.findByRole('region', { name: 'Failure → Success pair details' }) + expect(within(details).getByText('Ask a clear question')).toBeInTheDocument() + expect(within(details).getByText('Logical seed: seed-1')).toBeInTheDocument() + expect(within(details).getByText('Example prompt')).toBeInTheDocument() + expect(within(details).getByText('Outcome: failure')).toBeInTheDocument() + expect(within(details).getByText('Outcome: success')).toBeInTheDocument() + expect(within(details).getByText('Baseline failed')).toBeInTheDocument() + expect(within(details).getByRole('link', { name: 'Open baseline conversation' })) + .toHaveAttribute('href', `/attacks/baseline-result/conversations/baseline-conversation?scenarioResultId=${runId}`) + expect(within(details).getByRole('link', { name: 'Open attack conversation' })) + .toHaveAttribute('href', `/attacks/attack-result/conversations/attack-conversation?scenarioResultId=${runId}`) + expect(detailsRequest).toHaveBeenCalledWith(runId, { + baseline_group_id: 'base', attack_group_id: 'attack', transition: 'failure_to_success', limit: 25, + }, expect.any(AbortSignal)) + const firstSignal = detailsRequest.mock.calls[0][2] as AbortSignal + await user.click(expand) + expect(expand).toHaveAttribute('aria-expanded', 'false') + expect(screen.queryByRole('region', { name: 'Failure → Success pair details' })).not.toBeInTheDocument() + expect(firstSignal.aborted).toBe(true) + await user.click(expand) + expect(detailsRequest).toHaveBeenCalledTimes(2) + expect(await screen.findByText('Ask a clear question')).toBeInTheDocument() +}) + +test('paginates with bounded requests, stable cursors and no duplicate pairs', async () => { + const firstPage = Array.from({ length: 25 }, (_, index) => ({ + ...pair, seed_group_id: `seed-${String(index + 1).padStart(2, '0')}`, + })) + const secondPage = Array.from({ length: 6 }, (_, index) => ({ + ...pair, seed_group_id: `seed-${index + 26}`, + })) + request.mockResolvedValue({ ...report, failure_to_success: 31, decided_pairs: 34 }) + detailsRequest.mockResolvedValueOnce(detailPage(firstPage, 'opaque-page-1', 31)) + .mockResolvedValueOnce(detailPage(secondPage, null, 31)) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(await screen.findByText('25 of 31 pairs shown')).toBeInTheDocument() + await user.click(screen.getByRole('button', { name: 'Load more Failure → Success pairs' })) + expect(await screen.findByText('31 of 31 pairs shown')).toBeInTheDocument() + expect(screen.getAllByText('Logical seed: seed-01')).toHaveLength(1) + expect(screen.queryByRole('button', { name: 'Load more Failure → Success pairs' })).not.toBeInTheDocument() + expect(detailsRequest).toHaveBeenNthCalledWith(2, runId, { + baseline_group_id: 'base', attack_group_id: 'attack', transition: 'failure_to_success', + cursor: 'opaque-page-1', limit: 25, + }, expect.any(AbortSignal)) +}) + +test('retries a failed first page and a failed additional page without losing loaded pairs', async () => { + request.mockResolvedValue({ ...report, failure_to_success: 2, decided_pairs: 5 }) + detailsRequest.mockRejectedValueOnce(new Error('Connection lost')) + .mockResolvedValueOnce(detailPage([pair], 'page-2', 2)) + .mockRejectedValueOnce(new Error('Second page unavailable')) + .mockResolvedValueOnce(detailPage([{ ...pair, seed_group_id: 'seed-2' }], null, 2)) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(await screen.findByText('Connection lost')).toBeInTheDocument() + await user.click(screen.getByRole('button', { name: 'Retry Failure → Success pairs' })) + expect(await screen.findByText('1 of 2 pairs shown')).toBeInTheDocument() + await user.click(screen.getByRole('button', { name: 'Load more Failure → Success pairs' })) + expect(await screen.findByText('Second page unavailable')).toBeInTheDocument() + expect(screen.getByText('Logical seed: seed-1')).toBeInTheDocument() + await user.click(screen.getByRole('button', { name: 'Retry Failure → Success pairs' })) + expect(await screen.findByText('2 of 2 pairs shown')).toBeInTheDocument() + expect(screen.getAllByText('Logical seed: seed-1')).toHaveLength(1) + expect(detailsRequest.mock.calls[2][1]).toMatchObject({ cursor: 'page-2' }) + expect(detailsRequest.mock.calls[3][1]).toMatchObject({ cursor: 'page-2' }) +}) + +test('zero-count transitions show empty state without making a detail request', async () => { + request.mockResolvedValue({ ...report, failure_to_success: 0, decided_pairs: 3 }) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(screen.getByText('No matching pairs in this transition.')).toBeInTheDocument() + expect(detailsRequest).not.toHaveBeenCalled() +}) + +test('collapse cancels requests and ignores late responses, then re-expansion starts fresh', async () => { + let resolve!: (value: PairedOutcomeDetailPage) => void + detailsRequest.mockReturnValueOnce(new Promise((done) => { resolve = done })) + mount() + const user = await compare() + const expand = await screen.findByRole('button', { name: 'Failure → Success' }) + await user.click(expand) + const signal = detailsRequest.mock.calls[0][2] as AbortSignal + await user.click(expand) + expect(signal.aborted).toBe(true) + await act(async () => resolve(detailPage())) + expect(screen.queryByText('Ask a clear question')).not.toBeInTheDocument() + await user.click(expand) + expect(detailsRequest).toHaveBeenCalledTimes(2) + expect(await screen.findByText('Ask a clear question')).toBeInTheDocument() +}) + +test('selection changes cancel detail requests and suppress stale pairs', async () => { + let resolve!: (value: PairedOutcomeDetailPage) => void + detailsRequest.mockReturnValueOnce(new Promise((done) => { resolve = done })) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + const signal = detailsRequest.mock.calls[0][2] as AbortSignal + await user.selectOptions(screen.getByLabelText('Attack group'), 'other') + expect(signal.aborted).toBe(true) + await act(async () => resolve(detailPage())) + expect(screen.queryByRole('region', { name: 'Paired comparison' })).not.toBeInTheDocument() + expect(screen.queryByText('Ask a clear question')).not.toBeInTheDocument() +}) + +test('rejects an inconsistent detail count instead of presenting mismatched observations', async () => { + detailsRequest.mockResolvedValueOnce(detailPage([pair], null, 99)) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(await screen.findByText(/Pair details changed/)).toBeInTheDocument() + expect(screen.queryByText('Ask a clear question')).not.toBeInTheDocument() }) test('shows unavailable rates when there are no decided pairs', async () => { request.mockResolvedValue({ ...report, decided_pairs: 0, excluded_pairs: 6, diff --git a/frontend/src/components/Scenarios/PairedOutcomes.tsx b/frontend/src/components/Scenarios/PairedOutcomes.tsx index 96236cfe48..f3d1e11e9c 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.tsx +++ b/frontend/src/components/Scenarios/PairedOutcomes.tsx @@ -1,4 +1,5 @@ import { useEffect, useId, useState } from 'react' +import { Link } from 'react-router' import { Button, @@ -18,7 +19,15 @@ import { import { scenariosApi } from '@/services/api' import { toApiError } from '@/services/errors' -import type { PairedOutcomeStatistics, ScenarioRunPlan, ScenarioRunState } from '@/types' +import type { + PairedOutcomeDetail, + PairedOutcomeDetailSide, + PairedOutcomeStatistics, + PairedOutcomeTransition, + ScenarioRunPlan, + ScenarioRunState, +} from '@/types' +import { attackConversationRoutePath } from '@/utils/routeParams' import { usePairedOutcomesStyles } from './PairedOutcomes.styles' @@ -34,6 +43,15 @@ interface ComparisonProps { readonly attackId: string } +const DETAIL_PAGE_SIZE = 25 + +const TRANSITIONS: ReadonlyArray<{ label: string; id: PairedOutcomeTransition }> = [ + { label: 'Failure → Success', id: 'failure_to_success' }, + { label: 'Success → Failure', id: 'success_to_failure' }, + { label: 'Failure → Failure', id: 'failure_to_failure' }, + { label: 'Success → Success', id: 'success_to_success' }, +] + /** Explicitly select two planned groups; the backend owns all matching and counting. */ export default function PairedOutcomes({ scenarioResultId, status, plan }: PairedOutcomesProps) { const styles = usePairedOutcomesStyles() @@ -151,12 +169,6 @@ function Comparison({ scenarioResultId, baselineId, attackId }: ComparisonProps) const difference = report.paired_difference === null ? 'Unavailable' : `${report.paired_difference > 0 ? '+' : ''}${(report.paired_difference * 100).toFixed(1)} pp` - const transitions = [ - ['Failure → Success', report.failure_to_success], - ['Success → Failure', report.success_to_failure], - ['Failure → Failure', report.failure_to_failure], - ['Success → Success', report.success_to_success], - ] as const const exclusions = [ ['Missing baseline', report.missing_baseline], ['Missing attack', report.missing_attack], @@ -191,11 +203,16 @@ function Comparison({ scenarioResultId, baselineId, attackId }: ComparisonProps) - {transitions.map(([label, count]) => ( - - {label} - {count.toLocaleString()} - + {TRANSITIONS.map(({ label, id }) => ( + ))} @@ -215,6 +232,177 @@ function Comparison({ scenarioResultId, baselineId, attackId }: ComparisonProps) ) } +interface TransitionRowProps extends ComparisonProps { + readonly label: string + readonly transition: PairedOutcomeTransition + readonly count: number +} + +function TransitionRow({ label, transition, count, scenarioResultId, baselineId, attackId }: TransitionRowProps) { + const styles = usePairedOutcomesStyles() + const detailsId = useId() + const [expanded, setExpanded] = useState(false) + + return ( + <> + + + + + {count.toLocaleString()} + + {expanded && ( + + +
+ +
+
+
+ )} + + ) +} + +interface DetailState { + pairs: PairedOutcomeDetail[] + nextCursor: string | null + status: 'loading' | 'ready' | 'error' + error?: string +} + +function TransitionDetails({ label, transition, count, scenarioResultId, baselineId, attackId }: TransitionRowProps) { + const styles = usePairedOutcomesStyles() + const [state, setState] = useState({ pairs: [], nextCursor: null, status: 'loading' }) + const [request, setRequest] = useState<{ cursor?: string; version: number }>({ version: 0 }) + + useEffect(() => { + if (count === 0) return + const controller = new AbortController() + void scenariosApi.getPairedOutcomeDetails(scenarioResultId, { + baseline_group_id: baselineId, + attack_group_id: attackId, + transition, + limit: DETAIL_PAGE_SIZE, + ...(request.cursor ? { cursor: request.cursor } : {}), + }, controller.signal).then((page) => { + if (controller.signal.aborted) return + setState((previous) => { + if (page.total_pairs !== count || page.baseline_group_id !== baselineId + || page.attack_group_id !== attackId || page.transition !== transition + || (page.next_cursor && page.next_cursor === request.cursor)) { + return { ...previous, status: 'error', error: 'Pair details changed. Compare outcomes again to refresh.' } + } + const pairs = [...previous.pairs, ...page.pairs] + if (pairs.length > count || new Set(pairs.map((pair) => pair.seed_group_id)).size !== pairs.length + || (page.next_cursor !== null && page.pairs.length === 0)) { + return { ...previous, status: 'error', error: 'Pair details could not be paged consistently. Compare outcomes again.' } + } + return { pairs, nextCursor: page.next_cursor, status: 'ready' } + }) + }).catch((error: unknown) => { + if (!controller.signal.aborted) { + setState((previous) => ({ ...previous, status: 'error', error: toApiError(error).detail })) + } + }) + return () => controller.abort() + }, [scenarioResultId, baselineId, attackId, transition, count, request]) + + const fetchPage = (cursor?: string) => { + setState((previous) => ({ ...previous, status: 'loading', error: undefined })) + setRequest((previous) => ({ cursor, version: previous.version + 1 })) + } + + return ( +
+ {count === 0 && No matching pairs in this transition.} + {state.pairs.map((pair) => ( +
+
+ Objective + {pair.objective || 'Objective unavailable'} + Logical seed: {pair.seed_group_id} +
+ {pair.seed_prompts.length > 0 && ( +
+ Seed prompts + {pair.seed_prompts.map((prompt) => ( +
+ + {`#${prompt.sequence}${prompt.role ? ` · ${prompt.role}` : ''}${prompt.data_type ? ` · ${prompt.data_type}` : ''}`} + + {prompt.value} +
+ ))} +
+ )} +
+ + +
+
+ ))} + {state.status === 'loading' && count > 0 && ( + + )} + {state.status === 'error' && ( +
+ {state.error} + +
+ )} + {state.status === 'ready' && ( +
+ {`${state.pairs.length} of ${count.toLocaleString()} pairs shown`} + {state.nextCursor && ( + + )} +
+ )} +
+ ) +} + +function OutcomeSide({ label, side, scenarioResultId }: { + label: string + side: PairedOutcomeDetailSide + scenarioResultId: string +}) { + const styles = usePairedOutcomesStyles() + return ( +
+ {label} + {`Outcome: ${side.outcome}`} + {side.outcome_reason && {side.outcome_reason}} + {new Date(side.timestamp).toLocaleString()} + {side.attack_result_id && side.conversation_id ? ( + + {`Open ${label.toLowerCase()} conversation`} + + ) : Conversation unavailable} +
+ ) +} + function rate(value: number | null): string { return value === null ? 'Unavailable' : `${(value * 100).toFixed(1)}%` } diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 2bd21495cd..9adffe0b5a 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -54,6 +54,8 @@ import type { ScenarioRunListResponse, ScenarioRunProgress, PairedOutcomeStatistics, + PairedOutcomeDetailPage, + PairedOutcomeTransition, ScenarioQueueSnapshot, ScenarioRunState, ConfigurationFileContent, @@ -695,6 +697,24 @@ export const scenariosApi = { return response.data }, + getPairedOutcomeDetails: async ( + scenarioResultId: string, + params: { + baseline_group_id: string + attack_group_id: string + transition: PairedOutcomeTransition + cursor?: string + limit: number + }, + signal?: AbortSignal, + ): Promise => { + const response = await apiClient.get( + `/scenarios/runs/${encodeURIComponent(scenarioResultId)}/paired-outcomes/details`, + { params, signal }, + ) + return response.data + }, + getQueue: async (signal?: AbortSignal): Promise => { const response = await apiClient.get('/scenarios/runs/queue', { signal }) return response.data diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 2946cb8bf5..91c02b93d1 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -1686,6 +1686,38 @@ export interface PairedOutcomeStatistics { unattributed_attempts: number } +/** Detail pages use the aggregate's exact pairing, exclusions, and latest top-level outcome. */ +export type PairedOutcomeTransition = + | 'failure_to_success' + | 'success_to_failure' + | 'failure_to_failure' + | 'success_to_success' + +export interface PairedOutcomeDetailSide { + outcome: AttackOutcome + attack_result_id: string + conversation_id: string + timestamp: string + outcome_reason: string | null +} + +export interface PairedOutcomeDetail { + seed_group_id: string + objective: string + seed_prompts: ScenarioRunPlanSeedPrompt[] + baseline: PairedOutcomeDetailSide + attack: PairedOutcomeDetailSide +} + +export interface PairedOutcomeDetailPage { + baseline_group_id: string + attack_group_id: string + transition: PairedOutcomeTransition + pairs: PairedOutcomeDetail[] + total_pairs: number + next_cursor: string | null +} + export interface ScenarioRunPlanAtomicGroup { kind?: 'baseline' | 'attack' | 'adaptive' | 'unknown' | null id: string diff --git a/pyrit/analytics/__init__.py b/pyrit/analytics/__init__.py index 89a5ec08be..5e9db87b53 100644 --- a/pyrit/analytics/__init__.py +++ b/pyrit/analytics/__init__.py @@ -12,7 +12,15 @@ from pyrit.analytics.attack_result_analytics import AttackResultAnalytics from pyrit.analytics.conversation_analytics import ConversationAnalytics from pyrit.analytics.outcome_statistics import combine_outcome_statistics, compute_outcome_statistics - from pyrit.analytics.paired_outcome_statistics import PairedOutcomeStatistics, compute_paired_outcome_statistics + from pyrit.analytics.paired_outcome_statistics import ( + PairedOutcomeDetail, + PairedOutcomeDetailPage, + PairedOutcomeDetailSide, + PairedOutcomeStatistics, + PairedOutcomeTransition, + compute_paired_outcome_statistics, + get_paired_outcome_details, + ) from pyrit.analytics.result_analysis import ( AttackStats, analyze_results, @@ -35,12 +43,17 @@ "combine_outcome_statistics": "pyrit.analytics.outcome_statistics", "compute_outcome_statistics": "pyrit.analytics.outcome_statistics", "compute_paired_outcome_statistics": "pyrit.analytics.paired_outcome_statistics", + "get_paired_outcome_details": "pyrit.analytics.paired_outcome_statistics", "compute_producer_counts": "pyrit.analytics.scenario_statistics", "compute_scenario_statistics": "pyrit.analytics.scenario_statistics", "compute_technique_stats_async": "pyrit.analytics.technique_analysis", "count_execution_units": "pyrit.analytics.scenario_statistics", "ConversationAnalytics": "pyrit.analytics.conversation_analytics", "PairedOutcomeStatistics": "pyrit.analytics.paired_outcome_statistics", + "PairedOutcomeDetail": "pyrit.analytics.paired_outcome_statistics", + "PairedOutcomeDetailPage": "pyrit.analytics.paired_outcome_statistics", + "PairedOutcomeDetailSide": "pyrit.analytics.paired_outcome_statistics", + "PairedOutcomeTransition": "pyrit.analytics.paired_outcome_statistics", "ExactTextMatching": "pyrit.analytics.text_matching", "get_cached_results_for_technique": "pyrit.analytics.result_analysis", "get_cached_results_for_technique_async": "pyrit.analytics.result_analysis", diff --git a/pyrit/analytics/paired_outcome_statistics.py b/pyrit/analytics/paired_outcome_statistics.py index 4291259736..cba7bce040 100644 --- a/pyrit/analytics/paired_outcome_statistics.py +++ b/pyrit/analytics/paired_outcome_statistics.py @@ -5,8 +5,14 @@ from __future__ import annotations +import base64 +import binascii +import hashlib +import json +from bisect import bisect_right from dataclasses import dataclass from datetime import datetime +from enum import Enum from typing import TYPE_CHECKING from pyrit.analytics.scenario_statistics import ( @@ -15,7 +21,7 @@ resolve_attack_result_attempt, ) from pyrit.common.utils import to_sha256 -from pyrit.models import AttackOutcome, ScenarioExecutionUnit, ScenarioRunPlanGroupKind +from pyrit.models import AttackOutcome, ScenarioExecutionUnit, ScenarioRunPlanGroupKind, ScenarioRunPlanSeedPrompt if TYPE_CHECKING: from collections.abc import Iterator @@ -60,6 +66,217 @@ class PairedOutcomeStatistics: unattributed_attempts: int +class PairedOutcomeTransition(str, Enum): + """One decided baseline-to-attack outcome transition.""" + + FAILURE_TO_SUCCESS = "failure_to_success" + SUCCESS_TO_FAILURE = "success_to_failure" + FAILURE_TO_FAILURE = "failure_to_failure" + SUCCESS_TO_SUCCESS = "success_to_success" + + +_TRANSITION_OUTCOMES = { + PairedOutcomeTransition.FAILURE_TO_SUCCESS: (AttackOutcome.FAILURE, AttackOutcome.SUCCESS), + PairedOutcomeTransition.SUCCESS_TO_FAILURE: (AttackOutcome.SUCCESS, AttackOutcome.FAILURE), + PairedOutcomeTransition.FAILURE_TO_FAILURE: (AttackOutcome.FAILURE, AttackOutcome.FAILURE), + PairedOutcomeTransition.SUCCESS_TO_SUCCESS: (AttackOutcome.SUCCESS, AttackOutcome.SUCCESS), +} + + +@dataclass(frozen=True, slots=True) +class PairedOutcomeDetailSide: + """The effective top-level completion for one side of a logical pair.""" + + outcome: AttackOutcome + attack_result_id: str + conversation_id: str + timestamp: datetime + outcome_reason: str | None + + +@dataclass(frozen=True, slots=True) +class PairedOutcomeDetail: + """A shared logical seed and the effective outcomes for both selected groups.""" + + seed_group_id: str + objective: str + seed_prompts: tuple[ScenarioRunPlanSeedPrompt, ...] + baseline: PairedOutcomeDetailSide + attack: PairedOutcomeDetailSide + + +@dataclass(frozen=True, slots=True) +class PairedOutcomeDetailPage: + """A bounded, seed-ID-ordered page of matching decided pairs.""" + + baseline_group_id: str + attack_group_id: str + transition: PairedOutcomeTransition + pairs: tuple[PairedOutcomeDetail, ...] + total_pairs: int + next_cursor: str | None + + +def _detail_side(result: AttackResult) -> PairedOutcomeDetailSide: + """ + Copy only the effective top-level outcome context needed by the GUI. + + Returns: + PairedOutcomeDetailSide: Selected top-level result context. + """ + return PairedOutcomeDetailSide( + outcome=result.outcome, + attack_result_id=result.attack_result_id, + conversation_id=result.conversation_id, + timestamp=result.timestamp, + outcome_reason=result.outcome_reason, + ) + + +def _encode_detail_cursor( + *, run_id: str, baseline_group_id: str, attack_group_id: str, transition: PairedOutcomeTransition, seed_id: str +) -> str: + """ + Encode a stable keyset position scoped to this run and comparison. + + Returns: + str: Portable, canonical cursor that can be decoded by any worker. + """ + payload = { + "v": 1, + "scope": _detail_cursor_scope( + run_id=run_id, + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + transition=transition, + ), + "after": seed_id, + } + encoded = json.dumps(payload, sort_keys=True, separators=(",", ":")).encode() + return base64.urlsafe_b64encode(encoded).decode().rstrip("=") + + +def _detail_cursor_scope( + *, run_id: str, baseline_group_id: str, attack_group_id: str, transition: PairedOutcomeTransition +) -> str: + """ + Bind a cursor to a particular saved run and ordered group selection. + + Returns: + str: Stable digest of the run, selected groups, and transition. + """ + payload = json.dumps([run_id, baseline_group_id, attack_group_id, transition.value], separators=(",", ":")) + return hashlib.sha256(payload.encode()).hexdigest() + + +def _decode_detail_cursor( + cursor: str, *, run_id: str, baseline_group_id: str, attack_group_id: str, transition: PairedOutcomeTransition +) -> str: + """ + Reject malformed, mismatched, or noncanonical pagination cursors. + + Returns: + str: Validated last seed ID; membership is verified against current matches. + + Raises: + ValueError: If the cursor is malformed or belongs to another selection. + """ + try: + if not cursor or len(cursor) > 1024: + raise ValueError + raw = base64.b64decode(cursor + "=" * (-len(cursor) % 4), altchars=b"-_", validate=True) + if base64.urlsafe_b64encode(raw).decode().rstrip("=") != cursor: + raise ValueError + payload = json.loads(raw) + if not isinstance(payload, dict) or set(payload) != {"v", "scope", "after"}: + raise ValueError + if ( + type(payload["v"]) is not int + or payload["v"] != 1 + or payload["scope"] + != _detail_cursor_scope( + run_id=run_id, + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + transition=transition, + ) + or not isinstance(payload["after"], str) + or not payload["after"] + ): + raise ValueError + return payload["after"] + except (ValueError, TypeError, UnicodeDecodeError, binascii.Error) as exc: + raise ValueError("Invalid paired-outcome detail cursor for the selected run, groups, and transition.") from exc + + +def get_paired_outcome_details( + scenario_result: ScenarioResult, + *, + baseline_group_id: str, + attack_group_id: str, + transition: PairedOutcomeTransition, + limit: int = 25, + cursor: str | None = None, +) -> PairedOutcomeDetailPage: + """ + Page through one transition using the aggregate's exact pairing and compatibility checks. + + Returns: + PairedOutcomeDetailPage: Deterministically ordered effective top-level pairs. + + Raises: + ValueError: If the selection, evidence, page size, or cursor is invalid. + """ + if not isinstance(transition, PairedOutcomeTransition): + raise ValueError("Unknown paired-outcome transition.") + if isinstance(limit, bool) or not isinstance(limit, int) or not 1 <= limit <= 100: + raise ValueError("Paired-outcome detail limit must be between 1 and 100.") + after = ( + _decode_detail_cursor( + cursor, + run_id=str(scenario_result.id), + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + transition=transition, + ) + if cursor is not None + else None + ) + matches: list[PairedOutcomeDetail] = [] + _compute_paired_outcome_statistics( + scenario_result, + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + selected_transition=transition, + matching_details=matches, + ) + matches.sort(key=lambda item: item.seed_group_id) + ids = [item.seed_group_id for item in matches] + if after is not None and after not in ids: + raise ValueError("Invalid paired-outcome detail cursor: seed is not in the selected transition.") + start = bisect_right(ids, after) if after is not None else 0 + page = matches[start : start + limit] + next_cursor = ( + _encode_detail_cursor( + run_id=str(scenario_result.id), + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + transition=transition, + seed_id=page[-1].seed_group_id, + ) + if start + limit < len(matches) + else None + ) + return PairedOutcomeDetailPage( + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + transition=transition, + pairs=tuple(page), + total_pairs=len(matches), + next_cursor=next_cursor, + ) + + @dataclass(frozen=True, slots=True) class _ScoringEvidence: """Available scoring metadata for a persisted outcome.""" @@ -260,6 +477,28 @@ def compute_paired_outcome_statistics( ValueError: If the run plan, selection, attribution, objectives, or available scorer identities cannot support an unambiguous comparison. """ + return _compute_paired_outcome_statistics( + scenario_result, baseline_group_id=baseline_group_id, attack_group_id=attack_group_id + ) + + +def _compute_paired_outcome_statistics( + scenario_result: ScenarioResult, + *, + baseline_group_id: str, + attack_group_id: str, + selected_transition: PairedOutcomeTransition | None = None, + matching_details: list[PairedOutcomeDetail] | None = None, +) -> PairedOutcomeStatistics: + """ + Compute aggregates and optionally collect matching details from the same validated pairs. + + Returns: + PairedOutcomeStatistics: Validated aggregate of effective pair outcomes. + + Raises: + ValueError: If the plan, selected results, or score evidence are incompatible. + """ baseline, attack, plan, lookup = _selected_groups( scenario_result=scenario_result, baseline_group_id=baseline_group_id, @@ -272,6 +511,7 @@ def compute_paired_outcome_statistics( # The plan validates unique seed IDs. The same run carries the scenario-level # target/scorer identity; per-result identities add stronger checks. + seed_by_id = {seed.id: seed for seed in plan.seed_groups} objectives = {seed.id: seed.objective_sha256 for seed in plan.seed_groups} relevant_names = {baseline.atomic_attack_name, attack.atomic_attack_name} selected_ids = {baseline.id, attack.id} @@ -387,6 +627,21 @@ def compute_paired_outcome_statistics( raise ValueError("Decided pairs contain incompatible score types.") observed_score_type = score_type transitions[(before[0], after[0])] += 1 + if ( + matching_details is not None + and selected_transition is not None + and _TRANSITION_OUTCOMES[selected_transition] == (before[0], after[0]) + ): + seed = seed_by_id[seed_id] + matching_details.append( + PairedOutcomeDetail( + seed_group_id=seed_id, + objective=seed.objective, + seed_prompts=tuple(seed.prompts), + baseline=_detail_side(before[1]), + attack=_detail_side(after[1]), + ) + ) decided = sum(transitions.values()) baseline_successes = ( diff --git a/pyrit/backend/routes/scenarios.py b/pyrit/backend/routes/scenarios.py index 011a471514..3c00f55ea7 100644 --- a/pyrit/backend/routes/scenarios.py +++ b/pyrit/backend/routes/scenarios.py @@ -17,7 +17,13 @@ from fastapi import APIRouter, HTTPException, Query, Request, status from starlette.concurrency import run_in_threadpool -from pyrit.analytics import PairedOutcomeStatistics, compute_paired_outcome_statistics +from pyrit.analytics import ( + PairedOutcomeDetailPage, + PairedOutcomeStatistics, + PairedOutcomeTransition, + compute_paired_outcome_statistics, + get_paired_outcome_details, +) from pyrit.backend.models.common import MAX_ITEMS, CursorStr, IdentifierStr, LabelFilterStr, ProblemDetail from pyrit.backend.models.datasets import ScenarioDatasetLoadResponse from pyrit.backend.models.scenarios import ( @@ -441,6 +447,45 @@ async def get_scenario_run_results(scenario_result_id: IdentifierStr) -> Scenari return result +@router.get( + "/runs/{scenario_result_id}/paired-outcomes/details", + response_model=PairedOutcomeDetailPage, + responses={ + 400: {"model": ProblemDetail, "description": "Invalid selection, pairing evidence, or detail cursor"}, + 404: {"model": ProblemDetail, "description": "Run not found"}, + 409: {"model": ProblemDetail, "description": "Run not yet completed"}, + }, +) +async def get_paired_outcome_details_async( + *, + scenario_result_id: IdentifierStr, + baseline_group_id: IdentifierStr = Query(..., description="Saved baseline atomic group ID"), + attack_group_id: IdentifierStr = Query(..., description="Saved attack atomic group ID"), + transition: PairedOutcomeTransition = Query(..., description="Decided outcome transition"), + limit: int = Query(25, ge=1, le=100, description="Maximum matching pairs per page"), + cursor: CursorStr | None = Query(None, description="Opaque filter-bound detail cursor"), +) -> PairedOutcomeDetailPage: + """ + Load a bounded page of objective and conversation details for one transition. + + Returns: + PairedOutcomeDetailPage: Pairs selected by the same SDK semantics as aggregate analytics. + """ + result = await get_scenario_run_results(scenario_result_id=scenario_result_id) + try: + return await run_in_threadpool( + get_paired_outcome_details, + result, + baseline_group_id=baseline_group_id, + attack_group_id=attack_group_id, + transition=transition, + limit=limit, + cursor=cursor, + ) + except ValueError as exc: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from None + + @router.get( "/runs/{scenario_result_id}/paired-outcomes", response_model=PairedOutcomeStatistics, diff --git a/tests/unit/analytics/test_paired_outcome_statistics.py b/tests/unit/analytics/test_paired_outcome_statistics.py index 7809e50bf3..07c5bcbb92 100644 --- a/tests/unit/analytics/test_paired_outcome_statistics.py +++ b/tests/unit/analytics/test_paired_outcome_statistics.py @@ -7,7 +7,11 @@ import pytest -from pyrit.analytics.paired_outcome_statistics import compute_paired_outcome_statistics +from pyrit.analytics.paired_outcome_statistics import ( + PairedOutcomeTransition, + compute_paired_outcome_statistics, + get_paired_outcome_details, +) from pyrit.common.utils import to_sha256 from pyrit.executor.attack import PromptSendingAttack from pyrit.executor.attack.compound import SequenceCompletionPolicy, SequentialAttackResult @@ -900,3 +904,136 @@ def test_paired_outcomes_reject_malformed_child_result_ids() -> None: _plan(("a",), ("a",)), {"baseline": [_result("a", AttackOutcome.FAILURE)], "attack": [result]}, ) + + +def _detail_scenario(): + """Construct pairs with a retry, a child attempt, and an excluded outcome.""" + return make_scenario_result( + metadata={SCENARIO_RUN_PLAN_METADATA_KEY: _plan().model_dump(mode="json")}, + attack_results={ + "baseline": [ + _result("d", AttackOutcome.FAILURE), + _result("c", AttackOutcome.SUCCESS), + _result("b", AttackOutcome.FAILURE), + _result("a", AttackOutcome.FAILURE), + ], + "attack": [ + _result("b", AttackOutcome.SUCCESS), + _result("a", AttackOutcome.FAILURE, seconds=-2), + _result("d", AttackOutcome.ERROR), + _result("a", AttackOutcome.SUCCESS, seconds=1), + _result("a", AttackOutcome.FAILURE, seconds=2, attempt_index=1), + _result("c", AttackOutcome.SUCCESS), + ], + }, + ) + + +def test_paired_outcome_details_paginate_same_decided_pairs_as_summary() -> None: + saved = _detail_scenario() + summary = compute_paired_outcome_statistics(saved, baseline_group_id="base", attack_group_id="attack") + assert (summary.failure_to_success, summary.success_to_success, summary.excluded_pairs) == (2, 1, 1) + + first = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=1, + ) + assert first.total_pairs == summary.failure_to_success + assert [row.seed_group_id for row in first.pairs] == ["a"] + assert first.pairs[0].objective == "a" + assert first.pairs[0].attack.outcome == AttackOutcome.SUCCESS + assert first.pairs[0].attack.attack_result_id == saved.attack_results["attack"][3].attack_result_id + assert first.next_cursor is not None + + second = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=1, + cursor=first.next_cursor, + ) + assert [row.seed_group_id for row in second.pairs] == ["b"] + assert second.next_cursor is None + saved.attack_results["attack"].reverse() + again = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=1, + cursor=first.next_cursor, + ) + assert again == second + + +def test_paired_outcome_details_reject_wrong_scope_and_nonmember_cursors() -> None: + from pyrit.analytics.paired_outcome_statistics import _encode_detail_cursor + + saved = _detail_scenario() + valid = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=1, + ).next_cursor + assert valid + with pytest.raises(ValueError, match="cursor"): + get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.SUCCESS_TO_SUCCESS, + cursor=valid, + ) + with pytest.raises(ValueError, match="cursor"): + get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + cursor="!malformed!", + ) + nonmember = _encode_detail_cursor( + run_id=str(saved.id), + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + seed_id="c", + ) + with pytest.raises(ValueError, match="seed"): + get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + cursor=nonmember, + ) + + +@pytest.mark.parametrize("limit", [0, -1, 101, True]) +def test_paired_outcome_details_reject_invalid_page_size(limit: int) -> None: + with pytest.raises(ValueError, match="limit"): + get_paired_outcome_details( + _detail_scenario(), + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=limit, + ) + + +def test_paired_outcome_details_preserve_compatibility_checks() -> None: + saved = _detail_scenario() + saved.attack_results["attack"][0].objective = "different objective" + with pytest.raises(ValueError, match="objective"): + get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + ) diff --git a/tests/unit/backend/test_paired_outcome_routes.py b/tests/unit/backend/test_paired_outcome_routes.py index 1bb605147a..47f1f7a3b9 100644 --- a/tests/unit/backend/test_paired_outcome_routes.py +++ b/tests/unit/backend/test_paired_outcome_routes.py @@ -154,3 +154,53 @@ def test_paired_outcomes_rejects_legacy_plan(client: TestClient) -> None: ) assert response.status_code == 400 assert "saved scenario run plan" in response.json()["detail"] + + +def test_paired_detail_endpoint_returns_selected_seed_and_conversation_ids(client: TestClient) -> None: + saved = _saved_result() + params = {"baseline_group_id": "baseline", "attack_group_id": "attack", "transition": "failure_to_success"} + with patch("pyrit.backend.routes.scenarios.get_scenario_run_service") as service: + service.return_value.get_run_results_async = AsyncMock(return_value=saved) + response = client.get("/api/scenarios/runs/saved/paired-outcomes/details", params=params) + assert response.status_code == 200 + body = response.json() + assert body["total_pairs"] == 1 + assert body["next_cursor"] is None + assert body["pairs"][0]["seed_group_id"] == "a" + assert body["pairs"][0]["objective"] == "a" + assert body["pairs"][0]["baseline"]["conversation_id"] == saved.attack_results["baseline"][0].conversation_id + assert body["pairs"][0]["attack"]["conversation_id"] == saved.attack_results["attack"][0].conversation_id + + +@pytest.mark.parametrize( + ("params", "status_code"), + [ + ({"baseline_group_id": "baseline", "attack_group_id": "attack", "transition": "bad"}, 422), + ( + { + "baseline_group_id": "baseline", + "attack_group_id": "attack", + "transition": "failure_to_success", + "limit": 101, + }, + 422, + ), + ( + { + "baseline_group_id": "baseline", + "attack_group_id": "attack", + "transition": "failure_to_success", + "cursor": "invalid!", + }, + 400, + ), + ({"baseline_group_id": "attack", "attack_group_id": "baseline", "transition": "failure_to_success"}, 400), + ], +) +def test_paired_detail_endpoint_validates_filters_and_cursors( + client: TestClient, params: dict[str, str | int], status_code: int +) -> None: + with patch("pyrit.backend.routes.scenarios.get_scenario_run_service") as service: + service.return_value.get_run_results_async = AsyncMock(return_value=_saved_result()) + response = client.get("/api/scenarios/runs/saved/paired-outcomes/details", params=params) + assert response.status_code == status_code From 0fd3851586fcf5d228b976fc57025963c3007792 Mon Sep 17 00:00:00 2001 From: Dev3 ^~^ Date: Tue, 20 Oct 2026 15:12:15 +0530 Subject: [PATCH 2/3] FIX Harden paired outcome drill-down behavior --- doc/gui/0_gui.md | 5 ++ .../e2e/fixtures/paired_outcomes_backend.py | 38 +++++++++- frontend/e2e/paired-outcomes.spec.ts | 54 ++++++++++++++- .../Scenarios/PairedOutcomes.styles.ts | 9 ++- .../Scenarios/PairedOutcomes.test.tsx | 69 ++++++++++++++++++- .../components/Scenarios/PairedOutcomes.tsx | 58 ++++++++++++---- .../Scenarios/ScenarioDetail.test.tsx | 2 +- frontend/src/types/index.ts | 5 ++ pyrit/analytics/__init__.py | 2 + pyrit/analytics/paired_outcome_statistics.py | 44 +++++++++--- .../test_paired_outcome_statistics.py | 60 +++++++++++++++- 11 files changed, 317 insertions(+), 29 deletions(-) diff --git a/doc/gui/0_gui.md b/doc/gui/0_gui.md index 2e2f95505d..f0830e9f92 100644 --- a/doc/gui/0_gui.md +++ b/doc/gui/0_gui.md @@ -981,6 +981,11 @@ Each transition row can be expanded to inspect the matched logical objectives behind that count. Expanding loads only the selected transition's pairs, with the baseline and attack outcomes shown side by side and links to each saved conversation. Conversation links retain the originating Scenario run context. +When a compound result has no conversation of its own, the panel links to one +of its recorded child conversations and labels the child's outcome separately. +It prefers the last linked conversation matching the compound outcome, falling +back to the last linked conversation when none matches. The displayed pair +outcome and observation count still belong to the top-level result. Use **Load more** to inspect additional pairs, or collapse the row to hide its details. Large transitions are loaded in bounded pages; a failed request can be retried from the expanded row. Switching selected groups clears the details. diff --git a/frontend/e2e/fixtures/paired_outcomes_backend.py b/frontend/e2e/fixtures/paired_outcomes_backend.py index 031e1b3e36..d6f300612e 100644 --- a/frontend/e2e/fixtures/paired_outcomes_backend.py +++ b/frontend/e2e/fixtures/paired_outcomes_backend.py @@ -32,6 +32,7 @@ async def _seed_async(memory: SQLiteMemory) -> None: ScenarioRunPlanAtomicGroup, ScenarioRunPlanGroupKind, ScenarioRunPlanSeedGroup, + ScenarioRunPlanSeedPrompt, ScenarioRunState, TargetIdentifier, ) @@ -48,10 +49,20 @@ async def _seed_async(memory: SQLiteMemory) -> None: ) ) for index, state in enumerate( - [ScenarioRunState.COMPLETED, ScenarioRunState.COMPLETED, ScenarioRunState.FAILED, ScenarioRunState.COMPLETED] + [ + ScenarioRunState.COMPLETED, + ScenarioRunState.COMPLETED, + ScenarioRunState.FAILED, + ScenarioRunState.COMPLETED, + ScenarioRunState.COMPLETED, + ] ): scenario_id = UUID(int=9100 + index) - page_seeds = [f"page-{number:02d}" for number in range(30)] if index == 3 else [] + page_seeds = ( + [f"page-{number:02d}" + ("x" * 900 if index == 4 and number == 23 else "") for number in range(30)] + if index in (3, 4) + else [] + ) selected_seeds = shared + page_seeds plan = ScenarioRunPlan( atomic_groups=[ @@ -69,7 +80,16 @@ async def _seed_async(memory: SQLiteMemory) -> None: ] ], seed_groups=[ - ScenarioRunPlanSeedGroup(id=seed, objective=seed, objective_sha256=to_sha256(seed)) + ScenarioRunPlanSeedGroup( + id=seed, + objective=seed, + objective_sha256=to_sha256(seed), + prompts=[ + ScenarioRunPlanSeedPrompt(value="LongPrompt" * 80, sequence=0, data_type="text", role="user") + ] + if index == 4 and seed == "a" + else [], + ) for seed in selected_seeds + ["base-only", "attack-only"] ], ) @@ -152,7 +172,19 @@ async def _seed_async(memory: SQLiteMemory) -> None: }, ) ) + if index == 4: + parent = rows["attack"][0] + child = parent.model_copy(deep=True) + child.attack_result_id = str(uuid4()) + child.conversation_id = str(uuid4()) + assert child.attribution_data is not None + child.attribution_data["attempt_index"] = 1 + parent.conversation_id = "" + parent.metadata["child_attack_result_ids"] = [child.attack_result_id] + rows["attack"].append(child) for attack_result in (item for group in rows.values() for item in group): + if not attack_result.conversation_id: + continue await memory.add_conversation_to_memory_async( conversation=Conversation( conversation_id=attack_result.conversation_id, diff --git a/frontend/e2e/paired-outcomes.spec.ts b/frontend/e2e/paired-outcomes.spec.ts index 708629ba02..fc2c2e3dfc 100644 --- a/frontend/e2e/paired-outcomes.spec.ts +++ b/frontend/e2e/paired-outcomes.spec.ts @@ -118,12 +118,17 @@ test('paginates matching SQLite pairs', async ({ page }) => { await expect(details).toContainText('25 of 31 pairs shown') await expect(details.getByRole('article')).toHaveCount(25) const nextPage = page.waitForResponse((response) => response.url().includes('/paired-outcomes/details?') && response.url().includes('cursor=')) - await details.getByRole('button', { name: 'Load more Failure → Success pairs' }).click() + await details.getByRole('button', { name: 'Load more Failure → Success pairs' }).focus() + await page.keyboard.press('Enter') const result = await nextPage expect(result.status()).toBe(200) expect(await result.json()).toMatchObject({ total_pairs: 31, next_cursor: null }) await expect(details).toContainText('31 of 31 pairs shown') await expect(details.getByRole('article')).toHaveCount(31) + const firstNewPair = details.getByRole('article').nth(25) + await expect(firstNewPair).toBeFocused() + await page.keyboard.press('Tab') + await expect(firstNewPair.getByRole('link', { name: 'Open baseline conversation' })).toBeFocused() await expect(details.getByRole('button', { name: 'Load more Failure → Success pairs' })).toHaveCount(0) }) @@ -133,3 +138,50 @@ test('explains why legacy or failed runs cannot be compared', async ({ page }) = await page.goto(scenarioRunRoutePath('00000000-0000-0000-0000-00000000238e')) await expect(page.getByRole('region', { name: 'Paired outcomes', exact: true })).toContainText('Complete the run') }) + +test('opens a compound child conversation and pages long seed IDs on mobile', async ({ page }) => { + await page.setViewportSize({ width: 320, height: 844 }) + await page.goto(scenarioRunRoutePath('00000000-0000-0000-0000-000000002390')) + const panel = page.getByRole('region', { name: 'Paired outcomes', exact: true }) + await panel.getByLabel('Baseline group').selectOption('baseline') + await panel.getByLabel('Attack group').selectOption('attack') + await panel.getByRole('button', { name: 'Compare outcomes' }).click() + await panel.getByRole('button', { name: 'Failure → Success' }).click() + const details = panel.getByRole('region', { name: 'Failure → Success pair details' }) + await expect(details).toContainText('25 of 31 pairs shown') + await expect(details).toContainText('Linked child outcome: success') + expect(await panel.evaluate((element) => element.scrollWidth > element.clientWidth)).toBe(false) + const nextPage = page.waitForResponse((response) => response.url().includes('/paired-outcomes/details?') && response.url().includes('cursor=')) + await details.getByRole('button', { name: 'Load more Failure → Success pairs' }).click() + expect((await nextPage).status()).toBe(200) + await expect(details).toContainText('31 of 31 pairs shown') + const baseline = details.getByRole('link', { name: 'Open baseline conversation', exact: true }).first() + const baselinePath = await baseline.getAttribute('href') + const child = details.getByRole('link', { name: 'Open attack child conversation', exact: true }) + await child.click() + await expect(page).toHaveURL(/\/attacks\/[^/]+\/conversations\/[^/]+\?scenarioResultId=00000000-0000-0000-0000-000000002390/) + await expect(page.getByText('Offline objective: a')).toBeVisible() + if (!baselinePath) throw new Error('Missing baseline conversation link') + await page.goto(baselinePath) + await expect(page.getByText('Offline objective: a')).toBeVisible() +}) + +test('offers a usable mobile retry after a real network failure', async ({ page, context }) => { + await page.setViewportSize({ width: 320, height: 844 }) + await page.goto(run) + const panel = page.getByRole('region', { name: 'Paired outcomes', exact: true }) + await panel.getByLabel('Baseline group').selectOption('baseline') + await panel.getByLabel('Attack group').selectOption('attack') + await panel.getByRole('button', { name: 'Compare outcomes' }).click() + const expand = panel.getByRole('button', { name: 'Failure → Success' }) + await expect(expand).toBeVisible() + await context.setOffline(true) + await expand.click() + const retry = panel.getByRole('button', { name: 'Retry Failure → Success pairs' }) + await expect(retry).toBeVisible() + expect(await panel.evaluate((element) => element.scrollWidth > element.clientWidth)).toBe(false) + expect((await retry.boundingBox())?.height).toBeGreaterThanOrEqual(44) + await context.setOffline(false) + await retry.click() + await expect(panel.getByRole('region', { name: 'Failure → Success pair details' })).toContainText('Logical seed: a') +}) diff --git a/frontend/src/components/Scenarios/PairedOutcomes.styles.ts b/frontend/src/components/Scenarios/PairedOutcomes.styles.ts index ad0e1d8a3d..50e748f587 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.styles.ts +++ b/frontend/src/components/Scenarios/PairedOutcomes.styles.ts @@ -86,7 +86,14 @@ export const usePairedOutcomesStyles = makeStyles({ color: tokens.colorBrandForegroundLink, ':focus-visible': { outline: `2px solid ${tokens.colorStrokeFocus2}`, outlineOffset: '2px' }, }, - feedback: { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: tokens.spacingVerticalS }, + feedback: { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: tokens.spacingVerticalS, + '& button': { minHeight: MINIMUM_TOUCH_TARGET_SIZE }, + }, + errorMessage: { width: '100%', minWidth: 0, overflowWrap: 'anywhere' }, pageControls: { display: 'flex', alignItems: 'center', diff --git a/frontend/src/components/Scenarios/PairedOutcomes.test.tsx b/frontend/src/components/Scenarios/PairedOutcomes.test.tsx index 1270a3ae30..73b6637cba 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.test.tsx +++ b/frontend/src/components/Scenarios/PairedOutcomes.test.tsx @@ -25,13 +25,14 @@ const report: PairedOutcomeStatistics = { baseline_errors: 0, attack_errors: 1, baseline_undetermined: 0, attack_undetermined: 0, unmatched_baseline_seeds: 1, unmatched_attack_seeds: 0, unattributed_attempts: 0, } -function mount(props: Partial> = {}) { +function mount(props: Partial> = {}, reactStrictMode: boolean = false) { return render( , + { reactStrictMode }, ) } async function compare() { @@ -65,6 +66,19 @@ beforeEach(() => { detailsRequest.mockReset(); detailsRequest.mockResolvedValue(detailPage()) }) +test('ignores the cancelled Strict Mode request without duplicating pair details', async () => { + let resolve!: (value: PairedOutcomeDetailPage) => void + detailsRequest.mockReturnValueOnce(new Promise((done) => { resolve = done })) + mount({}, true) + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(await screen.findByText('1 of 1 pairs shown')).toBeInTheDocument() + expect((detailsRequest.mock.calls[0][2] as AbortSignal).aborted).toBe(true) + await act(async () => resolve(detailPage([{ ...pair, objective: 'Stale cancelled objective' }]))) + expect(screen.queryByText('Stale cancelled objective')).not.toBeInTheDocument() + expect(screen.getAllByText('Logical seed: seed-1')).toHaveLength(1) +}) + test('requires explicit groups and shows backend transitions, paired rates and exclusions', async () => { mount() expect(screen.getByRole('button', { name: 'Compare outcomes' })).toBeDisabled() @@ -131,6 +145,7 @@ test('paginates with bounded requests, stable cursors and no duplicate pairs', a expect(await screen.findByText('25 of 31 pairs shown')).toBeInTheDocument() await user.click(screen.getByRole('button', { name: 'Load more Failure → Success pairs' })) expect(await screen.findByText('31 of 31 pairs shown')).toBeInTheDocument() + expect(screen.getAllByRole('article')[25]).toHaveFocus() expect(screen.getAllByText('Logical seed: seed-01')).toHaveLength(1) expect(screen.queryByRole('button', { name: 'Load more Failure → Success pairs' })).not.toBeInTheDocument() expect(detailsRequest).toHaveBeenNthCalledWith(2, runId, { @@ -258,3 +273,55 @@ test('cancels requests on unmount', async () => { view.unmount() expect(signal.aborted).toBe(true) }) + +test('links a compound outcome to its linked child conversation in Scenario context', async () => { + const compoundPair = { + ...pair, + attack: { + ...pair.attack, + conversation_id: '', + child_conversation: { + attack_result_id: 'linked-child', conversation_id: 'child-conversation', outcome: 'success' as const, + }, + }, + } + detailsRequest.mockResolvedValueOnce(detailPage([compoundPair])) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + const link = await screen.findByRole('link', { name: 'Open attack child conversation' }) + expect(link).toHaveAttribute('href', `/attacks/linked-child/conversations/child-conversation?scenarioResultId=${runId}`) + expect(screen.getByText('Linked child outcome: success')).toBeInTheDocument() + expect(screen.getByText('1 of 1 pairs shown')).toBeInTheDocument() +}) + +test('rejects a truncated final page instead of silently hiding remaining pairs', async () => { + request.mockResolvedValue({ ...report, failure_to_success: 2 }) + detailsRequest.mockResolvedValueOnce(detailPage([pair], null, 2)) + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(await screen.findByText(/could not be paged consistently/)).toBeInTheDocument() + expect(screen.queryByText('1 of 2 pairs shown')).not.toBeInTheDocument() +}) + +test('renders multimodal prompt pieces sharing a sequence without duplicate React keys', async () => { + const consoleError = jest.spyOn(console, 'error') + detailsRequest.mockResolvedValueOnce(detailPage([{ + ...pair, + seed_prompts: [ + { sequence: 0, value: 'Text piece', role: 'user', data_type: 'text', parameters: [] }, + { sequence: 0, value: 'Image piece', role: 'user', data_type: 'image_path', parameters: [] }, + ], + }])) + try { + mount() + const user = await compare() + await user.click(await screen.findByRole('button', { name: 'Failure → Success' })) + expect(await screen.findByText('Text piece')).toBeInTheDocument() + expect(screen.getByText('Image piece')).toBeInTheDocument() + expect(consoleError).not.toHaveBeenCalled() + } finally { + consoleError.mockRestore() + } +}) diff --git a/frontend/src/components/Scenarios/PairedOutcomes.tsx b/frontend/src/components/Scenarios/PairedOutcomes.tsx index f3d1e11e9c..d4324737a8 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.tsx +++ b/frontend/src/components/Scenarios/PairedOutcomes.tsx @@ -1,4 +1,4 @@ -import { useEffect, useId, useState } from 'react' +import { useEffect, useId, useRef, useState } from 'react' import { Link } from 'react-router' import { @@ -162,7 +162,9 @@ function Comparison({ scenarioResultId, baselineId, attackId }: ComparisonProps) if (state.status === 'loading') return if (state.status === 'error') { - return {state.error} + return + {state.error} + } const report = state.report @@ -282,6 +284,7 @@ function TransitionRow({ label, transition, count, scenarioResultId, baselineId, interface DetailState { pairs: PairedOutcomeDetail[] + pageStart: number nextCursor: string | null status: 'loading' | 'ready' | 'error' error?: string @@ -289,8 +292,10 @@ interface DetailState { function TransitionDetails({ label, transition, count, scenarioResultId, baselineId, attackId }: TransitionRowProps) { const styles = usePairedOutcomesStyles() - const [state, setState] = useState({ pairs: [], nextCursor: null, status: 'loading' }) + const [state, setState] = useState({ pairs: [], pageStart: 0, nextCursor: null, status: 'loading' }) const [request, setRequest] = useState<{ cursor?: string; version: number }>({ version: 0 }) + const detailsRegion = useRef(null) + const firstNewPair = useRef(null) useEffect(() => { if (count === 0) return @@ -311,10 +316,11 @@ function TransitionDetails({ label, transition, count, scenarioResultId, baselin } const pairs = [...previous.pairs, ...page.pairs] if (pairs.length > count || new Set(pairs.map((pair) => pair.seed_group_id)).size !== pairs.length - || (page.next_cursor !== null && page.pairs.length === 0)) { + || (page.next_cursor === null && pairs.length !== count) + || (page.next_cursor !== null && (page.pairs.length === 0 || pairs.length === count))) { return { ...previous, status: 'error', error: 'Pair details could not be paged consistently. Compare outcomes again.' } } - return { pairs, nextCursor: page.next_cursor, status: 'ready' } + return { pairs, pageStart: previous.pairs.length, nextCursor: page.next_cursor, status: 'ready' } }) }).catch((error: unknown) => { if (!controller.signal.aborted) { @@ -324,16 +330,29 @@ function TransitionDetails({ label, transition, count, scenarioResultId, baselin return () => controller.abort() }, [scenarioResultId, baselineId, attackId, transition, count, request]) + useEffect(() => { + if (state.status === 'ready' && document.activeElement === detailsRegion.current) { + // Restore focus lost with the loading button, without interrupting navigation elsewhere. + firstNewPair.current?.focus() + } + }, [state.status, state.pairs]) + const fetchPage = (cursor?: string) => { + if (document.activeElement instanceof HTMLButtonElement) detailsRegion.current?.focus({ preventScroll: true }) setState((previous) => ({ ...previous, status: 'loading', error: undefined })) setRequest((previous) => ({ cursor, version: previous.version + 1 })) } return ( -
+
{count === 0 && No matching pairs in this transition.} - {state.pairs.map((pair) => ( -
+ {state.pairs.map((pair, position) => ( +
Objective {pair.objective || 'Objective unavailable'} @@ -342,8 +361,9 @@ function TransitionDetails({ label, transition, count, scenarioResultId, baselin {pair.seed_prompts.length > 0 && (
Seed prompts - {pair.seed_prompts.map((prompt) => ( -
+ {/* Multimodal pieces share sequences; positions are fixed in this saved prompt list. */} + {pair.seed_prompts.map((prompt, position) => ( +
{`#${prompt.sequence}${prompt.role ? ` · ${prompt.role}` : ''}${prompt.data_type ? ` · ${prompt.data_type}` : ''}`} @@ -363,7 +383,9 @@ function TransitionDetails({ label, transition, count, scenarioResultId, baselin )} {state.status === 'error' && (
- {state.error} + + {state.error} +
)} @@ -371,7 +393,7 @@ function TransitionDetails({ label, transition, count, scenarioResultId, baselin
{`${state.pairs.length} of ${count.toLocaleString()} pairs shown`} {state.nextCursor && ( - + )}
)} @@ -398,6 +420,18 @@ function OutcomeSide({ label, side, scenarioResultId }: { > {`Open ${label.toLowerCase()} conversation`} + ) : side.child_conversation ? ( + <> + {`Linked child outcome: ${side.child_conversation.outcome}`} + + {`Open ${label.toLowerCase()} child conversation`} + + ) : Conversation unavailable}
) diff --git a/frontend/src/components/Scenarios/ScenarioDetail.test.tsx b/frontend/src/components/Scenarios/ScenarioDetail.test.tsx index 75ba749ab8..2421e4e599 100644 --- a/frontend/src/components/Scenarios/ScenarioDetail.test.tsx +++ b/frontend/src/components/Scenarios/ScenarioDetail.test.tsx @@ -1734,7 +1734,7 @@ describe('ScenarioDetail', () => { expect(within(preview).getByRole('alert')).toHaveTextContent('prevent older runs from resuming') await user.click(within(preview).getByRole('button', { name: 'Cancel' })) expect(mockStartRun).not.toHaveBeenCalled() - await user.click(screen.getByRole('button', { name: 'Launch scan' })) + await user.click(await screen.findByRole('button', { name: 'Launch scan' })) const confirmed = await screen.findByRole('dialog', { name: 'Run preview' }) await user.click(within(confirmed).getByRole('button', { name: 'Launch scan' })) expect(mockStartRun).toHaveBeenCalledTimes(1) diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 91c02b93d1..a4cbc8d1c1 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -1699,6 +1699,11 @@ export interface PairedOutcomeDetailSide { conversation_id: string timestamp: string outcome_reason: string | null + child_conversation?: { + attack_result_id: string + conversation_id: string + outcome: AttackOutcome + } | null } export interface PairedOutcomeDetail { diff --git a/pyrit/analytics/__init__.py b/pyrit/analytics/__init__.py index 5e9db87b53..6b33af413d 100644 --- a/pyrit/analytics/__init__.py +++ b/pyrit/analytics/__init__.py @@ -13,6 +13,7 @@ from pyrit.analytics.conversation_analytics import ConversationAnalytics from pyrit.analytics.outcome_statistics import combine_outcome_statistics, compute_outcome_statistics from pyrit.analytics.paired_outcome_statistics import ( + PairedOutcomeChildConversation, PairedOutcomeDetail, PairedOutcomeDetailPage, PairedOutcomeDetailSide, @@ -50,6 +51,7 @@ "count_execution_units": "pyrit.analytics.scenario_statistics", "ConversationAnalytics": "pyrit.analytics.conversation_analytics", "PairedOutcomeStatistics": "pyrit.analytics.paired_outcome_statistics", + "PairedOutcomeChildConversation": "pyrit.analytics.paired_outcome_statistics", "PairedOutcomeDetail": "pyrit.analytics.paired_outcome_statistics", "PairedOutcomeDetailPage": "pyrit.analytics.paired_outcome_statistics", "PairedOutcomeDetailSide": "pyrit.analytics.paired_outcome_statistics", diff --git a/pyrit/analytics/paired_outcome_statistics.py b/pyrit/analytics/paired_outcome_statistics.py index cba7bce040..f152644239 100644 --- a/pyrit/analytics/paired_outcome_statistics.py +++ b/pyrit/analytics/paired_outcome_statistics.py @@ -9,7 +9,6 @@ import binascii import hashlib import json -from bisect import bisect_right from dataclasses import dataclass from datetime import datetime from enum import Enum @@ -83,6 +82,15 @@ class PairedOutcomeTransition(str, Enum): } +@dataclass(frozen=True, slots=True) +class PairedOutcomeChildConversation: + """One linked child conversation for a compound completion without its own conversation.""" + + attack_result_id: str + conversation_id: str + outcome: AttackOutcome + + @dataclass(frozen=True, slots=True) class PairedOutcomeDetailSide: """The effective top-level completion for one side of a logical pair.""" @@ -92,6 +100,7 @@ class PairedOutcomeDetailSide: conversation_id: str timestamp: datetime outcome_reason: str | None + child_conversation: PairedOutcomeChildConversation | None = None @dataclass(frozen=True, slots=True) @@ -117,19 +126,35 @@ class PairedOutcomeDetailPage: next_cursor: str | None -def _detail_side(result: AttackResult) -> PairedOutcomeDetailSide: +def _detail_side(result: AttackResult, *, attempts_by_id: dict[str, AttackResult]) -> PairedOutcomeDetailSide: """ Copy only the effective top-level outcome context needed by the GUI. Returns: PairedOutcomeDetailSide: Selected top-level result context. """ + child_conversation = None + if not result.conversation_id: + fallback = matching = None + for linked in _linked_outcome_results(result, attempts_by_id=attempts_by_id): + if linked.conversation_id: + fallback = linked + if linked.outcome == result.outcome: + matching = linked + selected = matching or fallback + if selected is not None: + child_conversation = PairedOutcomeChildConversation( + attack_result_id=selected.attack_result_id, + conversation_id=selected.conversation_id, + outcome=selected.outcome, + ) return PairedOutcomeDetailSide( outcome=result.outcome, attack_result_id=result.attack_result_id, conversation_id=result.conversation_id, timestamp=result.timestamp, outcome_reason=result.outcome_reason, + child_conversation=child_conversation, ) @@ -150,7 +175,7 @@ def _encode_detail_cursor( attack_group_id=attack_group_id, transition=transition, ), - "after": seed_id, + "after": to_sha256(seed_id), } encoded = json.dumps(payload, sort_keys=True, separators=(",", ":")).encode() return base64.urlsafe_b64encode(encoded).decode().rstrip("=") @@ -176,7 +201,7 @@ def _decode_detail_cursor( Reject malformed, mismatched, or noncanonical pagination cursors. Returns: - str: Validated last seed ID; membership is verified against current matches. + str: Validated last seed digest; membership is verified against current matches. Raises: ValueError: If the cursor is malformed or belongs to another selection. @@ -201,7 +226,8 @@ def _decode_detail_cursor( transition=transition, ) or not isinstance(payload["after"], str) - or not payload["after"] + or len(payload["after"]) != 64 + or any(character not in "0123456789abcdef" for character in payload["after"]) ): raise ValueError return payload["after"] @@ -251,10 +277,10 @@ def get_paired_outcome_details( matching_details=matches, ) matches.sort(key=lambda item: item.seed_group_id) - ids = [item.seed_group_id for item in matches] + ids = [to_sha256(item.seed_group_id) for item in matches] if after is not None and after not in ids: raise ValueError("Invalid paired-outcome detail cursor: seed is not in the selected transition.") - start = bisect_right(ids, after) if after is not None else 0 + start = ids.index(after) + 1 if after is not None else 0 page = matches[start : start + limit] next_cursor = ( _encode_detail_cursor( @@ -638,8 +664,8 @@ def _compute_paired_outcome_statistics( seed_group_id=seed_id, objective=seed.objective, seed_prompts=tuple(seed.prompts), - baseline=_detail_side(before[1]), - attack=_detail_side(after[1]), + baseline=_detail_side(before[1], attempts_by_id=before[2]), + attack=_detail_side(after[1], attempts_by_id=after[2]), ) ) diff --git a/tests/unit/analytics/test_paired_outcome_statistics.py b/tests/unit/analytics/test_paired_outcome_statistics.py index 07c5bcbb92..889c4d0735 100644 --- a/tests/unit/analytics/test_paired_outcome_statistics.py +++ b/tests/unit/analytics/test_paired_outcome_statistics.py @@ -23,6 +23,7 @@ AttackResult, AttackSeedGroup, ComponentIdentifier, + ScenarioResult, ScenarioRunPlan, ScenarioRunPlanAtomicGroup, ScenarioRunPlanGroupKind, @@ -906,7 +907,7 @@ def test_paired_outcomes_reject_malformed_child_result_ids() -> None: ) -def _detail_scenario(): +def _detail_scenario() -> ScenarioResult: """Construct pairs with a retry, a child attempt, and an excluded outcome.""" return make_scenario_result( metadata={SCENARIO_RUN_PLAN_METADATA_KEY: _plan().model_dump(mode="json")}, @@ -1037,3 +1038,60 @@ def test_paired_outcome_details_preserve_compatibility_checks() -> None: attack_group_id="attack", transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, ) + + +@pytest.mark.parametrize("seed_id", ["a" + "x" * 900, "a" + "雪" * 200], ids=["long-ascii", "long-unicode"]) +def test_paired_outcome_details_can_continue_after_long_seed_ids(seed_id: str) -> None: + seeds = (seed_id, "z") + saved = make_scenario_result( + metadata={SCENARIO_RUN_PLAN_METADATA_KEY: _plan(seeds, seeds).model_dump(mode="json")}, + attack_results={ + "baseline": [_result(seed, AttackOutcome.FAILURE) for seed in seeds], + "attack": [_result(seed, AttackOutcome.SUCCESS) for seed in seeds], + }, + ) + first = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=1, + ) + assert first.next_cursor is not None + assert len(first.next_cursor) <= 1024 + second = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + limit=1, + cursor=first.next_cursor, + ) + assert [pair.seed_group_id for pair in first.pairs + second.pairs] == [seed_id, "z"] + assert second.next_cursor is None + + +@pytest.mark.parametrize("live", [False, True]) +def test_paired_outcome_details_link_nested_compound_conversation_without_counting_children(live: bool) -> None: + outer, inner, leaf = _nested_compound_outcome() + outer.conversation_id = inner.conversation_id = "" + unrelated = _result("a", AttackOutcome.SUCCESS, seconds=100, group="attack", attempt_index=2) + results = [outer, unrelated] if live else _saved_compound_results([outer, inner, leaf, unrelated]) + saved = make_scenario_result( + metadata={SCENARIO_RUN_PLAN_METADATA_KEY: _plan(("a",), ("a",)).model_dump(mode="json")}, + attack_results={"baseline": [_result("a", AttackOutcome.FAILURE)], "attack": results}, + ) + page = get_paired_outcome_details( + saved, + baseline_group_id="base", + attack_group_id="attack", + transition=PairedOutcomeTransition.FAILURE_TO_SUCCESS, + ) + assert page.total_pairs == len(page.pairs) == 1 + side = page.pairs[0].attack + assert side.attack_result_id == outer.attack_result_id + assert side.outcome == AttackOutcome.SUCCESS + assert side.child_conversation is not None + assert side.child_conversation.attack_result_id == leaf.attack_result_id + assert side.child_conversation.conversation_id == leaf.conversation_id + assert side.child_conversation.outcome == AttackOutcome.SUCCESS From a9dc8a0b6bb42ecdb5b20bec700a7e8d78c8ce54 Mon Sep 17 00:00:00 2001 From: Dev3 ^~^ Date: Tue, 20 Oct 2026 15:25:51 +0530 Subject: [PATCH 3/3] FIX Improve paired outcome mobile layout and screenshots --- doc/gui/0_gui.md | 4 ++- doc/gui/images/paired-outcomes-desktop.png | Bin 80520 -> 22617 bytes doc/gui/images/paired-outcomes-mobile.png | Bin 55127 -> 23793 bytes frontend/e2e/paired-outcomes.spec.ts | 31 ++++++++++++++++-- .../Scenarios/PairedOutcomes.styles.ts | 12 +++++-- .../components/Scenarios/PairedOutcomes.tsx | 9 ++--- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/doc/gui/0_gui.md b/doc/gui/0_gui.md index f0830e9f92..3897992c31 100644 --- a/doc/gui/0_gui.md +++ b/doc/gui/0_gui.md @@ -993,7 +993,9 @@ All results use the same decided-pair cohort and most recent top-level attempt as the transition counts, so retries and child attempts are never additional pairs. -Expanded paired outcomes on desktop: +The following focused screenshots show one expanded transition and its conversation links. + +Expanded transition details on desktop: ![Paired outcomes with an expanded transition, objective, and baseline and attack conversation links](./images/paired-outcomes-desktop.png) diff --git a/doc/gui/images/paired-outcomes-desktop.png b/doc/gui/images/paired-outcomes-desktop.png index c1ecbe0479843d4cdd4c398ee64bc73b873b06df..ce3a198ba0f49ec552e9477c9332821211854dea 100644 GIT binary patch literal 22617 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 literal 80520 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 diff --git a/doc/gui/images/paired-outcomes-mobile.png b/doc/gui/images/paired-outcomes-mobile.png index 8af900a9e09953e035b55de44c70b797f765bbf7..ade41f0d4609c0e96095578cbcd45545abc1036f 100644 GIT binary patch literal 23793 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�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 Ml2?-}xckWOUn%;1OBy#Pqv&sPCji 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
TM2 zQSic)CHOKMf1af?q?TU$m*&1ZV=vo2)VlXay5RYs*) zrE8?8BhaWA@uoM`cxdCm2t7ZU-8q%Fo=hSdjierh^9u~E`{4+#^xnMUBt7)U216?O zWIy})&hSkFFU1*~rrt%09J(ELUz@3Pb(XH3_9v8uGnwmFpY4L7yS;f*^>TKpmr!ug z*I&STR>@{F>9&mclwjPM4qak&16dj5xeizI8>4;YsCRJq>n55ak9JG(5&D zGPtZ4#pC%cPoKy2_|Fy^BK4~s$Uuk$e4A=f;lTmuhjS(7-k)1cKM*0MHvBB`c|2Z+ zBVU^D)gKJ}5-N_$&h))Z#Yg73C(o)l7Oap?uUrzC!fG|~&Pcn?shK^cMn5A2W6MIx zdSu2=B$yh?H~BoG=jiW-<5J#5FXFITahC?_Wh5aT7R4W5Hk88e#o`PWO@{NCp@!mO zA*g<$$42!-3CSpu87!8yb0;Bej*px{xtp);o`3qUH5}(`SIU%vfI$`9+hG zp2Zv2{-qoI&=ox0&2#jawMNrB;MrT4rm|U4%C+m&!tE_HaYN_PgkVJCM+J|JRnOa9 z2JMw|akh8jX)mxyp8%>T$NO=Zm%|d(A}8qkhuw`%ob|BIvrvjKM{}36$|W|99$|YK zt{ZuI-aOB{GpZ2c^(Wh`!tgJD3P++`r$VCwtA5749xt-70-FAGA?r^#TTIbvu>PQI z3=8?y-oXaTR59JCdVp9CDihc+{fxoY)nI9kCzNV(EQ)wV#xnx}1IN&+H{Xi;VZ>S%53AXV?HKRYGVl&Ot%#~B z|DxE74tqfUaN=9N3B&YH5Jpp*Mcx&|L#w{nxa#I(jXkk0|K*-d7nx{yW~)CJ+jKdl z{bDU|Q6ltNAz!N<@^Yz^9Rf&(AknH{vHfFtmp+HKD=g(T+$|dgrP=Hvk9gSULAy^D zPKn?}V|$mElV*<-P3xp>ElVp#H2vptK9`Y{#y^tTA0h%8P8Na`^ed%$9PA1DN30Id za&W(o^S>dI5MG{ed=h@VIURiSZwZP_Y`<=$x?AIKdf1(oz~*B%#AQ%>s5>bP3PE2+ zeGUbV$V|>8XI0&r*Kg&6Wnh*Wt?Dh4qaz7uwg4Lx&{jZ{r79(6_ecP%9LZpVt%eby z+94zd2s1DN^1nX9?q#Xr6QJq^XvuYNe}$i}0q$_R)IN{;0TmX7kTdJ*mDA1iB>!!! zF)^RGe9N%ie>lbv>~Vc!n*|w9@U1^scnHt+MC?TBs2_8yYc%476oq|72A^O;miBp(3>%M#z_2`^*WRMXsV_+zW;imeW!P;@bupL<_ zIuo|hn#!p!0}CWiec3p;rAN44C&a!Gov=A~c44bj`)v$!|J>_%g4540cg zZ}48chmQby4e&zdBt9iK(`J&iXd`Z~9kYZii^B2LTC4n$=Y11%tNF5d66GlV^mt94 zK0F^1+V#66VU^{@FR~SM1&I<{`w1oUMqoula9Z>vu+S9ieJI8}_Lnn#zVw!>IS0v` zBAJ4ob9Jg(X^6=4_AKdTHQQE5m`|A68vq=%oU_K^|6@B`AeTu0q%5ExNahNzAwY=D zO#uL@_iPOX^yRMcvPoHZ?o^8iWZCsJihvcc?-NVsDnwEa=}cwjx%se76Py}UA~FsREMIYB*W;{T0)ukIM~c z{A+viDrfZAMprRJg~HQV50^WcT%O_wu@p58M0;k6&C1B|g$-1PEobau1vrlrT++9G{E(AYf&rZ6{WB4lInEIp^~ zPfuE?2JDPMN;+?@U_OR*w-5iI|l zKY(9QTwo z+n4HRb`7vSP_O*_F5)P&1RZZ150q!FG?20NFKZ0K8W_?_6TVkyw>KCsM`az&U5qWs zbVTV5DwV$)FsfhxmQ{y9D?XO1d_K1pIB0!vk(O^wPbA1^-fMx%xg`GCWNv-x1M~NM zS`|jE67rY2N8GYaQ^|N{zlVkQO9eK86h W(RnWB&Lw9G7w{87>j*V@^2)@#GPv0 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 diff --git a/frontend/e2e/paired-outcomes.spec.ts b/frontend/e2e/paired-outcomes.spec.ts index fc2c2e3dfc..0c5a219d43 100644 --- a/frontend/e2e/paired-outcomes.spec.ts +++ b/frontend/e2e/paired-outcomes.spec.ts @@ -1,9 +1,28 @@ -import { expect, test } from '@playwright/test' +import { expect, test, type Locator, type Page } from '@playwright/test' import { scenarioRunRoutePath } from '../src/utils/routeParams' const run = scenarioRunRoutePath('00000000-0000-0000-0000-00000000238c') const paginatedRun = scenarioRunRoutePath('00000000-0000-0000-0000-00000000238f') +async function captureExpandedTransition(page: Page, table: Locator, details: Locator, path: string): Promise { + const header = table.getByRole('row').first() + await header.evaluate((element) => element.scrollIntoView({ block: 'start' })) + await expect(details.getByRole('link', { name: 'Open baseline conversation' })).toBeInViewport({ ratio: 1 }) + await expect(details.getByRole('link', { name: 'Open attack conversation' })).toBeInViewport({ ratio: 1 }) + const headerBox = await header.boundingBox() + const detailsBox = await details.boundingBox() + const viewport = page.viewportSize() + if (!headerBox || !detailsBox || !viewport) throw new Error('Missing screenshot bounds') + const clip = { + x: headerBox.x, y: headerBox.y, width: headerBox.width, + height: detailsBox.y + detailsBox.height - headerBox.y + 8, + } + expect(clip.y).toBeGreaterThanOrEqual(0) + expect(clip.y + clip.height).toBeLessThanOrEqual(viewport.height) + expect(clip.height).toBeLessThanOrEqual(700) + await page.screenshot({ path, clip }) +} + test('compares persisted outcomes through the real API, including retries and exclusions', async ({ page }, testInfo) => { const errors: string[] = [] page.on('pageerror', (error) => errors.push(error.message)) @@ -54,7 +73,8 @@ test('compares persisted outcomes through the real API, including retries and ex const attackLink = details.getByRole('link', { name: 'Open attack conversation' }) await expect(baselineLink).toHaveAttribute('href', /scenarioResultId=00000000-0000-0000-0000-00000000238c/) await expect(attackLink).toHaveAttribute('href', /scenarioResultId=00000000-0000-0000-0000-00000000238c/) - await panel.screenshot({ path: testInfo.outputPath('paired-outcomes-desktop.png') }) + await captureExpandedTransition(page, comparison.getByRole('table', { name: 'Outcome transitions' }), details, + testInfo.outputPath('paired-outcomes-desktop.png')) await attackLink.click() await expect(page).toHaveURL(/\/attacks\/[^/]+\/conversations\/[^/]+\?scenarioResultId=/) await expect(page.getByText('Offline objective: a')).toBeVisible() @@ -90,6 +110,9 @@ test('keeps expanded pairs usable at a narrow viewport and with keyboard control await expect(button).toBeFocused() await page.keyboard.press('Enter') await expect(panel.getByRole('region', { name: 'Paired comparison' })).toBeVisible() + const baselineMetric = await panel.getByRole('group', { name: 'Baseline success rate' }).boundingBox() + const attackMetric = await panel.getByRole('group', { name: 'Attack success rate' }).boundingBox() + expect(baselineMetric?.y).toBe(attackMetric?.y) const overflow = await panel.evaluate((element) => element.scrollWidth > element.clientWidth) expect(overflow).toBe(false) const size = await button.boundingBox() @@ -100,9 +123,11 @@ test('keeps expanded pairs usable at a narrow viewport and with keyboard control await expand.focus() await page.keyboard.press('Enter') await expect(expand).toHaveAttribute('aria-expanded', 'true') + expect((await expand.boundingBox())?.height).toBeLessThanOrEqual(44) await expect(panel.getByRole('region', { name: 'Failure → Success pair details' })).toContainText('Logical seed: a') expect(await panel.evaluate((element) => element.scrollWidth > element.clientWidth)).toBe(false) - await panel.screenshot({ path: testInfo.outputPath('paired-outcomes-mobile.png') }) + await captureExpandedTransition(page, panel.getByRole('table', { name: 'Outcome transitions' }), + panel.getByRole('region', { name: 'Failure → Success pair details' }), testInfo.outputPath('paired-outcomes-mobile.png')) }) test('paginates matching SQLite pairs', async ({ page }) => { diff --git a/frontend/src/components/Scenarios/PairedOutcomes.styles.ts b/frontend/src/components/Scenarios/PairedOutcomes.styles.ts index 50e748f587..c94f3644ef 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.styles.ts +++ b/frontend/src/components/Scenarios/PairedOutcomes.styles.ts @@ -35,17 +35,25 @@ export const usePairedOutcomesStyles = makeStyles({ }, metrics: { display: 'grid', + overflowWrap: 'anywhere', gridTemplateColumns: 'repeat(auto-fit, minmax(9rem, 1fr))', gap: tokens.spacingHorizontalL, + [NARROW_VIEWPORT_QUERY]: { gridTemplateColumns: 'repeat(2, minmax(0, 1fr))' }, }, + transitions: { tableLayout: 'fixed', width: '100%' }, + countCell: { width: '3.5rem', textAlign: 'end', whiteSpace: 'nowrap' }, expandButton: { minHeight: MINIMUM_TOUCH_TARGET_SIZE, maxWidth: '100%', textAlign: 'start', whiteSpace: 'normal', + justifyContent: 'flex-start', + }, + detailsCell: { + padding: tokens.spacingVerticalM, + minWidth: 0, + [NARROW_VIEWPORT_QUERY]: { padding: tokens.spacingVerticalS }, }, - chevron: { marginRight: tokens.spacingHorizontalXS }, - detailsCell: { padding: tokens.spacingVerticalM, minWidth: 0 }, details: { display: 'flex', flexDirection: 'column', diff --git a/frontend/src/components/Scenarios/PairedOutcomes.tsx b/frontend/src/components/Scenarios/PairedOutcomes.tsx index d4324737a8..f9ee8b1a92 100644 --- a/frontend/src/components/Scenarios/PairedOutcomes.tsx +++ b/frontend/src/components/Scenarios/PairedOutcomes.tsx @@ -16,6 +16,7 @@ import { TableRow, Text, } from '@fluentui/react-components' +import { ChevronDownRegular, ChevronRightRegular } from '@fluentui/react-icons' import { scenariosApi } from '@/services/api' import { toApiError } from '@/services/errors' @@ -197,11 +198,11 @@ function Comparison({ scenarioResultId, baselineId, attackId }: ComparisonProps)
Rates use the same decided pairs. Difference = attack − baseline, in percentage points (pp). - +
Baseline → Attack - Pairs + Pairs @@ -254,13 +255,13 @@ function TransitionRow({ label, transition, count, scenarioResultId, baselineId, className={styles.expandButton} aria-expanded={expanded} aria-controls={detailsId} + icon={expanded ? : } onClick={() => setExpanded((current) => !current)} > - {label} - {count.toLocaleString()} + {count.toLocaleString()} {expanded && (