Skip to content

Commit 645866f

Browse files
committed
Implementing searchregisteredmodels
1 parent a81255b commit 645866f

File tree

5 files changed

+67
-7
lines changed

5 files changed

+67
-7
lines changed

docs/src/reference/registered_model.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ getregisteredmodel
55
renameregisteredmodel
66
updateregisteredmodel
77
deleteregisteredmodel
8+
searchregisteredmodels
89
```

src/MLFlowClient.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export refresh, getmetrichistory
6868

6969
include("services/registered_model.jl")
7070
export getregisteredmodel, createregisteredmodel, deleteregisteredmodel,
71-
renameregisteredmodel, updateregisteredmodel
71+
renameregisteredmodel, updateregisteredmodel, searchregisteredmodels
7272

7373
include("services/model_version.jl")
7474
export getlatestmodelversions, getmodelversion, createmodelversion, deletemodelversion,

src/services/model_version.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Latest [`ModelVersion`](@ref) for each requests stage.
1111
"""
1212
function getlatestmodelversions(instance::MLFlow, name::String;
1313
stages::Array{String}=String[])::Array{ModelVersion}
14-
result = mlfpost(instance, "registered-models/get-latest-versions"; name=name,
14+
result = mlfpost(instance, "registered-models/get-latest-versions"; name=name,
1515
stages=stages)
1616
return result["model_versions"] .|> ModelVersion
1717
end
@@ -104,8 +104,8 @@ end
104104
- `filter`: String filter condition. See [MLFlow documentation](https://mlflow.org/docs/latest/rest-api.html#search-modelversions).
105105
- `max_results`: Maximum number of models desired.
106106
- `order_by`: List of columns to be ordered by including model name, version, stage with an
107-
optional “DESC” or “ASC” annotation, where “ASC” is the default. Tiebreaks are done by
108-
latest stage transition timestamp, followed by name ASC, followed by version DESC.
107+
optional “DESC” or “ASC” annotation, where “ASC” is the default. Tiebreaks are done by
108+
latest stage transition timestamp, followed by name ASC, followed by version DESC.
109109
- `page_token`: Pagination token to go to next page based on previous search query.
110110
111111
# Returns
@@ -156,9 +156,9 @@ end
156156
- `version:` [`ModelVersion`](@ref) number.
157157
- `stage:` Transition [`ModelVersion`](@ref) to new stage.
158158
- `archive_existing_versions:` When transitioning a model version to a particular stage,
159-
this flag dictates whether all existing model versions in that stage should be atomically
160-
moved to the “archived” stage. This ensures that at-most-one model version exists in the
161-
target stage.
159+
this flag dictates whether all existing model versions in that stage should be atomically
160+
moved to the “archived” stage. This ensures that at-most-one model version exists in the
161+
target stage.
162162
163163
# Returns
164164
Updated [`ModelVersion`](@ref).

src/services/registered_model.jl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,37 @@ function deleteregisteredmodel(instance::MLFlow, name::String)::Bool
8989
mlfdelete(instance, "registered-models/delete"; name=name)
9090
return true
9191
end
92+
93+
"""
94+
searchregisteredmodels(instance::MLFlow, filter::String, max_results::Int64,
95+
order_by::String, page_token::String)
96+
97+
# Arguments
98+
- `instance:` [`MLFlow`](@ref) configuration.
99+
- `filter`: String filter condition. See [MLFlow documentation](https://mlflow.org/docs/latest/rest-api.html#search-registeredmodels).
100+
- `max_results`: Maximum number of models desired.
101+
- `order_by`: List of columns for ordering search results, which can include model name
102+
and last updated timestamp with an optional “DESC” or “ASC” annotation, where “ASC” is
103+
the default. Tiebreaks are done by model name ASC.
104+
- `page_token`: Pagination token to go to the next page based on a previous search query.
105+
106+
# Returns
107+
- Vector of [`RegisteredModel`](@ref) that were found in the [`MLFlow`](@ref) instance.
108+
- The next page token if there are more results.
109+
"""
110+
function searchregisteredmodels(instance::MLFlow; filter::String="",
111+
max_results::Int64=100, order_by::Array{String}=String[],
112+
page_token::String="")::Tuple{Array{RegisteredModel}, Union{String, Nothing}}
113+
parameters = (; max_results, page_token, filter)
114+
115+
if order_by |> !isempty
116+
parameters = (; order_by, parameters...)
117+
end
118+
119+
result = mlfget(instance, "registered-models/search"; parameters...)
120+
121+
registered_models = get(result, "registered_models", []) |> (x -> [RegisteredModel(y) for y in x])
122+
next_page_token = get(result, "next_page_token", nothing)
123+
124+
return registered_models, next_page_token
125+
end

test/services/registered_model.jl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,28 @@ end
8585

8686
@test_throws ErrorException getregisteredmodel(mlf, "missy")
8787
end
88+
89+
@testset verbose = true "search registered models" begin
90+
@ensuremlf
91+
92+
createregisteredmodel(mlf, "missy"; description="gala")
93+
createregisteredmodel(mlf, "gala"; description="missy")
94+
95+
@testset "default search" begin
96+
registered_models, next_page_token = searchregisteredmodels(mlf)
97+
98+
@test length(registered_models) == 2 # four because of the default experiment
99+
@test next_page_token |> isnothing
100+
end
101+
102+
@testset "with pagination" begin
103+
registered_models, next_page_token = searchregisteredmodels(mlf; max_results=1)
104+
105+
@test length(registered_models) == 1
106+
@test next_page_token |> !isnothing
107+
@test next_page_token isa String
108+
end
109+
110+
deleteregisteredmodel(mlf, "missy")
111+
deleteregisteredmodel(mlf, "gala")
112+
end

0 commit comments

Comments
 (0)