From 77060fcbe6c6a0e37845b28ae0975f27c1fe63fd Mon Sep 17 00:00:00 2001 From: Muhammad Osama Amin Date: Sun, 18 Oct 2026 14:23:08 +0000 Subject: [PATCH] refactor(langsmith): annotate metadata parameters as Mapping[str, object] --- litellm/integrations/langsmith.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/litellm/integrations/langsmith.py b/litellm/integrations/langsmith.py index 9108f809471..aa3cd7f491d 100644 --- a/litellm/integrations/langsmith.py +++ b/litellm/integrations/langsmith.py @@ -7,6 +7,7 @@ import random import traceback import types from datetime import datetime, timezone +from collections.abc import Mapping from typing import Any, Final import httpx @@ -138,22 +139,18 @@ class LangsmithLogger(CustomBatchLogger): "dotted_order": metadata.get("dotted_order", None), } - def _redact_metadata(self, metadata: dict[str, object]) -> dict[str, object]: + def _redact_metadata(self, metadata: Mapping[str, object]) -> dict[str, object]: # helper is shallow; also scrub nested requester_metadata and metadata # since LangSmith forwards both dicts into the run - redacted: Final[dict[str, object]] = redact_user_api_key_info( - metadata=dict(metadata) - ) # mutable-ok: scrubbed run metadata copy + redacted: Final = redact_user_api_key_info(metadata=dict(metadata)) for nested_key in ("requester_metadata", "metadata"): nested: object = redacted.get(nested_key) if isinstance(nested, dict): redacted[nested_key] = redact_user_api_key_info(metadata=nested) return redacted - def _build_extra_metadata( - self, metadata: dict[str, object] - ) -> dict[str, object]: # mutable-ok: LangSmith extra metadata dict - extra_metadata: Final[dict[str, object]] = dict(metadata) # mutable-ok: local copy mutated before redaction + def _build_extra_metadata(self, metadata: Mapping[str, object]) -> dict[str, object]: + extra_metadata: Final = dict(metadata) requester_metadata: Final[object] = extra_metadata.get("requester_metadata") if isinstance(requester_metadata, dict): for key in ("session_id", "thread_id", "conversation_id"):