community: add args_schema to GmailSendMessage (#14973)

- **Description:** `tools.gmail.send_message` implements a
`SendMessageSchema` that is not used anywhere. `GmailSendMessage` also
does not have an `args_schema` attribute (this led to issues when
invoking the tool with an OpenAI functions agent, at least for me). Here
we add the missing attribute and a minimal test for the tool.
  - **Issue:** N/A
  - **Dependencies:** N/A
  - **Twitter handle:** N/A

---------

Co-authored-by: Chester Curme <chestercurme@microsoft.com>
This commit is contained in:
ccurme 2023-12-22 16:07:44 -05:00 committed by GitHub
parent e7ad834a21
commit f2782f4c86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 1 deletions

View File

@ -2,7 +2,7 @@
import base64
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from typing import Any, Dict, List, Optional, Union
from typing import Any, Dict, List, Optional, Type, Union
from langchain_core.callbacks import CallbackManagerForToolRun
from langchain_core.pydantic_v1 import BaseModel, Field
@ -42,6 +42,7 @@ class GmailSendMessage(GmailBaseTool):
description: str = (
"Use this tool to send email messages." " The input is the message, recipients"
)
args_schema: Type[SendMessageSchema] = SendMessageSchema
def _prepare_message(
self,

View File

@ -0,0 +1,18 @@
from unittest.mock import MagicMock
from langchain_community.tools.gmail.send_message import GmailSendMessage
def test_send() -> None:
"""Test gmail send."""
mock_api_resource = MagicMock()
# bypass pydantic validation as google-api-python-client is not a package dependency
tool = GmailSendMessage.construct(api_resource=mock_api_resource)
tool_input = {
"to": "fake123@email.com",
"subject": "subject line",
"message": "message body",
}
result = tool.run(tool_input)
assert result.startswith("Message sent. Message Id:")
assert tool.args_schema is not None