|
22 | 22 | from langchain_core.callbacks import (
|
23 | 23 | manager,
|
24 | 24 | BaseCallbackHandler,
|
| 25 | + Callbacks, |
25 | 26 | )
|
26 | 27 | from langchain_core.agents import AgentAction, AgentFinish
|
27 | 28 | except ImportError:
|
@@ -416,50 +417,44 @@ def _wrap_configure(f):
|
416 | 417 | # type: (Callable[..., Any]) -> Callable[..., Any]
|
417 | 418 |
|
418 | 419 | @wraps(f)
|
419 |
| - def new_configure(*args, **kwargs): |
420 |
| - # type: (Any, Any) -> Any |
| 420 | + def new_configure( |
| 421 | + callback_manager_cls, # type: type |
| 422 | + inheritable_callbacks=None, # type: Callbacks |
| 423 | + local_callbacks=None, # type: Callbacks |
| 424 | + *args, # type: Any |
| 425 | + **kwargs, # type: Any |
| 426 | + ): |
| 427 | + # type: (...) -> Any |
421 | 428 |
|
422 | 429 | integration = sentry_sdk.get_client().get_integration(LangchainIntegration)
|
423 | 430 | if integration is None:
|
424 | 431 | return f(*args, **kwargs)
|
425 | 432 |
|
426 |
| - with capture_internal_exceptions(): |
427 |
| - new_callbacks = [] # type: List[BaseCallbackHandler] |
428 |
| - if "local_callbacks" in kwargs: |
429 |
| - existing_callbacks = kwargs["local_callbacks"] |
430 |
| - kwargs["local_callbacks"] = new_callbacks |
431 |
| - elif len(args) > 2: |
432 |
| - existing_callbacks = args[2] |
433 |
| - args = ( |
434 |
| - args[0], |
435 |
| - args[1], |
436 |
| - new_callbacks, |
437 |
| - ) + args[3:] |
438 |
| - else: |
439 |
| - existing_callbacks = [] |
440 |
| - |
441 |
| - if existing_callbacks: |
442 |
| - if isinstance(existing_callbacks, list): |
443 |
| - for cb in existing_callbacks: |
444 |
| - new_callbacks.append(cb) |
445 |
| - elif isinstance(existing_callbacks, BaseCallbackHandler): |
446 |
| - new_callbacks.append(existing_callbacks) |
447 |
| - else: |
448 |
| - logger.debug("Unknown callback type: %s", existing_callbacks) |
449 |
| - |
450 |
| - already_added = False |
451 |
| - for callback in new_callbacks: |
452 |
| - if isinstance(callback, SentryLangchainCallback): |
453 |
| - already_added = True |
454 |
| - |
455 |
| - if not already_added: |
456 |
| - new_callbacks.append( |
457 |
| - SentryLangchainCallback( |
458 |
| - integration.max_spans, |
459 |
| - integration.include_prompts, |
460 |
| - integration.tiktoken_encoding_name, |
461 |
| - ) |
462 |
| - ) |
463 |
| - return f(*args, **kwargs) |
| 433 | + callbacks_list = local_callbacks or [] |
| 434 | + |
| 435 | + if isinstance(callbacks_list, BaseCallbackHandler): |
| 436 | + callbacks_list = [callbacks_list] |
| 437 | + else: |
| 438 | + logger.debug("Unknown callback type: %s", callbacks_list) |
| 439 | + callbacks_list = [] |
| 440 | + |
| 441 | + if not any(isinstance(cb, SentryLangchainCallback) for cb in callbacks_list): |
| 442 | + # Avoid mutating the existing callbacks list |
| 443 | + callbacks_list = [ |
| 444 | + *callbacks_list, |
| 445 | + SentryLangchainCallback( |
| 446 | + integration.max_spans, |
| 447 | + integration.include_prompts, |
| 448 | + integration.tiktoken_encoding_name, |
| 449 | + ), |
| 450 | + ] |
| 451 | + |
| 452 | + return f( |
| 453 | + callback_manager_cls, |
| 454 | + inheritable_callbacks, |
| 455 | + callbacks_list, |
| 456 | + *args, |
| 457 | + **kwargs, |
| 458 | + ) |
464 | 459 |
|
465 | 460 | return new_configure
|
0 commit comments