Files
AI-Horde/README_return_codes.md
T
tazlin 0dd3aef41c feat(chat): refusal reasons, worker fault reasons and nonconformant reply accounting
- Strict tool definitions (`function.strict: true`) pass the structural rules of a strict `response_format`, with OpenAI's wording at `tools[i].function.parameters`
- The front bounds every OpenAI sampling parameter with OpenAI's ranges and messages before the native call (temperature 0 to 2, top_p 0 to 1, penalties -2 to 2, `n` 1, at most 4 stops, at least one message); `max_tokens` below the native floor of 16 is refused with the floor stated; a native validation failure maps to the failing `param`
- Responses carry `system_fingerprint`, a short hash of the serving worker and model; the front reference and how-to list the deliberate deviations from OpenAI
- A refused worker reply records its message and return code on the request and the return code on the generation; a faulted request reports `fault_reason` and `fault_rc` on status and in the fault event, and the front's 502 states the refusal with the code in metadata
- A fault that follows a `ChatSubmitNonconformant` refusal counts in the worker's `nonconformant_replies`, exposed in worker details and the moderation report, and leaves the dropped-job counts unchanged, since the worker generated and the reply failed the contract; structural refusals count as dropped jobs
- A chat fault submit accepts an optional `fault_reason` from a fixed vocabulary (`prompt_overflow`, `unbuildable_grammar`, `tool_violation`, `reply_refused`, `generation_error`); a known value stores the server's sentence for it with return code `ChatWorkerFault`, and does not overwrite a reason the server recorded when it refused the same generation; an unknown value is ignored; a reason does not change how the fault is counted
- The front waits while jobs remain and checks a done status without a generation again before answering `ChatRequestNoGeneration`; cancelled requests without a result settle promptly, and completion mapping requires a generation
- Migration 5.1.15 adds `chat_fault_reason`, `chat_fault_rc`, `processing_gens.chat_refusal_rc` and `workers.nonconformant_replies`; docs and tests per item
2026-10-30 23:46:05 -04:00

19 KiB

AI Horde Errors

Every time an exception is raised by the AI Horde, it will return both the http code, a human-readable "message" and an rc field which will contain a unique string code for each type of error the horde might raise. You can use these to better adjust your client logic or for informing your users using your own words or in other languages.

This page will list all existing Horde RCs

Format

The errors returned by the AI horde are always in this json format

{
  "message": "Human readable explanation on what went wrong",
  "rc": "SomeReturnCodeInCamelCase"
}

Return Codes

RC Explanation
MissingPrompt The generation prompt was not given
CorruptPrompt The prompts was rejected as unethical
KudosValidationError Something went wrong when transferring kudos. This is a base rc, so you should never typically see it.
NoValidActions Something went wrong when modifying an entity on the horde. This is a base rc, so you should never typically see it.
InvalidSize Requested image size is not a multiple of 64
InvalidPromptSize Prompt is too large
TooManySteps Too many steps requested for image generation
Profanity Profanity Detected. This is a base rc, so you should never typically see it.
ProfaneWorkerName Profanity detected in worker name
ProfaneBridgeAgent Profanity detected in bridge agent
ProfaneWorkerInfo Profanity detected in worker info
ProfaneUserName Profanity detected in username
ProfaneUserContact Profanity detected in user contact details
ProfaneAdminComment Profanity detected in admin comment
ProfaneTeamName Profanity detected in team name
ProfaneTeamInfo Profanity detected in team info
TooLong Provided string was too long. This is a base rc, so you should never typically see it.
TooLongWorkerName The provided worker name is too long
TooLongUserName The provided username is too long
NameAlreadyExists The provided name already exists. This is a base rc, so you should never typically see it.
WorkerNameAlreadyExists The provided worker name already exists
TeamNameAlreadyExists The provided team name already exists
PolymorphicNameConflict The provided worker name already exists for a different worker type (e.g. Dreamer VS Scribe)
ImageValidationFailed Source image validation failed unexpectedly
SourceImageResolutionExceeded Source image resolution larger than the max allowed by the AI Horde
SourceImageSizeExceeded Source image file size larger than the max allowed by the AI Horde
SourceImageUrlInvalid Source image url does not contain an image
SourceImageUrlRefused A source image or chat image URL is not http(s), does not resolve, resolves or redirects to a private, loopback, link-local, multicast or otherwise non-public address, or redirects more than 3 times
SourceImageUnreadable Source image could not be parsed
InpaintingMissingMask Missing mask or alpha channel for inpainting
SourceMaskUnnecessary Source mask sent without a source image
UnsupportedSampler Selected sampler unsupported with selected model
UnsupportedModel The required model name is unsupported with this payload. This is a base rc, so you should never typically see it.
ControlNetUnsupported ControlNet is unsupported in combination with this model
ControlNetSourceMissing Missing source image for ControlNet workflow
ControlNetInvalidPayload sent CN source and requested CN source at the same time
SourceImageRequiredForModel Source image is required for using this model
UnexpectedModelName Model name sent is not a Stable Diffusion checkpoint
TooManyUpscalers Tried to use more than 1 upscaler at a time
ProcGenNotFound The used generation for aesthetic ratings doesn't exist
InvalidAestheticAttempt Aesthetics rating attempt failed
AestheticsNotCompleted Attempted to rate non-completed request
AestheticsNotPublic Attempted to rate non-shared request
AestheticsDuplicate Sent duplicate images in an aesthetics set
AestheticsMissing Aesthetic ratings missing
AestheticsSolo Aesthetic ratings best-of contain a single image
AestheticsConfused The best image is not the one with the highest aesthetic rating
AestheticsAlreadyExist Aesthetic rating already submitted
AestheticsServerRejected Aesthetic server rejected submission
AestheticsServerError Aesthetic server returned error (provided)
AestheticsServerDown Aesthetic server is down
AestheticsServerTimeout Aesthetic server timed out during submission
InvalidAPIKey Invalid AI Horde API key provided
WrongCredentials Provided user does not own this worker
NotAdmin Request needs AI Horded admin credentials
NotModerator Request needs AI Horded moderator credentials
NotOwner Request needs worker owner credentials
NotRequestOwner Request parameters can only be retrieved with the API key that submitted the request
NotPrivileged This user is not hardcoded to perform this operation
AnonForbidden Anonymous is not allowed to perform this operation
AnonForbiddenWorker Anonymous tried to run a worker
AnonForbiddenUserMod Anonymous tried to modify their user account
NotTrusted Untrusted users are not allowed to perform this operation
UntrustedTeamCreation Untrusted user tried to create a team
UntrustedUnsafeIP Untrusted user tried to use a VPN for a worker
WorkerMaintenance Worker has been put into maintenance and cannot pop new jobs
WorkerFlaggedMaintenance Worker owner has been flagged and worker has been put into permanent maintenance
TooManySameIPs Same IP attempted to spawn too many workers
WorkerInviteOnly AI Horde is in worker invite-only mode and worker owner needs to request permission
UnsafeIP Worker attempted to connect from VPN
TimeoutIP Operation rejected because user IP in timeout
TooManyNewIPs Too many workers from new IPs currently
KudosUpfront This request requires upfront kudos to accept
SharedKeyEmpty Shared Key used in the request does not have any more kudos
InvalidJobID Job not found when trying to submit. This probably means its request was delected for inactivity
RequestNotFound Request not found. This probably means it was delected for inactivity
WorkerNotFound Worker ID not found
TeamNotFound Team ID not found
FilterNotFound Regex filter not found
UserNotFound User not found
DuplicateGen Job has already been submitted
AbortedGen Request aborted because too many jobs have failed
RequestExpired Request expired
TooManyPrompts User has requested too many generations concurrently
NoValidWorkers No workers online which can pick up this request
MaintenanceMode Request aborted because horde is in maintenance mode
TargetAccountFlagged Action rejected because target user has been flagged for violating Horde ToS
SourceAccountFlagged Action rejected because source user has been flagged for violating Horde ToS
FaultWhenKudosReceiving Unexpected error when receiving kudos
FaultWhenKudosSending Unexpected error when sending kudos
TooFastKudosTransfers User tried to send kudos too fast after receiving them from the same user
KudosTransferToAnon User tried to transfer kudos to Anon
KudosTransferToSelf User tried to transfer kudos to themselves
KudosTransferNotEnough User tried to transfer more kudos than they have
NegativeKudosTransfer User tried to transfer negative kudos
KudosTransferFromAnon User tried to transfer kudos using the Anon API key
InvalidAwardUsername Tried to award kudos to non-existing user
KudosAwardToAnon Tried to award kudos to Anonymous user
NotAllowedAwards This user is not allowed to Award Kudos
NoWorkerModSelected No valid worker modification selected
NoUserModSelected No valid user modification selected
NoHordeModSelected No valid horde modification selected
NoTeamModSelected No valid team modification selected
NoFilterModSelected No valid regex filter modification selected
NoSharedKeyModSelected No valid shared key modification selected
BadRequest Generic HTTP 400 code. You should typically never see this
Forbidden Generic HTTP 401 code. You should typically never see this
Locked Generic HTTP code. You should typically never see this
ControlNetInpaintingMismatch ControlNet cannot be used with inpainting at this time
ControlNetInpaintingMismatch ControlNet does not work with SDXL currently
HiResFixMismatch hires fix does not work with SDXL currently
TooManyLoras You cannot request more than 5 loras per generation
BadLoraVersion explicit LoRa version requests have to be a version ID (i.e integer).
TooManyTIs You cannot request more than 20 Textual Inversions per generation.
BetaAnonForbidden Anonymous users cannot use the SDXL_beta.
BetaComparisonFault You need to request at least 2 images for SDXL to allow for comparison
BadCFGDecimals cfg_scale must be rounded to 2 decimal places
BadCFGNumber cfg_scale must be a valid number
BadClientAgent Banned client Agent
SpecialMissingPayload Special models have to include a special payload
SpecialForbidden This model can only be requested by a specific username
SpecialMissingUsername Special models must always include the username, in the form of 'horde_special::user#id'
SpecialModelNeedsSpecialUser Only special users can request a special model.", "SpecialModelNeedsSpecialUser
SpecialFieldNeedsSpecialUser Only special users can send a special field
Img2ImgMismatch Img2Img cannot be used in combination with this model
TilingMismatch Tiling cannot be used in combination with this model
ControlNetMismatch ControlNet cannot be used in combination with this model
HiResMismatch HiRes fix cannot be used in combination with this model
EducationCannotSendKudos Education accounts cannot transfer kudos out
InvalidPriorityUsername Prioritized user format wrong
SharedKeyExpired This shared key has expired
SharedKeyInsufficientKudos This Shared key has insufficient kudos for this request
OnlyServiceAccountProxy This request requires a Service Account
RequiresTrust This request requires the user to be trusted or a patreon
SamplerKnobInapplicable The requested sampler has no such solver setting
SamplerKnobOutOfRange A solver setting is outside the range this sampler accepts
SamplerSolverTypeUnsupported This sampler does not accept the requested solver type
SamplerSchedulerMismatch This sampler and scheduler combination does not converge
SchedulerBaselineMismatch The requested scheduler is not defined for this model's baseline
FlowShiftInapplicable Flow shift is not applied by the selected model baseline's backend graph
FlowShiftOutOfRange Flow shift is outside the backend's accepted range
ControlStrengthWithoutControlType Control strength was sent without a control type or the QR workflow to apply it to
ControlStrengthOutOfRange Control strength is outside the accepted range
CannotDeleteMod A moderator account cannot be deleted; contact an admin
CannotWipeActiveUser An account that was active in the last 30 days cannot be wiped yet
DeletedUser This account has been scheduled for deletion and is disabled
ExampleURLAlreadyInUse The image style already has an example at this URL
ExcessiveStopSequence The total length of the stop sequences exceeds the allowed limit
InvalidControlType The annotation form requires a known control_type in its payload
InvalidExtraSourceImages This request type does not accept extra source images
InvalidExtraTexts This request type does not accept extra texts
InvalidModerationAddressFilter The moderation evidence ipaddr or ip_subject_key filter is not a valid address, network or pseudonym
InvalidModerationEventID The moderation evidence event_id filter is not a positive integer
InvalidModerationNote A moderation note is 1 to 2000 characters and may not contain NUL bytes
InvalidModerationReason The moderation evidence reason filter is not a known moderation reason
InvalidModerationTimeRange The moderation evidence time bounds are not a valid range
InvalidOperationsCursor The pagination cursor for a moderator operations listing is not positive
InvalidOperationsLimit The page size for a moderator operations listing is out of range
InvalidPromptEncoding The prompt contains characters that cannot be encoded (unpaired UTF-16 surrogates)
InvalidRemixModel Image remix is not available for this model baseline
InvalidSuspicionID No suspicion reason exists with the given ID
InvalidTransparencyCN Transparent images cannot be generated in ControlNet workflows
InvalidTransparencyImg2Img Transparent images cannot be generated in img2img workflows
InvalidTransparencyModel Transparent images cannot be generated for this model baseline
InvalidWorkerID The worker ID is not a UUID
MessagesOnlyOwnWorkers Messages can only be sent to your own workers
MissingExtraTexts This workflow requires the extra texts to be provided
MissingFullSamplerOrder A custom sampler order must list every sampler
ModerationEventNotFound No moderation event exists with the given ID
MoreThanMinExtraSourceImage Only trusted users and patrons can send more than one extra source image, or more than one image on a chat request
NonServiceForbidden Only service accounts can set a proxy passkey
NotUserOrMod Only the user themselves or a moderator can delete a user
NulByteInPayload The request payload may not contain NUL bytes
PromptExceedsContext The prompt does not fit the context length the request would run under
SharedKeyAssignedStyles This shared key is restricted to specific styles
SharedKeyInvalid The shared key given for the style does not exist
StyleDeclarationInvalid A style's stored parameter policy or template fields no longer pass validation, so the style cannot be applied
StyleGetMistmatch The style exists, but its type does not match the route it was read through
StyleMismatch The style's type does not match the request, or a collection mixes image and text styles
StyleParameterAboveCeiling A requested parameter is above the ceiling the style puts on it
StylePolicyOverridableMisplaced A style's overridable list is only read under the 'listed' override mode
StylePromptFieldInvalid A text style prompt has a placeholder that is more than a bare name, or a brace that does not parse
StylePromptMissingVars A style prompt lacks the '{p}' placeholder, or an image style prompt lacks '{np}'
StylesAnonForbidden Anonymous users cannot create styles
StylesRequiresCustomizer Only customizers and trusted users can create styles
TemplateFieldMissing The style requires a template field the request did not supply
TemplateFieldUnknown The request supplied a template field the style does not declare
TemplateFieldsMatchNoCollectionStyle None of the collection's styles accepts the template fields the request supplies
TemplateFieldsRequireStyle Template fields can only be sent alongside a style
ThingNotFound No item exists with the given ID
TokenOverflow More tokens were requested than the context length allows
TooManyExtraSourceImages At most 5 extra source images, or 5 images on a chat request, can be sent
TooManyStopSequences Too many stop sequences were specified
TooManyStyleExamples An image style can have at most 4 examples
TooManyWorkers Untrusted users can have at most 3 distinct workers
TooManyWorkersTrusted Trusted users cannot onboard more than 20 workers without contacting the team
UnsupportedChatParameter A chat request used a key, role, value or content part the horde does not serve, its tool history breaks OpenAI's rule (each assistant message's tool calls answered right after it, each id exactly once), a strict json_schema breaks OpenAI's structural rules, a schema nests too deeply, or its tools, response format or text exceed their size bound; the message names it
ChatRequestConflict Two keys of a chat request contradict each other, such as differing max_tokens and max_completion_tokens, or both horde.only and horde.ignore, a tool_choice (none included) or parallel_tool_calls without tools, a tool_choice forcing a function the tools do not define, or, under horde.openai_guards, a json_object format without the word "json" in the messages
ChatAdmissionDisabled This horde is not accepting new chat requests (HTTP 503); queued chat requests are still served
ChatDeclarationInvalid A text pop set chat_jobs without chat_limits or model_id, with a negative chat_limits.tools_max_temperature, or with a model_id that is not one of the worker's models, or set prompt_jobs to false without chat_jobs
ChatSubmitInvalid A chat job's submit lacked a valid message or finish_reason, had null content without tool_calls, gave the tool_calls finish reason without tool calls, called a function the request did not offer, gave two tool calls the same id, carried generation, or a text job's submit carried message
ChatSubmitNonconformant A chat job's reply to a strict request broke its tool_choice (a call under none, no call under required, or a missing or other call under a named choice) or its response_format (content that is not a JSON object, content not matching a strict json_schema, or a strict schema that cannot be compiled)
ChatWorkerFault Not sent as a refusal. The fault_rc of a faulted chat request whose worker sent a known fault_reason with its faulted submit; fault_reason holds the AI Horde's message for that reason. The OpenAI-compatible front returns it as metadata.rc of its 502
ChatModelMismatch A chat job's submit named another model_id than the model the job was assigned
UnknownChatModel A chat request's model is not in the text model reference and no online worker serves chat jobs with it (HTTP 404)
ChatImageStorageUnavailable A chat request's images could not be stored; nothing was queued or charged (HTTP 503)
OperationKeyConflict A chat request reused an operation key the same user already claimed with a different request
RequestTooLarge The request body is larger than the route accepts (HTTP 413)
UserNotDeleted The user is not deleted and cannot be undeleted