@@ -313,7 +313,6 @@ async def async_stream_wrapper(*args: Any, **kwargs: Any):
313313 else :
314314 return decorator (func )
315315
316-
317316 def to_runnable (
318317 self ,
319318 func : Callable = None ,
@@ -341,11 +340,16 @@ def sync_wrapper(*args: Any, **kwargs: Any):
341340 config = _convert_config (config )
342341 res = None
343342 try :
344- inp = {
345- "args" : args ,
346- "kwargs" : kwargs
347- }
348- res = RunnableLambda (_param_wrapped_func ).invoke (input = inp , config = config )
343+ extra = {}
344+ if len (args ) > 0 and is_class_func (func ):
345+ extra = {"_inner_class_self" : args [0 ]}
346+ args = args [1 :]
347+ inp = {}
348+ if len (args ) > 0 :
349+ inp ['args' ] = args
350+ if len (kwargs ) > 0 :
351+ inp ['kwargs' ] = kwargs
352+ res = RunnableLambda (_param_wrapped_func ).invoke (input = inp , config = config , ** extra )
349353 if hasattr (res , "__iter__" ):
350354 return res
351355 except StopIteration :
@@ -362,11 +366,16 @@ async def async_wrapper(*args: Any, **kwargs: Any):
362366 config = _convert_config (config )
363367 res = None
364368 try :
365- inp = {
366- "args" : args ,
367- "kwargs" : kwargs
368- }
369- res = await RunnableLambda (_param_wrapped_func_async ).ainvoke (input = inp , config = config )
369+ extra = {}
370+ if len (args ) > 0 and is_class_func (func ):
371+ extra = {"_inner_class_self" : args [0 ]}
372+ args = args [1 :]
373+ inp = {}
374+ if len (args ) > 0 :
375+ inp ['args' ] = args
376+ if len (kwargs ) > 0 :
377+ inp ['kwargs' ] = kwargs
378+ res = await RunnableLambda (_param_wrapped_func_async ).ainvoke (input = inp , config = config , ** extra )
370379 if hasattr (res , "__aiter__" ):
371380 return res
372381 except StopIteration :
@@ -387,11 +396,16 @@ def gen_wrapper(*args: Any, **kwargs: Any):
387396 config = kwargs .pop ("config" , None )
388397 config = _convert_config (config )
389398 try :
390- inp = {
391- "args" : args ,
392- "kwargs" : kwargs
393- }
394- gen = RunnableLambda (_param_wrapped_func ).invoke (input = inp , config = config )
399+ extra = {}
400+ if len (args ) > 0 and is_class_func (func ):
401+ extra = {"_inner_class_self" : args [0 ]}
402+ args = args [1 :]
403+ inp = {}
404+ if len (args ) > 0 :
405+ inp ['args' ] = args
406+ if len (kwargs ) > 0 :
407+ inp ['kwargs' ] = kwargs
408+ gen = RunnableLambda (_param_wrapped_func ).invoke (input = inp , config = config , * extra )
395409 try :
396410 for item in gen :
397411 yield item
@@ -405,11 +419,16 @@ async def async_gen_wrapper(*args: Any, **kwargs: Any):
405419 config = kwargs .pop ("config" , None )
406420 config = _convert_config (config )
407421 try :
408- inp = {
409- "args" : args ,
410- "kwargs" : kwargs
411- }
412- gen = RunnableLambda (_param_wrapped_func_async ).invoke (input = inp , config = config )
422+ extra = {}
423+ if len (args ) > 0 and is_class_func (func ):
424+ extra = {"_inner_class_self" : args [0 ]}
425+ args = args [1 :]
426+ inp = {}
427+ if len (args ) > 0 :
428+ inp ['args' ] = args
429+ if len (kwargs ) > 0 :
430+ inp ['kwargs' ] = kwargs
431+ gen = RunnableLambda (_param_wrapped_func_async ).invoke (input = inp , config = config , ** extra )
413432 items = []
414433 try :
415434 async for item in gen :
@@ -428,15 +447,25 @@ async def async_gen_wrapper(*args: Any, **kwargs: Any):
428447 raise e
429448
430449 # for convert parameter
431- def _param_wrapped_func (input_dict : dict ) -> Any :
432- args = input_dict .get ("args" , ())
433- kwargs = input_dict .get ("kwargs" , {})
434- return func (* args , ** kwargs )
435-
436- async def _param_wrapped_func_async (input_dict : dict ) -> Any :
437- args = input_dict .get ("args" , ())
438- kwargs = input_dict .get ("kwargs" , {})
439- return await func (* args , ** kwargs )
450+ def _param_wrapped_func (input_dict : dict , ** kwargs ) -> Any :
451+ real_args = input_dict .get ("args" , ())
452+ real_kwargs = input_dict .get ("kwargs" , {})
453+
454+ inner_class_self = kwargs .get ("_inner_class_self" , None )
455+ if inner_class_self is not None :
456+ real_args = (inner_class_self , * real_args )
457+
458+ return func (* real_args , ** real_kwargs )
459+
460+ async def _param_wrapped_func_async (input_dict : dict , ** kwargs ) -> Any :
461+ real_args = input_dict .get ("args" , ())
462+ real_kwargs = input_dict .get ("kwargs" , {})
463+
464+ inner_class_self = kwargs .get ("_inner_class_self" , None )
465+ if inner_class_self is not None :
466+ real_args = (inner_class_self , * real_args )
467+
468+ return await func (* real_args , ** real_kwargs )
440469
441470 def _convert_config (config : RunnableConfig = None ) -> RunnableConfig | None :
442471 if config is None :
0 commit comments