From 0887f71e494d01b9140c66e74420c35b0164b649 Mon Sep 17 00:00:00 2001 From: Arnav Brahmasandra Date: Thu, 5 Mar 2026 14:50:35 -0500 Subject: [PATCH 1/2] sdk changes --- examples/attachment.py | 2 +- packages/narada-pyodide/src/narada/window.py | 34 ++++++++++++++++---- packages/narada/src/narada/window.py | 34 +++++++++++--------- 3 files changed, 46 insertions(+), 24 deletions(-) diff --git a/examples/attachment.py b/examples/attachment.py index 8568cdd..5cadcde 100644 --- a/examples/attachment.py +++ b/examples/attachment.py @@ -17,7 +17,7 @@ async def main() -> None: response = await window.agent( prompt="Summarize the attached file.", agent=Agent.GENERALIST, - attachment=file, + attachments={"file": file}, ) 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 95aa4ba..0bf8063 100644 --- a/packages/narada-pyodide/src/narada/window.py +++ b/packages/narada-pyodide/src/narada/window.py @@ -4,7 +4,17 @@ import time from abc import ABC from http import HTTPStatus -from typing import IO, TYPE_CHECKING, Any, Literal, Optional, TypeVar, cast, overload +from typing import ( + IO, + TYPE_CHECKING, + Any, + Literal, + Optional, + TypeAlias, + TypeVar, + cast, + overload, +) from js import AbortController, setTimeout # type: ignore from narada_core.actions.models import ( @@ -78,6 +88,7 @@ async def _narada_get_id_token() -> str: ... _StructuredOutput = TypeVar("_StructuredOutput", bound=BaseModel) _ResponseModel = TypeVar("_ResponseModel", bound=BaseModel) +_AttachmentVariableInput: TypeAlias = dict[str, File] class BaseBrowserWindow(ABC): @@ -133,10 +144,11 @@ async def dispatch_request( previous_request_id: str | None = None, chat_history: list[RemoteDispatchChatHistoryItem] | None = None, additional_context: dict[str, str] | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", user_resource_credentials: UserResourceCredentials | None = None, mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -155,10 +167,11 @@ async def dispatch_request( previous_request_id: str | None = None, chat_history: list[RemoteDispatchChatHistoryItem] | None = None, additional_context: dict[str, str] | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", user_resource_credentials: UserResourceCredentials | None = None, mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -176,10 +189,11 @@ async def dispatch_request( previous_request_id: str | None = None, chat_history: list[RemoteDispatchChatHistoryItem] | None = None, additional_context: dict[str, str] | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", user_resource_credentials: UserResourceCredentials | None = None, mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -226,6 +240,8 @@ async def dispatch_request( body["chatHistory"] = chat_history if additional_context is not None: body["additionalContext"] = additional_context + if attachments is not None and len(attachments) > 0: + body["attachmentVariables"] = attachments if user_resource_credentials is not None: body["userResourceCredentials"] = user_resource_credentials if mcp_servers is not None: @@ -315,9 +331,10 @@ async def agent( clear_chat: bool | None = None, generate_gif: bool | None = None, output_schema: None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, timeout: int = 1000, ) -> AgentResponse[None]: ... @@ -330,9 +347,10 @@ async def agent( clear_chat: bool | None = None, generate_gif: bool | None = None, output_schema: type[_StructuredOutput], + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, timeout: int = 1000, ) -> AgentResponse[_StructuredOutput]: ... @@ -344,9 +362,10 @@ async def agent( clear_chat: bool | None = None, generate_gif: bool | None = None, output_schema: type[BaseModel] | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, timeout: int = 1000, ) -> AgentResponse: """Invokes an agent in the Narada extension side panel chat.""" @@ -356,6 +375,7 @@ async def agent( clear_chat=clear_chat, generate_gif=generate_gif, output_schema=output_schema, + attachments=attachments, time_zone=time_zone, mcp_servers=mcp_servers, variables=variables, diff --git a/packages/narada/src/narada/window.py b/packages/narada/src/narada/window.py index 1919839..154a5e8 100644 --- a/packages/narada/src/narada/window.py +++ b/packages/narada/src/narada/window.py @@ -5,7 +5,7 @@ from abc import ABC from http import HTTPStatus from pathlib import Path -from typing import IO, Any, TypeVar, overload, override +from typing import IO, Any, TypeAlias, TypeVar, overload, override import aiohttp from narada_core.actions.models import ( @@ -63,6 +63,8 @@ _ResponseModel = TypeVar("_ResponseModel", bound=BaseModel) +_AttachmentVariableInput: TypeAlias = dict[str, File] + class _PresignedPost(BaseModel): url: str @@ -134,11 +136,11 @@ async def dispatch_request( previous_request_id: str | None = None, chat_history: list[RemoteDispatchChatHistoryItem] | None = None, additional_context: dict[str, str] | None = None, - attachment: File | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", user_resource_credentials: UserResourceCredentials | None = None, mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -157,11 +159,11 @@ async def dispatch_request( previous_request_id: str | None = None, chat_history: list[RemoteDispatchChatHistoryItem] | None = None, additional_context: dict[str, str] | None = None, - attachment: File | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", user_resource_credentials: UserResourceCredentials | None = None, mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -179,11 +181,11 @@ async def dispatch_request( previous_request_id: str | None = None, chat_history: list[RemoteDispatchChatHistoryItem] | None = None, additional_context: dict[str, str] | None = None, - attachment: File | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", user_resource_credentials: UserResourceCredentials | None = None, mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -218,8 +220,8 @@ async def dispatch_request( body["chatHistory"] = chat_history if additional_context is not None: body["additionalContext"] = additional_context - if attachment is not None: - body["attachment"] = attachment + if attachments is not None and len(attachments) > 0: + body["attachmentVariables"] = attachments if user_resource_credentials is not None: body["userResourceCredentials"] = user_resource_credentials if mcp_servers is not None: @@ -289,10 +291,10 @@ async def agent( clear_chat: bool | None = None, generate_gif: bool | None = None, output_schema: None = None, - attachment: File | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, timeout: int = 1000, ) -> AgentResponse[None]: ... @@ -305,10 +307,10 @@ async def agent( clear_chat: bool | None = None, generate_gif: bool | None = None, output_schema: type[_StructuredOutput], - attachment: File | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, timeout: int = 1000, ) -> AgentResponse[_StructuredOutput]: ... @@ -320,10 +322,10 @@ async def agent( clear_chat: bool | None = None, generate_gif: bool | None = None, output_schema: type[BaseModel] | None = None, - attachment: File | None = None, + attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, str] | None = None, + variables: dict[str, Any] | None = None, timeout: int = 1000, ) -> AgentResponse: """Invokes an agent in the Narada extension side panel chat.""" @@ -333,7 +335,7 @@ async def agent( clear_chat=clear_chat, generate_gif=generate_gif, output_schema=output_schema, - attachment=attachment, + attachments=attachments, time_zone=time_zone, mcp_servers=mcp_servers, variables=variables, From 787878cee06ed95680cb8f9be4bb4feee6f2d6c3 Mon Sep 17 00:00:00 2001 From: Arnav Brahmasandra Date: Thu, 5 Mar 2026 17:54:33 -0500 Subject: [PATCH 2/2] revert unnecessary changes --- packages/narada-pyodide/src/narada/window.py | 12 ++++++------ packages/narada/src/narada/window.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/narada-pyodide/src/narada/window.py b/packages/narada-pyodide/src/narada/window.py index 0bf8063..b23bec1 100644 --- a/packages/narada-pyodide/src/narada/window.py +++ b/packages/narada-pyodide/src/narada/window.py @@ -148,7 +148,7 @@ 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, Any] | None = None, + variables: dict[str, str] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -171,7 +171,7 @@ 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, Any] | None = None, + variables: dict[str, str] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -193,7 +193,7 @@ 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, Any] | None = None, + variables: dict[str, str] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -334,7 +334,7 @@ async def agent( attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, Any] | None = None, + variables: dict[str, str] | None = None, timeout: int = 1000, ) -> AgentResponse[None]: ... @@ -350,7 +350,7 @@ async def agent( attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, Any] | None = None, + variables: dict[str, str] | None = None, timeout: int = 1000, ) -> AgentResponse[_StructuredOutput]: ... @@ -365,7 +365,7 @@ async def agent( attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, Any] | None = None, + variables: dict[str, str] | None = None, timeout: int = 1000, ) -> AgentResponse: """Invokes an agent in the Narada extension side panel chat.""" diff --git a/packages/narada/src/narada/window.py b/packages/narada/src/narada/window.py index 154a5e8..d1adfb4 100644 --- a/packages/narada/src/narada/window.py +++ b/packages/narada/src/narada/window.py @@ -140,7 +140,7 @@ 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, Any] | None = None, + variables: dict[str, str] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -163,7 +163,7 @@ 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, Any] | None = None, + variables: dict[str, str] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -185,7 +185,7 @@ 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, Any] | None = None, + variables: dict[str, str] | None = None, callback_url: str | None = None, callback_secret: str | None = None, callback_headers: dict[str, Any] | None = None, @@ -294,7 +294,7 @@ async def agent( attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, Any] | None = None, + variables: dict[str, str] | None = None, timeout: int = 1000, ) -> AgentResponse[None]: ... @@ -310,7 +310,7 @@ async def agent( attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, Any] | None = None, + variables: dict[str, str] | None = None, timeout: int = 1000, ) -> AgentResponse[_StructuredOutput]: ... @@ -325,7 +325,7 @@ async def agent( attachments: _AttachmentVariableInput | None = None, time_zone: str = "America/Los_Angeles", mcp_servers: list[McpServer] | None = None, - variables: dict[str, Any] | None = None, + variables: dict[str, str] | None = None, timeout: int = 1000, ) -> AgentResponse: """Invokes an agent in the Narada extension side panel chat."""