diff --git a/langchain/agents/agent_toolkits/base.py b/langchain/agents/agent_toolkits/base.py index ce9b9e43af9..0cb78d1de8b 100644 --- a/langchain/agents/agent_toolkits/base.py +++ b/langchain/agents/agent_toolkits/base.py @@ -1,5 +1,5 @@ """Toolkits for agents.""" -from abc import abstractmethod +from abc import ABC, abstractmethod from typing import List from pydantic import BaseModel @@ -7,8 +7,8 @@ from pydantic import BaseModel from langchain.tools import BaseTool -class BaseToolkit(BaseModel): - """Class responsible for defining a collection of related tools.""" +class BaseToolkit(BaseModel, ABC): + """Class representing a collection of related tools.""" @abstractmethod def get_tools(self) -> List[BaseTool]: diff --git a/langchain/agents/agent_toolkits/csv/base.py b/langchain/agents/agent_toolkits/csv/base.py index ac1b2501197..dbda4be8baf 100644 --- a/langchain/agents/agent_toolkits/csv/base.py +++ b/langchain/agents/agent_toolkits/csv/base.py @@ -1,4 +1,4 @@ -"""Agent for working with csvs.""" +"""Agent for working with csv files.""" from typing import Any, List, Optional, Union from langchain.agents.agent import AgentExecutor diff --git a/langchain/agents/agent_toolkits/office365/__init__.py b/langchain/agents/agent_toolkits/office365/__init__.py index 02e7f81659f..acd0a87f955 100644 --- a/langchain/agents/agent_toolkits/office365/__init__.py +++ b/langchain/agents/agent_toolkits/office365/__init__.py @@ -1 +1 @@ -"""Gmail toolkit.""" +"""Office365 toolkit.""" diff --git a/langchain/agents/agent_toolkits/openapi/toolkit.py b/langchain/agents/agent_toolkits/openapi/toolkit.py index 8c10dad8980..9c243cf72bf 100644 --- a/langchain/agents/agent_toolkits/openapi/toolkit.py +++ b/langchain/agents/agent_toolkits/openapi/toolkit.py @@ -39,7 +39,7 @@ class RequestsToolkit(BaseToolkit): class OpenAPIToolkit(BaseToolkit): - """Toolkit for interacting with a OpenAPI api.""" + """Toolkit for interacting with an OpenAPI API.""" json_agent: AgentExecutor requests_wrapper: TextRequestsWrapper diff --git a/langchain/agents/agent_toolkits/powerbi/base.py b/langchain/agents/agent_toolkits/powerbi/base.py index 3595f547c3c..62fed35c14b 100644 --- a/langchain/agents/agent_toolkits/powerbi/base.py +++ b/langchain/agents/agent_toolkits/powerbi/base.py @@ -17,7 +17,7 @@ from langchain.utilities.powerbi import PowerBIDataset def create_pbi_agent( llm: BaseLanguageModel, - toolkit: Optional[PowerBIToolkit], + toolkit: Optional[PowerBIToolkit] = None, powerbi: Optional[PowerBIDataset] = None, callback_manager: Optional[BaseCallbackManager] = None, prefix: str = POWERBI_PREFIX, diff --git a/langchain/agents/agent_toolkits/powerbi/chat_base.py b/langchain/agents/agent_toolkits/powerbi/chat_base.py index ff4c73301f1..a30d013f3a1 100644 --- a/langchain/agents/agent_toolkits/powerbi/chat_base.py +++ b/langchain/agents/agent_toolkits/powerbi/chat_base.py @@ -18,7 +18,7 @@ from langchain.utilities.powerbi import PowerBIDataset def create_pbi_chat_agent( llm: BaseChatModel, - toolkit: Optional[PowerBIToolkit], + toolkit: Optional[PowerBIToolkit] = None, powerbi: Optional[PowerBIDataset] = None, callback_manager: Optional[BaseCallbackManager] = None, output_parser: Optional[AgentOutputParser] = None, @@ -32,9 +32,9 @@ def create_pbi_chat_agent( agent_executor_kwargs: Optional[Dict[str, Any]] = None, **kwargs: Dict[str, Any], ) -> AgentExecutor: - """Construct a pbi agent from an Chat LLM and tools. + """Construct a Power BI agent from a Chat LLM and tools. - If you supply only a toolkit and no powerbi dataset, the same LLM is used for both. + If you supply only a toolkit and no Power BI dataset, the same LLM is used for both. """ if toolkit is None: if powerbi is None: diff --git a/langchain/agents/chat/output_parser.py b/langchain/agents/chat/output_parser.py index c7023426aa0..6f1cda0ce2c 100644 --- a/langchain/agents/chat/output_parser.py +++ b/langchain/agents/chat/output_parser.py @@ -30,9 +30,8 @@ class ChatOutputParser(AgentOutputParser): except Exception: if not includes_answer: raise OutputParserException(f"Could not parse LLM output: {text}") - return AgentFinish( - {"output": text.split(FINAL_ANSWER_ACTION)[-1].strip()}, text - ) + output = text.split(FINAL_ANSWER_ACTION)[-1].strip() + return AgentFinish({"output": output}, text) @property def _type(self) -> str: diff --git a/langchain/agents/self_ask_with_search/base.py b/langchain/agents/self_ask_with_search/base.py index e63322fc0d6..2ddff23a85e 100644 --- a/langchain/agents/self_ask_with_search/base.py +++ b/langchain/agents/self_ask_with_search/base.py @@ -1,4 +1,4 @@ -"""Chain that does self ask with search.""" +"""Chain that does self-ask with search.""" from typing import Any, Sequence, Union from pydantic import Field @@ -59,7 +59,7 @@ class SelfAskWithSearchAgent(Agent): class SelfAskWithSearchChain(AgentExecutor): - """Chain that does self ask with search. + """Chain that does self-ask with search. Example: .. code-block:: python diff --git a/langchain/callbacks/file.py b/langchain/callbacks/file.py index 77edb879c74..7c132953645 100644 --- a/langchain/callbacks/file.py +++ b/langchain/callbacks/file.py @@ -39,7 +39,7 @@ class FileCallbackHandler(BaseCallbackHandler): self, action: AgentAction, color: Optional[str] = None, **kwargs: Any ) -> Any: """Run on agent action.""" - print_text(action.log, color=color if color else self.color, file=self.file) + print_text(action.log, color=color or self.color, file=self.file) def on_tool_end( self, @@ -52,24 +52,18 @@ class FileCallbackHandler(BaseCallbackHandler): """If not the final action, print out observation.""" if observation_prefix is not None: print_text(f"\n{observation_prefix}", file=self.file) - print_text(output, color=color if color else self.color, file=self.file) + print_text(output, color=color or self.color, file=self.file) if llm_prefix is not None: print_text(f"\n{llm_prefix}", file=self.file) def on_text( - self, - text: str, - color: Optional[str] = None, - end: str = "", - **kwargs: Any, + self, text: str, color: Optional[str] = None, end: str = "", **kwargs: Any ) -> None: """Run when agent ends.""" - print_text(text, color=color if color else self.color, end=end, file=self.file) + print_text(text, color=color or self.color, end=end, file=self.file) def on_agent_finish( self, finish: AgentFinish, color: Optional[str] = None, **kwargs: Any ) -> None: """Run on agent end.""" - print_text( - finish.log, color=color if self.color else color, end="\n", file=self.file - ) + print_text(finish.log, color=color or self.color, end="\n", file=self.file) diff --git a/langchain/callbacks/stdout.py b/langchain/callbacks/stdout.py index f87fdfb46a9..baa03de521f 100644 --- a/langchain/callbacks/stdout.py +++ b/langchain/callbacks/stdout.py @@ -63,7 +63,7 @@ class StdOutCallbackHandler(BaseCallbackHandler): self, action: AgentAction, color: Optional[str] = None, **kwargs: Any ) -> Any: """Run on agent action.""" - print_text(action.log, color=color if color else self.color) + print_text(action.log, color=color or self.color) def on_tool_end( self, @@ -76,7 +76,7 @@ class StdOutCallbackHandler(BaseCallbackHandler): """If not the final action, print out observation.""" if observation_prefix is not None: print_text(f"\n{observation_prefix}") - print_text(output, color=color if color else self.color) + print_text(output, color=color or self.color) if llm_prefix is not None: print_text(f"\n{llm_prefix}") @@ -94,10 +94,10 @@ class StdOutCallbackHandler(BaseCallbackHandler): **kwargs: Any, ) -> None: """Run when agent ends.""" - print_text(text, color=color if color else self.color, end=end) + print_text(text, color=color or self.color, end=end) def on_agent_finish( self, finish: AgentFinish, color: Optional[str] = None, **kwargs: Any ) -> None: """Run on agent end.""" - print_text(finish.log, color=color if self.color else color, end="\n") + print_text(finish.log, color=color or self.color, end="\n") diff --git a/langchain/callbacks/streaming_stdout_final_only.py b/langchain/callbacks/streaming_stdout_final_only.py index 0527db3598a..ba9e7da59f7 100644 --- a/langchain/callbacks/streaming_stdout_final_only.py +++ b/langchain/callbacks/streaming_stdout_final_only.py @@ -37,7 +37,7 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler): """Instantiate FinalStreamingStdOutCallbackHandler. Args: - answer_prefix_tokens: Token sequence that prefixes the anwer. + answer_prefix_tokens: Token sequence that prefixes the answer. Default is ["Final", "Answer", ":"] strip_tokens: Ignore white spaces and new lines when comparing answer_prefix_tokens to last tokens? (to determine if answer has been