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.
| Provider | Model | Slug fragment | $/1M in | $/1M out |
|---|---|---|---|---|
| Google (Vertex AI) | Gemini 2.5 Flash | gemini-2-5-flash | $0.3 | $2.5 |
| Google (Vertex AI) | Gemini 2.5 Pro | gemini-2-5-pro | $1.25 | $10 |
| Google (Vertex AI) | Gemini 2.5 Flash-Lite | gemini-2-5-flash-lite | $0.1 | $0.4 |
| OpenAI | GPT-4o | gpt-4o | $2.5 | $10 |
| OpenAI | GPT-4o mini | gpt-4o-mini | $0.15 | $0.6 |
| OpenAI | GPT-4.1 | gpt-4-1 | $2 | $8 |
| OpenAI | GPT-4.1 mini | gpt-4-1-mini | $0.4 | $1.6 |
| OpenAI | o4-mini | o4-mini | $1.1 | $4.4 |
| Anthropic | Claude Sonnet 5 | claude-sonnet-5 | $3 | $15 |
| Anthropic | Claude Opus 5 | claude-opus-5 | $15 | $75 |
| Anthropic | Claude Haiku 4.5 | claude-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:
- An explicit
llmfield — 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). - Otherwise the trailing model fragment of a combo slug (longest match first) —
playwright-gpt-4o-miniends with-gpt-4o-mini→ thegpt-4o-minimodel. - 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 → airtopThe 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. Prematurefailbefore real page actions is rejected. Anything short ofdoneis 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
- Runner catalog — the full list of live combo slugs
- Browserbase wrapper — target a combo from a Browserbase-format request too
- Cost model — per-model token rates