Skip to content

_status

AlchemyUpscaleResult

Bases: HordeAPIData

Represents the result of an upscale job.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyUpscaleResult(HordeAPIData):
    """Represents the result of an upscale job."""

    upscaler_used: KNOWN_UPSCALERS | str
    """The upscaler used."""
    url: str
    """The URL of the upscaled image."""

upscaler_used instance-attribute

upscaler_used: KNOWN_UPSCALERS | str

The upscaler used.

url instance-attribute

url: str

The URL of the upscaled image.

AlchemyCaptionResult

Bases: HordeAPIData

Represents the result of a caption job.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyCaptionResult(HordeAPIData):
    """Represents the result of a caption job."""

    caption: str
    """The resulting caption of the image."""

caption instance-attribute

caption: str

The resulting caption of the image.

AlchemyNSFWResult

Bases: HordeAPIData

Represents the result of an NSFW evaluation.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyNSFWResult(HordeAPIData):
    """Represents the result of an NSFW evaluation."""

    nsfw: bool
    """Whether the image is likely to be NSFW."""

nsfw instance-attribute

nsfw: bool

Whether the image is likely to be NSFW.

AlchemyInterrogationResultItem

Bases: HordeAPIData

Represents an item in the result of an interrogation job.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyInterrogationResultItem(HordeAPIData):
    """Represents an item in the result of an interrogation job."""

    text: str
    """The text of the item."""
    confidence: float
    """The confidence of the item."""

text instance-attribute

text: str

The text of the item.

confidence instance-attribute

confidence: float

The confidence of the item.

AlchemyInterrogationDetails

Bases: HordeAPIData

The details of an interrogation job.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyInterrogationDetails(HordeAPIData):
    """The details of an interrogation job."""

    tags: list[AlchemyInterrogationResultItem]
    """The resulting similar tags of the image."""
    sites: list[AlchemyInterrogationResultItem]
    """The resulting similar sites of the image."""
    artists: list[AlchemyInterrogationResultItem]
    """The resulting similar artists of the image."""
    flavors: list[AlchemyInterrogationResultItem]
    """The resulting similar flavors of the image."""
    mediums: list[AlchemyInterrogationResultItem]
    """The resulting similar mediums of the image."""
    movements: list[AlchemyInterrogationResultItem]
    """The resulting similar movements of the image."""
    techniques: list[AlchemyInterrogationResultItem]
    """The resulting similar techniques of the image."""

tags instance-attribute

tags: list[AlchemyInterrogationResultItem]

The resulting similar tags of the image.

sites instance-attribute

sites: list[AlchemyInterrogationResultItem]

The resulting similar sites of the image.

artists instance-attribute

artists: list[AlchemyInterrogationResultItem]

The resulting similar artists of the image.

flavors instance-attribute

flavors: list[AlchemyInterrogationResultItem]

The resulting similar flavors of the image.

mediums instance-attribute

mediums: list[AlchemyInterrogationResultItem]

The resulting similar mediums of the image.

movements instance-attribute

movements: list[AlchemyInterrogationResultItem]

The resulting similar movements of the image.

techniques instance-attribute

techniques: list[AlchemyInterrogationResultItem]

The resulting similar techniques of the image.

AlchemyInterrogationResult

Bases: HordeAPIData

Represents the result of an interrogation job. Use the interrogation field for the details.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyInterrogationResult(HordeAPIData):
    """Represents the result of an interrogation job. Use the `interrogation` field for the details."""

    interrogation: AlchemyInterrogationDetails
    """The details of the interrogation."""

interrogation instance-attribute

interrogation: AlchemyInterrogationDetails

The details of the interrogation.

AlchemyFormStatus

Bases: HordeAPIData

Represents the status of a form in an interrogation job.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyFormStatus(HordeAPIData):
    """Represents the status of a form in an interrogation job."""

    form: KNOWN_ALCHEMY_TYPES | str
    """The form type."""
    state: GENERATION_STATE
    """The state of the form."""
    result: AlchemyInterrogationDetails | AlchemyNSFWResult | AlchemyCaptionResult | AlchemyUpscaleResult | None = None
    """The result of the form."""

    @field_validator("form", mode="before")
    def validate_form(cls, v: str | KNOWN_ALCHEMY_TYPES) -> KNOWN_ALCHEMY_TYPES | str:
        if isinstance(v, KNOWN_ALCHEMY_TYPES):
            return v
        if str(v) not in KNOWN_ALCHEMY_TYPES.__members__:
            logger.warning(f"Unknown form type {v}. Is your SDK out of date or did the API change?")
        return v

    @property
    def done(self) -> bool:
        """Return whether the form is done."""
        return self.state == "done"

    @field_validator("result", mode="before")
    def validate_result(
        cls,
        v: dict[str, object],
    ) -> dict[str, object] | None:
        if "additionalProp1" in v:
            logger.debug("Found additionalProp1 in result, this is a dummy result. Ignoring.")
            return None

        for key in list(v.keys()):
            if key in KNOWN_UPSCALERS.__members__:
                v["upscaler_used"] = KNOWN_UPSCALERS(key)
                v["url"] = v[key]
                del v[key]

        return v

form instance-attribute

form: KNOWN_ALCHEMY_TYPES | str

The form type.

state instance-attribute

state: GENERATION_STATE

The state of the form.

result class-attribute instance-attribute

result: AlchemyInterrogationDetails | AlchemyNSFWResult | AlchemyCaptionResult | AlchemyUpscaleResult | None = None

The result of the form.

done property

done: bool

Return whether the form is done.

validate_form

validate_form(v: str | KNOWN_ALCHEMY_TYPES) -> KNOWN_ALCHEMY_TYPES | str
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@field_validator("form", mode="before")
def validate_form(cls, v: str | KNOWN_ALCHEMY_TYPES) -> KNOWN_ALCHEMY_TYPES | str:
    if isinstance(v, KNOWN_ALCHEMY_TYPES):
        return v
    if str(v) not in KNOWN_ALCHEMY_TYPES.__members__:
        logger.warning(f"Unknown form type {v}. Is your SDK out of date or did the API change?")
    return v

validate_result

validate_result(v: dict[str, object]) -> dict[str, object] | None
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@field_validator("result", mode="before")
def validate_result(
    cls,
    v: dict[str, object],
) -> dict[str, object] | None:
    if "additionalProp1" in v:
        logger.debug("Found additionalProp1 in result, this is a dummy result. Ignoring.")
        return None

    for key in list(v.keys()):
        if key in KNOWN_UPSCALERS.__members__:
            v["upscaler_used"] = KNOWN_UPSCALERS(key)
            v["url"] = v[key]
            del v[key]

    return v

AlchemyStatusResponse

Bases: HordeResponseBaseModel, ResponseWithProgressMixin

The response from the /v2/interrogate/status/{id} endpoint.

You will find the results of the alchemy here.

v2 API Model: InterrogationStatus

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyStatusResponse(HordeResponseBaseModel, ResponseWithProgressMixin):
    """The response from the `/v2/interrogate/status/{id}` endpoint.

    You will find the results of the alchemy here.

    v2 API Model: `InterrogationStatus`
    """

    state: GENERATION_STATE
    """The state of the job. See `GENERATION_STATE` for possible values."""
    forms: list[AlchemyFormStatus]
    """The status of each form in the job."""

    @property
    def all_interrogation_results(self) -> list[AlchemyInterrogationDetails]:
        """Return all completed interrogation results."""
        return [
            form.result for form in self.forms if form.done and isinstance(form.result, AlchemyInterrogationDetails)
        ]

    @property
    def all_nsfw_results(self) -> list[AlchemyNSFWResult]:
        """Return all completed nsfw results."""
        return [form.result for form in self.forms if form.done and isinstance(form.result, AlchemyNSFWResult)]

    @property
    def all_caption_results(self) -> list[AlchemyCaptionResult]:
        """Return all completed caption results."""
        return [form.result for form in self.forms if form.done and isinstance(form.result, AlchemyCaptionResult)]

    @property
    def all_upscale_results(self) -> list[AlchemyUpscaleResult]:
        """Return all completed upscale results."""
        return [form.result for form in self.forms if form.done and isinstance(form.result, AlchemyUpscaleResult)]

    @classmethod
    def get_api_model_name(cls) -> str | None:
        return "InterrogationStatus"

    @override
    def is_job_complete(self, number_of_result_expected: int) -> bool:
        found_results = 0
        if not self.forms:
            return False
        for form in self.forms:
            if form.state != "done":
                return False
            found_results += 1
        return found_results == number_of_result_expected

    @override
    def is_job_possible(self) -> bool:
        return True  # FIXME

    @override
    @classmethod
    def is_final_follow_up(cls) -> bool:
        return True

    @override
    @classmethod
    def get_finalize_success_request_type(cls) -> None:
        return None

    def __eq__(self, other: object) -> bool:
        if not isinstance(other, AlchemyStatusResponse):
            return False
        return self.state == other.state and all(form in other.forms for form in self.forms)

    def __hash__(self) -> int:
        return hash((self.state, tuple(self.forms)))

state instance-attribute

state: GENERATION_STATE

The state of the job. See GENERATION_STATE for possible values.

forms instance-attribute

forms: list[AlchemyFormStatus]

The status of each form in the job.

all_interrogation_results property

all_interrogation_results: list[AlchemyInterrogationDetails]

Return all completed interrogation results.

all_nsfw_results property

all_nsfw_results: list[AlchemyNSFWResult]

Return all completed nsfw results.

all_caption_results property

all_caption_results: list[AlchemyCaptionResult]

Return all completed caption results.

all_upscale_results property

all_upscale_results: list[AlchemyUpscaleResult]

Return all completed upscale results.

get_api_model_name classmethod

get_api_model_name() -> str | None
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@classmethod
def get_api_model_name(cls) -> str | None:
    return "InterrogationStatus"

is_job_complete

is_job_complete(number_of_result_expected: int) -> bool
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
def is_job_complete(self, number_of_result_expected: int) -> bool:
    found_results = 0
    if not self.forms:
        return False
    for form in self.forms:
        if form.state != "done":
            return False
        found_results += 1
    return found_results == number_of_result_expected

is_job_possible

is_job_possible() -> bool
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
def is_job_possible(self) -> bool:
    return True  # FIXME

is_final_follow_up classmethod

is_final_follow_up() -> bool
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def is_final_follow_up(cls) -> bool:
    return True

get_finalize_success_request_type classmethod

get_finalize_success_request_type() -> None
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_finalize_success_request_type(cls) -> None:
    return None

__eq__

__eq__(other: object) -> bool
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
def __eq__(self, other: object) -> bool:
    if not isinstance(other, AlchemyStatusResponse):
        return False
    return self.state == other.state and all(form in other.forms for form in self.forms)

__hash__

__hash__() -> int
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
def __hash__(self) -> int:
    return hash((self.state, tuple(self.forms)))

AlchemyStatusRequest

Bases: BaseAIHordeRequest, JobRequestMixin, APIKeyAllowedInRequestMixin

Represents the data needed to make a request to the /v2/interrogate/status/{id} endpoint.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyStatusRequest(
    BaseAIHordeRequest,
    JobRequestMixin,
    APIKeyAllowedInRequestMixin,
):
    """Represents the data needed to make a request to the `/v2/interrogate/status/{id}` endpoint."""

    @override
    @classmethod
    def get_api_model_name(cls) -> str | None:
        return None

    @override
    @classmethod
    def get_http_method(cls) -> HTTPMethod:
        return HTTPMethod.GET

    @override
    @classmethod
    def get_api_endpoint_subpath(cls) -> AI_HORDE_API_ENDPOINT_SUBPATH:
        return AI_HORDE_API_ENDPOINT_SUBPATH.v2_interrogate_status

    @override
    @classmethod
    def get_default_success_response_type(cls) -> type[AlchemyStatusResponse]:
        return AlchemyStatusResponse

get_api_model_name classmethod

get_api_model_name() -> str | None
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_api_model_name(cls) -> str | None:
    return None

get_http_method classmethod

get_http_method() -> HTTPMethod
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_http_method(cls) -> HTTPMethod:
    return HTTPMethod.GET

get_api_endpoint_subpath classmethod

get_api_endpoint_subpath() -> AI_HORDE_API_ENDPOINT_SUBPATH
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_api_endpoint_subpath(cls) -> AI_HORDE_API_ENDPOINT_SUBPATH:
    return AI_HORDE_API_ENDPOINT_SUBPATH.v2_interrogate_status

get_default_success_response_type classmethod

get_default_success_response_type() -> type[AlchemyStatusResponse]
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_default_success_response_type(cls) -> type[AlchemyStatusResponse]:
    return AlchemyStatusResponse

AlchemyDeleteRequest

Bases: BaseAIHordeRequest, JobRequestMixin

Represents the data needed to make a request to the /v2/interrogate/status/{id} endpoint.

Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
class AlchemyDeleteRequest(
    BaseAIHordeRequest,
    JobRequestMixin,
):
    """Represents the data needed to make a request to the `/v2/interrogate/status/{id}` endpoint."""

    @override
    @classmethod
    def get_api_model_name(cls) -> str | None:
        return None

    @override
    @classmethod
    def get_http_method(cls) -> HTTPMethod:
        return HTTPMethod.DELETE

    @override
    @classmethod
    def get_api_endpoint_subpath(cls) -> AI_HORDE_API_ENDPOINT_SUBPATH:
        return AI_HORDE_API_ENDPOINT_SUBPATH.v2_interrogate_status

    @override
    @classmethod
    def get_default_success_response_type(cls) -> type[AlchemyStatusResponse]:
        return AlchemyStatusResponse

get_api_model_name classmethod

get_api_model_name() -> str | None
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_api_model_name(cls) -> str | None:
    return None

get_http_method classmethod

get_http_method() -> HTTPMethod
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_http_method(cls) -> HTTPMethod:
    return HTTPMethod.DELETE

get_api_endpoint_subpath classmethod

get_api_endpoint_subpath() -> AI_HORDE_API_ENDPOINT_SUBPATH
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_api_endpoint_subpath(cls) -> AI_HORDE_API_ENDPOINT_SUBPATH:
    return AI_HORDE_API_ENDPOINT_SUBPATH.v2_interrogate_status

get_default_success_response_type classmethod

get_default_success_response_type() -> type[AlchemyStatusResponse]
Source code in horde_sdk/ai_horde_api/apimodels/alchemy/_status.py
@override
@classmethod
def get_default_success_response_type(cls) -> type[AlchemyStatusResponse]:
    return AlchemyStatusResponse