diff --git a/examples/single_window.py b/examples/single_window.py index 59e8321..9d2eb78 100644 --- a/examples/single_window.py +++ b/examples/single_window.py @@ -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)) diff --git a/packages/narada-pyodide/src/narada/window.py b/packages/narada-pyodide/src/narada/window.py index e7bd3dd..df6bfa1 100644 --- a/packages/narada-pyodide/src/narada/window.py +++ b/packages/narada-pyodide/src/narada/window.py @@ -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, @@ -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, @@ -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, @@ -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: @@ -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]]: ... @@ -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]: ... @@ -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.""" @@ -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"] diff --git a/packages/narada/README.md b/packages/narada/README.md index 280a90b..ee6085f 100644 --- a/packages/narada/README.md +++ b/packages/narada/README.md @@ -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 diff --git a/packages/narada/pyproject.toml b/packages/narada/pyproject.toml index 8bb2988..6ae99e7 100644 --- a/packages/narada/pyproject.toml +++ b/packages/narada/pyproject.toml @@ -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" diff --git a/packages/narada/src/narada/window.py b/packages/narada/src/narada/window.py index a607d6f..60a8634 100644 --- a/packages/narada/src/narada/window.py +++ b/packages/narada/src/narada/window.py @@ -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, @@ -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, @@ -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, @@ -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: @@ -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]]: ... @@ -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]: ... @@ -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.""" @@ -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"]