mirror of
https://github.com/CopilotKit/CopilotKit.git
synced 2026-09-14 16:26:20 +08:00
dca1b9894d
The agentic-chat-reasoning and reasoning-default-render cells in
langgraph-python and langgraph-fastapi were configured with
gpt-4o-mini + use_responses_api=False, which never produces AG-UI
REASONING_MESSAGE_* events: gpt-4o-mini is not a reasoning model and
the Chat Completions API does not surface reasoning summary items at
all. The frontend's reasoningMessage slot was rendering nothing,
even though the cells were billed as "reasoning" demos.
- Switch both reasoning agents to gpt-5-mini (override via
OPENAI_REASONING_MODEL) routed through the Responses API with
reasoning={"effort":"medium","summary":"detailed"} so the model's
chain of thought streams as content blocks that @ag-ui/langgraph
translates into REASONING_MESSAGE_* events.
- Update the aimock d5-all.json and harness reasoning-display.json
fixtures to include a "reasoning" field so aimock emits
response.reasoning_summary_text.delta SSE events deterministically
in CI without hitting a real LLM.
- Add a "Show reasoning" useConfigureSuggestions pill on both
reasoning demo pages so the user can trigger the fixture-matched
prompt with one click.
- Tighten the d5-reasoning-display probe: it now also asserts a
reasoning-role message rendered via [data-testid="reasoning-block"]
or [data-message-role="reasoning"], so a plain text response
containing the word "reasoning" no longer falsely passes.
- Un-skip the three streaming reasoning-block tests in
langgraph-python's agentic-chat-reasoning.spec.ts and add a
suggestion-pill test; expand the reasoning-default-render spec to
cover the default reasoning slot.
- Update the langgraph-python QA doc to describe the new model +
Responses API setup and the suggestion-pill flow.
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
|
|
// QA reference: qa/reasoning-default-render.md
|
|
// Demo source: src/app/demos/reasoning-default-render/page.tsx
|
|
//
|
|
// This cell does NOT override the `reasoningMessage` slot. CopilotKit's
|
|
// built-in `CopilotChatReasoningMessage` renders the reasoning as a
|
|
// collapsible card. The page exposes a "Show reasoning" suggestion pill
|
|
// whose message matches the aimock fixture in showcase/aimock/d5-all.json,
|
|
// so streaming is deterministic in CI.
|
|
|
|
test.describe("Reasoning (Default Render)", () => {
|
|
test.setTimeout(120_000);
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto("/demos/reasoning-default-render");
|
|
});
|
|
|
|
test("page renders without errors", async ({ page }) => {
|
|
await expect(
|
|
page.locator('[data-testid="copilot-chat-input"]'),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("Show reasoning pill renders a reasoning-role message", async ({
|
|
page,
|
|
}) => {
|
|
const pill = page.getByRole("button", { name: /Show reasoning/i }).first();
|
|
await expect(pill).toBeVisible({ timeout: 30_000 });
|
|
await pill.click();
|
|
|
|
// The cell uses CopilotKit's default CopilotChatReasoningMessage. We
|
|
// accept either its testid or the role-attribute marker — whichever
|
|
// the runtime emits first.
|
|
const reasoningRole = page
|
|
.locator(
|
|
'[data-testid="copilot-reasoning-message"], [data-message-role="reasoning"]',
|
|
)
|
|
.first();
|
|
await expect(reasoningRole).toBeVisible({ timeout: 60_000 });
|
|
});
|
|
});
|