paperclipai/paperclip · error

Configured OpenCode model is unavailable

Error message

Configured OpenCode model is unavailable: ${model}. Available models: ${sample}${models.length > 12 ? ", ..." : ""}

What it means

Thrown by ensureOpenCodeModelConfiguredAndAvailable: the model configured in adapterConfig passes format validation and even survives an availability refresh attempt, but it is not in the provider's discovered model list. The error enumerates up to 12 available model ids so the operator can pick a valid one; it means the configured model id is not offered by the connected OpenCode provider (wrong provider prefix, deprecated/renamed model, or stale config).

Solutions

  1. Choose one of the listed available models for adapterConfig.model.
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at packages/adapters/opencode-local/src/server/models.ts:254 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10). Data as JSON: /api/errors/29428de5449fd67e. Report an issue: GitHub.

Appendix: source

Thrown at packages/adapters/opencode-local/src/server/models.ts:348

        env: input.env,
      });
      if (refreshedModels.some((entry) => entry.id === model)) {
        return refreshedModels;
      }
      if (refreshedModels.length > 0) models = refreshedModels;
    } catch (err) {
      console.warn(
        `[opencode-local] Model availability refresh failed for "${model}" (${
          err instanceof Error ? err.message : String(err)
        }); preserving the cached availability rejection.`,
      );
    }

    const sample = models
      .slice(0, 12)
      .map((entry) => entry.id)
      .join(", ");
    throw new Error(
      `Configured OpenCode model is unavailable: ${model}. Available models: ${sample}${models.length > 12 ? ", ..." : ""}`,
    );
  }

  return models;
}

export async function listOpenCodeModels(): Promise<AdapterModel[]> {
  try {
    return await discoverOpenCodeModelsCached();
  } catch {
    return [];
  }
}

export function resetOpenCodeModelsCacheForTests() {
  discoveryCache.clear();
}

View on GitHub (pinned to 01ad858492)