@@ -33,25 +33,28 @@ class BaseState(TypedDict):
33
33
messages : List [BaseMessage ]
34
34
35
35
36
+ newMessageBehaviorType = Literal [
37
+ "take_all" ,
38
+ "keep_last" ,
39
+ "queue" ,
40
+ "interuppt_take_all" ,
41
+ "interuppt_keep_last" ,
42
+ ]
43
+
44
+
36
45
class LangChainAgent (BaseAgent ):
37
46
def __init__ (
38
47
self ,
39
48
target_connectors : Dict [str , HRIConnector [HRIMessage ]],
40
49
runnable : Runnable ,
41
50
state : BaseState | None = None ,
42
- new_message_behavior : Literal [
43
- "take_all" ,
44
- "keep_last" ,
45
- "queue" ,
46
- "interuppt_take_all" ,
47
- "interuppt_keep_last" ,
48
- ] = "interuppt_keep_last" ,
51
+ new_message_behavior : newMessageBehaviorType = "interuppt_keep_last" ,
49
52
max_size : int = 100 ,
50
53
):
51
54
super ().__init__ ()
52
55
self .logger = logging .getLogger (__name__ )
53
56
self .agent = runnable
54
- self .new_message_behavior = new_message_behavior
57
+ self .new_message_behavior : newMessageBehaviorType = new_message_behavior
55
58
self .tracing_callbacks = get_tracing_callbacks ()
56
59
self .state = state or ReActAgentState (messages = [])
57
60
self ._langchain_callback = HRICallbackHandler (
@@ -141,26 +144,33 @@ def stop(self):
141
144
self .thread = None
142
145
self .logger .info ("Agent stopped" )
143
146
144
- def _reduce_messages ( self ) -> HRIMessage :
145
- text = ""
146
- images = []
147
- audios = []
148
- source_messages = list ()
149
- if "take_all" in self . new_message_behavior :
147
+ @ staticmethod
148
+ def _apply_reduction_behavior (
149
+ method : newMessageBehaviorType , buffer : Deque
150
+ ) -> List :
151
+ output = list ()
152
+ if "take_all" in method :
150
153
# Take all starting from the oldest
151
- while len (self . _received_messages ) > 0 :
152
- source_messages .append (self . _received_messages .popleft ())
153
- elif "keep_last" in self . new_message_behavior :
154
+ while len (buffer ) > 0 :
155
+ output .append (buffer .popleft ())
156
+ elif "keep_last" in method :
154
157
# Take the recently added message
155
- source_messages .append (self . _received_messages .pop ())
156
- self . _received_messages .clear ()
157
- elif self . new_message_behavior == "queue" :
158
+ output .append (buffer .pop ())
159
+ buffer .clear ()
160
+ elif method == "queue" :
158
161
# Take the first message from the queue. Let other messages wait.
159
- source_messages .append (self . _received_messages .popleft ())
162
+ output .append (buffer .popleft ())
160
163
else :
161
- raise ValueError (
162
- f"Invalid new_message_behavior: { self .new_message_behavior } "
163
- )
164
+ raise ValueError (f"Invalid new_message_behavior: { method } " )
165
+ return output
166
+
167
+ def _reduce_messages (self ) -> HRIMessage :
168
+ text = ""
169
+ images = []
170
+ audios = []
171
+ source_messages = self ._apply_reduction_behavior (
172
+ self .new_message_behavior , self ._received_messages
173
+ )
164
174
for source_message in source_messages :
165
175
text += f"{ source_message .text } \n "
166
176
images .extend (source_message .images )
0 commit comments