deepseek-ai/deepseek-harness · error · LlmError
UNSTORABLE_PROVIDER_ID
UNSTORABLE_PROVIDER_ID
Error message
llm-pi-ai: provider id "${providerId}" cannot address a stored credential record (a record id is a lowercase hyphenated identifier); authenticate this route through apiKeyEnv instead of a stored credential What it means
Error "llm-pi-ai: provider id "${providerId}" cannot address a stored credential record (a record id is a lowercase hyphenated identifier); authenticate this route through apiKeyEnv instead of a stored credential" thrown in deepseek-ai/deepseek-harness.
Source
Thrown at packages/llm/llm-pi-ai/src/auth.ts:141
return toPiCredential(await credentials.readRecord(recordKeyFor(providerId)))
},
async list(): Promise<readonly CredentialInfo[]> {
const stored = await ctx.get('credentials')?.listRecords() ?? []
const mine: CredentialInfo[] = []
for (const entry of stored) {
// Records another plugin owns are not this collection's to report:
// their payloads are written in a format pi-ai never agreed to.
if (credentialKeyScope(entry.key) !== RECORD_SCOPE) continue
mine.push({
providerId: credentialKeyId(entry.key),
type: entry.kind === 'api-key' ? 'api_key' : 'oauth',
})
}
return mine
},
async modify(providerId, mutate) {
if (!isCredentialKeySegment(providerId)) {
throw new LlmError(
`llm-pi-ai: provider id "${providerId}" cannot address a stored credential record (a record id is a`
+ ' lowercase hyphenated identifier); authenticate this route through apiKeyEnv instead of a stored'
+ ' credential',
'UNSTORABLE_PROVIDER_ID',
)
}
const stored = await writableStore(ctx).modifyRecord(recordKeyFor(providerId), async (current) => {
const next = await mutate(toPiCredential(current))
return next === undefined ? undefined : toRecord(next)
})
return toPiCredential(stored)
},
// `async` so a missing service reaches the caller as a rejection: pi-ai's
// store contract is promise-returning, and a synchronous throw would
// escape the `ModelsError` wrapper every other storage failure gets.
async delete(providerId) {
if (!isCredentialKeySegment(providerId)) return
await writableStore(ctx).deleteRecord(recordKeyFor(providerId))View on GitHub (pinned to b150a551b8)
Solutions
- Authenticate this route through apiKeyEnv instead of a stored credential, or use a lowercase hyphenated provider id.
When it happens
Trigger: Thrown at packages/llm/llm-pi-ai/src/auth.ts:141 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24).
Data as JSON: /api/errors/5a15eb0bddbf2101.
Report an issue: GitHub.