mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-01-14 15:57:59 -05:00
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Optional, Union
|
|
|
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput
|
|
from invokeai.app.services.invocation_cache.invocation_cache_common import InvocationCacheStatus
|
|
|
|
|
|
class InvocationCacheBase(ABC):
|
|
"""
|
|
Base class for invocation caches.
|
|
When an invocation is executed, it is hashed and its output stored in the cache.
|
|
When new invocations are executed, if they are flagged with `use_cache`, they
|
|
will attempt to pull their value from the cache before executing.
|
|
|
|
Implementations should register for the `on_deleted` event of the `images` and `latents`
|
|
services, and delete any cached outputs that reference the deleted image or latent.
|
|
|
|
See the memory implementation for an example.
|
|
|
|
Implementations should respect the `node_cache_size` configuration value, and skip all
|
|
cache logic if the value is set to 0.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get(self, key: Union[int, str]) -> Optional[BaseInvocationOutput]:
|
|
"""Retrieves an invocation output from the cache"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def save(self, key: Union[int, str], invocation_output: BaseInvocationOutput) -> None:
|
|
"""Stores an invocation output in the cache"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def delete(self, key: Union[int, str]) -> None:
|
|
"""Deletes an invocation output from the cache"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def clear(self) -> None:
|
|
"""Clears the cache"""
|
|
pass
|
|
|
|
@staticmethod
|
|
@abstractmethod
|
|
def create_key(invocation: BaseInvocation) -> int:
|
|
"""Gets the key for the invocation's cache item"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def disable(self) -> None:
|
|
"""Disables the cache, overriding the max cache size"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def enable(self) -> None:
|
|
"""Enables the cache, letting the the max cache size take effect"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_status(self) -> InvocationCacheStatus:
|
|
"""Returns the status of the cache"""
|
|
pass
|