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