mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-12-15 02:22:36 +00:00
Merge branch 'main' into change-default-embedding-model
This commit is contained in:
commit
da35f2452e
15 changed files with 473 additions and 231 deletions
|
|
@ -58,7 +58,6 @@ def skip_if_model_doesnt_support_openai_completion(client_with_models, model_id)
|
|||
# does not work with the specified model, gpt-5-mini. Please choose different model and try
|
||||
# again. You can learn more about which models can be used with each operation here:
|
||||
# https://go.microsoft.com/fwlink/?linkid=2197993.'}}"}
|
||||
"remote::watsonx", # return 404 when hitting the /openai/v1 endpoint
|
||||
"remote::llama-openai-compat",
|
||||
):
|
||||
pytest.skip(f"Model {model_id} hosted by {provider.provider_type} doesn't support OpenAI completions.")
|
||||
|
|
@ -68,6 +67,7 @@ def skip_if_doesnt_support_completions_logprobs(client_with_models, model_id):
|
|||
provider_type = provider_from_model(client_with_models, model_id).provider_type
|
||||
if provider_type in (
|
||||
"remote::ollama", # logprobs is ignored
|
||||
"remote::watsonx",
|
||||
):
|
||||
pytest.skip(f"Model {model_id} hosted by {provider_type} doesn't support /v1/completions logprobs.")
|
||||
|
||||
|
|
@ -110,6 +110,7 @@ def skip_if_doesnt_support_n(client_with_models, model_id):
|
|||
# Error code 400 - {'message': '"n" > 1 is not currently supported', 'type': 'invalid_request_error', 'param': 'n', 'code': 'wrong_api_format'}
|
||||
"remote::cerebras",
|
||||
"remote::databricks", # Bad request: parameter "n" must be equal to 1 for streaming mode
|
||||
"remote::watsonx",
|
||||
):
|
||||
pytest.skip(f"Model {model_id} hosted by {provider.provider_type} doesn't support n param.")
|
||||
|
||||
|
|
@ -124,7 +125,6 @@ def skip_if_model_doesnt_support_openai_chat_completion(client_with_models, mode
|
|||
"remote::databricks",
|
||||
"remote::cerebras",
|
||||
"remote::runpod",
|
||||
"remote::watsonx", # watsonx returns 404 when hitting the /openai/v1 endpoint
|
||||
):
|
||||
pytest.skip(f"Model {model_id} hosted by {provider.provider_type} doesn't support OpenAI chat completions.")
|
||||
|
||||
|
|
@ -508,6 +508,12 @@ def test_openai_chat_completion_non_streaming_with_file(openai_client, client_wi
|
|||
assert "hello world" in normalized_content
|
||||
|
||||
|
||||
def skip_if_doesnt_support_completions_stop_sequence(client_with_models, model_id):
|
||||
provider_type = provider_from_model(client_with_models, model_id).provider_type
|
||||
if provider_type in ("remote::watsonx",): # openai.BadRequestError: Error code: 400
|
||||
pytest.skip(f"Model {model_id} hosted by {provider_type} doesn't support /v1/completions stop sequence.")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"test_case",
|
||||
[
|
||||
|
|
@ -516,6 +522,7 @@ def test_openai_chat_completion_non_streaming_with_file(openai_client, client_wi
|
|||
)
|
||||
def test_openai_completion_stop_sequence(client_with_models, openai_client, text_model_id, test_case):
|
||||
skip_if_model_doesnt_support_openai_completion(client_with_models, text_model_id)
|
||||
skip_if_doesnt_support_completions_stop_sequence(client_with_models, text_model_id)
|
||||
|
||||
tc = TestCase(test_case)
|
||||
|
||||
|
|
|
|||
|
|
@ -50,11 +50,15 @@ def skip_if_model_doesnt_support_encoding_format_base64(client, model_id):
|
|||
|
||||
def skip_if_model_doesnt_support_variable_dimensions(client_with_models, model_id):
|
||||
provider = provider_from_model(client_with_models, model_id)
|
||||
if provider.provider_type in (
|
||||
"remote::together", # returns 400
|
||||
"inline::sentence-transformers",
|
||||
# Error code: 400 - {'error_code': 'BAD_REQUEST', 'message': 'Bad request: json: unknown field "dimensions"\n'}
|
||||
"remote::databricks",
|
||||
if (
|
||||
provider.provider_type
|
||||
in (
|
||||
"remote::together", # returns 400
|
||||
"inline::sentence-transformers",
|
||||
# Error code: 400 - {'error_code': 'BAD_REQUEST', 'message': 'Bad request: json: unknown field "dimensions"\n'}
|
||||
"remote::databricks",
|
||||
"remote::watsonx", # openai.BadRequestError: Error code: 400 - {'detail': "litellm.UnsupportedParamsError: watsonx does not support parameters: {'dimensions': 384}
|
||||
)
|
||||
):
|
||||
pytest.skip(
|
||||
f"Model {model_id} hosted by {provider.provider_type} does not support variable output embedding dimensions."
|
||||
|
|
|
|||
|
|
@ -146,8 +146,6 @@ def test_openai_create_vector_store(
|
|||
metadata={"purpose": "testing", "environment": "integration"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -175,8 +173,6 @@ def test_openai_list_vector_stores(
|
|||
metadata={"type": "test"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
store2 = client.vector_stores.create(
|
||||
|
|
@ -184,8 +180,6 @@ def test_openai_list_vector_stores(
|
|||
metadata={"type": "test"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -220,8 +214,6 @@ def test_openai_retrieve_vector_store(
|
|||
metadata={"purpose": "retrieval_test"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -249,8 +241,6 @@ def test_openai_update_vector_store(
|
|||
metadata={"version": "1.0"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
time.sleep(1)
|
||||
|
|
@ -282,8 +272,6 @@ def test_openai_delete_vector_store(
|
|||
metadata={"purpose": "deletion_test"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -314,8 +302,6 @@ def test_openai_vector_store_search_empty(
|
|||
metadata={"purpose": "search_testing"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -346,8 +332,6 @@ def test_openai_vector_store_with_chunks(
|
|||
metadata={"purpose": "chunks_testing"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -412,8 +396,6 @@ def test_openai_vector_store_search_relevance(
|
|||
metadata={"purpose": "relevance_testing"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -457,8 +439,6 @@ def test_openai_vector_store_search_with_ranking_options(
|
|||
metadata={"purpose": "ranking_testing"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -512,8 +492,6 @@ def test_openai_vector_store_search_with_high_score_filter(
|
|||
metadata={"purpose": "high_score_filtering"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -573,8 +551,6 @@ def test_openai_vector_store_search_with_max_num_results(
|
|||
metadata={"purpose": "max_num_results_testing"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -608,8 +584,6 @@ def test_openai_vector_store_attach_file(
|
|||
name="test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -688,8 +662,6 @@ def test_openai_vector_store_attach_files_on_creation(
|
|||
file_ids=file_ids,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -735,8 +707,6 @@ def test_openai_vector_store_list_files(
|
|||
name="test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -826,8 +796,6 @@ def test_openai_vector_store_retrieve_file_contents(
|
|||
name="test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -851,8 +819,6 @@ def test_openai_vector_store_retrieve_file_contents(
|
|||
attributes=attributes,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -889,8 +855,6 @@ def test_openai_vector_store_delete_file(
|
|||
name="test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -955,8 +919,6 @@ def test_openai_vector_store_delete_file_removes_from_vector_store(
|
|||
name="test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1007,8 +969,6 @@ def test_openai_vector_store_update_file(
|
|||
name="test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1078,8 +1038,6 @@ def test_create_vector_store_files_duplicate_vector_store_name(
|
|||
name="test_store_with_files",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
assert vector_store.file_counts.completed == 0
|
||||
|
|
@ -1092,8 +1050,6 @@ def test_create_vector_store_files_duplicate_vector_store_name(
|
|||
name="test_store_with_files",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1105,8 +1061,6 @@ def test_create_vector_store_files_duplicate_vector_store_name(
|
|||
file_id=file_ids[0],
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
assert created_file.status == "completed"
|
||||
|
|
@ -1117,8 +1071,6 @@ def test_create_vector_store_files_duplicate_vector_store_name(
|
|||
file_id=file_ids[1],
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
assert created_file_from_non_deleted_vector_store.status == "completed"
|
||||
|
|
@ -1139,8 +1091,6 @@ def test_openai_vector_store_search_modes(
|
|||
metadata={"purpose": "search_mode_testing"},
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1172,8 +1122,6 @@ def test_openai_vector_store_file_batch_create_and_retrieve(
|
|||
name="batch_test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1191,8 +1139,6 @@ def test_openai_vector_store_file_batch_create_and_retrieve(
|
|||
file_ids=file_ids,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1239,8 +1185,6 @@ def test_openai_vector_store_file_batch_list_files(
|
|||
name="batch_list_test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1258,8 +1202,6 @@ def test_openai_vector_store_file_batch_list_files(
|
|||
file_ids=file_ids,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1336,8 +1278,6 @@ def test_openai_vector_store_file_batch_cancel(
|
|||
name="batch_cancel_test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1355,8 +1295,6 @@ def test_openai_vector_store_file_batch_cancel(
|
|||
file_ids=file_ids,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1395,8 +1333,6 @@ def test_openai_vector_store_file_batch_retrieve_contents(
|
|||
name="batch_contents_test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1419,8 +1355,6 @@ def test_openai_vector_store_file_batch_retrieve_contents(
|
|||
file_ids=file_ids,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1472,8 +1406,6 @@ def test_openai_vector_store_file_batch_error_handling(
|
|||
name="batch_error_test_store",
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -1485,8 +1417,6 @@ def test_openai_vector_store_file_batch_error_handling(
|
|||
file_ids=file_ids,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -52,8 +52,6 @@ def test_vector_db_retrieve(client_with_empty_registry, embedding_model_id, embe
|
|||
name=vector_db_name,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -73,8 +71,6 @@ def test_vector_db_register(client_with_empty_registry, embedding_model_id, embe
|
|||
name=vector_db_name,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -110,8 +106,6 @@ def test_insert_chunks(client_with_empty_registry, embedding_model_id, embedding
|
|||
name=vector_db_name,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -152,8 +146,6 @@ def test_insert_chunks_with_precomputed_embeddings(client_with_empty_registry, e
|
|||
name=vector_db_name,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -202,8 +194,6 @@ def test_query_returns_valid_object_when_identical_to_embedding_in_vdb(
|
|||
name=vector_db_name,
|
||||
extra_body={
|
||||
"embedding_model": embedding_model_id,
|
||||
"embedding_dimension": embedding_dimension,
|
||||
"provider_id": "my_provider",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -234,3 +224,35 @@ def test_query_returns_valid_object_when_identical_to_embedding_in_vdb(
|
|||
assert len(response.chunks) > 0
|
||||
assert response.chunks[0].metadata["document_id"] == "doc1"
|
||||
assert response.chunks[0].metadata["source"] == "precomputed"
|
||||
|
||||
|
||||
def test_auto_extract_embedding_dimension(client_with_empty_registry, embedding_model_id):
|
||||
vs = client_with_empty_registry.vector_stores.create(
|
||||
name="test_auto_extract", extra_body={"embedding_model": embedding_model_id}
|
||||
)
|
||||
assert vs.id is not None
|
||||
|
||||
|
||||
def test_provider_auto_selection_single_provider(client_with_empty_registry, embedding_model_id):
|
||||
providers = [p for p in client_with_empty_registry.providers.list() if p.api == "vector_io"]
|
||||
if len(providers) != 1:
|
||||
pytest.skip(f"Test requires exactly one vector_io provider, found {len(providers)}")
|
||||
|
||||
vs = client_with_empty_registry.vector_stores.create(
|
||||
name="test_auto_provider", extra_body={"embedding_model": embedding_model_id}
|
||||
)
|
||||
assert vs.id is not None
|
||||
|
||||
|
||||
def test_provider_id_override(client_with_empty_registry, embedding_model_id):
|
||||
providers = [p for p in client_with_empty_registry.providers.list() if p.api == "vector_io"]
|
||||
if len(providers) != 1:
|
||||
pytest.skip(f"Test requires exactly one vector_io provider, found {len(providers)}")
|
||||
|
||||
provider_id = providers[0].provider_id
|
||||
|
||||
vs = client_with_empty_registry.vector_stores.create(
|
||||
name="test_provider_override", extra_body={"embedding_model": embedding_model_id, "provider_id": provider_id}
|
||||
)
|
||||
assert vs.id is not None
|
||||
assert vs.metadata.get("provider_id") == provider_id
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue