Framework + LLM

Browser frameworks and infra run a real browser; an LLM backend then does the thinking — extracting structured output for a natural-language instruction and driving the interactive act-observe loop. Banana Peel lets you pair the two independently — pin a combo slug or pass a runner plus an explicit llm — so you can put the same page in front of any model and compare.

The 11 live models

Every model below is verified to respond against our account (Gemini via Vertex AI workload identity — no key; OpenAI and Anthropic via the server's OPENAI_API_KEY / ANTHROPIC_API_KEY). Rates are USD per 1M tokens.

ProviderModelSlug fragment$/1M in$/1M out
Google (Vertex AI)Gemini 2.5 Flashgemini-2-5-flash$0.3$2.5
Google (Vertex AI)Gemini 2.5 Progemini-2-5-pro$1.25$10
Google (Vertex AI)Gemini 2.5 Flash-Litegemini-2-5-flash-lite$0.1$0.4
OpenAIGPT-4ogpt-4o$2.5$10
OpenAIGPT-4o minigpt-4o-mini$0.15$0.6
OpenAIGPT-4.1gpt-4-1$2$8
OpenAIGPT-4.1 minigpt-4-1-mini$0.4$1.6
OpenAIo4-minio4-mini$1.1$4.4
AnthropicClaude Sonnet 5claude-sonnet-5$3$15
AnthropicClaude Opus 5claude-opus-5$15$75
AnthropicClaude Haiku 4.5claude-haiku-4-5$1$5

Selecting a backend

// Combo slug picks the model from the trailing fragment:
{ "runner": "playwright-gpt-4o-mini", "url": "https://example.com", "task": "..." }

// Equivalent — a bare engine slug plus an explicit llm override (model id):
{ "runner": "playwright", "llm": "gpt-4o-mini", "url": "https://example.com", "task": "..." }

// A bare provider name also works and resolves to that provider's default model:
{ "runner": "playwright", "llm": "openai", "url": "https://example.com", "task": "..." }

// Default backend is Gemini 2.5 Pro when neither is specified:
{ "runner": "playwright", "url": "https://example.com", "task": "..." }

The model is resolved in this order:

  1. An explicit llm field — a model id (gpt-4o-mini, claude-opus-5, gemini-2-5-pro, …) or a bare provider (gemini | openai | anthropic→ that provider's default model).
  2. Otherwise the trailing model fragment of a combo slug (longest match first) — playwright-gpt-4o-mini ends with -gpt-4o-mini → the gpt-4o-mini model.
  3. Otherwise the default, gemini-2-5-pro.

Which engines accept a combo

These drivers thread the selected model through their extraction and act-loop layers, e.g. steel-claude-opus-5 or kernel-gpt-4-1:

puppeteer           → local-chromium
playwright          → local-playwright
crawlee             → local-crawlee
browserbase         → browserbase
browserbase-stealth → browserbase-stealth
anchor              → anchor
steel               → steel
hyperbrowser        → hyperbrowser
browserless         → browserless
kernel              → kernel
airtop              → airtop

The combo slug is <driver>-<model-fragment>. Other OSS frameworks (Stagehand, Midscene, browser-use OSS, ScrapeGraphAI, …) run against Gemini via Vertex's OpenAI-compatible endpoint and don't take a model override.

Extract vs act

The instruction determines which path runs. A read-only instruction ("summarize the page", "list the prices") runs the extraction path: the browser fetches the real page and the model returns JSON from that content. An instruction with an action verb (log in, click, submit, download…) runs the act-observe loop:

  • Observe the page — URL, title, trimmed text, and an indexed list of interactive elements.
  • The model replies with exactly one action as strict JSON (click / type / press / goto / done / fail).
  • The action is executed with the engine's real API, the page settles, and the loop repeats.
  • It ends on done/fail, a 100-step cap, or a 400s limit. Premature fail before real page actions is rejected. Anything short of done is reported as a failed run — never a fake success.

Whichever model runs, its real token usage is recorded per model and priced into the run's cost object at that model's rate. Password-type fields are masked in the step trace.

See also

Command Palette

Search for a command to run...