From d369671fcb95c6d446dd6d558d77c097162ba55b Mon Sep 17 00:00:00 2001 From: shivam Date: Fri, 11 Sep 2026 02:56:50 +0000 Subject: [PATCH] fix(otel): remove unchecked guardrail cost cast Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- litellm/litellm_core_utils/llm_cost_calc/guardrail_cost.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/litellm/litellm_core_utils/llm_cost_calc/guardrail_cost.py b/litellm/litellm_core_utils/llm_cost_calc/guardrail_cost.py index aa05a271ece..bf903ff1e2c 100644 --- a/litellm/litellm_core_utils/llm_cost_calc/guardrail_cost.py +++ b/litellm/litellm_core_utils/llm_cost_calc/guardrail_cost.py @@ -1,6 +1,6 @@ import math from collections.abc import Mapping -from typing import Annotated, Final, cast +from typing import Annotated, Final from pydantic import BaseModel, ConfigDict, Field, TypeAdapter, ValidationError @@ -126,6 +126,7 @@ class GuardrailProviderCostEntry(BaseModel): _GUARDRAIL_PROVIDER_COST_ENTRY_ADAPTER: Final[TypeAdapter[GuardrailProviderCostEntry]] = TypeAdapter( GuardrailProviderCostEntry ) +_GUARDRAIL_INFORMATION_ENTRIES_ADAPTER: Final[TypeAdapter[tuple[object, ...]]] = TypeAdapter(tuple[object, ...]) def _prompt_shield_entry_cost(raw: object) -> float | None: @@ -150,7 +151,7 @@ def prompt_shield_guardrail_cost(guardrail_information: object) -> float | None: if guardrail_information is None: return None entries: Final[tuple[object, ...]] = ( - tuple(cast("list[object] | tuple[object, ...]", guardrail_information)) + _GUARDRAIL_INFORMATION_ENTRIES_ADAPTER.validate_python(guardrail_information) if isinstance(guardrail_information, (list, tuple)) else (guardrail_information,) )