OpenAIFunctionsAgentOutputParser Class — langchain Architecture
Architecture documentation for the OpenAIFunctionsAgentOutputParser class in openai_functions.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 4dc989ff_9a85_a857_d208_5bc8b6a443dc["OpenAIFunctionsAgentOutputParser"] d9685a4b_26b0_bca9_f857_03bb2ffc9dd4["AgentOutputParser"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|extends| d9685a4b_26b0_bca9_f857_03bb2ffc9dd4 de5a7878_b3fe_95d7_2575_7f534546dc1e["AIMessage"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|extends| de5a7878_b3fe_95d7_2575_7f534546dc1e 2bdc4d81_5592_3e8d_1079_4eb50790f1d0["ChatGeneration"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|extends| 2bdc4d81_5592_3e8d_1079_4eb50790f1d0 3a6df24c_7bea_5f3b_0f9d_b4754b06c94e["openai_functions.py"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|defined in| 3a6df24c_7bea_5f3b_0f9d_b4754b06c94e 5a68eb9e_08a9_5d87_e2dd_8a07eeda418d["_type()"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|method| 5a68eb9e_08a9_5d87_e2dd_8a07eeda418d 8dd0a3f1_1bf7_bed3_d0f0_65a68d3ae18c["parse_ai_message()"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|method| 8dd0a3f1_1bf7_bed3_d0f0_65a68d3ae18c 284268df_49ac_b85d_6344_8b9a9c1d043b["parse_result()"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|method| 284268df_49ac_b85d_6344_8b9a9c1d043b 1ba013ae_5564_8575_b25d_f03ea076aada["parse()"] 4dc989ff_9a85_a857_d208_5bc8b6a443dc -->|method| 1ba013ae_5564_8575_b25d_f03ea076aada
Relationship Graph
Source Code
libs/langchain/langchain_classic/agents/output_parsers/openai_functions.py lines 16–98
class OpenAIFunctionsAgentOutputParser(AgentOutputParser):
"""Parses a message into agent action/finish.
Is meant to be used with OpenAI models, as it relies on the specific
function_call parameter from OpenAI to convey what tools to use.
If a function_call parameter is passed, then that is used to get
the tool and tool input.
If one is not passed, then the AIMessage is assumed to be the final output.
"""
@property
def _type(self) -> str:
return "openai-functions-agent"
@staticmethod
def parse_ai_message(message: BaseMessage) -> AgentAction | AgentFinish:
"""Parse an AI message."""
if not isinstance(message, AIMessage):
msg = f"Expected an AI message got {type(message)}"
raise TypeError(msg)
function_call = message.additional_kwargs.get("function_call", {})
if function_call:
function_name = function_call["name"]
try:
if len(function_call["arguments"].strip()) == 0:
# OpenAI returns an empty string for functions containing no args
_tool_input = {}
else:
# otherwise it returns a json object
_tool_input = json.loads(function_call["arguments"], strict=False)
except JSONDecodeError as e:
msg = (
f"Could not parse tool input: {function_call} because "
f"the `arguments` is not valid JSON."
)
raise OutputParserException(msg) from e
# A hack here:
# The code that encodes tool input into Open AI uses a special variable
# name called `__arg1` to handle old style tools that do not expose a
# schema and expect a single string argument as an input.
# We unpack the argument here if it exists.
# Open AI does not support passing in a JSON array as an argument.
if "__arg1" in _tool_input:
tool_input = _tool_input["__arg1"]
else:
tool_input = _tool_input
content_msg = f"responded: {message.content}\n" if message.content else "\n"
log = f"\nInvoking: `{function_name}` with `{tool_input}`\n{content_msg}\n"
return AgentActionMessageLog(
tool=function_name,
tool_input=tool_input,
log=log,
message_log=[message],
)
return AgentFinish(
return_values={"output": message.content},
log=str(message.content),
)
@override
def parse_result(
self,
result: list[Generation],
*,
partial: bool = False,
) -> AgentAction | AgentFinish:
if not isinstance(result[0], ChatGeneration):
msg = "This output parser only works on ChatGeneration output"
raise ValueError(msg) # noqa: TRY004
message = result[0].message
return self.parse_ai_message(message)
@override
def parse(self, text: str) -> AgentAction | AgentFinish:
Domain
Source
Frequently Asked Questions
What is the OpenAIFunctionsAgentOutputParser class?
OpenAIFunctionsAgentOutputParser is a class in the langchain codebase, defined in libs/langchain/langchain_classic/agents/output_parsers/openai_functions.py.
Where is OpenAIFunctionsAgentOutputParser defined?
OpenAIFunctionsAgentOutputParser is defined in libs/langchain/langchain_classic/agents/output_parsers/openai_functions.py at line 16.
What does OpenAIFunctionsAgentOutputParser extend?
OpenAIFunctionsAgentOutputParser extends AgentOutputParser, AIMessage, ChatGeneration.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free