mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-12 23:01:41 +00:00
* fix(guardrails): stop re-initializing DB guardrails on every poll
InMemoryGuardrailHandler._has_guardrail_params_changed compared the
in-memory LitellmParams against the raw dict loaded from the DB. The
in-memory side carries every field default and coerces enums via
model_dump(), while the DB side only holds the keys originally stored,
so the two shapes never compared equal and the guardrail was rebuilt on
every poll cycle.
Each rebuild created a fresh instance, but delete_in_memory_guardrail
only removed the old callback from litellm.callbacks. Request handling
promotes guardrail callbacks into the success/failure/async lists, so
the previous instance stayed referenced there and instances accumulated.
Normalize both sides through LitellmParams(...).model_dump() before
diffing, and purge the callback from every callback list on delete.
* refactor(guardrails): narrow params-normalization fallback to ValidationError
The comparison normalizer caught a bare Exception and silently fell back
to the raw dict, which hid the cause and quietly degraded the affected
guardrail back to re-initializing on every poll. Catch only the
ValidationError that LitellmParams construction can raise, log a warning
so the offending row is diagnosable, and let any other error surface
instead of being swallowed.
* refactor(callbacks): add remove_callback_from_all_lists helper to manager
Move the knowledge of which callback lists a callback can be promoted
into out of the guardrail registry and into LoggingCallbackManager, where
the rest of the callback-list bookkeeping already lives. delete_in_memory_guardrail
now delegates to the new helper instead of iterating the lists itself.
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| audio_utils | ||
| llm_cost_calc | ||
| llm_response_utils | ||
| prompt_templates | ||
| specialty_caches | ||
| tokenizers | ||
| api_route_to_call_types.py | ||
| app_crypto.py | ||
| asyncify.py | ||
| cached_imports.py | ||
| cli_token_utils.py | ||
| cloud_storage_security.py | ||
| completion_timeout.py | ||
| core_helpers.py | ||
| coroutine_checker.py | ||
| credential_accessor.py | ||
| custom_logger_registry.py | ||
| dd_tracing.py | ||
| default_encoding.py | ||
| dot_notation_indexing.py | ||
| duration_parser.py | ||
| env_utils.py | ||
| exception_mapping_utils.py | ||
| fallback_utils.py | ||
| get_blog_posts.py | ||
| get_litellm_params.py | ||
| get_llm_provider_logic.py | ||
| get_model_cost_map.py | ||
| get_provider_specific_headers.py | ||
| get_supported_openai_params.py | ||
| health_check_helpers.py | ||
| health_check_utils.py | ||
| initialize_dynamic_callback_params.py | ||
| json_validation_rule.py | ||
| litellm_logging.py | ||
| llm_request_utils.py | ||
| logging_callback_manager.py | ||
| logging_utils.py | ||
| logging_worker.py | ||
| mock_functions.py | ||
| model_param_helper.py | ||
| model_response_utils.py | ||
| README.md | ||
| realtime_streaming.py | ||
| redact_messages.py | ||
| response_header_helpers.py | ||
| rules.py | ||
| safe_json_dumps.py | ||
| safe_json_loads.py | ||
| secret_redaction.py | ||
| sensitive_data_masker.py | ||
| streaming_chunk_builder_utils.py | ||
| streaming_handler.py | ||
| thread_pool_executor.py | ||
| token_counter.py | ||
| url_utils.py | ||
Folder Contents
This folder contains general-purpose utilities that are used in multiple places in the codebase.
Core files:
streaming_handler.py: The core streaming logic + streaming related helper utilscore_helpers.py: code used intypes/- e.g.map_finish_reason.exception_mapping_utils.py: utils for mapping exceptions to openai-compatible error types.default_encoding.py: code for loading the default encoding (tiktoken)get_llm_provider_logic.py: code for inferring the LLM provider from a given model name.duration_parser.py: code for parsing durations - e.g. "1d", "1mo", "10s"api_route_to_call_types.py: mapping of API routes to their corresponding CallTypes (e.g.,/chat/completions-> [acompletion, completion])