Skip to content

Fix structuredOutputMode for newer Anthropic models - #2120

Merged
miguelg719 merged 2 commits into
mainfrom
fix-opus-extract-bug
May 14, 2026
Merged

Fix structuredOutputMode for newer Anthropic models#2120
miguelg719 merged 2 commits into
mainfrom
fix-opus-extract-bug

Conversation

@miguelg719

@miguelg719 miguelg719 commented May 14, 2026

Copy link
Copy Markdown
Collaborator

why

New output mode output_format from anthropic breaks compat with older jsonTool. Opus 4.7 defaults to the new format so it breaks with strict mode settings enabled

what changed

On aisdk.ts ensured structuredOutputMode defaults to auto.

test plan

  • tested with env:LOCAL and extract with custom schema

Summary by cubic

Set providerOptions.anthropic.structuredOutputMode to auto for the anthropic provider to align with newer Anthropic models. Restores structured outputs and prevents schema/response errors when generating JSON, and adds a patch changeset for @browserbasehq/stagehand.

Written for commit 6ef2148. Summary will update on new commits.

@changeset-bot

changeset-bot Bot commented May 14, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6ef2148

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
@browserbasehq/stagehand Patch
@browserbasehq/stagehand-evals Patch
@browserbasehq/stagehand-server-v3 Patch
@browserbasehq/stagehand-server-v4 Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@miguelg719 miguelg719 changed the title Fix structuredOutputMode for newer Anthropic models Fix structuredOutputMode for newer Anthropic models May 14, 2026
@miguelg719
miguelg719 marked this pull request as ready for review May 14, 2026 20:38
@miguelg719 miguelg719 added the extract These changes pertain to the extract function label May 14, 2026

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 2 files

Confidence score: 3/5

  • There is a concrete regression risk in packages/core/lib/v3/llm/aisdk.ts: structuredOutputMode: "auto" is gated to prefixed Anthropic model IDs, so unprefixed claude-* IDs may not get the structured-output fix.
  • Because this is a medium-severity, high-confidence behavior gap (6/10, 8/10) in model routing logic, merge risk is moderate rather than low.
  • Pay close attention to packages/core/lib/v3/llm/aisdk.ts - ensure Anthropic ID matching covers both prefixed and unprefixed forms so structured output behavior is consistent.
Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/core/lib/v3/llm/aisdk.ts">

<violation number="1" location="packages/core/lib/v3/llm/aisdk.ts:182">
P2: `structuredOutputMode: "auto"` is only applied for prefixed Anthropic model IDs, so unprefixed Anthropic IDs (e.g. `claude-*`) still miss the new structured-output fix.</violation>
</file>
Architecture diagram
sequenceDiagram
    participant App as Stagehand App
    participant LLMClient as LLMClient
    participant AISdkClient as AISdkClient
    participant Provider as Provider SDK (Anthropic/Azure)
    participant AnthropicAPI as Anthropic API

    Note over App,AnthropicAPI: Structured output configuration flow

    App->>LLMClient: execute() with structured output schema
    LLMClient->>AISdkClient: callModel() with provider options

    alt Provider is "anthropic"
        AISdkClient->>AISdkClient: Set providerOptions.anthropic.structuredOutputMode = "auto"
        AISdkClient->>Provider: call with providerOptions including structuredOutputMode: "auto"
        Provider->>AnthropicAPI: API request with tool-use mode (structured output)
        AnthropicAPI-->>Provider: Structured JSON response
        Provider-->>AISdkClient: Parsed structured output
    else Provider is "azure"
        AISdkClient->>AISdkClient: Set providerOptions.azure.strictJsonSchema = true
        AISdkClient->>Provider: call with strictJsonSchema enabled
        Provider-->>AISdkClient: Structured output via strict schema
    else Default (no specific provider options)
        AISdkClient->>Provider: call without structured output overrides
        Provider-->>AISdkClient: Unstructured response (may fail for JSON)
    end

    AISdkClient-->>LLMClient: Return structured result
    LLMClient-->>App: Structured output data
Loading

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

Comment thread packages/core/lib/v3/llm/aisdk.ts
@miguelg719
miguelg719 merged commit 12703a6 into main May 14, 2026
224 of 241 checks passed
seanmcguire12 pushed a commit that referenced this pull request Jun 3, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @browserbasehq/stagehand@3.5.0

### Minor Changes

- [#2149](#2149)
[`6e75725`](6e75725)
Thanks [@miguelg719](https://github.com/miguelg719)! - Added a
`screenshot` option to `extract()` that sends the current viewport
screenshot with the a11y tree for extraction.

- [#2127](#2127)
[`78bcde8`](78bcde8)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - Add
`ignoreDefaultArgs` option to selectively remove chrome-launcher's
built-in default flags (e.g. `--disable-extensions`) when running
locally

- [#2160](#2160)
[`49575d6`](49575d6)
Thanks [@monadoid](https://github.com/monadoid)! - Forward constructor
and request model configuration when initializing API-backed sessions.

- [#2171](#2171)
[`dc1445d`](dc1445d)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - add native
clipboard API

### Patch Changes

- [#2146](#2146)
[`3a53ed4`](3a53ed4)
Thanks [@shriyatheunicorn](https://github.com/shriyatheunicorn)! - Pass
local browser launch options through when attaching over CDP so explicit
viewport settings are respected.

- [#2107](#2107)
[`8fc16d2`](8fc16d2)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix Anthropic CUA
`triple_click` action mapping.

- [#2118](#2118)
[`3e95a87`](3e95a87)
Thanks [@monadoid](https://github.com/monadoid)! - Add Vertex auth
parameters to the core and server API schemas.

- [#2126](#2126)
[`ebbdcd3`](ebbdcd3)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix(core):
import ToolSet from ai public export

- [#2120](#2120)
[`12703a6`](12703a6)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix
structuredOutputMode for newer Anthropic models

- [#2170](#2170)
[`1db5f1c`](1db5f1c)
Thanks [@Kylejeong2](https://github.com/Kylejeong2)! - Add Claude Opus
4.8 to the supported CUA model whitelist.

- [#2116](#2116)
[`cb586a1`](cb586a1)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - include
"[selected]" or "[checked]" state in snapshot

- [#2129](#2129)
[`765861c`](765861c)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add a
backend-selectable v3 evaluator facade while preserving the legacy
evaluator path.

- [#2157](#2157)
[`2cd60a3`](2cd60a3)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add verifier
trajectory, rubric, and evaluation-result types with normalized public
naming.

- [#2131](#2131)
[`e102a89`](e102a89)
Thanks [@miguelg719](https://github.com/miguelg719)! - Capture verifier
trajectory evidence from agent evidence callbacks for offline scoring.

## @browserbasehq/browse-cli@0.6.1

### Patch Changes

- Updated dependencies
\[[`3a53ed4`](3a53ed4),
[`6e75725`](6e75725),
[`8fc16d2`](8fc16d2),
[`78bcde8`](78bcde8),
[`3e95a87`](3e95a87),
[`ebbdcd3`](ebbdcd3),
[`12703a6`](12703a6),
[`1db5f1c`](1db5f1c),
[`cb586a1`](cb586a1),
[`765861c`](765861c),
[`2cd60a3`](2cd60a3),
[`e102a89`](e102a89),
[`49575d6`](49575d6),
[`dc1445d`](dc1445d)]:
    -   @browserbasehq/stagehand@3.5.0

## @browserbasehq/stagehand-server-v3@3.7.0

### Minor Changes

- [#2160](#2160)
[`49575d6`](49575d6)
Thanks [@monadoid](https://github.com/monadoid)! - Forward constructor
and request model configuration when initializing API-backed sessions.

### Patch Changes

- [#2118](#2118)
[`3e95a87`](3e95a87)
Thanks [@monadoid](https://github.com/monadoid)! - Add Vertex auth
parameters to the core and server API schemas.

- [#2167](#2167)
[`ce21468`](ce21468)
Thanks [@monadoid](https://github.com/monadoid)! - Add SEA binary
--version build metadata output.

- Updated dependencies
\[[`3a53ed4`](3a53ed4),
[`6e75725`](6e75725),
[`8fc16d2`](8fc16d2),
[`78bcde8`](78bcde8),
[`3e95a87`](3e95a87),
[`ebbdcd3`](ebbdcd3),
[`12703a6`](12703a6),
[`1db5f1c`](1db5f1c),
[`cb586a1`](cb586a1),
[`765861c`](765861c),
[`2cd60a3`](2cd60a3),
[`e102a89`](e102a89),
[`49575d6`](49575d6),
[`dc1445d`](dc1445d)]:
    -   @browserbasehq/stagehand@3.5.0

## @browserbasehq/stagehand-evals@2.0.2

### Patch Changes

- Updated dependencies
\[[`3a53ed4`](3a53ed4),
[`6e75725`](6e75725),
[`8fc16d2`](8fc16d2),
[`78bcde8`](78bcde8),
[`3e95a87`](3e95a87),
[`ebbdcd3`](ebbdcd3),
[`12703a6`](12703a6),
[`1db5f1c`](1db5f1c),
[`cb586a1`](cb586a1),
[`765861c`](765861c),
[`2cd60a3`](2cd60a3),
[`e102a89`](e102a89),
[`49575d6`](49575d6),
[`dc1445d`](dc1445d)]:
    -   @browserbasehq/stagehand@3.5.0

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
felipeofdev-ai pushed a commit to felipeofdev-ai/stagehand that referenced this pull request Aug 4, 2026
felipeofdev-ai pushed a commit to felipeofdev-ai/stagehand that referenced this pull request Aug 4, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @browserbasehq/stagehand@3.5.0

### Minor Changes

- [browserbase#2149](browserbase#2149)
[`6e75725`](browserbase@6e75725)
Thanks [@miguelg719](https://github.com/miguelg719)! - Added a
`screenshot` option to `extract()` that sends the current viewport
screenshot with the a11y tree for extraction.

- [browserbase#2127](browserbase#2127)
[`78bcde8`](browserbase@78bcde8)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - Add
`ignoreDefaultArgs` option to selectively remove chrome-launcher's
built-in default flags (e.g. `--disable-extensions`) when running
locally

- [browserbase#2160](browserbase#2160)
[`49575d6`](browserbase@49575d6)
Thanks [@monadoid](https://github.com/monadoid)! - Forward constructor
and request model configuration when initializing API-backed sessions.

- [browserbase#2171](browserbase#2171)
[`dc1445d`](browserbase@dc1445d)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - add native
clipboard API

### Patch Changes

- [browserbase#2146](browserbase#2146)
[`3a53ed4`](browserbase@3a53ed4)
Thanks [@shriyatheunicorn](https://github.com/shriyatheunicorn)! - Pass
local browser launch options through when attaching over CDP so explicit
viewport settings are respected.

- [browserbase#2107](browserbase#2107)
[`8fc16d2`](browserbase@8fc16d2)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix Anthropic CUA
`triple_click` action mapping.

- [browserbase#2118](browserbase#2118)
[`3e95a87`](browserbase@3e95a87)
Thanks [@monadoid](https://github.com/monadoid)! - Add Vertex auth
parameters to the core and server API schemas.

- [browserbase#2126](browserbase#2126)
[`ebbdcd3`](browserbase@ebbdcd3)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix(core):
import ToolSet from ai public export

- [browserbase#2120](browserbase#2120)
[`12703a6`](browserbase@12703a6)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix
structuredOutputMode for newer Anthropic models

- [browserbase#2170](browserbase#2170)
[`1db5f1c`](browserbase@1db5f1c)
Thanks [@Kylejeong2](https://github.com/Kylejeong2)! - Add Claude Opus
4.8 to the supported CUA model whitelist.

- [browserbase#2116](browserbase#2116)
[`cb586a1`](browserbase@cb586a1)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - include
"[selected]" or "[checked]" state in snapshot

- [browserbase#2129](browserbase#2129)
[`765861c`](browserbase@765861c)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add a
backend-selectable v3 evaluator facade while preserving the legacy
evaluator path.

- [browserbase#2157](browserbase#2157)
[`2cd60a3`](browserbase@2cd60a3)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add verifier
trajectory, rubric, and evaluation-result types with normalized public
naming.

- [browserbase#2131](browserbase#2131)
[`e102a89`](browserbase@e102a89)
Thanks [@miguelg719](https://github.com/miguelg719)! - Capture verifier
trajectory evidence from agent evidence callbacks for offline scoring.

## @browserbasehq/browse-cli@0.6.1

### Patch Changes

- Updated dependencies
\[[`3a53ed4`](browserbase@3a53ed4),
[`6e75725`](browserbase@6e75725),
[`8fc16d2`](browserbase@8fc16d2),
[`78bcde8`](browserbase@78bcde8),
[`3e95a87`](browserbase@3e95a87),
[`ebbdcd3`](browserbase@ebbdcd3),
[`12703a6`](browserbase@12703a6),
[`1db5f1c`](browserbase@1db5f1c),
[`cb586a1`](browserbase@cb586a1),
[`765861c`](browserbase@765861c),
[`2cd60a3`](browserbase@2cd60a3),
[`e102a89`](browserbase@e102a89),
[`49575d6`](browserbase@49575d6),
[`dc1445d`](browserbase@dc1445d)]:
    -   @browserbasehq/stagehand@3.5.0

## @browserbasehq/stagehand-server-v3@3.7.0

### Minor Changes

- [browserbase#2160](browserbase#2160)
[`49575d6`](browserbase@49575d6)
Thanks [@monadoid](https://github.com/monadoid)! - Forward constructor
and request model configuration when initializing API-backed sessions.

### Patch Changes

- [browserbase#2118](browserbase#2118)
[`3e95a87`](browserbase@3e95a87)
Thanks [@monadoid](https://github.com/monadoid)! - Add Vertex auth
parameters to the core and server API schemas.

- [browserbase#2167](browserbase#2167)
[`ce21468`](browserbase@ce21468)
Thanks [@monadoid](https://github.com/monadoid)! - Add SEA binary
--version build metadata output.

- Updated dependencies
\[[`3a53ed4`](browserbase@3a53ed4),
[`6e75725`](browserbase@6e75725),
[`8fc16d2`](browserbase@8fc16d2),
[`78bcde8`](browserbase@78bcde8),
[`3e95a87`](browserbase@3e95a87),
[`ebbdcd3`](browserbase@ebbdcd3),
[`12703a6`](browserbase@12703a6),
[`1db5f1c`](browserbase@1db5f1c),
[`cb586a1`](browserbase@cb586a1),
[`765861c`](browserbase@765861c),
[`2cd60a3`](browserbase@2cd60a3),
[`e102a89`](browserbase@e102a89),
[`49575d6`](browserbase@49575d6),
[`dc1445d`](browserbase@dc1445d)]:
    -   @browserbasehq/stagehand@3.5.0

## @browserbasehq/stagehand-evals@2.0.2

### Patch Changes

- Updated dependencies
\[[`3a53ed4`](browserbase@3a53ed4),
[`6e75725`](browserbase@6e75725),
[`8fc16d2`](browserbase@8fc16d2),
[`78bcde8`](browserbase@78bcde8),
[`3e95a87`](browserbase@3e95a87),
[`ebbdcd3`](browserbase@ebbdcd3),
[`12703a6`](browserbase@12703a6),
[`1db5f1c`](browserbase@1db5f1c),
[`cb586a1`](browserbase@cb586a1),
[`765861c`](browserbase@765861c),
[`2cd60a3`](browserbase@2cd60a3),
[`e102a89`](browserbase@e102a89),
[`49575d6`](browserbase@49575d6),
[`dc1445d`](browserbase@dc1445d)]:
    -   @browserbasehq/stagehand@3.5.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extract These changes pertain to the extract function

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants