Skip to content

Commit

Permalink
Refactor agent component imports for improved modularity and organiza…
Browse files Browse the repository at this point in the history
…tion
  • Loading branch information
ogabrielluiz committed Oct 25, 2024
1 parent c556074 commit 438ac6b
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 11 deletions.
2 changes: 1 addition & 1 deletion src/backend/base/langflow/components/agents/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
from .xml import XMLAgentComponent

__all__ = [
"Agent",
"AgentActionRouter",
"AgentContextBuilder",
"CheckTerminationComponent",
Expand All @@ -48,4 +47,5 @@
"VectorStoreAgentComponent",
"VectorStoreRouterAgentComponent",
"XMLAgentComponent",
"Agent",
]
16 changes: 7 additions & 9 deletions src/backend/base/langflow/components/agents/agent.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
from loguru import logger

from langflow.components.agents import (
AgentActionRouter,
AgentContextBuilder,
DecideActionComponent,
ExecuteActionComponent,
GenerateThoughtComponent,
ProvideFinalAnswerComponent,
)
from langflow.components.inputs.ChatInput import ChatInput
from langflow.components.agents.agent_action_router import AgentActionRouter
from langflow.components.agents.agent_context import AgentContextBuilder
from langflow.components.agents.decide_action import DecideActionComponent
from langflow.components.agents.execute_action import ExecuteActionComponent
from langflow.components.agents.generate_thought import GenerateThoughtComponent
from langflow.components.agents.write_final_answer import ProvideFinalAnswerComponent
from langflow.components.inputs.chat import ChatInput
from langflow.components.outputs import ChatOutput
from langflow.components.prompts import PromptComponent
from langflow.custom import Component
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from loguru import logger\n\nfrom langflow.components.agents import (\n AgentActionRouter,\n AgentContextBuilder,\n DecideActionComponent,\n ExecuteActionComponent,\n GenerateThoughtComponent,\n ProvideFinalAnswerComponent,\n)\nfrom langflow.components.inputs.ChatInput import ChatInput\nfrom langflow.components.outputs import ChatOutput\nfrom langflow.components.prompts import PromptComponent\nfrom langflow.custom import Component\nfrom langflow.graph.graph.base import Graph\nfrom langflow.graph.state.model import create_state_model\nfrom langflow.io import BoolInput, HandleInput, IntInput, MessageTextInput, MultilineInput, Output\nfrom langflow.schema.message import Message\n\n\nclass Agent(Component):\n display_name = \"Agent\"\n description = \"Customizable Agent component\"\n\n inputs = [\n HandleInput(name=\"llm\", display_name=\"Language Model\", input_types=[\"LanguageModel\"], required=True),\n HandleInput(name=\"tools\", display_name=\"Tools\", input_types=[\"Tool\"], is_list=True, required=True),\n IntInput(name=\"max_iterations\", display_name=\"Max Iterations\", value=5),\n BoolInput(name=\"verbose\", display_name=\"Verbose\", value=False),\n MultilineInput(name=\"system_prompt\", display_name=\"System Prompt\", value=\"You are a helpful assistant.\"),\n MultilineInput(name=\"user_prompt\", display_name=\"User Prompt\", value=\"{input}\"),\n MultilineInput(\n name=\"loop_prompt\",\n display_name=\"Loop Prompt\",\n value=\"Last Action Result: {last_action_result}\\nBased on the actions taken, here's the final answer:\",\n ),\n MessageTextInput(\n name=\"decide_action_prompt\",\n display_name=\"Decide Action Prompt\",\n value=\"Based on your thought, decide the best action to take next.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"final_answer_prompt\",\n display_name=\"Final Answer Prompt\",\n value=\"Considering all observations, provide the final answer to the user's query.\",\n advanced=True,\n ),\n ]\n outputs = [Output(name=\"response\", display_name=\"Response\", method=\"get_response\")]\n\n async def get_response(self) -> Message:\n # Chat input initialization\n chat_input = ChatInput().set(input_value=self.user_prompt)\n\n # Agent Context Builder\n agent_context = AgentContextBuilder().set(\n initial_context=chat_input.message_response,\n tools=self.tools,\n llm=self.llm,\n max_iterations=self.max_iterations,\n )\n\n # Generate Thought\n generate_thought = GenerateThoughtComponent().set(\n agent_context=agent_context.build_context,\n )\n\n # Decide Action\n decide_action = DecideActionComponent().set(\n agent_context=generate_thought.generate_thought,\n prompt=self.decide_action_prompt,\n )\n\n # Agent Action Router\n action_router = AgentActionRouter().set(\n agent_context=decide_action.decide_action,\n max_iterations=self.max_iterations,\n )\n\n # Execute Action\n execute_action = ExecuteActionComponent().set(agent_context=action_router.route_to_execute_tool)\n # Loop Prompt\n loop_prompt = PromptComponent().set(\n template=self.loop_prompt,\n answer=execute_action.execute_action,\n )\n\n generate_thought.set(prompt=loop_prompt.build_prompt)\n\n # Final Answer\n final_answer = ProvideFinalAnswerComponent().set(\n agent_context=action_router.route_to_final_answer,\n prompt=self.final_answer_prompt,\n )\n\n # Chat output\n chat_output = ChatOutput().set(input_value=final_answer.get_final_answer)\n output_model = create_state_model(\"AgentOutput\", output=chat_output.message_response)\n\n # Build the graph\n graph = Graph(chat_input, chat_output)\n async for result in graph.async_start(max_iterations=self.max_iterations):\n if self.verbose:\n logger.info(result)\n\n return output_model.output\n"
"value": "from loguru import logger\n\nfrom langflow.components.agents.agent_action_router import AgentActionRouter\nfrom langflow.components.agents.agent_context import AgentContextBuilder\nfrom langflow.components.agents.decide_action import DecideActionComponent\nfrom langflow.components.agents.execute_action import ExecuteActionComponent\nfrom langflow.components.agents.generate_thought import GenerateThoughtComponent\nfrom langflow.components.agents.write_final_answer import ProvideFinalAnswerComponent\nfrom langflow.components.inputs.chat import ChatInput\nfrom langflow.components.outputs import ChatOutput\nfrom langflow.components.prompts import PromptComponent\nfrom langflow.custom import Component\nfrom langflow.graph.graph.base import Graph\nfrom langflow.graph.state.model import create_state_model\nfrom langflow.io import BoolInput, HandleInput, IntInput, MessageTextInput, MultilineInput, Output\nfrom langflow.schema.message import Message\n\n\nclass Agent(Component):\n display_name = \"Agent\"\n description = \"Customizable Agent component\"\n\n inputs = [\n HandleInput(name=\"llm\", display_name=\"Language Model\", input_types=[\"LanguageModel\"], required=True),\n HandleInput(name=\"tools\", display_name=\"Tools\", input_types=[\"Tool\"], is_list=True, required=True),\n IntInput(name=\"max_iterations\", display_name=\"Max Iterations\", value=5),\n BoolInput(name=\"verbose\", display_name=\"Verbose\", value=False),\n MultilineInput(name=\"system_prompt\", display_name=\"System Prompt\", value=\"You are a helpful assistant.\"),\n MultilineInput(name=\"user_prompt\", display_name=\"User Prompt\", value=\"{input}\"),\n MultilineInput(\n name=\"loop_prompt\",\n display_name=\"Loop Prompt\",\n value=\"Last Action Result: {last_action_result}\\nBased on the actions taken, here's the final answer:\",\n ),\n MessageTextInput(\n name=\"decide_action_prompt\",\n display_name=\"Decide Action Prompt\",\n value=\"Based on your thought, decide the best action to take next.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"final_answer_prompt\",\n display_name=\"Final Answer Prompt\",\n value=\"Considering all observations, provide the final answer to the user's query.\",\n advanced=True,\n ),\n ]\n outputs = [Output(name=\"response\", display_name=\"Response\", method=\"get_response\")]\n\n async def get_response(self) -> Message:\n # Chat input initialization\n chat_input = ChatInput().set(input_value=self.user_prompt)\n\n # Agent Context Builder\n agent_context = AgentContextBuilder().set(\n initial_context=chat_input.message_response,\n tools=self.tools,\n llm=self.llm,\n max_iterations=self.max_iterations,\n )\n\n # Generate Thought\n generate_thought = GenerateThoughtComponent().set(\n agent_context=agent_context.build_context,\n )\n\n # Decide Action\n decide_action = DecideActionComponent().set(\n agent_context=generate_thought.generate_thought,\n prompt=self.decide_action_prompt,\n )\n\n # Agent Action Router\n action_router = AgentActionRouter().set(\n agent_context=decide_action.decide_action,\n max_iterations=self.max_iterations,\n )\n\n # Execute Action\n execute_action = ExecuteActionComponent().set(agent_context=action_router.route_to_execute_tool)\n # Loop Prompt\n loop_prompt = PromptComponent().set(\n template=self.loop_prompt,\n answer=execute_action.execute_action,\n )\n\n generate_thought.set(prompt=loop_prompt.build_prompt)\n\n # Final Answer\n final_answer = ProvideFinalAnswerComponent().set(\n agent_context=action_router.route_to_final_answer,\n prompt=self.final_answer_prompt,\n )\n\n # Chat output\n chat_output = ChatOutput().set(input_value=final_answer.get_final_answer)\n output_model = create_state_model(\"AgentOutput\", output=chat_output.message_response)\n\n # Build the graph\n graph = Graph(chat_input, chat_output)\n async for result in graph.async_start(max_iterations=self.max_iterations):\n if self.verbose:\n logger.info(result)\n\n return output_model.output\n"
},
"decide_action_prompt": {
"_input_type": "MessageTextInput",
Expand Down

0 comments on commit 438ac6b

Please sign in to comment.