| from langchain.agents import create_openai_tools_agent |
| from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, PromptTemplate |
|
|
| from langflow.base.agents.agent import LCToolsAgentComponent |
| from langflow.inputs import MultilineInput |
| from langflow.inputs.inputs import DataInput, HandleInput |
| from langflow.schema import Data |
|
|
|
|
| class OpenAIToolsAgentComponent(LCToolsAgentComponent): |
| display_name: str = "OpenAI Tools Agent" |
| description: str = "Agent that uses tools via openai-tools." |
| icon = "LangChain" |
| name = "OpenAIToolsAgent" |
|
|
| inputs = [ |
| *LCToolsAgentComponent._base_inputs, |
| HandleInput( |
| name="llm", |
| display_name="Language Model", |
| input_types=["LanguageModel", "ToolEnabledLanguageModel"], |
| required=True, |
| ), |
| MultilineInput( |
| name="system_prompt", |
| display_name="System Prompt", |
| info="System prompt for the agent.", |
| value="You are a helpful assistant", |
| ), |
| MultilineInput( |
| name="user_prompt", display_name="Prompt", info="This prompt must contain 'input' key.", value="{input}" |
| ), |
| DataInput(name="chat_history", display_name="Chat History", is_list=True, advanced=True), |
| ] |
|
|
| def get_chat_history_data(self) -> list[Data] | None: |
| return self.chat_history |
|
|
| def create_agent_runnable(self): |
| if "input" not in self.user_prompt: |
| msg = "Prompt must contain 'input' key." |
| raise ValueError(msg) |
| messages = [ |
| ("system", self.system_prompt), |
| ("placeholder", "{chat_history}"), |
| HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=["input"], template=self.user_prompt)), |
| ("placeholder", "{agent_scratchpad}"), |
| ] |
| prompt = ChatPromptTemplate.from_messages(messages) |
| return create_openai_tools_agent(self.llm, self.tools, prompt) |
|
|