linshenkx/prompt-optimizer · error · RequestConfigError
Model metadata cannot be empty
Error message
Model metadata cannot be empty
What it means
Thrown by validateRequest when modelConfig.modelMeta is missing or has no id. The model metadata id selects the concrete model (e.g. which vision LLM) within the provider, so the service refuses requests without it.
Source
Thrown at packages/core/src/services/image-understanding/service.ts:55
await adapter.sendImageUnderstandingStream(runtimeRequest, request.modelConfig, callbacks)
}
private validateRequest(request: ImageUnderstandingExecutionRequest): void {
if (!request || typeof request !== 'object') {
throw new RequestConfigError('Image understanding request cannot be empty')
}
const modelConfig = request.modelConfig
if (!modelConfig) {
throw new RequestConfigError('Model config cannot be empty')
}
if (!modelConfig.providerMeta?.id) {
throw new RequestConfigError('Model provider metadata cannot be empty')
}
if (!modelConfig.modelMeta?.id) {
throw new RequestConfigError('Model metadata cannot be empty')
}
if (!modelConfig.enabled) {
throw new RequestConfigError('Model is not enabled')
}
}
private async prepareRuntimeRequest(
request: ImageUnderstandingExecutionRequest
): Promise<ImageUnderstandingExecutionRequest> {
const images = await normalizeImageInputsForLlm(request.images, this.imageInputOptions)
return {
...request,
images: images ?? request.images,
}
}
}
View on GitHub (pinned to 3e677b1d9f)
Solutions
- Set modelMeta: { id: '<model-id>', ... } on the config.
- Retrieve the config from the model manager rather than hand-building it.
- Add a runtime guard on restored configs checking modelMeta?.id before use.
Example fix
// before
modelConfig = { providerMeta: { id: 'dashscope' }, enabled: true } // no modelMeta
// after
modelConfig = {
providerMeta: { id: 'dashscope' },
modelMeta: { id: 'qwen2.5-vl-72b-instruct' },
enabled: true,
} Defensive patterns
Strategy: type-guard
Validate before calling
if (!request.modelConfig.modelMeta?.id) {
throw new Error('modelConfig.modelMeta.id required')
} Type guard
const hasModelMeta = (c: any): c is { modelMeta: { id: string } } =>
typeof c?.modelMeta?.id === 'string' && c.modelMeta.id.length > 0 Prevention
- Include modelMeta.id when assembling configs
- Round-trip test serialized configs to catch dropped fields
When it happens
Trigger: Passing a modelConfig that has providerMeta but no modelMeta, or modelMeta: {} without an id.
Common situations: Configs assembled from provider-level settings only; partial config objects after refactors; deserialization dropping nested fields.
Related errors
- Data must be an object
- Model config cannot be empty
- Model provider metadata cannot be empty
- Model is not enabled
- Model provider metadata cannot be empty
AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27).
Data as JSON: /api/errors/459ec6737e498ea2.
Report an issue: GitHub.