Skip to content

Conversation

@tkattkat
Copy link
Collaborator

@tkattkat tkattkat commented Dec 2, 2025

Why

Adding Vertex AI support to Stagehand.

What changed

  • Added GoogleVertexProviderSettings from @ai-sdk/google-vertex to ClientOptions type
  • Kept consistent with how we import types from @anthropic-ai/sdk and openai packages
  • Fixed typing in model utils

Test plan

  • tested locally
  • ested existing model format on api

Summary by cubic

Adds Google Vertex AI as a model provider (behind an experimental gate) and unifies clientOptions across providers, supporting API key or service account auth. Tightens typings and fixes the Anthropic baseURL key.

Why:

  • Support Vertex AI users.
  • Standardize provider configuration.
  • Gate Vertex behind experimental while stabilizing.

What:

  • Add Vertex provider via @ai-sdk/google-vertex; register in AISDK maps.
  • Extend ClientOptions with GoogleVertexProviderSettings and service account credentials (googleAuthOptions.credentials).
  • Unify AISDK model creation to accept ClientOptions.
  • Gate Vertex: throw ExperimentalNotConfiguredError unless experimental or disableAPI is set; plumb options through V3 -> LLMProvider.
  • Map vertex to GOOGLE_VERTEX_AI_API_KEY.
  • Fix Anthropic baseURL key; update agents to use typed ClientOptions; minor example cleanup.
  • package.json: add @ai-sdk/google-vertex; relax zod ranges; add changeset.

Test Plan:

  • Enable Vertex:
    • Set experimental=true or disableAPI=true.
  • Configure Vertex auth:
    • Set GOOGLE_VERTEX_AI_API_KEY or pass googleAuthOptions.credentials.
    • Provide project and location in clientOptions.
  • Run a flow with "aisdk:vertex/" and verify responses.
  • Verify OpenAI and Anthropic still work with apiKey/baseURL in clientOptions.
  • Type-check (tsc) and build examples without errors.

Written for commit 8e0a105. Summary will update automatically on new commits.

@changeset-bot
Copy link

changeset-bot bot commented Dec 2, 2025

🦋 Changeset detected

Latest commit: 8e0a105

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

This PR includes changesets to release 2 packages
Name Type
@browserbasehq/stagehand Patch
@browserbasehq/stagehand-evals 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

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

No issues found across 14 files

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Dec 2, 2025

Greptile Overview

Greptile Summary

This PR adds Google Vertex AI as a new model provider for AISDK integrations while improving type safety across the codebase.

  • Added @ai-sdk/google-vertex dependency and registered vertex/createVertex in the AISDK provider maps
  • Defined GoogleVertexProviderSettings type with project, location, and optional googleAuthOptions.credentials for service account authentication
  • Unified getAISDKLanguageModel() to accept a single ClientOptions object instead of separate apiKey/baseURL parameters
  • Narrowed OpenAIClientOptions and AnthropicClientOptions types to only include baseURL and apiKey using Pick
  • Extended the ClientOptions union type to include Vertex settings plus common fields (organization, waitBetweenActions, thinkingBudget, environment, maxImages, temperature)
  • Fixed inconsistent baseUrlbaseURL key in AnthropicCUAClient
  • Updated all agent client constructor signatures to use typed ClientOptions instead of generic Record<string, unknown>
  • Added vertex: "GOOGLE_VERTEX_AI_API_KEY" to the provider environment variable mapping
  • Relaxed zod peer dependency version constraints with caret prefix for better compatibility

Confidence Score: 4/5

  • This PR is safe to merge with minor considerations around type compatibility
  • The changes are well-structured and follow existing patterns. The type system improvements are sound. The main considerations are: (1) the unified ClientOptions approach passes all options to provider constructors which may include irrelevant fields, though this is generally harmless; (2) the Vertex integration follows the same pattern as other AISDK providers.
  • No files require special attention - the changes are straightforward type improvements and provider registration

Important Files Changed

File Analysis

Filename Score Overview
packages/core/lib/v3/agent/AnthropicCUAClient.ts 5/5 Fixed baseUrl to baseURL for consistency with the typed ClientOptions
packages/core/lib/v3/llm/LLMProvider.ts 4/5 Added Vertex AI provider imports and registration; unified getAISDKLanguageModel to accept full ClientOptions object instead of separate apiKey/baseURL parameters
packages/core/lib/v3/types/public/model.ts 4/5 Added GoogleVertexProviderSettings type with service account credentials; narrowed OpenAIClientOptions and AnthropicClientOptions to only baseURL and apiKey; expanded ClientOptions union to include Vertex settings and additional fields
packages/core/package.json 5/5 Added @ai-sdk/google-vertex dependency; relaxed zod peer dependency version constraint with caret prefix

Sequence Diagram

sequenceDiagram
    participant User
    participant Stagehand
    participant LLMProvider
    participant getAISDKLanguageModel
    participant createVertex
    participant VertexAI

    User->>Stagehand: Initialize with model: "aisdk:vertex:gemini-pro"
    Stagehand->>LLMProvider: getClient(modelName, clientOptions)
    LLMProvider->>LLMProvider: Parse "aisdk:vertex:gemini-pro"
    LLMProvider->>getAISDKLanguageModel: (subProvider="vertex", subModelName="gemini-pro", clientOptions)
    
    alt clientOptions has keys
        getAISDKLanguageModel->>createVertex: createVertex(clientOptions)
        createVertex-->>getAISDKLanguageModel: vertexProvider
        getAISDKLanguageModel->>getAISDKLanguageModel: vertexProvider("gemini-pro")
    else no clientOptions
        getAISDKLanguageModel->>getAISDKLanguageModel: vertex("gemini-pro")
    end
    
    getAISDKLanguageModel-->>LLMProvider: languageModel
    LLMProvider->>LLMProvider: new AISdkClient({model: languageModel})
    LLMProvider-->>Stagehand: LLMClient
    Stagehand-->>User: Stagehand instance ready
Loading

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

13 files reviewed, no comments

Edit Code Review Agent Settings | Greptile

@tkattkat tkattkat changed the title Vertex pick Add support for vertex provider Dec 2, 2025
@miguelg719 miguelg719 mentioned this pull request Dec 3, 2025
4 tasks
@tkattkat tkattkat merged commit 0e95cd2 into main Dec 3, 2025
15 of 16 checks passed
miguelg719 pushed a commit that referenced this pull request Dec 13, 2025
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/[email protected]

### Patch Changes

- [#1388](#1388)
[`605ed6b`](605ed6b)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix multiple
click event dispatches on CDP and Anthropic CUA handling (double clicks)

- [#1400](#1400)
[`34e7e5b`](34e7e5b)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - don't write
base64 encoded screenshots to disk when caching agent actions

- [#1345](#1345)
[`943d2d7`](943d2d7)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
aborting / stopping an agent run & continuing an agent run using
messages from prior runs

- [#1334](#1334)
[`0e95cd2`](0e95cd2)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
google vertex provider

- [#1410](#1410)
[`d4237e4`](d4237e4)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix:
include extract in stagehand.history()

- [#1315](#1315)
[`86975e7`](86975e7)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add streaming support
to agent through stream:true in the agent config

- [#1304](#1304)
[`d5e119b`](d5e119b)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add support for
Microsoft's Fara-7B

- [#1346](#1346)
[`4e051b2`](4e051b2)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix: don't
attach to targets twice

- [#1327](#1327)
[`6b5a3c9`](6b5a3c9)
Thanks [@miguelg719](https://github.com/miguelg719)! - Informed error
parsing from api

- [#1335](#1335)
[`bb85ad9`](bb85ad9)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - add support
for page.addInitScript()

- [#1331](#1331)
[`88d28cc`](88d28cc)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix:
page.evaluate() now works with scripts injected via
context.addInitScript()

- [#1316](#1316)
[`45bcef0`](45bcef0)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
callbacks in stagehand agent

- [#1374](#1374)
[`6aa9d45`](6aa9d45)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix key action
mapping in Anthropic CUA

- [#1330](#1330)
[`d382084`](d382084)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix: make
act, extract, and observe respect user defined timeout param

- [#1336](#1336)
[`1df08cc`](1df08cc)
Thanks [@tkattkat](https://github.com/tkattkat)! - Patch agent on api

- [#1358](#1358)
[`2b56600`](2b56600)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for 4.5
opus in cua agent

## @browserbasehq/[email protected]

### Patch Changes

- [#1364](#1364)
[`ca0630e`](ca0630e)
Thanks [@tkattkat](https://github.com/tkattkat)! - Update model handling
in agent evals cli

- Updated dependencies
\[[`605ed6b`](605ed6b),
[`34e7e5b`](34e7e5b),
[`943d2d7`](943d2d7),
[`0e95cd2`](0e95cd2),
[`d4237e4`](d4237e4),
[`86975e7`](86975e7),
[`d5e119b`](d5e119b),
[`4e051b2`](4e051b2),
[`6b5a3c9`](6b5a3c9),
[`bb85ad9`](bb85ad9),
[`88d28cc`](88d28cc),
[`45bcef0`](45bcef0),
[`6aa9d45`](6aa9d45),
[`d382084`](d382084),
[`1df08cc`](1df08cc),
[`2b56600`](2b56600)]:
    -   @browserbasehq/[email protected]

## @browserbasehq/[email protected]

### Patch Changes

- Updated dependencies
\[[`605ed6b`](605ed6b),
[`34e7e5b`](34e7e5b),
[`943d2d7`](943d2d7),
[`0e95cd2`](0e95cd2),
[`d4237e4`](d4237e4),
[`86975e7`](86975e7),
[`d5e119b`](d5e119b),
[`4e051b2`](4e051b2),
[`6b5a3c9`](6b5a3c9),
[`bb85ad9`](bb85ad9),
[`88d28cc`](88d28cc),
[`45bcef0`](45bcef0),
[`6aa9d45`](6aa9d45),
[`d382084`](d382084),
[`1df08cc`](1df08cc),
[`2b56600`](2b56600)]:
    -   @browserbasehq/[email protected]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
michaelfp930-WB added a commit to michaelfp930-WB/stagehand that referenced this pull request Jan 12, 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/[email protected]

### Patch Changes

- [#1388](browserbase/stagehand#1388)
[`605ed6b`](browserbase/stagehand@605ed6b)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix multiple
click event dispatches on CDP and Anthropic CUA handling (double clicks)

- [#1400](browserbase/stagehand#1400)
[`34e7e5b`](browserbase/stagehand@34e7e5b)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - don't write
base64 encoded screenshots to disk when caching agent actions

- [#1345](browserbase/stagehand#1345)
[`943d2d7`](browserbase/stagehand@943d2d7)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
aborting / stopping an agent run & continuing an agent run using
messages from prior runs

- [#1334](browserbase/stagehand#1334)
[`0e95cd2`](browserbase/stagehand@0e95cd2)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
google vertex provider

- [#1410](browserbase/stagehand#1410)
[`d4237e4`](browserbase/stagehand@d4237e4)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix:
include extract in stagehand.history()

- [#1315](browserbase/stagehand#1315)
[`86975e7`](browserbase/stagehand@86975e7)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add streaming support
to agent through stream:true in the agent config

- [#1304](browserbase/stagehand#1304)
[`d5e119b`](browserbase/stagehand@d5e119b)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add support for
Microsoft's Fara-7B

- [#1346](browserbase/stagehand#1346)
[`4e051b2`](browserbase/stagehand@4e051b2)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix: don't
attach to targets twice

- [#1327](browserbase/stagehand#1327)
[`6b5a3c9`](browserbase/stagehand@6b5a3c9)
Thanks [@miguelg719](https://github.com/miguelg719)! - Informed error
parsing from api

- [#1335](browserbase/stagehand#1335)
[`bb85ad9`](browserbase/stagehand@bb85ad9)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - add support
for page.addInitScript()

- [#1331](browserbase/stagehand#1331)
[`88d28cc`](browserbase/stagehand@88d28cc)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix:
page.evaluate() now works with scripts injected via
context.addInitScript()

- [#1316](browserbase/stagehand#1316)
[`45bcef0`](browserbase/stagehand@45bcef0)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
callbacks in stagehand agent

- [#1374](browserbase/stagehand#1374)
[`6aa9d45`](browserbase/stagehand@6aa9d45)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix key action
mapping in Anthropic CUA

- [#1330](browserbase/stagehand#1330)
[`d382084`](browserbase/stagehand@d382084)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix: make
act, extract, and observe respect user defined timeout param

- [#1336](browserbase/stagehand#1336)
[`1df08cc`](browserbase/stagehand@1df08cc)
Thanks [@tkattkat](https://github.com/tkattkat)! - Patch agent on api

- [#1358](browserbase/stagehand#1358)
[`2b56600`](browserbase/stagehand@2b56600)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for 4.5
opus in cua agent

## @browserbasehq/[email protected]

### Patch Changes

- [#1364](browserbase/stagehand#1364)
[`ca0630e`](browserbase/stagehand@ca0630e)
Thanks [@tkattkat](https://github.com/tkattkat)! - Update model handling
in agent evals cli

- Updated dependencies
\[[`605ed6b`](browserbase/stagehand@605ed6b),
[`34e7e5b`](browserbase/stagehand@34e7e5b),
[`943d2d7`](browserbase/stagehand@943d2d7),
[`0e95cd2`](browserbase/stagehand@0e95cd2),
[`d4237e4`](browserbase/stagehand@d4237e4),
[`86975e7`](browserbase/stagehand@86975e7),
[`d5e119b`](browserbase/stagehand@d5e119b),
[`4e051b2`](browserbase/stagehand@4e051b2),
[`6b5a3c9`](browserbase/stagehand@6b5a3c9),
[`bb85ad9`](browserbase/stagehand@bb85ad9),
[`88d28cc`](browserbase/stagehand@88d28cc),
[`45bcef0`](browserbase/stagehand@45bcef0),
[`6aa9d45`](browserbase/stagehand@6aa9d45),
[`d382084`](browserbase/stagehand@d382084),
[`1df08cc`](browserbase/stagehand@1df08cc),
[`2b56600`](browserbase/stagehand@2b56600)]:
    -   @browserbasehq/[email protected]

## @browserbasehq/[email protected]

### Patch Changes

- Updated dependencies
\[[`605ed6b`](browserbase/stagehand@605ed6b),
[`34e7e5b`](browserbase/stagehand@34e7e5b),
[`943d2d7`](browserbase/stagehand@943d2d7),
[`0e95cd2`](browserbase/stagehand@0e95cd2),
[`d4237e4`](browserbase/stagehand@d4237e4),
[`86975e7`](browserbase/stagehand@86975e7),
[`d5e119b`](browserbase/stagehand@d5e119b),
[`4e051b2`](browserbase/stagehand@4e051b2),
[`6b5a3c9`](browserbase/stagehand@6b5a3c9),
[`bb85ad9`](browserbase/stagehand@bb85ad9),
[`88d28cc`](browserbase/stagehand@88d28cc),
[`45bcef0`](browserbase/stagehand@45bcef0),
[`6aa9d45`](browserbase/stagehand@6aa9d45),
[`d382084`](browserbase/stagehand@d382084),
[`1df08cc`](browserbase/stagehand@1df08cc),
[`2b56600`](browserbase/stagehand@2b56600)]:
    -   @browserbasehq/[email protected]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants