mod credentials; mod diagnostics; mod errors; mod http; mod marshal; mod python_settings; mod routes; mod token_counter; #[pymodule(gil_used = true)] mod _native { #[cfg(feature = "panic-test")] #[pymodule_export] use crate::diagnostics::_panic_for_test; #[pymodule_export] use crate::diagnostics::{gil_stats, process_state_started, reserve_process_for_forking}; #[pymodule_export] use crate::errors::{RustBridgeDeclined, RustUpstreamError}; #[pymodule_export] use crate::routes::audio_transcription::{atranscription, transcription}; #[pymodule_export] use crate::routes::chat_completions::{ achat_completions, chat_completions, chat_completions_decline, }; #[pymodule_export] use crate::routes::messages::{amessages, messages}; #[pymodule_export] use crate::routes::ocr::{aocr, ocr}; #[pymodule_export] use crate::routes::responses::ResponsesWebSocketConnection; #[pymodule_export] use crate::token_counter::TokenCounter; #[pymodule_export] use litellm_host_python::{ForkedAfterNativeRuntimeStarted, ProcessReservedForForking}; } use pyo3::prelude::*; #[cfg(test)] pub(crate) fn native_module(py: Python<'_>) -> Bound<'_, PyModule> { pyo3::wrap_pymodule!(_native)(py).into_bound(py) } #[cfg(test)] mod tests { use super::*; #[test] fn module_registration_preserves_the_public_surface() { Python::initialize(); Python::attach(|py| { let mut expected = vec![ "RustBridgeDeclined", "RustUpstreamError", "ForkedAfterNativeRuntimeStarted", "ProcessReservedForForking", "ocr", "aocr", "transcription", "atranscription", "messages", "amessages", "chat_completions_decline", "chat_completions", "achat_completions", "ResponsesWebSocketConnection", "TokenCounter", "gil_stats", "process_state_started", "reserve_process_for_forking", ]; expected.sort_unstable(); let mut public_names: Vec = native_module(py) .dict() .keys() .extract::>() .expect("module names should be strings") .into_iter() .filter(|name| !name.starts_with('_')) .collect(); public_names.sort_unstable(); assert_eq!(public_names, expected); }); } }