@@ -42,16 +42,43 @@ def __init__(
4242 app_name : str = "assistant" ,
4343 thread_context_store : Optional [AsyncAssistantThreadContextStore ] = None ,
4444 logger : Optional [logging .Logger ] = None ,
45+ auto_inherit_app_middleware : bool = False ,
4546 ):
4647 self .app_name = app_name
4748 self .thread_context_store = thread_context_store
4849 self .base_logger = logger
50+ self .auto_inherit_app_middleware = auto_inherit_app_middleware
51+ self ._inherited_app_middleware : List [AsyncMiddleware ] = []
4952
5053 self ._thread_started_listeners = None
5154 self ._thread_context_changed_listeners = None
5255 self ._user_message_listeners = None
5356 self ._bot_message_listeners = None
5457
58+ def inherit_app_middleware (self , middleware : AsyncMiddleware ) -> None :
59+ if self .auto_inherit_app_middleware is False :
60+ return
61+
62+ insertion_index = len (self ._inherited_app_middleware ) + 1
63+ self ._inherited_app_middleware .append (middleware )
64+ for listener in self ._listeners :
65+ listener_middleware = list (listener .middleware )
66+ listener_middleware .insert (insertion_index , middleware )
67+ listener .middleware = listener_middleware
68+
69+ @property
70+ def _listeners (self ) -> List [AsyncListener ]:
71+ listeners : List [AsyncListener ] = []
72+ for listener_list in [
73+ self ._thread_started_listeners ,
74+ self ._thread_context_changed_listeners ,
75+ self ._user_message_listeners ,
76+ self ._bot_message_listeners ,
77+ ]:
78+ if listener_list is not None :
79+ listeners .extend (listener_list )
80+ return listeners
81+
5582 def thread_started (
5683 self ,
5784 * args ,
@@ -302,8 +329,11 @@ def build_listener(
302329 if isinstance (listener_or_functions , AsyncListener ):
303330 return listener_or_functions
304331 elif isinstance (listener_or_functions , list ):
305- middleware = middleware if middleware else []
306- middleware .insert (0 , AsyncAttachingConversationKwargs (self .thread_context_store ))
332+ middleware = [
333+ AsyncAttachingConversationKwargs (self .thread_context_store ),
334+ * self ._inherited_app_middleware ,
335+ * (middleware if middleware else []),
336+ ]
307337 functions = listener_or_functions
308338 ack_function = functions .pop (0 )
309339
0 commit comments