mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
test: roll back runtime model registrations between tests
Since #35491, register_model records every registration in the process-global _runtime_registered_model_cost ledger, and every cost map swap replays that ledger on top of the freshly adopted map. Under pytest-xdist, any earlier test in the same worker that registered gpt-3.5-turbo leaked into TestPriceDataReloadIntegration::test_distributed_reload_check_function: the replay ballooned its sparse mocked entry into a full ModelInfo dict and failed the exact-equality assert, breaking the proxy-infra shard whenever loadscope happened to co-schedule such a test first (reruns cannot help since the pollution is process-wide) The autouse isolate_litellm_state fixture now snapshots the ledger before each test and restores it in place on teardown, so no test's registrations outlive it. A regression pair in test_conftest_isolation.py asserts the rollback
This commit is contained in:
parent
d26ef670e2
commit
0991692e68
2 changed files with 22 additions and 0 deletions
|
|
@ -19,6 +19,7 @@ sys.path.insert(
|
|||
import asyncio
|
||||
|
||||
import litellm
|
||||
from litellm import utils as litellm_utils_module
|
||||
from litellm._logging import ALL_LOGGERS
|
||||
from litellm.litellm_core_utils.prompt_templates import (
|
||||
image_handling as image_handling_module,
|
||||
|
|
@ -238,6 +239,11 @@ def isolate_litellm_state():
|
|||
if hasattr(litellm, _attr):
|
||||
original_state[_attr] = getattr(litellm, _attr)
|
||||
|
||||
original_runtime_registered_model_cost = {
|
||||
model_key: dict(model_value)
|
||||
for model_key, model_value in litellm_utils_module._runtime_registered_model_cost.items()
|
||||
}
|
||||
|
||||
# Store LiteLLM logger state. Some tests reconfigure handlers/propagation for
|
||||
# JSON logging and do not restore them, which breaks later caplog-based tests.
|
||||
logger_state = {}
|
||||
|
|
@ -304,6 +310,9 @@ def isolate_litellm_state():
|
|||
if hasattr(litellm, attr_name):
|
||||
setattr(litellm, attr_name, original_value)
|
||||
|
||||
litellm_utils_module._runtime_registered_model_cost.clear()
|
||||
litellm_utils_module._runtime_registered_model_cost.update(original_runtime_registered_model_cost)
|
||||
|
||||
# Restore logger configuration mutated by logging-focused tests.
|
||||
for logger in ALL_LOGGERS:
|
||||
original_logger_state = logger_state.get(logger.name)
|
||||
|
|
|
|||
13
tests/test_litellm/test_conftest_isolation.py
Normal file
13
tests/test_litellm/test_conftest_isolation.py
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import litellm
|
||||
from litellm import utils as litellm_utils_module
|
||||
|
||||
CANARY_MODEL = "conftest-isolation-canary-model"
|
||||
|
||||
|
||||
def test_register_model_ledger_entry_is_scoped_to_this_test():
|
||||
litellm.register_model({CANARY_MODEL: {"litellm_provider": "openai", "input_cost_per_token": 0.001}})
|
||||
assert CANARY_MODEL in litellm_utils_module._runtime_registered_model_cost
|
||||
|
||||
|
||||
def test_register_model_ledger_entry_was_rolled_back():
|
||||
assert CANARY_MODEL not in litellm_utils_module._runtime_registered_model_cost
|
||||
Loading…
Add table
Reference in a new issue