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
Copy link
Copy Markdown
Collaborator

@miguelg719 miguelg719 commented May 14, 2026

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
Copy link
Copy Markdown

changeset-bot Bot commented May 14, 2026

🦋 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
Copy link
Copy Markdown
Contributor

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

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
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