93 lines
2.9 KiB
TypeScript
93 lines
2.9 KiB
TypeScript
import { expect, test } from "@playwright/test"
|
|
import {
|
|
assistantMessage,
|
|
reasoningPart,
|
|
setupTimeline,
|
|
status,
|
|
textPart,
|
|
toolPart,
|
|
userMessage,
|
|
} from "../performance/timeline-stability/fixture"
|
|
|
|
const profiles = [
|
|
{ name: "summaries off no reasoning", summaries: false, reasoning: "", other: false, thinking: true, body: false },
|
|
{
|
|
name: "summaries off reasoning heading",
|
|
summaries: false,
|
|
reasoning: "## Inspecting stability",
|
|
other: false,
|
|
thinking: true,
|
|
body: false,
|
|
},
|
|
{
|
|
name: "summaries off with visible tool",
|
|
summaries: false,
|
|
reasoning: "## Inspecting stability",
|
|
other: true,
|
|
thinking: true,
|
|
body: false,
|
|
},
|
|
{ name: "summaries on no content", summaries: true, reasoning: "", other: false, thinking: true, body: false },
|
|
{
|
|
name: "summaries on blank reasoning",
|
|
summaries: true,
|
|
reasoning: " ",
|
|
other: false,
|
|
thinking: true,
|
|
body: false,
|
|
},
|
|
{
|
|
name: "summaries on visible reasoning",
|
|
summaries: true,
|
|
reasoning: "## Inspecting stability",
|
|
other: false,
|
|
thinking: false,
|
|
body: true,
|
|
},
|
|
{
|
|
name: "summaries on visible tool no reasoning",
|
|
summaries: true,
|
|
reasoning: "",
|
|
other: true,
|
|
thinking: false,
|
|
body: false,
|
|
},
|
|
] as const
|
|
|
|
for (const profile of profiles) {
|
|
test(`projects busy reasoning profile ${profile.name}`, async ({ page }) => {
|
|
const reasoningID = `prt_reasoning_matrix_${profiles.indexOf(profile)}`
|
|
const parts = [
|
|
...(profile.reasoning ? [reasoningPart(reasoningID, profile.reasoning)] : []),
|
|
...(profile.other
|
|
? [toolPart(`prt_reasoning_tool_${profiles.indexOf(profile)}`, "skill", "running", { name: "inspect" })]
|
|
: []),
|
|
]
|
|
const timeline = await setupTimeline(page, {
|
|
messages: [userMessage(), assistantMessage(parts, { completed: false })],
|
|
settings: { showReasoningSummaries: profile.summaries },
|
|
})
|
|
await timeline.send(status("busy"), 150)
|
|
|
|
await expect(page.locator('[data-timeline-row="Thinking"]')).toHaveCount(profile.thinking ? 1 : 0)
|
|
await expect(page.locator(`[data-timeline-part-id="${reasoningID}"]`)).toHaveCount(profile.body ? 1 : 0)
|
|
if (!profile.summaries && profile.reasoning.trim()) {
|
|
await expect(page.getByText("Inspecting stability", { exact: true })).toBeVisible()
|
|
}
|
|
})
|
|
}
|
|
|
|
test("does not infer reasoning visibility from provider identity", async ({ page }) => {
|
|
const timeline = await setupTimeline(page, {
|
|
messages: [
|
|
userMessage(),
|
|
assistantMessage([textPart("prt_provider_text", "No reasoning payload")], { completed: false }),
|
|
],
|
|
settings: { showReasoningSummaries: true },
|
|
})
|
|
await timeline.send(status("busy"), 150)
|
|
|
|
await expect(page.locator('[data-timeline-row="Thinking"]')).toHaveCount(0)
|
|
await expect(page.locator('[data-timeline-part-id*="reasoning"]')).toHaveCount(0)
|
|
await expect(page.locator('[data-timeline-part-id="prt_provider_text"]')).toBeVisible()
|
|
})
|