Fixed Office365 tool __init__.py files, tests, and get_tools() function (#7046)

## Description
Added Office365 tool modules to `__init__.py` files
## Issue
As described in Issue
https://github.com/hwchase17/langchain/issues/6936, the Office365
toolkit can't be loaded easily because it is not included in the
`__init__.py` files.
## Reviewer
@dev2049
This commit is contained in:
Santiago Delgado 2023-07-05 14:46:21 -05:00 committed by GitHub
parent 8a7c95e555
commit fa55c5a16b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 6 deletions

View File

@ -12,6 +12,7 @@ from langchain.agents.agent_toolkits.jira.toolkit import JiraToolkit
from langchain.agents.agent_toolkits.json.base import create_json_agent from langchain.agents.agent_toolkits.json.base import create_json_agent
from langchain.agents.agent_toolkits.json.toolkit import JsonToolkit from langchain.agents.agent_toolkits.json.toolkit import JsonToolkit
from langchain.agents.agent_toolkits.nla.toolkit import NLAToolkit from langchain.agents.agent_toolkits.nla.toolkit import NLAToolkit
from langchain.agents.agent_toolkits.office365.toolkit import O365Toolkit
from langchain.agents.agent_toolkits.openapi.base import create_openapi_agent from langchain.agents.agent_toolkits.openapi.base import create_openapi_agent
from langchain.agents.agent_toolkits.openapi.toolkit import OpenAPIToolkit from langchain.agents.agent_toolkits.openapi.toolkit import OpenAPIToolkit
from langchain.agents.agent_toolkits.pandas.base import create_pandas_dataframe_agent from langchain.agents.agent_toolkits.pandas.base import create_pandas_dataframe_agent
@ -64,4 +65,5 @@ __all__ = [
"FileManagementToolkit", "FileManagementToolkit",
"PlayWrightBrowserToolkit", "PlayWrightBrowserToolkit",
"AzureCognitiveServicesToolkit", "AzureCognitiveServicesToolkit",
"O365Toolkit",
] ]

View File

@ -30,9 +30,9 @@ class O365Toolkit(BaseToolkit):
def get_tools(self) -> List[BaseTool]: def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit.""" """Get the tools in the toolkit."""
return [ return [
O365SearchEvents(account=self.account), O365SearchEvents(),
O365CreateDraftMessage(account=self.account), O365CreateDraftMessage(),
O365SearchEmails(account=self.account), O365SearchEmails(),
O365SendEvent(account=self.account), O365SendEvent(),
O365SendMessage(account=self.account), O365SendMessage(),
] ]

View File

@ -38,6 +38,12 @@ from langchain.tools.interaction.tool import StdInInquireTool
from langchain.tools.jira.tool import JiraAction from langchain.tools.jira.tool import JiraAction
from langchain.tools.json.tool import JsonGetValueTool, JsonListKeysTool from langchain.tools.json.tool import JsonGetValueTool, JsonListKeysTool
from langchain.tools.metaphor_search import MetaphorSearchResults from langchain.tools.metaphor_search import MetaphorSearchResults
from langchain.tools.office365.create_draft_message import O365CreateDraftMessage
from langchain.tools.office365.events_search import O365SearchEvents
from langchain.tools.office365.messages_search import O365SearchEmails
from langchain.tools.office365.send_event import O365SendEvent
from langchain.tools.office365.send_message import O365SendMessage
from langchain.tools.office365.utils import authenticate
from langchain.tools.openapi.utils.api_models import APIOperation from langchain.tools.openapi.utils.api_models import APIOperation
from langchain.tools.openapi.utils.openapi_utils import OpenAPISpec from langchain.tools.openapi.utils.openapi_utils import OpenAPISpec
from langchain.tools.openweathermap.tool import OpenWeatherMapQueryRun from langchain.tools.openweathermap.tool import OpenWeatherMapQueryRun
@ -148,6 +154,12 @@ __all__ = [
"MoveFileTool", "MoveFileTool",
"NavigateBackTool", "NavigateBackTool",
"NavigateTool", "NavigateTool",
"O365SearchEmails",
"O365SearchEvents",
"O365CreateDraftMessage",
"O365SendMessage",
"O365SendEvent",
"authenticate",
"OpenAPISpec", "OpenAPISpec",
"OpenWeatherMapQueryRun", "OpenWeatherMapQueryRun",
"PubmedQueryRun", "PubmedQueryRun",

View File

@ -55,6 +55,12 @@ _EXPECTED = [
"MoveFileTool", "MoveFileTool",
"NavigateBackTool", "NavigateBackTool",
"NavigateTool", "NavigateTool",
"O365SearchEmails",
"O365SearchEvents",
"O365CreateDraftMessage",
"O365SendMessage",
"O365SendEvent",
"authenticate",
"OpenAPISpec", "OpenAPISpec",
"OpenWeatherMapQueryRun", "OpenWeatherMapQueryRun",
"PubmedQueryRun", "PubmedQueryRun",

View File

@ -9,11 +9,16 @@ import pytest
from langchain.tools.base import BaseTool from langchain.tools.base import BaseTool
from langchain.tools.gmail.base import GmailBaseTool from langchain.tools.gmail.base import GmailBaseTool
from langchain.tools.office365.base import O365BaseTool
from langchain.tools.playwright.base import BaseBrowserTool from langchain.tools.playwright.base import BaseBrowserTool
def get_non_abstract_subclasses(cls: Type[BaseTool]) -> List[Type[BaseTool]]: def get_non_abstract_subclasses(cls: Type[BaseTool]) -> List[Type[BaseTool]]:
to_skip = {BaseBrowserTool, GmailBaseTool} # Abstract but not recognized to_skip = {
BaseBrowserTool,
GmailBaseTool,
O365BaseTool,
} # Abstract but not recognized
subclasses = [] subclasses = []
for subclass in cls.__subclasses__(): for subclass in cls.__subclasses__():
if ( if (