{"record":{"id":"9f5c0ad1187c9091","repo":"linshenkx/prompt-optimizer","slug":"failed-to-setup-default-model-error-as-error","errorCode":null,"errorMessage":"Failed to setup default model: ${(error as Error).message}","messagePattern":"Failed to setup default model: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/mcp-server/src/adapters/core-services.ts","lineNumber":139,"sourceCode":"\n    try {\n      // 使用重构后的 setupDefaultModel 函数，只传递 preferredProvider\n      await setupDefaultModel(\n        this.modelManager,\n        config.preferredModelProvider\n      );\n\n      // 获取并显示当前使用的模型信息\n      const mcpModel = await this.modelManager.getModel('mcp-default');\n      if (mcpModel) {\n        logger.info(`✅ Using model: ${mcpModel.name} (${mcpModel.providerMeta.id})`);\n        logger.info(`   Model: ${mcpModel.modelMeta.id}`);\n        logger.info(`   Base URL: ${mcpModel.connectionConfig.baseURL || mcpModel.providerMeta.defaultBaseURL}`);\n      } else {\n        logger.info(`Default model configured with preferred provider: ${config.preferredModelProvider || 'auto-selected'}`);\n      }\n    } catch (error) {\n      throw new Error(`Failed to setup default model: ${(error as Error).message}`, { cause: error });\n    }\n  }\n\n\n\n  /**\n   * 显示环境变量配置提示\n   */\n  private showEnvironmentHint(): void {\n    try {\n      // 检查当前环境变量状态\n      const staticEnvVars = [\n        'VITE_OPENAI_API_KEY',\n        'VITE_GEMINI_API_KEY',\n        'VITE_DEEPSEEK_API_KEY',\n        'VITE_ZHIPU_API_KEY',\n        'VITE_SILICONFLOW_API_KEY',\n        'VITE_CUSTOM_API_KEY'","sourceCodeStart":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/mcp-server/src/adapters/core-services.ts#L121-L157","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Inspect error.cause for the underlying reason","Verify config.preferredModelProvider matches a configured provider exactly (case-sensitive)","Omit preferredModelProvider to let auto-selection pick an available model","Ensure the provider has a valid baseURL and credentials in its configuration"],"exampleFix":"// before\nconst config = { preferredModelProvider: 'openai-compatible' }; // typo / unconfigured\n\n// after\nconst config = { preferredModelProvider: 'openai' }; // matches configured provider","handlingStrategy":"try-catch","validationCode":"const providers = await adapter.listProviders?.(); // if available\nif (config.preferredModelProvider && !providers?.includes(config.preferredModelProvider)) {\n  delete config.preferredModelProvider; // fall back to auto-selection\n}","typeGuard":null,"tryCatchPattern":"try {\n  await adapter.initialize(config);\n} catch (e) {\n  if (/Failed to setup default model/.test((e as Error).message)) {\n    delete config.preferredModelProvider;\n    await adapter.initialize(config); // retry with auto-selection\n  } else throw e;\n}","preventionTips":["Confirm the provider name exists in configuration before setting preferredModelProvider","Keep provider configs complete (baseURL, credentials, model IDs)","Prefer auto-selection unless a specific provider is required"],"tags":["model-configuration","initialization","mcp-server"],"backgroundTag":"service-initialization-failed","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}