From 34383ce97b60b13ac20caf3f528984c03531fe22 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Sat, 10 Jan 2026 15:45:37 -0800 Subject: [PATCH] fix route_request --- litellm/proxy/route_llm_request.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/litellm/proxy/route_llm_request.py b/litellm/proxy/route_llm_request.py index 5d2e13a78b..4b3a65737d 100644 --- a/litellm/proxy/route_llm_request.py +++ b/litellm/proxy/route_llm_request.py @@ -181,24 +181,26 @@ async def route_request( else: return getattr(litellm, f"{route_type}")(**data) - elif "user_config" in data: - router_config = data.pop("user_config") - user_router = litellm.Router(**router_config) - ret_val = getattr(user_router, f"{route_type}")(**data) - user_router.discard() - return ret_val - elif ( route_type == "acompletion" and data.get("model", "") is not None and "," in data.get("model", "") and llm_router is not None ): + # Handle batch completions with comma-separated models BEFORE user_config check + # This ensures batch completion logic is applied even when user_config is set if data.get("fastest_response", False): return llm_router.abatch_completion_fastest_response(**data) else: models = [model.strip() for model in data.pop("model").split(",")] return llm_router.abatch_completion(models=models, **data) + + elif "user_config" in data: + router_config = data.pop("user_config") + user_router = litellm.Router(**router_config) + ret_val = getattr(user_router, f"{route_type}")(**data) + user_router.discard() + return ret_val elif llm_router is not None: # Skip model-based routing for container operations if route_type in [