feat(verifier): add evaluator backend facade - #2129
Merged
Merged
Conversation
🦋 Changeset detectedLatest commit: 2d3682a The changes in this PR will be included in the next version bump. This PR includes changesets to release 4 packages
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 |
Contributor
There was a problem hiding this comment.
No issues found across 4 files
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
Architecture diagram
sequenceDiagram
participant Client as Caller Code
participant Facade as V3Evaluator (Facade)
participant Legacy as LegacyV3Evaluator
participant LLM as LLM Client
participant V3 as V3 Instance
participant Page as Page (Browser)
Note over Client,Page: Evaluator Backend Selection Flow
Client->>Facade: new V3Evaluator(v3, { backend })
alt backend = "verifier"
Facade->>Facade: Store backend = "verifier"
Note over Facade: Verifier backend not yet available
else backend = "legacy" (default)
Facade->>Facade: Read STAGEHAND_EVALUATOR_BACKEND env
Facade->>Legacy: Create LegacyV3Evaluator instance
Note over Facade,Legacy: NEW: Delegates all calls to LegacyV3Evaluator
end
Note over Client,Page: ask() - Legacy Backend Flow
Client->>Facade: ask(options)
Facade->>Facade: Check backend
alt backend = "legacy"
Facade->>Legacy: ask(options)
Legacy->>Legacy: Validate question & answer/screenshot
alt screenshot provided as array
Legacy->>Legacy: _evaluateWithMultipleScreenshots()
Legacy->>LLM: createChatCompletion() with multiple images
else screenshot = true (single)
Legacy->>Page: awaitActivePage()
Page-->>Legacy: Page object
Legacy->>Page: screenshot({ fullPage: false })
Page-->>Legacy: imageBuffer
Legacy->>LLM: createChatCompletion() with question + image + answer
else screenshot = false
Legacy->>LLM: createChatCompletion() with question + agentReasoning
end
LLM-->>Legacy: Parsed response (YES/NO + reasoning)
Legacy-->>Facade: EvaluationResult
Facade-->>Client: EvaluationResult
else backend = "verifier"
Facade->>Facade: Throw StagehandInvalidArgumentError
Facade-->>Client: Error: "verifier backend not available"
end
Note over Client,Page: batchAsk() - Legacy Backend Flow
Client->>Facade: batchAsk(options)
Facade->>Legacy: batchAsk(options)
Legacy->>Legacy: Validate questions array
alt screenshot = true
Legacy->>Page: awaitActivePage()
Page-->>Legacy: Page object
Legacy->>Page: screenshot()
Page-->>Legacy: imageBuffer
end
Legacy->>Legacy: Format questions into text
Legacy->>LLM: createChatCompletion() with formatted questions + screenshot
LLM-->>Legacy: Parsed batch response
Legacy-->>Facade: EvaluationResult[]
Facade-->>Client: EvaluationResult[]
Note over Client,Page: Error Handling - LLM Failure
Client->>Facade: ask() / batchAsk()
Facade->>Legacy: Delegate call
Legacy->>LLM: createChatCompletion()
alt LLM returns invalid data
LLM-->>Legacy: Malformed response
Legacy->>Legacy: Catch parsing error
Legacy-->>Facade: { evaluation: "INVALID", reasoning: error }
Facade-->>Client: Fallback result
else LLM client throws
LLM-->>Legacy: Error thrown
Legacy->>Legacy: Catch error
Legacy-->>Facade: { evaluation: "INVALID", reasoning: error }
Facade-->>Client: Fallback result
end
3 tasks
miguelg719
force-pushed
the
miguelgonzalez/verifier-01-evaluator-compat
branch
from
May 18, 2026 23:53
513b9d9 to
469b657
Compare
Class names already convey "this is the V3 evaluator facade"; the legacy backend comment lives where it's still load-bearing (V3EvaluatorOptions). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pirate
approved these changes
May 19, 2026
This was referenced May 20, 2026
Merged
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
# Why The verifier rewrite needs to coexist with the legacy v3 evaluator so existing evals and callers do not silently change behavior while the new pipeline is reviewed. This PR creates the compatibility boundary that lets us select the evaluator backend explicitly. # What Changed - Extracted the current v3 evaluator behavior into `LegacyV3Evaluator`. - Kept `V3Evaluator` as the public facade. - Added `STAGEHAND_EVALUATOR_BACKEND=legacy|verifier` and constructor backend options. - Defaulted the backend to `legacy` to preserve current `ask()` and `batchAsk()` semantics. - Added public API tests for backend selection and invalid backend handling. # Tests - `pnpm --filter @browserbasehq/stagehand run typecheck` - `pnpm --filter @browserbasehq/stagehand run test:core -- packages/core/dist/esm/tests/unit/public-api/v3-core.test.js` - `git diff --check` ---------
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The verifier rewrite needs to coexist with the legacy v3 evaluator so existing evals and callers do not silently change behavior while the new pipeline is reviewed. This PR creates the compatibility boundary that lets us select the evaluator backend explicitly.
What Changed
LegacyV3Evaluator.V3Evaluatoras the public facade.STAGEHAND_EVALUATOR_BACKEND=legacy|verifierand constructor backend options.legacyto preserve currentask()andbatchAsk()semantics.Tests
pnpm --filter @browserbasehq/stagehand run typecheckpnpm --filter @browserbasehq/stagehand run test:core -- packages/core/dist/esm/tests/unit/public-api/v3-core.test.jsgit diff --check