linshenkx/prompt-optimizer · error · Error

Failed to setup default model: ${(error as Error).message}

Error message

Failed to setup default model: ${(error as Error).message}

What it means

Thrown by CoreServicesAdapter.setupDefaultModel (called from initialize) when configuring the default model fails — e.g. the preferred provider cannot be resolved to a concrete model, or the model metadata/connection setup throws. The original error is chained via cause, so inspect error.cause for the actual failure.

Source

Thrown at packages/mcp-server/src/adapters/core-services.ts:139

    try {
      // 使用重构后的 setupDefaultModel 函数,只传递 preferredProvider
      await setupDefaultModel(
        this.modelManager,
        config.preferredModelProvider
      );

      // 获取并显示当前使用的模型信息
      const mcpModel = await this.modelManager.getModel('mcp-default');
      if (mcpModel) {
        logger.info(`✅ Using model: ${mcpModel.name} (${mcpModel.providerMeta.id})`);
        logger.info(`   Model: ${mcpModel.modelMeta.id}`);
        logger.info(`   Base URL: ${mcpModel.connectionConfig.baseURL || mcpModel.providerMeta.defaultBaseURL}`);
      } else {
        logger.info(`Default model configured with preferred provider: ${config.preferredModelProvider || 'auto-selected'}`);
      }
    } catch (error) {
      throw new Error(`Failed to setup default model: ${(error as Error).message}`, { cause: error });
    }
  }



  /**
   * 显示环境变量配置提示
   */
  private showEnvironmentHint(): void {
    try {
      // 检查当前环境变量状态
      const staticEnvVars = [
        'VITE_OPENAI_API_KEY',
        'VITE_GEMINI_API_KEY',
        'VITE_DEEPSEEK_API_KEY',
        'VITE_ZHIPU_API_KEY',
        'VITE_SILICONFLOW_API_KEY',
        'VITE_CUSTOM_API_KEY'

View on GitHub (pinned to 3e677b1d9f)

Solutions

  1. Inspect error.cause for the underlying reason
  2. Verify config.preferredModelProvider matches a configured provider exactly (case-sensitive)
  3. Omit preferredModelProvider to let auto-selection pick an available model
  4. Ensure the provider has a valid baseURL and credentials in its configuration

Example fix

// before
const config = { preferredModelProvider: 'openai-compatible' }; // typo / unconfigured

// after
const config = { preferredModelProvider: 'openai' }; // matches configured provider
Defensive patterns

Strategy: try-catch

Validate before calling

const providers = await adapter.listProviders?.(); // if available
if (config.preferredModelProvider && !providers?.includes(config.preferredModelProvider)) {
  delete config.preferredModelProvider; // fall back to auto-selection
}

Try / catch

try {
  await adapter.initialize(config);
} catch (e) {
  if (/Failed to setup default model/.test((e as Error).message)) {
    delete config.preferredModelProvider;
    await adapter.initialize(config); // retry with auto-selection
  } else throw e;
}

Prevention

When it happens

Trigger: Initializing with config.preferredModelProvider set to a provider that has no valid model configuration; the selected model's meta or connectionConfig being incomplete; downstream model manager rejecting the model ID.

Common situations: Setting preferredModelProvider to a typo'd or uninstalled provider name; provider config lacking baseURL; upgrading changed model identifiers; provider credentials missing so model resolution returns empty.

Related errors


AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27). Data as JSON: /api/errors/9f5c0ad1187c9091. Report an issue: GitHub.