diff --git a/litellm/llms/oci/chat/transformation.py b/litellm/llms/oci/chat/transformation.py index 62104e921a4..4ee935c6782 100644 --- a/litellm/llms/oci/chat/transformation.py +++ b/litellm/llms/oci/chat/transformation.py @@ -213,7 +213,7 @@ class OCIChatConfig(BaseConfig): self.openai_to_oci_generic_param_map = { "stream": "isStream", "max_tokens": "maxTokens", - "max_completion_tokens": "maxTokens", + "max_completion_tokens": "maxCompletionTokens", "temperature": "temperature", "tools": "tools", "frequency_penalty": "frequencyPenalty", diff --git a/litellm/types/llms/oci.py b/litellm/types/llms/oci.py index e041810158a..81237eef67f 100644 --- a/litellm/types/llms/oci.py +++ b/litellm/types/llms/oci.py @@ -96,6 +96,7 @@ class OCIChatRequestPayload(BaseModel): isStream: bool = False numGenerations: Optional[int] = None maxTokens: Optional[int] = None + maxCompletionTokens: Optional[int] = None temperature: Optional[float] = None topP: Optional[float] = None stop: Optional[List[str]] = None diff --git a/tests/test_litellm/llms/oci/chat/test_oci_chat_transformation.py b/tests/test_litellm/llms/oci/chat/test_oci_chat_transformation.py index 2a5cc6b8e3d..7d7df989841 100644 --- a/tests/test_litellm/llms/oci/chat/test_oci_chat_transformation.py +++ b/tests/test_litellm/llms/oci/chat/test_oci_chat_transformation.py @@ -765,3 +765,43 @@ class TestOCISignerSupport: ) assert wrapper.path_url == "/api/v1/chat" + + def test_max_completion_tokens_maps_to_maxCompletionTokens(self): + """ + max_completion_tokens should map to maxCompletionTokens, not maxTokens. + + Regression test for https://github.com/BerriAI/litellm/issues/27429 + """ + config = OCIChatConfig() + optional_params = { + "oci_compartment_id": TEST_COMPARTMENT_ID, + "max_completion_tokens": 100, + } + transformed_request = config.transform_request( + model=TEST_MODEL_NAME, + messages=TEST_MESSAGES, # type: ignore + optional_params=optional_params, + litellm_params={}, + headers={}, + ) + chat_request = transformed_request["chatRequest"] + assert chat_request.get("maxCompletionTokens") == 100 + assert "maxTokens" not in chat_request + + def test_max_tokens_maps_to_maxTokens(self): + """max_tokens (legacy param) should still map to maxTokens.""" + config = OCIChatConfig() + optional_params = { + "oci_compartment_id": TEST_COMPARTMENT_ID, + "max_tokens": 200, + } + transformed_request = config.transform_request( + model=TEST_MODEL_NAME, + messages=TEST_MESSAGES, # type: ignore + optional_params=optional_params, + litellm_params={}, + headers={}, + ) + chat_request = transformed_request["chatRequest"] + assert chat_request.get("maxTokens") == 200 + assert "maxCompletionTokens" not in chat_request