moeru-ai/airi · error · Error
Failed to add provider
Error message
Failed to add provider
What it means
Thrown by InferenceServiceProvidersService.createRemote when POST /v1/providers returns non-ok. The service posts a payload including id, definitionId, name, config, validated, and validationBypassed, then normalizes the response. Failure aborts before normalize, so no provider is added.
Source
Thrown at packages/stage-ui/src/services/inference-service-providers.ts:162
providers[provider.id] = provider
}
return providers
}
async function createRemote(client: InferenceServiceProvidersRemoteClient, provider: InferenceServiceProvider, options?: InferenceServiceProviderServiceOptions): Promise<InferenceServiceProvider> {
options?.abortSignal?.throwIfAborted()
const res = await client.api.v1.providers.$post({
json: {
id: provider.id,
definitionId: provider.definitionId,
name: getDefinedProvider(provider.definitionId)?.name ?? provider.definitionId,
config: provider.config,
validated: provider.status === 'configured',
validationBypassed: provider.status === 'bypassed',
},
}, requestOptions(options))
if (!res.ok)
throw new Error('Failed to add provider')
const item = await res.json()
options?.abortSignal?.throwIfAborted()
return normalize(item)
}
async function deleteRemote(client: InferenceServiceProvidersRemoteClient, providerId: string, options?: InferenceServiceProviderServiceOptions): Promise<void> {
options?.abortSignal?.throwIfAborted()
const res = await client.api.v1.providers[':id'].$delete({
param: { id: providerId },
}, requestOptions(options))
if (!res.ok)
throw new Error('Failed to remove provider')
options?.abortSignal?.throwIfAborted()
}
async function patchConfigRemote(
client: InferenceServiceProvidersRemoteClient,View on GitHub (pinned to 27111382b4)
Solutions
- Validate the provider config client-side before posting (required fields like apiKey for the definition).
- Confirm definitionId exists both client-side and server-side.
- Re-authenticate on 401/403; on 409 pick a unique id.
- Capture res.status and server validation detail to surface config errors to the settings form.
Example fix
// before
if (!res.ok)
throw new Error('Failed to add provider')
// after
if (!res.ok) {
const detail = await res.json().catch(() => null)
throw new AddProviderError(`Failed to add provider (status ${res.status})`, detail)
} Defensive patterns
Strategy: validation
Validate before calling
import { getDefinedProvider } from '../../libs/providers/providers'
function validateNewProvider(provider: { definitionId: string, config: Record<string, unknown> }): string[] {
const errors: string[] = []
if (!getDefinedProvider(provider.definitionId))
errors.push(`Unknown provider definition: ${provider.definitionId}`)
// definition-specific required-field checks (e.g. apiKey) go here
return errors
}
const issues = validateNewProvider(provider)
if (issues.length)
throw new Error('Invalid provider: ' + issues.join(', '))
await createRemote(client, provider) Type guard
function isRegisteredProviderDefinition(definitionId: string): boolean {
return !!getDefinedProvider(definitionId)
} Try / catch
try {
return await createRemote(client, provider)
}
catch (error) {
// Patch service to expose res.status + body; map 400/422 to config field errors, 409 to duplicate id.
// On 401/403 re-authenticate.
throw error
} Prevention
- Validate provider config client-side (including definition-specific required fields like apiKey) before posting.
- Confirm definitionId exists both client- and server-side.
- Embed res.status and server validation detail in the service error for the settings form.
When it happens
Trigger: client.api.v1.providers.$post({ json: {...} }) resolves with ok=false. Typical: 400 (invalid config / unknown definitionId server-side), 401/403 (not authenticated), 409 (duplicate provider id), 422 (config validation failed on the backend), 500 (server).
Common situations: Adding a provider with an invalid apiKey in config that fails server-side validation; duplicate id collision; session expired; backend provider validation stricter than client; definitionId not recognized by the server.
Related errors
- Failed to update provider config
- Failed to create character
- Failed to update character
- Failed to fetch providers
- Failed to remove provider
AI-assisted analysis of moeru-ai/airi@27111382b4 (2026-08-12).
Data as JSON: /api/errors/690d7f6ba8ecc468.
Report an issue: GitHub.