Skip to main content

Overview

Laya and Nimble are open decision models you run yourself. Both serve TypeSafe’s System One API (POST /v1/systemone), so you add each one as a custom provider on the Typesafe base format. They then work like any other decision model: on /v1/decisions, on /typesafe/v1/systemone, and as the Complexity Router classifier.
Running these models in Ollama? Use the Ollama provider instead; it needs no custom provider.

Laya

1. Run the server

It listens on 0.0.0.0:8000 and loads all three checkpoints at startup. Useful settings:

2. Add the provider

Laya custom provider on the TypeSafe base type, with List Models off and Decisions on
  1. Navigate to Models > Model Providers and click Add New Provider.
  2. In Add Custom Provider, set Name (for example laya) and Base Format to Typesafe.
  3. Set Base URL to your server, for example http://localhost:8000.
  4. Under Allowed Request Types, turn on Decisions and turn List Models off.
  5. If LAYA_API_KEY is set, add a key with that value. Otherwise, turn on Is Keyless?.
  6. In the key’s Allowed Models, type the checkpoints you use: english, multilingual, typed-decisions.
  7. Save.
Two settings make the provider look broken if missed.
  • List Models off. Laya has no /v1/models. With listing on, the provider is marked list_models_failed and the Complexity Router reports it as failing its checks.
  • Allowed Models set. A key that allows every model, on a provider that lists none, makes Bifrost treat Laya as serving every model. Requests without a provider prefix, of any type, are then tried on Laya first.

3. Send a decision

  • Choosing a checkpoint. english reads 512 tokens, multilingual 1,024, and typed-decisions 1,024; longer input is truncated (see usage.truncated). Any other name without a slash, such as auto, lets Laya’s router pick by language. A name with a slash is a 422.
  • Laya-only fields (min_confidence, lang, max_len, task) need the x-bf-passthrough-extra-params: true header on /v1/decisions. On /typesafe/v1/systemone they pass through without it.
  • Extra response fields such as answer_confidence, abstention, and routing are listed under Provider-Specific Fields. A server started with LAYA_JEV_STRICT=1 leaves them out.
  • Images are rejected with a 400 before the call, so a fallback can serve the request.

Nimble

1. Run the server

Nimble is served by an SGLang deployment on Modal. Follow Nimble’s serving guide to deploy your own, or try the public demo at https://bespokelabs--nimble-sglang-nimble.us-west.modal.direct, which needs no key.

2. Add the provider

Nimble custom provider on the TypeSafe base type, with List Models and Decisions on
  1. Navigate to Models > Model Providers and click Add New Provider.
  2. In Add Custom Provider, set Name (for example nimble) and Base Format to Typesafe.
  3. Set Base URL to your deployment’s URL.
  4. Under Allowed Request Types, turn on Decisions and List Models.
  5. Turn on Is Keyless?. For a private deployment, send its auth headers through Network > Extra Headers instead.
  6. Save.

3. Send a decision

  • Limits. Choice and score questions take 2-26 options, a request takes at most 64 questions, and each question’s prompt must fit in 8,192 tokens. Oversized prompts are rejected, not truncated.
  • Question names matter. Nimble keeps names and option keys in its prompt, so renaming a question can change its answer.
  • Cold starts. A Modal deployment scales to zero after 2 idle minutes and takes a few minutes to wake, returning 503 meanwhile. Under load it can return 529; retry.
  • Images are rejected with a 400 before the call.

Pricing

A custom provider has no price in Bifrost’s model catalog, so its decisions cost $0 until you add a pricing override:
  • Scope: the provider (optionally one key)
  • Match: Exact on a model name such as english, or Wildcard for several
  • Request types: decisions
  • Rates: input_cost_per_token_decisions and output_cost_per_token_decisions, in USD per token. For $0.50 per million input tokens, set 0.0000005.
Laya reports 0 output tokens, so only its input rate is charged. Nimble reports one output token per question plus one.

Using them in the Complexity Router

Pick the custom provider as the decision model in Complexity Router. Nimble’s models come from its listing. For Laya, which lists none, the UI offers the known checkpoints, starting on english when the provider is named after Laya.
  • Keep guidance short on Laya. All tier guidance is sent on every request, and english reads only 512 tokens. multilingual reads 1,024.
  • Keep the model loaded. A request that waits for a model to load goes unclassified once it passes decision.timeout (1.5s by default). For Laya, keep LAYA_PRELOAD=1 with every checkpoint you use, or raise LAYA_MAX_LOADED. For Nimble on Modal, keep the deployment warm, since waking takes minutes.

Troubleshooting


Next Steps