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
32 changes: 16 additions & 16 deletions python/src/agentmail_toolkit/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,24 @@ class ListItemsParams(BaseModel):
limit: Optional[int] = Field(
default=10, description="Max number of items to return"
)
page_token: Optional[str] = Field(description="Pagination page token")
page_token: Optional[str] = Field(default=None, description="Pagination page token")


class GetInboxParams(BaseModel):
inbox_id: InboxIdField


class CreateInboxParams(BaseModel):
username: Optional[str] = Field(description="Username")
domain: Optional[str] = Field(description="Domain")
display_name: Optional[str] = Field(description="Display name")
username: Optional[str] = Field(default=None, description="Username")
domain: Optional[str] = Field(default=None, description="Domain")
display_name: Optional[str] = Field(default=None, description="Display name")


class ListInboxItemsParams(ListItemsParams):
inbox_id: InboxIdField
labels: Optional[List[str]] = Field(description="Filter items with labels")
before: Optional[datetime] = Field(description="Filter items before datetime")
after: Optional[datetime] = Field(description="Filter items after datetime")
labels: Optional[List[str]] = Field(default=None, description="Filter items with labels")
before: Optional[datetime] = Field(default=None, description="Filter items before datetime")
after: Optional[datetime] = Field(default=None, description="Filter items after datetime")


class GetThreadParams(BaseModel):
Expand All @@ -52,22 +52,22 @@ class Attachment(BaseModel):

class BaseMessageParams(BaseModel):
inbox_id: InboxIdField
text: Optional[str] = Field(description="Plain text body")
html: Optional[str] = Field(description="HTML body")
labels: Optional[List[str]] = Field(description="Labels")
text: Optional[str] = Field(default=None, description="Plain text body")
html: Optional[str] = Field(default=None, description="HTML body")
labels: Optional[List[str]] = Field(default=None, description="Labels")
attachments: Optional[List[Attachment]] = Field(default=None, description="Attachments")


class SendMessageParams(BaseMessageParams):
to: List[str] = Field(description="Recipients")
cc: Optional[List[str]] = Field(description="CC recipients")
bcc: Optional[List[str]] = Field(description="BCC recipients")
subject: Optional[str] = Field(description="Subject")
cc: Optional[List[str]] = Field(default=None, description="CC recipients")
bcc: Optional[List[str]] = Field(default=None, description="BCC recipients")
subject: Optional[str] = Field(default=None, description="Subject")


class ReplyToMessageParams(BaseMessageParams):
message_id: MessageIdField
reply_all: Optional[bool] = Field(description="Reply to all recipients")
reply_all: Optional[bool] = Field(default=None, description="Reply to all recipients")


class ForwardMessageParams(SendMessageParams):
Expand All @@ -77,5 +77,5 @@ class ForwardMessageParams(SendMessageParams):
class UpdateMessageParams(BaseModel):
inbox_id: InboxIdField
message_id: MessageIdField
add_labels: Optional[List[str]] = Field(description="Labels to add")
remove_labels: Optional[List[str]] = Field(description="Labels to remove")
add_labels: Optional[List[str]] = Field(default=None, description="Labels to add")
remove_labels: Optional[List[str]] = Field(default=None, description="Labels to remove")
15 changes: 15 additions & 0 deletions python/tests/test_schemas_optional_defaults.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from agentmail_toolkit.schemas import CreateInboxParams, ListItemsParams


def test_create_inbox_params_allows_empty():
# SDK's inboxes.create() accepts no arguments (random inbox);
# the tool schema must not require username/domain/display_name.
params = CreateInboxParams()
assert params.username is None
assert params.domain is None
assert params.display_name is None


def test_list_items_params_allows_only_limit():
params = ListItemsParams(limit=5)
assert params.page_token is None