mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-28 01:32:17 +00:00
Fixes #40563. Both GeminiRealtimeConfig and VertexAIRealtimeConfig hardcoded the pcm16 input MIME type to audio/pcm;rate=24000. 24kHz is the Live API's *output* rate. Its documented native *input* rate is 16kHz, and the MIME rate is the only channel the caller has for telling the server what it is actually sending: "Audio output always uses a sample rate of 24kHz. Input audio is natively 16kHz ... To convey the sample rate of input audio, set the MIME type of each audio-containing Blob to a value like audio/pcm;rate=16000." https://ai.google.dev/gemini-api/docs/live-api/capabilities Because the server resamples against whatever the MIME type claims, a client streaming correct 16kHz PCM16 had it relabeled as 24kHz, which corrupts it server-side and degrades transcription with no error anywhere. Three changes: 1. The rate now comes from what the client declared. session.update carries it in the GA shape at audio.input.format.rate, so that value is recorded and used for every subsequent blob. The rate-less beta shape (input_audio_format is a bare codec name), a missing or malformed rate, and a bool (an int subclass, so excluded explicitly) all leave the default alone. 2. That default is now 16000, the documented native input rate, instead of the output rate. 3. VertexAIRealtimeConfig's byte-identical copy of get_audio_mime_type is deleted so it inherits the parent. The duplicate is why patching the parent alone had no effect on the Vertex path, which is the trap the report calls out; a test now asserts the override stays gone. The billed audio duration reads the same rate, so the label and the duration estimate cannot disagree. PCM16_INPUT_AUDIO_BYTES_PER_SECOND (48000, that is 24kHz x 2 bytes) is replaced by the declared rate x PCM16_BYTES_PER_SAMPLE. This does move the estimate for a transcribe-live caller who declares no rate: the same byte count is now billed as 1.5x the duration, because 16kHz audio takes 1.5x as long to send as the 24kHz the old constant assumed. The two existing estimate tests are updated for that, and a new test covers a caller that declares 24kHz and still bills at the old numbers. 14 tests added or updated, each verified to fail against unpatched sources. tests/test_litellm/llms/{gemini,vertex_ai}/realtime: 97 passed. |
||
|---|---|---|
| .. | ||
| _support | ||
| agent_tests | ||
| audio_tests | ||
| base_sdk_tests | ||
| basic_proxy_startup_tests | ||
| batches_tests | ||
| benchmarks | ||
| code_coverage_tests | ||
| documentation_tests | ||
| e2e | ||
| enterprise | ||
| guardrails_tests | ||
| image_gen_tests | ||
| integration | ||
| litellm-proxy-extras | ||
| litellm_utils_tests | ||
| llm_responses_api_testing | ||
| llm_translation | ||
| load_tests | ||
| local_testing | ||
| logging_callback_tests | ||
| mcp_tests | ||
| multi_instance_e2e_tests | ||
| ocr_tests | ||
| openai_endpoints_tests | ||
| otel_tests | ||
| pass_through_tests | ||
| pass_through_unit_tests | ||
| proxy_admin_ui_tests | ||
| proxy_behavior | ||
| proxy_e2e_anthropic_messages_tests | ||
| proxy_migration_tests | ||
| proxy_security_tests | ||
| proxy_unit_tests | ||
| router_unit_tests | ||
| rust-python-harness | ||
| search_tests | ||
| spend_tracking_tests | ||
| store_model_in_db_tests | ||
| test_gateway | ||
| test_litellm | ||
| test_litellm_rust | ||
| unified_google_tests | ||
| unit | ||
| vector_store_tests | ||
| windows_tests | ||
| __init__.py | ||
| _fake_openai_endpoint_server.py | ||
| _flush_vcr_cache.py | ||
| _live_test_helpers.py | ||
| _openai_record_replay_proxy.py | ||
| _process_helpers.py | ||
| _vcr_conftest_common.py | ||
| _vcr_redis_persister.py | ||
| _wait_helpers.py | ||
| _ws_vcr.py | ||
| AGENTS.md | ||
| capturing_transport.py | ||
| eval_swe_bench.py | ||
| fake_openai_endpoint.py | ||
| gettysburg.wav | ||
| large_text.py | ||
| openai_batch_completions.jsonl | ||
| pyrightconfig.json | ||
| README.MD | ||
| test_anthropic_compaction_usage.py | ||
| test_budget_management.py | ||
| test_callbacks_on_proxy.py | ||
| test_debug_warning.py | ||
| test_default_encoding_non_root.py | ||
| test_end_users.py | ||
| test_fallbacks.py | ||
| test_gpt5_azure_temperature_support.py | ||
| test_health.py | ||
| test_keys.py | ||
| test_litellm_proxy_responses_config.py | ||
| test_logging.conf | ||
| test_models.py | ||
| test_new_vector_store_endpoints.py | ||
| test_openai_endpoints.py | ||
| test_organizations.py | ||
| test_otel_thread_leak.py | ||
| test_presidio_latency.py | ||
| test_proxy_server_non_root.py | ||
| test_ratelimit.py | ||
| test_resource_cleanup.py | ||
| test_rust_python_harness.py | ||
| test_service_logger_otel.py | ||
| test_spend_logs.py | ||
| test_team.py | ||
| test_team_logging.py | ||
| test_team_members.py | ||
| test_users.py | ||
In total litellm runs 1000+ tests
[02/20/2025] Update:
To make it easier to contribute and map what behavior is tested,
we've started mapping the litellm directory in tests/test_litellm
This folder can only run mock tests.