janhq/jan · error

No model available to load

Error message

No model available to load

What it means

toggleAPIServer attempts to load a default model before starting the local API server; if the load result status is 'no_model_available' it throws. It means no local model exists to serve the OpenAI-compatible endpoint.

Solutions

  1. Download/import at least one local model before starting the server
  2. Set a valid default model for the local API server in settings
  3. Verify model files exist in the Jan data folder
  4. Re-pull the model if it was deleted

Example fix

// before
await toggleAPIServer()
// after
const providers = useModelProvider.getState().providers
const hasModel = providers.some(p => p.models.length > 0)
if (!hasModel) await downloadDefaultModel()
await toggleAPIServer()
Defensive patterns

Strategy: try-catch

Validate before calling

const hasModels = useModelProvider.getState().providers.some(p => p.models.length > 0)

Type guard

null

Try / catch

try { await toggleAPIServer() } catch (e) { if (e.message === 'No model available to load') promptModelDownload(); else throw e }

Prevention

When it happens

Trigger: Starting the local API server with no downloaded/imported models and no defaultModelLocalApiServer resolvable.

Common situations: Fresh install with no models downloaded, all models deleted, or the configured default model was removed from disk.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of janhq/jan@7205d770c1 (2026-09-17). Data as JSON: /api/errors/6c58fd84315a6717. Report an issue: GitHub.

Appendix: source

Thrown at web-app/src/routes/settings/local-api-server.tsx:141

      // if (!apiKey || apiKey.toString().trim().length === 0) {
      //   setShowApiKeyError(true)
      //   return
      // }

      setShowApiKeyError(false)

      setServerStatus('pending')

      ensureModelForServer({
        modelsService: serviceHub.models(),
        modelOverride: defaultModelLocalApiServer,
        onLoadStart: () => setIsModelLoading(true),
        onLoadEnd: () => setIsModelLoading(false),
      })
        .then(async (result) => {
          if (result.status === 'no_model_available') {
            throw new Error('No model available to load')
          }

          // Remember loaded models for next startup
          const activeModels = await serviceHub.models().getActiveModels()
          if (activeModels && activeModels.length > 0) {
            const allProviders = useModelProvider.getState().providers
            const serverModels = activeModels.flatMap((id: string) => {
              const p = allProviders.find((p) =>
                p?.models?.some((m: { id: string }) => m.id === id)
              )
              return p ? [{ model: id, provider: p.provider }] : []
            })
            if (serverModels.length > 0) setLastServerModels(serverModels)
          }

          // Refresh active models in app state
          const models = await serviceHub.models().getActiveModels()
          setActiveModels(models || [])

View on GitHub (pinned to 7205d770c1)