1
1
from langchain_core .tools import StructuredTool
2
2
3
3
from langflow .base .agents .agent import LCToolsAgentComponent
4
+ from langflow .base .agents .events import ExceptionWithMessageError
4
5
from langflow .base .models .model_input_constants import (
5
6
ALL_PROVIDER_FIELDS ,
6
7
MODEL_DYNAMIC_UPDATE_FIELDS ,
@@ -65,43 +66,32 @@ class AgentComponent(ToolCallingAgentComponent):
65
66
66
67
async def message_response (self ) -> Message :
67
68
try :
69
+ # Get LLM model and validate
68
70
llm_model , display_name = self .get_llm ()
69
71
if llm_model is None :
70
- msg = "No language model selected"
72
+ msg = "No language model selected. Please choose a model to proceed. "
71
73
raise ValueError (msg )
72
74
self .model_name = get_model_name (llm_model , display_name = display_name )
73
- except Exception as e :
74
- # Log the error for debugging purposes
75
- logger .error (f"Error retrieving language model: { e } " )
76
- raise
77
75
78
- try :
76
+ # Get memory data
79
77
self .chat_history = await self .get_memory_data ()
80
- except Exception as e :
81
- logger .error (f"Error retrieving chat history: { e } " )
82
- raise
83
78
84
- if self . add_current_date_tool :
85
- try :
79
+ # Add current date tool if enabled
80
+ if self . add_current_date_tool :
86
81
if not isinstance (self .tools , list ): # type: ignore[has-type]
87
82
self .tools = []
88
- # Convert CurrentDateComponent to a StructuredTool
89
83
current_date_tool = (await CurrentDateComponent (** self .get_base_args ()).to_toolkit ()).pop (0 )
90
- if isinstance (current_date_tool , StructuredTool ):
91
- self .tools .append (current_date_tool )
92
- else :
84
+ if not isinstance (current_date_tool , StructuredTool ):
93
85
msg = "CurrentDateComponent must be converted to a StructuredTool"
94
86
raise TypeError (msg )
95
- except Exception as e :
96
- logger .error (f"Error adding current date tool: { e } " )
97
- raise
87
+ self .tools .append (current_date_tool )
98
88
99
- if not self . tools :
100
- msg = "Tools are required to run the agent."
101
- logger . error ( msg )
102
- raise ValueError (msg )
89
+ # Validate tools
90
+ if not self . tools :
91
+ msg = "Tools are required to run the agent. Please add at least one tool."
92
+ raise ValueError (msg )
103
93
104
- try :
94
+ # Set up and run agent
105
95
self .set (
106
96
llm = llm_model ,
107
97
tools = self .tools ,
@@ -110,12 +100,18 @@ async def message_response(self) -> Message:
110
100
system_prompt = self .system_prompt ,
111
101
)
112
102
agent = self .create_agent_runnable ()
103
+ return await self .run_agent (agent )
104
+
105
+ except (ValueError , TypeError , KeyError ) as e :
106
+ logger .error (f"{ type (e ).__name__ } : { e !s} " )
107
+ raise
108
+ except ExceptionWithMessageError as e :
109
+ logger .error (f"ExceptionWithMessageError occurred: { e } " )
110
+ raise
113
111
except Exception as e :
114
- logger .error (f"Error setting up the agent : { e } " )
112
+ logger .error (f"Unexpected error : { e !s } " )
115
113
raise
116
114
117
- return await self .run_agent (agent )
118
-
119
115
async def get_memory_data (self ):
120
116
memory_kwargs = {
121
117
component_input .name : getattr (self , f"{ component_input .name } " ) for component_input in self .memory_inputs
@@ -126,22 +122,26 @@ async def get_memory_data(self):
126
122
return await MemoryComponent (** self .get_base_args ()).set (** memory_kwargs ).retrieve_messages ()
127
123
128
124
def get_llm (self ):
129
- if isinstance (self .agent_llm , str ):
130
- try :
131
- provider_info = MODEL_PROVIDERS_DICT .get (self .agent_llm )
132
- if provider_info :
133
- component_class = provider_info .get ("component_class" )
134
- display_name = component_class .display_name
135
- inputs = provider_info .get ("inputs" )
136
- prefix = provider_info .get ("prefix" , "" )
137
- return (
138
- self ._build_llm_model (component_class , inputs , prefix ),
139
- display_name ,
140
- )
141
- except Exception as e :
142
- msg = f"Error building { self .agent_llm } language model"
143
- raise ValueError (msg ) from e
144
- return self .agent_llm , None
125
+ if not isinstance (self .agent_llm , str ):
126
+ return self .agent_llm , None
127
+
128
+ try :
129
+ provider_info = MODEL_PROVIDERS_DICT .get (self .agent_llm )
130
+ if not provider_info :
131
+ msg = f"Invalid model provider: { self .agent_llm } "
132
+ raise ValueError (msg )
133
+
134
+ component_class = provider_info .get ("component_class" )
135
+ display_name = component_class .display_name
136
+ inputs = provider_info .get ("inputs" )
137
+ prefix = provider_info .get ("prefix" , "" )
138
+
139
+ return self ._build_llm_model (component_class , inputs , prefix ), display_name
140
+
141
+ except Exception as e :
142
+ logger .error (f"Error building { self .agent_llm } language model: { e !s} " )
143
+ msg = f"Failed to initialize language model: { e !s} "
144
+ raise ValueError (msg ) from e
145
145
146
146
def _build_llm_model (self , component , inputs , prefix = "" ):
147
147
model_kwargs = {input_ .name : getattr (self , f"{ prefix } { input_ .name } " ) for input_ in inputs }
0 commit comments