| 728 | |
| 729 | |
| 730 | def function_setup( |
| 731 | original_function: str, rules_obj, start_time, *args, **kwargs |
| 732 | ): # just run once to check if user wants to send their data anywhere - PostHog/Sentry/Slack/etc. |
| 733 | ### NOTICES ### |
| 734 | if litellm.set_verbose is True: |
| 735 | verbose_logger.warning( |
| 736 | "`litellm.set_verbose` is deprecated. Please set `os.environ['LITELLM_LOG'] = 'DEBUG'` for debug logs." |
| 737 | ) |
| 738 | try: |
| 739 | global callback_list, add_breadcrumb, user_logger_fn, Logging |
| 740 | |
| 741 | ## CUSTOM LLM SETUP ## |
| 742 | custom_llm_setup() |
| 743 | |
| 744 | ## GET APPLIED GUARDRAILS |
| 745 | applied_guardrails = get_applied_guardrails(kwargs) |
| 746 | |
| 747 | ## LOGGING SETUP |
| 748 | function_id: Optional[str] = kwargs["id"] if "id" in kwargs else None |
| 749 | |
| 750 | ## LAZY LOAD COROUTINE CHECKER ## |
| 751 | get_coroutine_checker_fn = getattr(sys.modules[__name__], "get_coroutine_checker") |
| 752 | coroutine_checker = get_coroutine_checker_fn() |
| 753 | |
| 754 | ## DYNAMIC CALLBACKS ## |
| 755 | dynamic_callbacks: Optional[List[Union[str, Callable, "CustomLogger"]]] = kwargs.pop("callbacks", None) |
| 756 | all_callbacks = get_dynamic_callbacks(dynamic_callbacks=dynamic_callbacks) |
| 757 | |
| 758 | if len(all_callbacks) > 0: |
| 759 | for callback in all_callbacks: |
| 760 | # check if callback is a string - e.g. "lago", "openmeter" |
| 761 | if isinstance(callback, str): |
| 762 | callback = litellm.litellm_core_utils.litellm_logging._init_custom_logger_compatible_class( # type: ignore |
| 763 | callback, |
| 764 | internal_usage_cache=None, |
| 765 | llm_router=None, # type: ignore |
| 766 | ) |
| 767 | if callback is None or any( |
| 768 | isinstance(cb, type(callback)) for cb in litellm._async_success_callback |
| 769 | ): # don't double add a callback |
| 770 | continue |
| 771 | if callback not in litellm.input_callback: |
| 772 | litellm.input_callback.append(callback) # type: ignore |
| 773 | if callback not in litellm.success_callback: |
| 774 | litellm.logging_callback_manager.add_litellm_success_callback(callback) # type: ignore |
| 775 | if callback not in litellm.failure_callback: |
| 776 | litellm.logging_callback_manager.add_litellm_failure_callback(callback) # type: ignore |
| 777 | if callback not in litellm._async_success_callback: |
| 778 | litellm.logging_callback_manager.add_litellm_async_success_callback(callback) # type: ignore |
| 779 | if callback not in litellm._async_failure_callback: |
| 780 | litellm.logging_callback_manager.add_litellm_async_failure_callback(callback) # type: ignore |
| 781 | print_verbose(f"Initialized litellm callbacks, Async Success Callbacks: {litellm._async_success_callback}") |
| 782 | |
| 783 | if ( |
| 784 | len(litellm.input_callback) > 0 or len(litellm.success_callback) > 0 or len(litellm.failure_callback) > 0 |
| 785 | ) and len( |
| 786 | callback_list # type: ignore |
| 787 | ) == 0: # type: ignore |