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
- 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
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
- 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
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
- Core services initialization failed: ${(error as Error).mess
- ElectronImageUnderstandingServiceProxy can only be used in E
- Unsupported language: ${language}
- Prompt must be a non-empty string
- Template must be a non-empty string
AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27).
Data as JSON: /api/errors/9f5c0ad1187c9091.
Report an issue: GitHub.