> ## Documentation Index
> Fetch the complete documentation index at: https://docs.valkyrieapp.azumo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Always-on and idle stop

> Keep an endpoint running around the clock, or let Valkyrie stop it after a quiet period you choose (2 hours by default).

A running endpoint holds a GPU and bills every hour, whether or not it serves
requests. Valkyrie gives you two behaviors to choose from:

* **Idle stop (the default).** An endpoint that serves no requests for **2 hours**
  is stopped, so a forgotten endpoint doesn't keep billing. With **Pay as you go**
  you pick your own timeout, from 30 minutes to 24 hours.
* **Always on.** The endpoint runs 24/7. It is never stopped for being idle, stop
  schedules skip it, and if its GPU is lost Valkyrie brings it back on a new one.

## Idle stop

Every endpoint that isn't always on is stopped once it has served no inference
request for 2 hours (the platform default), or for its own timeout if you set one.
Valkyrie checks every 30 minutes, so the stop can come up to about half an hour
after the timeout is up.

* **What counts as a request:** a real inference call to the endpoint, through its
  URL, an alias, a pool, or the MCP `execute_tool`. Valkyrie's own keep-warm pings
  and health checks don't count.
* **When the clock starts:** at the last request. An endpoint that has never served
  a request counts from when it started. Turning always-on off restarts the clock
  from that moment.
* **What a stop does:** Valkyrie bills the last partial interval and releases the
  GPU, and the endpoint shows as **Stopped (idle)**. It keeps its URL, alias, and
  settings, but not the machine's disk, so bringing it back rents a new GPU and
  loads the model again.
* **What it doesn't touch:** always-on endpoints, endpoints that are already
  stopped or paused, and fine-tuning runs (a fine-tune ends on its own when training
  finishes).

To bring it back, open it on [Endpoints](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md) and click **Start
again** on its **Pay as you go** card, or choose **Start now** from its menu. It
comes back on a new GPU, on the same URL.

### Set your own idle timeout (Pay as you go)

**Pay as you go** stops the endpoint after a quiet period you choose, so you pay
only while it serves. Use it for an endpoint you call now and then, where waiting
for a cold start on the first request after a stop is acceptable. The timeout is
30 minutes to 24 hours and overrides the 2-hour default for that endpoint only.

* **When you deploy:** both deploy pages ([base model](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md#deploy-a-base-model)
  and [fine-tuned version](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md#deploy-a-fine-tuned-version)) offer
  **Pay as you go** under **When should it run?**. Pick it, then choose **Stop
  after** 30 minutes, 1 hour (the default), 2, 4, 8, or 24 hours **without
  requests**.
* **On a running endpoint:** the **Pay as you go** card on the endpoint's page says
  how long it waits (**Stops after 1 hour without requests**) and, while it runs,
  the time it will stop if no request arrives. Pick another timeout from the card's
  list, or **Platform default** to go back to 2 hours. The idle clock restarts from
  the moment you change it, so a shorter timeout never stops the endpoint at once.
* **After an idle stop:** the card reads **Stopped after 1 hour without requests.
  The URL and settings are kept.** Click **Start again** to boot it on a new GPU.

Always-on endpoints have no idle stop, so the card is hidden while always-on is on,
and **Keep always on** replaces **Pay as you go** on the deploy pages. Changing the
timeout needs permission to manage the endpoint, the same as
[always-on](#who-can-change-it). An ended endpoint can't change its timeout, but
one stopped for being idle can still be started again.

> [!TIP]
>
> If an endpoint only needs to run at set times, use **Office hours** or a schedule
> instead: it starts and stops by itself and you pay only for those hours. See
> [Operate an endpoint](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md#operate-an-endpoint).

## Always on

Turn always-on on for an endpoint that must answer at any hour, such as one behind a
production app.

While it is on:

* The endpoint is **never stopped for being idle**.
* **Stop schedules are skipped.** A one-off scheduled stop can't be set, and a
  pending one is cancelled when you turn always-on on. Start schedules and cron
  schedules stay in place; the stop side simply doesn't run.
* **A lost GPU is replaced.** If the endpoint's machine goes away, including
  [interruptible capacity](https://docs.valkyrieapp.azumo.com/guides/wallet-billing.md#interruptible-capacity) that was
  outbid, Valkyrie starts it on a new GPU automatically. It tries up to 3 times,
  waiting about 1, 5, and 15 minutes. If all 3 fail, it stops trying until you
  restart the endpoint yourself. A manual restart, the endpoint becoming healthy
  again, or turning always-on off and on gives it a fresh set of attempts.
* **It bills every hour, around the clock.**

> [!WARNING]
>
> An always-on endpoint costs its hourly price times about 730 hours a month. At
> $1.00 an hour that is about $730 a month. Turn it off when you no longer need the
> endpoint available at all hours.

### Turn it on for a running endpoint

**1. Open the endpoint**

On [Endpoints](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md), open the endpoint. The **Always on** card
sits above **Schedules**.

**2. Turn on the switch**

A confirmation, **Keep this endpoint always on?**, shows the **Hourly** price and
the cost **Per month (730 hours)**. If the price isn't known yet, it says so.

**3. Confirm**

Click **Keep always on**. An **Always on** pill appears next to the status on the
endpoint and in the Endpoints list. If a one-off scheduled stop was pending, the
message says it was cancelled.

Turning the switch off needs no confirmation and stops nothing. The idle stop
applies again from that moment.

### Turn it on when you deploy

Both deploy pages ([base model](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md#deploy-a-base-model) and
[fine-tuned version](https://docs.valkyrieapp.azumo.com/dashboard/endpoints.md#deploy-a-fine-tuned-version)) have a
**Keep always on** checkbox under **When should it run?**, off by default. It shows
the 24/7 monthly cost. Checking it selects **Until stopped**, because office hours
stop the endpoint every evening and pay as you go stops it when idle. Picking
**Office hours** or **Pay as you go** unchecks it.

### Monthly cost alert

While always-on is on, the card has a **Monthly cost alert**: a threshold for the
endpoint's estimated monthly cost (its hourly price times 730). The default is
**\$1,000 per month**.

* **Set amount** sets your own threshold.
* **Reset to default** goes back to the default.
* **Turn alert off** (or an amount of 0) removes the threshold.

When the estimate is above the threshold, the card shows a warning, and Valkyrie's
team is alerted. The alert never stops the endpoint.

### Who can change it

Turning always-on on or off, and changing the cost alert, need permission to manage
the endpoint. Owners and Admins can change it on any endpoint in the workspace, and
Builders on their own endpoints and on ones shared with them as **Can manage**. The
switch is disabled for **Viewer**, **User**, and **Billing** members and for **Can
use** shares, with the reason shown under it. An ended endpoint can't change. See
[Roles](https://docs.valkyrieapp.azumo.com/guides/workspaces.md#roles).

## From an agent or a script

* The MCP tool `set_deployment_always_on` turns it on or off, and
  `deploy_base_model` and `deploy_fine_tuned_model` take `always_on`. See
  [MCP tools](https://docs.valkyrieapp.azumo.com/mcp/tools.md).
* `always_on` can't be combined with a scheduled stop or an office-hours schedule
  in the same deploy request; the request is refused.
* The MCP tool `set_deployment_idle_stop` sets an endpoint's own idle timeout
  (`idle_stop_minutes`, 30 to 1440) or clears it with `null`. `deploy_base_model`
  and `deploy_fine_tuned_model` take the same `idle_stop_minutes`. It can't be
  combined with `always_on`: a deploy with both is refused, and setting a timeout
  on an always-on endpoint returns `409`. Turn always-on off first.
* The cost alert threshold is set in the dashboard only.
