deepseek-ai/deepseek-harness · error · Error
llm-pi-ai: provider "${provider}" defaultInput must name at
Error message
llm-pi-ai: provider "${provider}" defaultInput must name at least one modality What it means
Error "llm-pi-ai: provider "${provider}" defaultInput must name at least one modality" thrown in deepseek-ai/deepseek-harness.
Source
Thrown at packages/llm/llm-pi-ai/src/config.ts:423
if (!Number.isInteger(maxRequestImageBytes) || maxRequestImageBytes <= 0) {
throw new Error(`llm-pi-ai: provider "${provider}" maxRequestImageBytes must be a positive integer`)
}
const requestImagePixelBudget = source.requestImagePixelBudget ?? DEFAULT_REQUEST_IMAGE_PIXEL_BUDGET
if (!Number.isSafeInteger(requestImagePixelBudget) || requestImagePixelBudget <= 0) {
throw new Error(`llm-pi-ai: provider "${provider}" requestImagePixelBudget must be a positive safe integer`)
}
const requestImageMaxBytes = source.requestImageMaxBytes ?? DEFAULT_REQUEST_IMAGE_MAX_BYTES
if (!Number.isSafeInteger(requestImageMaxBytes) || requestImageMaxBytes <= 0) {
throw new Error(`llm-pi-ai: provider "${provider}" requestImageMaxBytes must be a positive safe integer`)
}
// Detached from the configuration object because pi-ai types `Model.input`
// mutable. The schema's explicit default covers an absent key, so an empty
// list here is always one someone typed — and unlike an entry's, nothing
// below it can answer instead — so it is refused rather than read as "no
// answer".
const defaultInput = [...source.defaultInput ?? DEFAULT_INPUT]
if (defaultInput.length === 0) {
throw new Error(`llm-pi-ai: provider "${provider}" defaultInput must name at least one modality`)
}
// The route key, not the installed provider's own name: the directory has
// always shown route keys, and a catalog route must not silently rename
// itself on every configuration surface just because it gained a profile.
const displayName = source.displayName ?? provider
const catalog = resolveRouteModels({
provider,
...source.api === undefined ? {} : { api: source.api },
...source.baseURL === undefined ? {} : { baseURL: source.baseURL },
...source.models === undefined ? {} : { models: source.models },
...source.modelOverrides === undefined ? {} : { modelOverrides: source.modelOverrides },
...source.compat === undefined ? {} : { compat: source.compat },
defaultInput,
defaultContextWindow: source.defaultContextWindow ?? DEFAULT_CONTEXT_WINDOW,
defaultMaxTokens: source.defaultMaxTokens ?? DEFAULT_MAX_TOKENS,
})
const { apiKeyEnv, retryPolicy, models: _models, displayName: _displayName, ...rest } = source
resolved.set(provider, {View on GitHub (pinned to b150a551b8)
Solutions
- Set defaultInput to at least one modality.
When it happens
Trigger: Thrown at packages/llm/llm-pi-ai/src/config.ts:423 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24).
Data as JSON: /api/errors/3590bbd1810a5fdd.
Report an issue: GitHub.