litellm/tests/local_testing/test_get_optional_params_embeddings.py
ryan-crabbe-berri e9d40a8f73 test: enforce F811 so a duplicate definition cannot silently replace the first
A name bound twice keeps only the second binding. In `tests/` that is nearly
always a repeated import, harmless but misleading, and the same rule is what
catches the cases that are not harmless: a local that shadows an import the
module still calls, and a second `def test_x` that quietly replaces the first.

311 of the 344 sites were repeated imports and came out with ruff's own fix.
The remaining 33 needed a decision. Four modules imported a name they never
used because a local definition below already shadowed it. Two comprehensions
bound `call` over `unittest.mock.call`, which those modules import and use.
One test rebound the two module handles its nested reload closure had captured.
One class attribute shadowed an unused `status` import.

The load-test fixtures move to a conftest, which is how pytest is meant to share
them, so the test module no longer imports three fixture names it never calls.
The nine `prisma_client` parameters keep a narrow `noqa`: pytest resolves that
fixture by name before the body runs, so the parameter never shadows anything.
2026-08-21 12:06:19 -07:00

165 lines
5.4 KiB
Python

# What is this?
## This tests the `get_optional_params_embeddings` function
import sys, os
import traceback
from dotenv import load_dotenv
load_dotenv()
import io
sys.path.insert(
0, os.path.abspath("../..")
) # Adds the parent directory to the system path
import pytest
import litellm
from litellm import embedding
from litellm.utils import get_optional_params_embeddings, get_llm_provider
def test_vertex_projects():
litellm.drop_params = True
model, custom_llm_provider, _, _ = get_llm_provider(
model="vertex_ai/textembedding-gecko"
)
optional_params = get_optional_params_embeddings(
model=model,
user="test-litellm-user-5",
dimensions=None,
encoding_format="base64",
custom_llm_provider=custom_llm_provider,
**{
"vertex_ai_project": "my-test-project",
"vertex_ai_location": "us-east-1",
},
)
print(f"received optional_params: {optional_params}")
assert "vertex_ai_project" in optional_params
assert "vertex_ai_location" in optional_params
# test_vertex_projects()
def test_bedrock_embed_v2_regular():
model, custom_llm_provider, _, _ = get_llm_provider(
model="bedrock/amazon.titan-embed-text-v2:0"
)
optional_params = get_optional_params_embeddings(
model=model,
dimensions=512,
custom_llm_provider=custom_llm_provider,
)
print(f"received optional_params: {optional_params}")
assert optional_params == {"dimensions": 512}
def test_bedrock_embed_v2_with_drop_params():
litellm.drop_params = True
model, custom_llm_provider, _, _ = get_llm_provider(
model="bedrock/amazon.titan-embed-text-v2:0"
)
optional_params = get_optional_params_embeddings(
model=model,
dimensions=512,
user="test-litellm-user-5",
encoding_format="base64",
custom_llm_provider=custom_llm_provider,
)
print(f"received optional_params: {optional_params}")
assert optional_params == {"dimensions": 512, "embeddingTypes": ["binary"]}
def test_openai_non_text_embedding_3_with_allowed_openai_params():
"""
Test that `dimensions` is allowed for non-text-embedding-3 OpenAI models
when `allowed_openai_params=["dimensions"]` is passed. Without this flag,
an UnsupportedParamsError would be raised.
"""
model, custom_llm_provider, _, _ = get_llm_provider(
model="openai/nvidia/llama-3.2-nv-embedqa-1b-v2"
)
optional_params = get_optional_params_embeddings(
model=model,
dimensions=1024,
custom_llm_provider=custom_llm_provider,
allowed_openai_params=["dimensions"],
)
print(f"received optional_params: {optional_params}")
assert optional_params.get("dimensions") == 1024
def test_openai_non_text_embedding_3_without_allowed_openai_params_raises():
"""
Test that passing `dimensions` to a non-text-embedding-3 OpenAI model
without `allowed_openai_params` still raises UnsupportedParamsError.
"""
from litellm.exceptions import UnsupportedParamsError
# ensure global drop_params is off (other tests in this file flip it on)
prev_drop_params = litellm.drop_params
litellm.drop_params = False
try:
model, custom_llm_provider, _, _ = get_llm_provider(
model="openai/nvidia/llama-3.2-nv-embedqa-1b-v2"
)
with pytest.raises(UnsupportedParamsError):
get_optional_params_embeddings(
model=model,
dimensions=1024,
custom_llm_provider=custom_llm_provider,
)
finally:
litellm.drop_params = prev_drop_params
def test_openai_non_text_embedding_3_drop_params_per_call():
"""
Regression for https://github.com/BerriAI/litellm/issues/26787
When drop_params=True is passed per-call, `dimensions` should be silently
stripped for a non-`text-embedding-3` OpenAI-provider model instead of
raising UnsupportedParamsError.
"""
prev_drop_params = litellm.drop_params
litellm.drop_params = False # ensure only per-call flag is in effect
try:
model, custom_llm_provider, _, _ = get_llm_provider(
model="openai/Qwen/Qwen3-Embedding-0.6B"
)
optional_params = get_optional_params_embeddings(
model=model,
dimensions=1024,
custom_llm_provider=custom_llm_provider,
drop_params=True,
)
print(f"received optional_params: {optional_params}")
assert "dimensions" not in optional_params
finally:
litellm.drop_params = prev_drop_params
def test_openai_non_text_embedding_3_drop_params_global():
"""
Regression for https://github.com/BerriAI/litellm/issues/26787
When `litellm.drop_params = True` is set globally, `dimensions` should be
silently stripped for a non-`text-embedding-3` OpenAI-provider model
instead of raising UnsupportedParamsError.
"""
prev_drop_params = litellm.drop_params
litellm.drop_params = True
try:
model, custom_llm_provider, _, _ = get_llm_provider(
model="openai/Qwen/Qwen3-Embedding-0.6B"
)
optional_params = get_optional_params_embeddings(
model=model,
dimensions=1024,
custom_llm_provider=custom_llm_provider,
)
print(f"received optional_params: {optional_params}")
assert "dimensions" not in optional_params
finally:
litellm.drop_params = prev_drop_params