Skip to content
Merged
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
5 changes: 3 additions & 2 deletions examples/single_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ async def main() -> None:
prompt="Search for ${paper_name} on Google and open the first arXiv paper on the results page, then open the PDF. Then download the PDF of the paper.",
# Optionally generate a GIF of the agent's actions.
generate_gif=True,
# Put sensitive information that you don't want the LLM to see in variables. These will
# Put sensitive information that you don't want the LLM to see in secret_variables.
# These will
# be substituted at action time after the LLM has generated its output.
variables={"paper_name": "LLM Compiler"},
secret_variables={"paper_name": "LLM Compiler"},
)

print("Response:", response.model_dump_json(indent=2))
Expand Down
27 changes: 18 additions & 9 deletions packages/narada-pyodide/src/narada/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ async def dispatch_request(
time_zone: str = "America/Los_Angeles",
user_resource_credentials: UserResourceCredentials | None = None,
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
callback_url: str | None = None,
callback_secret: str | None = None,
callback_headers: dict[str, Any] | None = None,
Expand All @@ -158,7 +159,8 @@ async def dispatch_request(
time_zone: str = "America/Los_Angeles",
user_resource_credentials: UserResourceCredentials | None = None,
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
callback_url: str | None = None,
callback_secret: str | None = None,
callback_headers: dict[str, Any] | None = None,
Expand All @@ -179,7 +181,8 @@ async def dispatch_request(
time_zone: str = "America/Los_Angeles",
user_resource_credentials: UserResourceCredentials | None = None,
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
callback_url: str | None = None,
callback_secret: str | None = None,
callback_headers: dict[str, Any] | None = None,
Expand Down Expand Up @@ -232,8 +235,10 @@ async def dispatch_request(
body["mcpServers"] = [
server.model_dump(mode="json") for server in mcp_servers
]
if variables is not None:
body["variables"] = variables
if secret_variables is not None:
body["secretVariables"] = secret_variables
if input_variables is not None:
body["inputVariables"] = input_variables
if callback_url is not None:
body["callbackUrl"] = callback_url
if callback_secret is not None:
Expand Down Expand Up @@ -321,7 +326,8 @@ async def agent(
output_schema: None = None,
time_zone: str = "America/Los_Angeles",
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
timeout: int = 1000,
) -> AgentResponse[dict[str, Any]]: ...

Expand All @@ -336,7 +342,8 @@ async def agent(
output_schema: type[_StructuredOutput],
time_zone: str = "America/Los_Angeles",
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
timeout: int = 1000,
) -> AgentResponse[_StructuredOutput]: ...

Expand All @@ -350,7 +357,8 @@ async def agent(
output_schema: type[BaseModel] | None = None,
time_zone: str = "America/Los_Angeles",
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
timeout: int = 1000,
) -> AgentResponse:
"""Invokes an agent in the Narada extension side panel chat."""
Expand All @@ -362,7 +370,8 @@ async def agent(
output_schema=output_schema,
time_zone=time_zone,
mcp_servers=mcp_servers,
variables=variables,
secret_variables=secret_variables,
input_variables=input_variables,
timeout=timeout,
)
response_content = remote_dispatch_response["response"]
Expand Down
7 changes: 7 additions & 0 deletions packages/narada/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ This would then result in the following trajectory:

You can use the SDK to launch browsers and run automated tasks using natural language instructions. For more examples and code samples, please explore the [`examples/`](examples/) folder in this repository.

## Migration note

For the next release (`0.1.38`):

- `variables` has been renamed to `secret_variables`.
- Use `input_variables` to pass structured values (objects/arrays) into custom agents.

## Features

- **Natural Language Control**: Send instructions in plain English to control browser actions
Expand Down
2 changes: 1 addition & 1 deletion packages/narada/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "narada"
version = "0.1.37"
version = "0.1.38"
description = "Python client SDK for Narada"
license = "Apache-2.0"
readme = "README.md"
Expand Down
27 changes: 18 additions & 9 deletions packages/narada/src/narada/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ async def dispatch_request(
time_zone: str = "America/Los_Angeles",
user_resource_credentials: UserResourceCredentials | None = None,
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
callback_url: str | None = None,
callback_secret: str | None = None,
callback_headers: dict[str, Any] | None = None,
Expand All @@ -171,7 +172,8 @@ async def dispatch_request(
time_zone: str = "America/Los_Angeles",
user_resource_credentials: UserResourceCredentials | None = None,
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
callback_url: str | None = None,
callback_secret: str | None = None,
callback_headers: dict[str, Any] | None = None,
Expand All @@ -193,7 +195,8 @@ async def dispatch_request(
time_zone: str = "America/Los_Angeles",
user_resource_credentials: UserResourceCredentials | None = None,
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
callback_url: str | None = None,
callback_secret: str | None = None,
callback_headers: dict[str, Any] | None = None,
Expand Down Expand Up @@ -236,8 +239,10 @@ async def dispatch_request(
body["mcpServers"] = [
server.model_dump(mode="json") for server in mcp_servers
]
if variables is not None:
body["variables"] = variables
if secret_variables is not None:
body["secretVariables"] = secret_variables
if input_variables is not None:
body["inputVariables"] = input_variables
if callback_url is not None:
body["callbackUrl"] = callback_url
if callback_secret is not None:
Expand Down Expand Up @@ -306,7 +311,8 @@ async def agent(
attachment: File | None = None,
time_zone: str = "America/Los_Angeles",
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
timeout: int = 1000,
) -> AgentResponse[dict[str, Any]]: ...

Expand All @@ -322,7 +328,8 @@ async def agent(
attachment: File | None = None,
time_zone: str = "America/Los_Angeles",
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
timeout: int = 1000,
) -> AgentResponse[_StructuredOutput]: ...

Expand All @@ -337,7 +344,8 @@ async def agent(
attachment: File | None = None,
time_zone: str = "America/Los_Angeles",
mcp_servers: list[McpServer] | None = None,
variables: dict[str, str] | None = None,
secret_variables: dict[str, str] | None = None,
input_variables: dict[str, Any] | None = None,
timeout: int = 1000,
) -> AgentResponse:
"""Invokes an agent in the Narada extension side panel chat."""
Expand All @@ -350,7 +358,8 @@ async def agent(
attachment=attachment,
time_zone=time_zone,
mcp_servers=mcp_servers,
variables=variables,
secret_variables=secret_variables,
input_variables=input_variables,
timeout=timeout,
)
response_content = remote_dispatch_response["response"]
Expand Down
Loading