mirror of
https://github.com/Haidra-Org/AI-Horde.git
synced 2026-11-06 05:17:31 +00:00
With no eligible worker the free allowance takes its floor, and a request over it was refused for kudos that do not help until a worker that can serve it comes online. - A text or chat request the kudos rules would refuse while no online worker passes the dispatch gates is refused 403 NoEligibleWorker (TextAsyncGenerate.refuse_when_no_worker_is_eligible). The waiting prompt is deleted and the decision counter records refused. - The NoEligibleWorker message states the missing declarations or exceeded limits when they are the cause. The body carries impossible_reason in the status route's shape. - handle_bad_requests merges an exception's body_fields into the error body. Exceptions without body_fields keep the message and rc body. - Funded requests and requests within the allowance are created and queued whether or not a worker can serve them. - The front reads impossible_reason from a native error body onto HordeAPIError. _horde_error maps NoEligibleWorker to no_worker_supports_features, no_worker_supports_limit or no_eligible_worker. - The front's gap and no-eligible-worker errors take request_id and job_may_exist. A refusal at submit carries no request id and does not state that the request was cancelled. - _size_limit_gap_chat_offers takes the gap directly, so a submit refused on a size limit gap states the largest declared limit. - NoEligibleWorker is in KNOWN_RC, README_return_codes.md, ADR 0037, chat_requests.md and chat_front.md.
20 KiB
20 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, or the images of a chat request larger in all than the total allowed for the user |
| 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 |
| NoEligibleWorker | A text or chat request would be refused for kudos while no online worker can serve it (HTTP 403); the message states the declaration gap when there is one, and the body then carries impossible_reason. Nothing was queued or charged |
| 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 |
| 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 20 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 |
| ChatKudosCapExceeded | A chat request's kudos estimate at current pricing exceeds its horde.max_kudos; the message states both, and nothing was queued or charged (HTTP 400) |
| UnknownChatModel | A chat request's model, or an entry of its models, is not in the text model reference and no online worker serves chat jobs with it (HTTP 404); for an entry the message starts with its quoted path, such as 'models[1]' |
| 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) |
| ChatProgressNotStreaming | A chat job's progress post named a stored, unfaulted generation without a lease: not streamed, already submitted or past its lease (HTTP 404); the worker stops posting and still submits |
| ChatProgressOutOfSequence | A chat job's progress post sent a seq other than the next one, or repeated the last one with other content (HTTP 409); the body carries expected_seq |
| ChatProgressCapReached | A chat job's progress post would pass the generation's entry or byte cap (HTTP 413); the worker stops posting and still submits |
| ChatProgressUnavailable | A chat job's progress post could not be stored because Redis could not be reached (HTTP 503) |
| ChatJobAborted | A chat job's progress post named a generation without a lease that is faulted, as after its lease lapsed or its request was cancelled, or not stored, as after its request expired (HTTP 404); the worker stops generating and does not submit |
| UserNotDeleted | The user is not deleted and cannot be undeleted |