janhq/jan · error · Error

No model available to load

Error message

No model available to load

What it means

Thrown in the local API server start flow (local-api-server.tsx:139) when ensureModelForServer resolves with status 'no_model_available'. The server cannot start without a model to serve, so the promise chain rejects before window.core.api.startServer is called.

Source

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

      // 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 fad3f12a14)

Solutions

  1. Download at least one model from the Hub before starting the local API server.
  2. Set a valid default model for the server in the local-API-server settings (defaultModelLocalApiServer).
  3. If a model was deleted, re-download it or pick another installed model as the default.

Example fix

// before
if (result.status === 'no_model_available') {
  throw new Error('No model available to load')
}
// after: surface a actionable toast and block server start with guidance
if (result.status === 'no_model_available') {
  toast.error('Download a model from the Hub first, then start the server.')
  setServerStatus('idle')
  return
}
Defensive patterns

Strategy: validation

Validate before calling

async function hasModelToServe(modelsService, override?: string): Promise<boolean> {
  if (override) {
    const m = await modelsService.getModel(override)
    if (m) return true
  }
  const installed = await modelsService.fetchModels()
  return installed.length > 0
}
// before ensureModelForServer:
if (!(await hasModelToServe(serviceHub.models(), defaultModelLocalApiServer))) {
  toast.error('Download a model from the Hub first.')
  return
}

Type guard

function hasInstalledModels(list: unknown): boolean {
  return Array.isArray(list) && list.length > 0
}

Try / catch

try {
  const result = await ensureModelForServer({ ... })
  if (result.status === 'no_model_available') throw new Error('No model available to load')
} catch (e) {
  setServerStatus('idle')
  toast.error(e instanceof Error ? e.message : 'Server start failed')
}

Prevention

When it happens

Trigger: No model is installed locally and none is explicitly overridden via defaultModelLocalApiServer; the previously-configured default model was deleted; ensureModelForServer found zero downloadable and zero local candidates to fall back on.

Common situations: Fresh install with no models downloaded; user deleted all models then tried to start the local server; the model override in settings points to an uninstalled model id and no fallback exists.

Related errors


AI-assisted analysis of janhq/jan@fad3f12a14 (2026-08-12). Data as JSON: /api/errors/6c58fd84315a6717. Report an issue: GitHub.