Unload a model from memory via REST API
Arguments
- model
Character. Unique identifier (
instance_id) of the model instance to unload. Must be one name, given as a single string.- host
Character. The host address of the local server. Defaults to "http://localhost:1234".
- ...
Additional arguments passed to the API request body.
- token
Character or
NULL. An API token for a server that requires authentication.NULLreads therlmstudio.tokenoption and then theRLMSTUDIO_API_TOKENenvironment variable. See rlmstudio_token.
Note
If you have loaded multiple instances of the same model using
force = TRUE in lms_load(), the server assigns them unique
instance identifiers (e.g., "google/gemma-3-1b" and
"google/gemma-3-1b:2"). Passing the base model name to
lms_unload() will only unload the primary instance. To unload
duplicate instances, you must provide their exact instance_id, or
use lms_unload_all() to clear everything.
Server not running
Functions that call the LM Studio REST API open a TCP connection to the
hostname and port named in host before they send the request. A function
that checks its own arguments does that first, so a bad model, job_id,
input, inputs, or schema aborts with an argument message and no
condition class
even when the server is down. A condition of class
rlmstudio_no_server is raised when that connection cannot be opened. A
refused connection raises it. So do an address the package cannot parse and
a hostname that does not resolve. An address that neither accepts nor
refuses the connection also raises it. That case waits for the operating
system to give up, which can take a minute. Start the server with
lms_server_start(), or give host the address that your server listens
on.
The check reads the port and nothing else. Any process holding that port
accepts the connection, so the condition is not raised even though no LM
Studio server is there. The call then does not raise
rlmstudio_no_server, and what it does depends on what answers. On a
status-200 body that does not parse as JSON, the chat functions,
lms_embed(), list_models(), lms_load(), lms_download(),
lms_download_status(), and lms_unload_all() raise
rlmstudio_bad_response. lms_unload() does not read the body, so it can
report success. A body that parses as JSON but has another shape can
come back unchanged with simplify = FALSE. With simplify = TRUE, the
chat functions and lms_embed() raise rlmstudio_bad_response for it.
list_models() raises it for a model list with another shape, and so do
lms_unload_all() and lms_load() without force = TRUE, which read that
list. lms_load(), lms_download(), and lms_download_status() raise it
for a reply of their own with another shape, such as {}. A process that
does not answer in HTTP gives an httr2_failure error. Use lms_server_ready() for
the stronger test: it asks the host for a model list and reports TRUE
only for a model list that list_models() can read.
lms_chat_batch() checks the server once before its first input, and
lms_chat() checks it again for each input. If that check finds the server
gone during the batch, the batch aborts with rlmstudio_no_server, and no
request goes out after that. The condition then carries a results field, a list as
long as inputs. Its elements before the lost input hold the values that
format = "list" returns for those inputs. The element of the lost input
and every element after it are NULL. The check before the first input
adds no results field. A connection that fails after the check passes,
such as a server that stops during a request, raises an httr2_failure
error instead. That error aborts the batch and carries no results field.
API failure
A condition of class rlmstudio_api_error is raised when a REST call
returns a response that the wrapper treats as a failure. The condition
carries a status field, which holds the HTTP response status as an
integer.
lms_chat_batch() does not abort on it. The element of the failed input
holds the condition, or NA where the result is text, and the batch warns
once and goes on. See the details of lms_chat_batch().
Examples
if (FALSE) { # \dontrun{
lms_server_start()
lms_download("google/gemma-3-1b")
lms_load("google/gemma-3-1b")
# Unload a single specific model
lms_unload("google/gemma-3-1b")
} # }