Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions openapi/ga/individual/platform.openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions openapi/ga/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions openapi/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions services/core/models/src/nmp/core/models/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -1278,9 +1278,10 @@ class ModelEntityFilter(Filter):
description="Filter models by whether their deployment config has LoRA enabled.",
)
description: StringFilter | str | None = Field(None, description="Filter by description.")
fileset: Optional[str] = Field(
fileset: Optional[Union[bool, str]] = Field(
None,
description="Filter by fileset reference in the form {workspace}/{fileset_name}.",
description="Filter by fileset: true = has a fileset, false = no fileset, "
"string = match fileset reference in the form {workspace}/{fileset_name}.",
)
created_at: Optional[DatetimeFilter] = Field(None, description="Filter entities based on creation date.")
updated_at: Optional[DatetimeFilter] = Field(None, description="Filter entities based on update date.")
Expand Down
40 changes: 40 additions & 0 deletions services/core/models/tests/unit/api/test_models_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,46 @@ def test_list_models_with_base_model_filter_name(client, mock_model_entity_servi
assert parsed_filter.extract("data.base_model") == "llama-3"


def test_list_models_with_fileset_filter_ref(client, mock_model_entity_service, sample_page):
"""Test listing models filtered by fileset reference using $eq."""
mock_model_entity_service.list_model_entities.return_value = sample_page

response = client.get("/apis/models/v2/workspaces/nvidia/models?filter[fileset]=nvidia/my-fileset")

assert response.status_code == 200
call_args = mock_model_entity_service.list_model_entities.call_args
parsed_filter = call_args.kwargs["parsed_filter"]
assert parsed_filter.extract("data.fileset") == "nvidia/my-fileset"


def test_list_models_with_fileset_filter_true(client, mock_model_entity_service, sample_page):
"""Test listing models filtered by fileset=true → $not { data.fileset $eq null }."""
mock_model_entity_service.list_model_entities.return_value = sample_page

response = client.get("/apis/models/v2/workspaces/nvidia/models?filter[fileset]=true")

assert response.status_code == 200
call_args = mock_model_entity_service.list_model_entities.call_args
parsed_filter = call_args.kwargs["parsed_filter"]
assert parsed_filter.operation is not None
# Bool "true" is coerced to a not-null check
assert parsed_filter.operation.to_dict() == {"$not": {"data.fileset": {"$eq": None}}}


def test_list_models_with_fileset_filter_false(client, mock_model_entity_service, sample_page):
"""Test listing models filtered by fileset=false → data.fileset $eq null."""
mock_model_entity_service.list_model_entities.return_value = sample_page

response = client.get("/apis/models/v2/workspaces/nvidia/models?filter[fileset]=false")

assert response.status_code == 200
call_args = mock_model_entity_service.list_model_entities.call_args
parsed_filter = call_args.kwargs["parsed_filter"]
assert parsed_filter.operation is not None
# Bool "false" is coerced to a null check
assert parsed_filter.operation.to_dict() == {"data.fileset": {"$eq": None}}


def test_list_models_with_name_filter(client, mock_model_entity_service, sample_page):
"""Test listing models with name filter using $like operator."""
mock_model_entity_service.list_model_entities.return_value = sample_page
Expand Down
Loading