Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions docs/src/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
"integrations/steel",
"integrations/massive",
"integrations/openai-cua",
"integrations/fireworks",
"integrations/stagehand",
"integrations/openclaw",
"features/sessions/cloudflare-web-bot-auth"
Expand Down
55 changes: 55 additions & 0 deletions docs/src/integrations/fireworks.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
title: 'Fireworks AI'
description: 'Run Notte browser agents on Fireworks-served open-weight models'
---
import FireworksBasic from '/snippets/integrations/fireworks_basic.mdx';
import AgentMdNotice from '/partials/agent-md-notice.mdx';

<AgentMdNotice />

[Fireworks AI](https://fireworks.ai) hosts open-weight LLMs including Kimi K2.5, GLM-5, and MiniMax M2.5. To run a Notte agent on any of them, pass the model string to `reasoning_model`. Notte talks to Fireworks through LiteLLM, so there's no extra provider setup.

For numbers on how these models hold up across browser-agent workloads, see the joint benchmark, [Agents Don't Fail on Intelligence. They Fail on Execution](https://fireworks.ai/blog/agent-execution-tax).

## Prerequisites

- A Fireworks AI API key ([fireworks.ai](https://fireworks.ai))
- Python 3.11 or later

## Setup

### 1. Install the SDK

```bash
pip install --upgrade notte
```

### 2. Set your API key

```bash
export FIREWORKS_API_KEY=<your-fireworks-api-key>
```

### 3. Run an agent on a Fireworks model

Pass the model string (formatted as `fireworks_ai/accounts/fireworks/models/<id>`) to `reasoning_model`:

<FireworksBasic />

## Supported models

Any Fireworks model with JSON-mode structured output works with Notte. Three were covered in the joint benchmark with Fireworks:

- Kimi K2.5: `fireworks_ai/accounts/fireworks/models/kimi-k2p5`
- GLM-5: `fireworks_ai/accounts/fireworks/models/glm-5`
- MiniMax M2.5: `fireworks_ai/accounts/fireworks/models/minimax-m2p5`

See the [Fireworks model catalogue](https://fireworks.ai/models) for everything else.

## Resources

- [Joint benchmark: Agents Don't Fail on Intelligence. They Fail on Execution](https://fireworks.ai/blog/agent-execution-tax)
- [Agent Execution Tax explainer](https://notte.cc/blog/agent-execution-tax)
- [Fireworks AI](https://fireworks.ai) and the [Fireworks model catalogue](https://fireworks.ai/models)
- [Browser Arena](https://browserarena.ai): Notte's open benchmark of cloud browser providers
- [Notte Console](https://console.notte.cc)
1 change: 1 addition & 0 deletions docs/src/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ Full Quickstart: https://docs.notte.cc/quickstart.md
- [Steel](https://docs.notte.cc/integrations/steel.md): Run Notte with Steel cloud browsers (CDP)
- [Massive](https://docs.notte.cc/integrations/massive.md): Use Massive residential proxies with Notte sessions
- [OpenAI CUA](https://docs.notte.cc/integrations/openai-cua.md): Integrate OpenAI CUA with Notte Browser Sessions
- [Fireworks AI](https://docs.notte.cc/integrations/fireworks.md): Run Notte browser agents on Fireworks-served open-weight models
- [Stagehand](https://docs.notte.cc/integrations/stagehand.md): Use Notte cloud browsers with Stagehand browser automation
- [OpenClaw](https://docs.notte.cc/integrations/openclaw.md): Use Notte cloud browsers with OpenClaw
- [Cloudflare Web Bot Auth](https://docs.notte.cc/features/sessions/cloudflare-web-bot-auth.md): Access Cloudflare-protected websites by cryptographically signing browser requests
Expand Down
126 changes: 120 additions & 6 deletions docs/src/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -223,19 +223,57 @@ Build reliable Python SDK automation scripts by authoring in a real browser firs
"",
"**Browser profiles:** Profiles store browser state such as cookies, `localStorage`, and `sessionStorage`. Start a session with `--profile-id <profile-id>` to load that saved state; add `--profile-persist` when starting the session if changes should be saved back to the profile when the session closes.",
"",
"Session debugging and export:",
"Session debugging:",
"",
"```bash",
"# Get network logs",
"notte sessions network",
"",
"# Get replay URL/data",
"notte sessions replay",
"```",
"",
"Session export:",
"",
"```bash",
"# Export session steps as Python workflow code.",
"# Use --session-id to export a specific session, including one that has been stopped.",
"notte sessions workflow-code",
"notte sessions workflow-code --session-id <session-id>",
"",
"# example flow",
"notte sessions start",
"notte page goto news.ycombinator.com",
"notte page scrape --instructions \"Extract the top 10 stories from Hacker News. For each story return: rank, title, URL, points, author, number of comments\" -o json",
"notte sessions workflow-code",
"",
"# returns",
"from __future__ import annotations",
"",
"from notte_sdk import NotteClient",
"from pydantic import BaseModel",
"",
"class Story(BaseModel):",
" rank: int | None = None",
" title: str | None = None",
" url: str | None = None",
" points: int | None = None",
" author: str | None = None",
" number_of_comments: int | None = None",
"",
"",
"class Model(BaseModel):",
" stories: list[Story] | None = None",
"",
"client = NotteClient()",
"",
"def run() -> Model:",
" with client.Session(use_file_storage=True) as session:",
" _ = session.execute(type='goto', url='news.ycombinator.com')",
"",
" # directly parses the output using response_format and returns the Model",
" return session.scrape(instructions='Extract the top 10 stories from Hacker News. For each story return: rank, title, URL, points, author, number of comments', only_main_content=False, only_images=False, scrape_links=True, scrape_images=False, response_format=Model)",
"",
"run()",
"```",
"",
"Cookie management:",
Expand Down Expand Up @@ -1040,19 +1078,57 @@ Build reliable Python SDK automation scripts by authoring in a real browser firs

**Browser profiles:** Profiles store browser state such as cookies, `localStorage`, and `sessionStorage`. Start a session with `--profile-id <profile-id>` to load that saved state; add `--profile-persist` when starting the session if changes should be saved back to the profile when the session closes.

Session debugging and export:
Session debugging:

```bash
# Get network logs
notte sessions network

# Get replay URL/data
notte sessions replay
```

Session export:

```bash
# Export session steps as Python workflow code.
# Use --session-id to export a specific session, including one that has been stopped.
notte sessions workflow-code
notte sessions workflow-code --session-id <session-id>

# example flow
notte sessions start
notte page goto news.ycombinator.com
notte page scrape --instructions "Extract the top 10 stories from Hacker News. For each story return: rank, title, URL, points, author, number of comments" -o json
notte sessions workflow-code

# returns
from __future__ import annotations

from notte_sdk import NotteClient
from pydantic import BaseModel

class Story(BaseModel):
rank: int | None = None
title: str | None = None
url: str | None = None
points: int | None = None
author: str | None = None
number_of_comments: int | None = None


class Model(BaseModel):
stories: list[Story] | None = None

client = NotteClient()

def run() -> Model:
with client.Session(use_file_storage=True) as session:
_ = session.execute(type='goto', url='news.ycombinator.com')

# directly parses the output using response_format and returns the Model
return session.scrape(instructions='Extract the top 10 stories from Hacker News. For each story return: rank, title, URL, points, author, number of comments', only_main_content=False, only_images=False, scrape_links=True, scrape_images=False, response_format=Model)

run()
```

Cookie management:
Expand Down Expand Up @@ -1838,19 +1914,57 @@ notte sessions list [--page N] [--page-size N] [--only-active]

**Browser profiles:** Profiles store browser state such as cookies, `localStorage`, and `sessionStorage`. Start a session with `--profile-id <profile-id>` to load that saved state; add `--profile-persist` when starting the session if changes should be saved back to the profile when the session closes.

Session debugging and export:
Session debugging:

```bash
# Get network logs
notte sessions network

# Get replay URL/data
notte sessions replay
```

Session export:

```bash
# Export session steps as Python workflow code.
# Use --session-id to export a specific session, including one that has been stopped.
notte sessions workflow-code
notte sessions workflow-code --session-id <session-id>

# example flow
notte sessions start
notte page goto news.ycombinator.com
notte page scrape --instructions "Extract the top 10 stories from Hacker News. For each story return: rank, title, URL, points, author, number of comments" -o json
notte sessions workflow-code

# returns
from __future__ import annotations

from notte_sdk import NotteClient
from pydantic import BaseModel

class Story(BaseModel):
rank: int | None = None
title: str | None = None
url: str | None = None
points: int | None = None
author: str | None = None
number_of_comments: int | None = None


class Model(BaseModel):
stories: list[Story] | None = None

client = NotteClient()

def run() -> Model:
with client.Session(use_file_storage=True) as session:
_ = session.execute(type='goto', url='news.ycombinator.com')

# directly parses the output using response_format and returns the Model
return session.scrape(instructions='Extract the top 10 stories from Hacker News. For each story return: rank, title, URL, points, author, number of comments', only_main_content=False, only_images=False, scrape_links=True, scrape_images=False, response_format=Model)

run()
```

Cookie management:
Expand Down
13 changes: 13 additions & 0 deletions docs/src/snippets/integrations/fireworks_basic.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{/* Auto-generated mdx file. Do not edit! */}
{/* @sniptest testers/integrations/fireworks_basic.py */}

```python fireworks_basic.py
import notte

with notte.Session() as session:
agent = notte.Agent(
session=session,
reasoning_model="fireworks_ai/accounts/fireworks/models/kimi-k2p5",
)
response = agent.run(task="Go to news.ycombinator.com and return the top three stories.")
```
9 changes: 9 additions & 0 deletions docs/src/testers/integrations/fireworks_basic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# @sniptest filename=fireworks_basic.py
import notte

with notte.Session() as session:
agent = notte.Agent(
session=session,
reasoning_model="fireworks_ai/accounts/fireworks/models/kimi-k2p5",
Comment thread
sam-notte marked this conversation as resolved.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

should be moonshotai/kimi-k2.6

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

auctually I just reverted to use local notte instead of notte-sdk

)
response = agent.run(task="Go to news.ycombinator.com and return the top three stories.")
Loading