From d5753f2d900746c034a61c1b8b0468a842b3b740 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 04:08:20 +0000 Subject: [PATCH] refactor(rust): simplify debug sink construction Co-Authored-By: Ishaan Jaffer <155045088+ishaan-berri@users.noreply.github.com> --- litellm-rust/crates/ai-gateway/src/main.rs | 9 ++++----- litellm-rust/crates/core/CLAUDE.md | 5 +++-- litellm-rust/crates/python-bridge/src/lib.rs | 6 +++--- litellm-rust/crates/python-bridge/src/logging.rs | 7 ------- 4 files changed, 10 insertions(+), 17 deletions(-) delete mode 100644 litellm-rust/crates/python-bridge/src/logging.rs diff --git a/litellm-rust/crates/ai-gateway/src/main.rs b/litellm-rust/crates/ai-gateway/src/main.rs index 6ddb5c21646..eba363ce1a2 100644 --- a/litellm-rust/crates/ai-gateway/src/main.rs +++ b/litellm-rust/crates/ai-gateway/src/main.rs @@ -68,16 +68,15 @@ async fn main() { ); } + let debug_logging = std::env::var("LITELLM_LOG") + .ok() + .is_some_and(|value| value.eq_ignore_ascii_case("DEBUG")); let state = AppState { router, master_key, loggers: Arc::new(loggers), realtime_pool, - logging_sink: std::env::var("LITELLM_LOG") - .ok() - .is_some_and(|value| value.eq_ignore_ascii_case("DEBUG")) - .then(|| hook(true)) - .flatten(), + logging_sink: hook(debug_logging), }; let host = std::env::var("HOST").unwrap_or_else(|_| DEFAULT_HOST.to_string()); diff --git a/litellm-rust/crates/core/CLAUDE.md b/litellm-rust/crates/core/CLAUDE.md index 7e0ad6f4d90..4dc1349c7ed 100644 --- a/litellm-rust/crates/core/CLAUDE.md +++ b/litellm-rust/crates/core/CLAUDE.md @@ -26,8 +26,9 @@ Not allowed: - Filesystem, database, or cache access. - Config file reading or rollout state; the host resolves those and passes them in. Env reads are limited to credential fallback in a route's `prepare.rs`. -- Logging callbacks, tracing spans, spend writes, or customer callbacks. -- The logging module owns the debug sink, renderer env vars, and stderr output. +- Logging callbacks, tracing spans, spend writes, or customer callbacks, except + the `logging` module's debug sink, which owns the renderer env vars and stderr + output. - Provider-specific branching that belongs in `providers`. - Panics for user/provider-controlled input. diff --git a/litellm-rust/crates/python-bridge/src/lib.rs b/litellm-rust/crates/python-bridge/src/lib.rs index d90797a0f6b..e1a7d1c402f 100644 --- a/litellm-rust/crates/python-bridge/src/lib.rs +++ b/litellm-rust/crates/python-bridge/src/lib.rs @@ -7,6 +7,7 @@ use litellm_ai_gateway::io::audio_transcription::{ use litellm_ai_gateway::io::ocr::{OcrRequest, ocr as run_ocr}; use litellm_ai_gateway::io::responses_ws::ResponsesWebSocketConnection as RustResponsesWebSocketConnection; use litellm_core::error::CoreError; +use litellm_core::logging::console::hook; use litellm_core::messages::messages as run_messages; use litellm_core::messages::types::{AnthropicMessagesResponse, MessagesRequest}; use pyo3::exceptions::{PyRuntimeError, PyValueError}; @@ -15,7 +16,6 @@ use pyo3::types::{PyAny, PyDict}; use serde_json::{Map, Value}; mod gil; -mod logging; type MarshaledOcrInputs = ( Value, @@ -393,7 +393,7 @@ fn messages( extra_headers, timeout, litellm_call_id: None, - logging_sink: logging::hook(debug), + logging_sink: hook(debug), })) }); @@ -430,7 +430,7 @@ fn amessages( extra_headers, timeout, litellm_call_id: None, - logging_sink: logging::hook(debug), + logging_sink: hook(debug), }) .await .map_err(core_error_to_pyerr)?; diff --git a/litellm-rust/crates/python-bridge/src/logging.rs b/litellm-rust/crates/python-bridge/src/logging.rs deleted file mode 100644 index 92460f451e6..00000000000 --- a/litellm-rust/crates/python-bridge/src/logging.rs +++ /dev/null @@ -1,7 +0,0 @@ -use std::sync::Arc; - -use litellm_core::logging::{LogSink, console::hook as console_hook}; - -pub fn hook(enabled: bool) -> Option> { - console_hook(enabled) -}