litellm/litellm/litellm_core_utils
Yassin Kortam 9683808366
fix(guardrails): stop re-initializing DB guardrails on every poll (#30542)
* 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 9fa74ad8b4)
2026-06-20 11:49:30 -07:00
..
audio_utils chore: reject bare str at file-input sinks to prevent local-file read (#27762) 2026-05-12 16:40:07 -07:00
llm_cost_calc fix: completion_cost AttributeError on streaming Anthropic web_search responses (#26153) (#27346) 2026-06-15 18:22:38 -07:00
llm_response_utils Litellm oss staging (#29492) 2026-06-02 08:48:10 -07:00
prompt_templates Litellm oss staging 030626 (#29578) 2026-06-03 11:01:51 -07:00
specialty_caches build(deps-dev): bump black to 26.3.1 and apply formatting (#28525) 2026-05-21 17:24:18 -07:00
tokenizers Code Quality Improvement - remove tokenizers/ from /llms (#7163) 2024-12-10 23:50:15 -08:00
api_route_to_call_types.py Agent Guardrails - on streaming output (#21206) 2026-02-14 11:36:52 -08:00
app_crypto.py style: run black formatter on entire codebase 2026-03-11 17:07:57 -03:00
asyncify.py (core sdk fix) - fix fallbacks stuck in infinite loop (#7751) 2025-01-13 19:34:34 -08:00
cached_imports.py style: run black formatter on entire codebase 2026-03-11 17:07:57 -03:00
cli_token_utils.py fix: scope CLI stored token to base_url to prevent cross-domain credential leakage (#26945) 2026-05-01 12:11:32 -07:00
cloud_storage_security.py trust only server legacy file flag 2026-05-01 18:32:26 -07:00
completion_timeout.py Litellm ishaan april15 2 (#25828) 2026-04-15 18:42:23 -07:00
core_helpers.py Merge pull request #26283 from BerriAI/litellm_internal_staging 2026-04-22 19:55:27 -03:00
coroutine_checker.py style: run black formatter on entire codebase 2026-03-11 17:07:57 -03:00
credential_accessor.py fix(router.py): support reusable credentials via passthrough router (#9758) 2025-04-04 18:40:14 -07:00
custom_logger_registry.py Add Azure Sentinel audit log support (#27280) 2026-05-06 15:50:06 -07:00
dd_tracing.py _add_dd_apm_tags_for_litellm_call_id (#22219) 2026-02-26 16:42:23 -08:00
default_encoding.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
dot_notation_indexing.py style: run black formatter on entire codebase 2026-03-11 17:07:57 -03:00
duration_parser.py Reapply "feat: add model_cost aliases expansion support" 2026-03-12 13:36:57 -03:00
env_utils.py fix(callbacks): allow MAX_CALLBACKS override via env var (#20781) 2026-02-09 12:11:32 -08:00
exception_mapping_utils.py fix: 400 on Anthropic context overflow; seed identity on failed auth (#29848) 2026-06-06 14:57:41 -07:00
fallback_utils.py Litellm OSS Staging 010626 (#29422) 2026-06-01 21:42:51 -07:00
get_blog_posts.py fix: remove unused Any import from get_blog_posts 2026-03-16 16:23:06 -07:00
get_litellm_params.py feat(openai): apply regional-processing cost uplift for EU/US data residency (#28626) 2026-05-25 20:36:14 -07:00
get_llm_provider_logic.py Litellm oss staging 050626 (#29774) 2026-06-05 13:51:51 -07:00
get_model_cost_map.py style: run black formatter on 52 non-enterprise files 2026-03-12 14:23:50 -03:00
get_provider_specific_headers.py [Fix] Forward anthropic-beta headers to Bedrock, VertexAI (#15700) 2025-10-18 16:26:32 -07:00
get_supported_openai_params.py Litellm oss staging 050626 (#29774) 2026-06-05 13:51:51 -07:00
health_check_helpers.py add docs and formatting 2026-02-28 14:08:09 +05:30
health_check_utils.py (Refactor) - Re use litellm.completion/litellm.embedding etc for health checks (#7455) 2024-12-28 18:38:54 -08:00
initialize_dynamic_callback_params.py feat(datadog): add team-scoped Datadog callback support (#29947) 2026-06-15 18:22:38 -07:00
json_validation_rule.py style: run black formatter on entire codebase 2026-03-11 17:07:57 -03:00
litellm_logging.py feat(datadog): add team-scoped Datadog callback support (#29947) 2026-06-15 18:22:38 -07:00
llm_request_utils.py style: reformat to pass ci 2026-04-30 17:01:44 -07:00
logging_callback_manager.py fix(guardrails): stop re-initializing DB guardrails on every poll (#30542) 2026-06-20 11:49:30 -07:00
logging_utils.py fix(types): resolve MyPy assignment type errors in logging_utils and vertex transformation 2026-02-20 13:46:51 -03:00
logging_worker.py test: stabilize batch VCR coverage and stop live upload/network leaks (#29477) 2026-06-02 16:11:52 -07:00
mock_functions.py Support returning virtual key in custom auth + Handle provider-specific optional params for embedding calls (#11346) 2025-06-03 07:24:13 -07:00
model_param_helper.py style: black format model_param_helper.py 2026-04-15 18:18:45 -07:00
model_response_utils.py style: run black formatter on entire codebase 2026-03-11 17:07:57 -03:00
README.md Guardrails API - add streaming support (#17400) 2025-12-02 22:52:09 -08:00
realtime_streaming.py fix(gemini-realtime): use GA event names for Pipecat 1.3.x compatibility (#29662) 2026-06-04 08:03:24 -07:00
redact_messages.py fix(logging): redact standard logging choice metadata 2026-04-30 00:35:29 -07:00
response_header_helpers.py fix(utils.py): guarantee openai-compatible headers always exist in response 2024-09-28 21:08:15 -07:00
rules.py fix: remove slow string operation (#14955) 2025-09-26 13:25:59 -07:00
safe_json_dumps.py fix(proxy): strip NUL bytes from spend log payloads to prevent PostgreSQL 22P05 (#29515) 2026-06-02 12:07:11 -07:00
safe_json_loads.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
secret_redaction.py Litellm oss staging (#29492) 2026-06-02 08:48:10 -07:00
sensitive_data_masker.py chore(ci): merge dev branch (#28657) 2026-05-25 13:48:47 -07:00
streaming_chunk_builder_utils.py fix: completion_cost AttributeError on streaming Anthropic web_search responses (#26153) (#27346) 2026-06-15 18:22:38 -07:00
streaming_handler.py Litellm oss staging 040626 (#29671) 2026-06-04 11:07:20 -07:00
thread_pool_executor.py (Fixes) OpenAI Streaming Token Counting + Fixes usage track when litellm.turn_off_message_logging=True (#8156) 2025-01-31 15:06:37 -08:00
token_counter.py feat(context_management): compact_20260112 polyfill for non-Anthropic providers (#28868) 2026-05-30 09:20:05 -07:00
url_utils.py Merge pull request #26861 from BerriAI/litellm_fix_scim_virtual_key_deactivation 2026-05-04 19:03:55 -07:00

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 utils
  • core_helpers.py: code used in types/ - 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])