Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
57bfdee
refactor: remove Groq and Cerebras support from SDK
antonvishal Sep 11, 2026
f7f17f1
Merge branch 'main' into remove-groq-cerebras
antonvishal Sep 24, 2026
f77ef2f
Merge remote-tracking branch 'upstream/main' into remove-groq-cerebras
antonvishal Sep 28, 2026
d992948
Merge branch 'browserbase:main' into remove-groq-cerebras
antonvishal Sep 28, 2026
bd0b91e
Merge remote-tracking branch 'upstream/main' into vishal/resolve-pr-2921
antonvishal Oct 1, 2026
d46c915
Merge remote-tracking branch 'upstream/main' into vishal/resolve-oct0…
antonvishal Oct 2, 2026
78bd6e2
feat: validate providers without model allowlists
antonvishal Oct 3, 2026
be0357f
docs: explain provider model validation and custom endpoints
antonvishal Oct 3, 2026
e06a3ff
Merge branch 'vishal/remove-groq-cerebras' into vishal/provider-only-…
antonvishal Oct 3, 2026
ee1f765
Merge branch 'vishal/provider-only-models' into vishal/model-provider…
antonvishal Oct 3, 2026
d33c03a
fix: preserve unrelated contributor credit
antonvishal Oct 3, 2026
b0ab6d1
chore: refresh example and eval model IDs
antonvishal Oct 3, 2026
224cfe1
Merge branch 'vishal/provider-only-models' into vishal/model-provider…
antonvishal Oct 3, 2026
d328d00
docs: refresh recommended and example model IDs
antonvishal Oct 3, 2026
3046e4d
style: format model ID table wrapping
antonvishal Oct 3, 2026
314fbff
Merge branch 'vishal/provider-only-models' into vishal/model-provider…
antonvishal Oct 3, 2026
47c020b
fix: restore evals and map mini examples to Luna
antonvishal Oct 3, 2026
4599837
Merge branch 'vishal/provider-only-models' into vishal/model-provider…
antonvishal Oct 3, 2026
57c2dde
docs: map mini examples to Luna and drop eval rankings
antonvishal Oct 3, 2026
00a36e0
docs: keep model recs copy and skip Browser Use migration
antonvishal Oct 3, 2026
4b338ec
docs: align model recommendations with HardBench medals
antonvishal Oct 3, 2026
f827284
Merge remote-tracking branch 'upstream/main' into newer-models-extens…
antonvishal Oct 4, 2026
b5559c7
Merge remote-tracking branch 'upstream/main' into vishal/model-provid…
antonvishal Oct 4, 2026
5a03c58
Merge remote-tracking branch 'upstream/main' into vishal/oct04-2921
antonvishal Oct 4, 2026
c84335e
Merge remote-tracking branch 'origin/remove-groq-cerebras' into newer…
antonvishal Oct 4, 2026
eec6981
Merge remote-tracking branch 'origin/newer-models-extension-protocol-…
antonvishal Oct 4, 2026
ce7dd2e
fix: keep provider-docs catalog aligned with stack 2/4
antonvishal Oct 4, 2026
5bbf093
Merge remote-tracking branch 'upstream/main' into vishal/conflicts-2921
antonvishal Oct 6, 2026
9fddbf3
Merge branch 'vishal/conflicts-2921' into vishal/conflicts-2941
antonvishal Oct 6, 2026
91d459c
Merge branch 'vishal/conflicts-2941' into vishal/conflicts-3098
antonvishal Oct 6, 2026
5e34c34
Merge remote-tracking branch 'upstream/main' into vishal/resolve-2941…
antonvishal Oct 6, 2026
a4e9bf0
Merge commit '5e34c34adb486149f906844996a67098390c3001' into vishal/p…
antonvishal Oct 6, 2026
e2007c0
Merge upstream main into provider validation stack
antonvishal Oct 6, 2026
74c9f17
Merge remote-tracking branch 'origin/newer-models-extension-protocol-…
antonvishal Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .changeset/open-model-ids.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@browserbasehq/stagehand-protocol": minor
"@browserbasehq/stagehand-extension": patch
"@browserbasehq/stagehand-python": minor
"@browserbasehq/stagehand-go": minor
"@browserbasehq/stagehand": minor
---

Accept any nonempty model ID under the OpenAI, Anthropic, and Google provider prefixes without a Stagehand release. Unknown model IDs now fail on the provider request instead of during configuration validation. Public model ID types widen from literal unions to strings. Examples and generated schema samples use current provider IDs such as `openai/gpt-6-luna`, `anthropic/claude-sonnet-5-5`, and `google/gemini-3.8-flash`.
9 changes: 9 additions & 0 deletions .changeset/remove-groq-cerebras.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@browserbasehq/stagehand-protocol": major
"@browserbasehq/stagehand-extension": patch
"@browserbasehq/stagehand-python": patch
"@browserbasehq/stagehand-go": patch
"@browserbasehq/stagehand": patch
---

Remove native Groq and Cerebras provider support.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ import { z } from "zod/v4";
const browser = await localBrowser.launch({ userDataDir: "./browser-data" });
const stagehand = await Stagehand.create({
browser,
model: { modelName: "openai/gpt-5.4-mini", apiKey: process.env.OPENAI_API_KEY },
model: { modelName: "openai/gpt-6-luna", apiKey: process.env.OPENAI_API_KEY },
});

const [page] = await browser.context.pages();
Expand Down Expand Up @@ -115,7 +115,7 @@ async def main() -> None:
try:
stagehand = await Stagehand.create(
browser=browser,
model="openai/gpt-5.4-mini",
model="openai/gpt-6-luna",
model_api_key=os.environ["OPENAI_API_KEY"],
)
try:
Expand Down Expand Up @@ -195,7 +195,7 @@ func run(ctx context.Context) (err error) {
client, err := stagehand.Create(ctx, stagehand.CreateOptions{
Browser: browser,
Model: &stagehand.ModelConfig{
ModelName: "openai/gpt-5.4-mini",
ModelName: "openai/gpt-6-luna",
APIKey: &modelAPIKey,
},
})
Expand Down
5 changes: 1 addition & 4 deletions packages/docs/v2/configuration/models.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ Set up your API keys before configuring Stagehand:
OPENAI_API_KEY=your_openai_key_here
ANTHROPIC_API_KEY=your_anthropic_key_here
GOOGLE_API_KEY=your_google_key_here
GROQ_API_KEY=your_groq_key_here
```
</CodeGroup>

Expand All @@ -54,10 +53,8 @@ Stagehand supports major LLM providers with structured output capabilities:
### Additional Providers

<Expandable title="More Providers">
- **Groq** - `llama-3.3-70b-versatile` (Good for speed critical applications)
- **xAI** - `grok-beta` (Good for complex reasoning)
- **Azure** - Enterprise OpenAI deployment
- **Cerebras** - High-speed inference
- **TogetherAI** - Open-source models
- **Mistral** - `mixtral-8x7b-32768` (European option)
- **DeepSeek** - Cost-effective alternative
Expand Down Expand Up @@ -302,4 +299,4 @@ For each provider, use their latest models that meet these requirements. Some ex
<Card title="Cache Results" href="/v2/best-practices/caching" icon="database">
Store successful patterns using our Caching Guide
</Card>
</CardGroup>
</CardGroup>
53 changes: 0 additions & 53 deletions packages/docs/v3/configuration/models.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -340,24 +340,6 @@ For Microsoft Entra ID authentication, pass the bearer token explicitly in `auth
[View all supported Azure models →](https://ai.azure.com/catalog)
</Tab>

<Tab title="Cerebras">
<CodeGroup>
```typescript TypeScript
import { Stagehand } from "@browserbasehq/stagehand";

const stagehand = new Stagehand({
env: "BROWSERBASE",
model: "cerebras/llama-4-scout"
// API key auto-loads from CEREBRAS_API_KEY - set in your .env
});

await stagehand.init();
```

</CodeGroup>
[View all supported Cerebras models →](https://inference-docs.cerebras.ai/models/overview)
</Tab>

<Tab title="DeepSeek">

<CodeGroup>
Expand All @@ -377,26 +359,6 @@ await stagehand.init();
[View all supported DeepSeek models →](https://api-docs.deepseek.com/quick_start/pricing)
</Tab>

<Tab title="Groq">


<CodeGroup>
```typescript TypeScript
import { Stagehand } from "@browserbasehq/stagehand";

const stagehand = new Stagehand({
env: "BROWSERBASE",
model: "groq/llama-3.1-8b-instant"
// API key auto-loads from GROQ_API_KEY - set in your .env
});

await stagehand.init();
```

</CodeGroup>
[View all supported Groq models →](https://console.groq.com/docs/models)
</Tab>

<Tab title="Mistral">

<CodeGroup>
Expand Down Expand Up @@ -1003,19 +965,6 @@ The following models work without the `provider/` prefix in the model parameter
- `gpt-4o-2024-08-06`
- `o1-preview`

</Accordion>
<Accordion title="Cerebras">

- `cerebras-llama-3.3-70b`
- `cerebras-llama-3.1-8b`

</Accordion>
<Accordion title="Groq">

- `groq-llama-3.3-70b-versatile`
- `groq-llama-3.3-70b-specdec`
- `moonshotai/kimi-k2-instruct`

</Accordion>
</AccordionGroup>

Expand All @@ -1042,9 +991,7 @@ The following models work without the `provider/` prefix in the model parameter
| Anthropic | `ANTHROPIC_API_KEY` |
| OpenAI | `OPENAI_API_KEY` |
| Azure | `AZURE_API_KEY` |
| Cerebras | `CEREBRAS_API_KEY` |
| DeepSeek | `DEEPSEEK_API_KEY` |
| Groq | `GROQ_API_KEY` |
| Mistral | `MISTRAL_API_KEY` |
| Ollama | None (local) |
| Perplexity | `PERPLEXITY_API_KEY` |
Expand Down
6 changes: 3 additions & 3 deletions packages/docs/v4/basics/extract.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ const result = await stagehand.extract(
z.object({ name: z.string() }),
{
model: {
modelName: "anthropic/claude-sonnet-5",
modelName: "anthropic/claude-sonnet-5-5",
apiKey: process.env.ANTHROPIC_API_KEY,
},
timeout: 30000,
Expand All @@ -402,7 +402,7 @@ result = await stagehand.extract(
"extract the repository name",
Repository,
model=ModelConfig(
model_name="anthropic/claude-sonnet-5",
model_name="anthropic/claude-sonnet-5-5",
api_key=os.environ["ANTHROPIC_API_KEY"],
),
timeout=30000,
Expand All @@ -416,7 +416,7 @@ result = await stagehand.extract(

modelAPIKey := os.Getenv("ANTHROPIC_API_KEY")
model := stagehand.ModelConfig{
ModelName: "anthropic/claude-sonnet-5",
ModelName: "anthropic/claude-sonnet-5-5",
APIKey: &modelAPIKey,
}
timeout := 30000.0
Expand Down
6 changes: 3 additions & 3 deletions packages/docs/v4/basics/observe.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ const page = await stagehand.browser.context.activePage();
// Custom model configuration
const { data: actions } = await stagehand.observe("find navigation links", {
model: {
modelName: "openai/gpt-5.6-luna",
modelName: "openai/gpt-6-luna",
apiKey: process.env.OPENAI_API_KEY,
},
timeout: 30000,
Expand All @@ -285,7 +285,7 @@ page = await stagehand.browser.context.active_page()
result = await stagehand.observe(
"find navigation links",
model=ModelConfig(
model_name="openai/gpt-5.6-luna",
model_name="openai/gpt-6-luna",
api_key=os.environ["OPENAI_API_KEY"],
),
timeout=30000,
Expand All @@ -299,7 +299,7 @@ result = await stagehand.observe(
// Custom model configuration
modelAPIKey := os.Getenv("OPENAI_API_KEY")
model := stagehand.ModelConfig{
ModelName: "openai/gpt-5.6-luna",
ModelName: "openai/gpt-6-luna",
APIKey: &modelAPIKey,
}
timeout := 30000.0
Expand Down
6 changes: 3 additions & 3 deletions packages/docs/v4/best-practices/caching.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@ const browser = await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_K

const stagehand = await Stagehand.create({
browser,
model: { modelName: "openai/gpt-5.6-sol" }, // Routed through Model Gateway
model: { modelName: "openai/gpt-6.1-sol" }, // Routed through Model Gateway
cache: true, // Served by Browserbase Cache
});
```
Expand All @@ -611,7 +611,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"])

stagehand = await Stagehand.create(
browser=browser,
model="openai/gpt-5.6-sol", # Routed through Model Gateway
model="openai/gpt-6.1-sol", # Routed through Model Gateway
cache=True, # Served by Browserbase Cache
)
```
Expand All @@ -621,7 +621,7 @@ stagehand = await Stagehand.create(
```go
apiKey := os.Getenv("BROWSERBASE_API_KEY")
// Routed through Model Gateway: no model API key
model := stagehand.ModelConfig{ModelName: "openai/gpt-5.6-sol"}
model := stagehand.ModelConfig{ModelName: "openai/gpt-6.1-sol"}
cache := stagehand.CacheEnabled(true) // Served by Browserbase Cache

browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{
Expand Down
12 changes: 6 additions & 6 deletions packages/docs/v4/best-practices/cost-optimization.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const termsSchema = z.object({ summary: z.string() });
// One hard extraction gets the expensive model, everything else stays cheap
await stagehand.extract("summarize the contract terms", termsSchema, {
model: {
modelName: "anthropic/claude-sonnet-5",
modelName: "anthropic/claude-sonnet-5-5",
apiKey: process.env.ANTHROPIC_API_KEY,
},
});
Expand Down Expand Up @@ -60,7 +60,7 @@ await stagehand.extract(
instruction="summarize the contract terms",
schema=Terms,
model=ModelConfig(
model_name="anthropic/claude-sonnet-5",
model_name="anthropic/claude-sonnet-5-5",
api_key=os.environ["ANTHROPIC_API_KEY"],
),
)
Expand Down Expand Up @@ -98,7 +98,7 @@ if err != nil {
// One hard extraction gets the expensive model, everything else stays cheap
anthropicKey := os.Getenv("ANTHROPIC_API_KEY")
strongModel := stagehand.ModelConfig{
ModelName: "anthropic/claude-sonnet-5",
ModelName: "anthropic/claude-sonnet-5-5",
APIKey: &anthropicKey,
}

Expand Down Expand Up @@ -271,7 +271,7 @@ Automatically fall back to cheaper models for simple tasks. Escalate on `observe
async function smartAct(stagehand: Stagehand, prompt: string) {
const models = [
{ modelName: "google/gemini-3.8-flash", apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY },
{ modelName: "openai/gpt-5.4", apiKey: process.env.OPENAI_API_KEY },
{ modelName: "openai/gpt-6.1-sol", apiKey: process.env.OPENAI_API_KEY },
] as const;

for (const model of models) {
Expand Down Expand Up @@ -302,7 +302,7 @@ async def smart_act(stagehand: Stagehand, prompt: str):
"model_name": "google/gemini-3.8-flash",
"api_key": os.environ["GOOGLE_GENERATIVE_AI_API_KEY"],
},
{"model_name": "openai/gpt-5.4", "api_key": os.environ["OPENAI_API_KEY"]},
{"model_name": "openai/gpt-6.1-sol", "api_key": os.environ["OPENAI_API_KEY"]},
]

for model in models:
Expand Down Expand Up @@ -338,7 +338,7 @@ func smartAct(ctx context.Context, client *stagehand.Stagehand, prompt string) (
APIKey: &googleKey,
},
stagehand.ModelConfig{
ModelName: "openai/gpt-5.4",
ModelName: "openai/gpt-6.1-sol",
APIKey: &openaiKey,
},
}
Expand Down
4 changes: 2 additions & 2 deletions packages/docs/v4/configuration/logging.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -1094,7 +1094,7 @@ Emitted before each LLM call, carrying the operation and prompt metadata:
"data": {
"category": "llm",
"operation": "act",
"model": "openai/gpt-5.4-mini"
"model": "openai/gpt-6-luna"
}
}
```
Expand Down Expand Up @@ -1269,7 +1269,7 @@ Unlike v3's `LogLine`, `data` is a flat JSON object: values are already typed, s
"message": "inference completed",
"data": {
"category": "llm",
"model": "openai/gpt-5.4-mini",
"model": "openai/gpt-6-luna",
"promptTokens": 3451,
"completionTokens": 45
}
Expand Down
Loading
Loading