
Create a Plumber API to predict with a deployable vetiver_model() object
Source: R/api.R
vetiver_api.RdUse vetiver_api() to add a POST endpoint for predictions from a
trained vetiver_model() to a Plumber router.
Usage
vetiver_api(
pr,
vetiver_model,
path = "/predict",
debug = is_interactive(),
...
)
vetiver_pr_post(
pr,
vetiver_model,
path = "/predict",
debug = is_interactive(),
...,
check_prototype = TRUE,
check_ptype = deprecated()
)
vetiver_pr_docs(pr, vetiver_model, path = "/predict", all_docs = TRUE)Arguments
- pr
A Plumber router, such as from
plumber::pr().- vetiver_model
A deployable
vetiver_model()object- path
The endpoint path
- debug
TRUEprovides more insight into your API errors.- ...
Other arguments passed to
predict(), such as predictiontype- check_prototype
Should the input data prototype stored in
vetiver_model(used for visual API documentation) also be used to check new data at prediction time? Defaults toTRUE.- check_ptype
- all_docs
Should the interactive visual API documentation be created for all POST endpoints in the router
pr? This defaults toTRUE, and assumes that all POST endpoints use thevetiver_model()input data prototype.
Details
You can first store and version your vetiver_model() with
vetiver_pin_write(), and then create an API endpoint with vetiver_api().
Setting debug = TRUE may expose any sensitive data from your model in
API errors.
Several GET endpoints will also be added to the router pr, depending on the
characteristics of the model object:
a
/pin-urlendpoint to return the URL of the pinned modela
/metadataendpoint to return any metadata stored with the modela
/pingendpoint for the API healtha
/prototypeendpoint for the model's input data prototype (usecereal::cereal_from_json()) to convert this back to a vctrs ptype
The function vetiver_api() uses:
vetiver_pr_post()for endpoint definition andvetiver_pr_docs()to create visual API documentation
These modular functions are available for more advanced use cases.
Examples
cars_lm <- lm(mpg ~ ., data = mtcars)
v <- vetiver_model(cars_lm, "cars_linear")
library(plumber)
pr() %>% vetiver_api(v)
#> # Plumber router with 4 endpoints, 4 filters, and 1 sub-router.
#> # Use `pr_run()` on this object to start the API.
#> ├──[queryString]
#> ├──[body]
#> ├──[cookieParser]
#> ├──[sharedSecret]
#> ├──/logo
#> │ │ # Plumber static router serving from directory: /home/runner/work/_temp/Library/vetiver
#> ├──/metadata (GET)
#> ├──/ping (GET)
#> ├──/predict (POST)
#> └──/prototype (GET)
#>
## is the same as:
pr() %>% vetiver_pr_post(v) %>% vetiver_pr_docs(v)
#> # Plumber router with 4 endpoints, 4 filters, and 1 sub-router.
#> # Use `pr_run()` on this object to start the API.
#> ├──[queryString]
#> ├──[body]
#> ├──[cookieParser]
#> ├──[sharedSecret]
#> ├──/logo
#> │ │ # Plumber static router serving from directory: /home/runner/work/_temp/Library/vetiver
#> ├──/metadata (GET)
#> ├──/ping (GET)
#> ├──/predict (POST)
#> └──/prototype (GET)
#>
## for either, next, pipe to `pr_run()`