ahvn.cache package

Cache backends for AgentHeaven.

Includes in-memory, on-disk, and JSON-file caches, plus a no-op cache.

class ahvn.cache.CacheEntry(func, inputs=<factory>, output=Ellipsis, expected=Ellipsis, metadata=<factory>, _key=None)[source]

Bases: object

A universal object to store cache entries, containing the function (name), inputs, output, and optional metadata.

Parameters:
func: str
inputs: Dict[str, Any]
output: Any = Ellipsis
expected: Any = Ellipsis
metadata: Dict[str, Any] | None
property key
property value
classmethod from_args(func='', output=..., expected=..., metadata=None, exclude=None, **inputs)[source]

Creates a CacheEntry from function arguments.

Parameters:
  • func (Union[Callable, str]) – The function or its name to be cached.

  • output (Any) – The output of the function.

  • expected (Any) – The expected output of the function.

  • metadata (Optional[Dict[str, Any]]) – Optional metadata to store with the cache entry

  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs.

  • **inputs (Any) – Arbitrary keyword arguments representing the inputs to the function.

Return type:

CacheEntry

classmethod from_dict(data, exclude=None)[source]

Creates a CacheEntry from a dictionary.

Parameters:
  • data (Dict[str, Any]) – The dictionary containing the cache entry data.

  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs.

Return type:

CacheEntry

to_dict()[source]

Converts the CacheEntry to a dictionary.

Returns:

A dictionary representation of the CacheEntry.

Return type:

Dict[str, Any]

clone(**updates)[source]

Creates a clone of the CacheEntry with optional updates to its attributes.

Parameters:

**updates – Arbitrary keyword arguments to update the CacheEntry attributes.

Returns:

A new CacheEntry instance with updated attributes.

Return type:

CacheEntry

annotate(expected=..., metadata=None)[source]

Annotates the CacheEntry with expected output and metadata.

Parameters:
  • expected (Any) – The expected output of the function. If omitted, will use the actual output as annotation.

  • metadata (Optional[Dict[str, Any]]) – Optional metadata to store with the cache entry.

Returns:

A new CacheEntry instance with the annotation.

Return type:

CacheEntry

property annotated: bool

Checks if the CacheEntry has been annotated with expected output.

Returns:

True if the CacheEntry has an expected output, False otherwise.

Return type:

bool

__init__(func, inputs=<factory>, output=Ellipsis, expected=Ellipsis, metadata=<factory>, _key=None)
Parameters:
Return type:

None

class ahvn.cache.BaseCache(exclude=None, *args, **kwargs)[source]

Bases: ABC

An abstract base class for cache implementations.

The class provides memoize and batch_memoize decorators to cache function results. The class requires subclasses to implement storage and retrieval methods. The caching supports both synchronous and asynchronous functions.

Parameters:

exclude (Iterable[str] | None)

_cache

A dictionary to store cache entries.

Type:

Dict[str, CacheEntry]

Abstract Methods:

_get(key, default): Retrieves a dict (CacheEntry) from the cache by its key. Use Ellipsis as default to raise KeyError if not found (to avoid collisions with functions returning None). _set(key, value): Sets a cache entry in the cache. _remove(key): Removes a cache entry from the cache by its key. _itervalues(): Returns an iterator over the values in the cache. _clear(): Clears the cache.

Optional Override Methods:

_has(key): Determines if a cache entry exists for the given key. __len__(): Returns the number of entries in the cache.

Notes

  • The default implementations of __len__, _has, and batch operations are not optimized and may be slow for large stores. Subclasses are encouraged to override these for efficiency.

  • It is worth noticing that only the __getitem__ (implemented by _get) and add (implemented by _set) are used during memoize.

__init__(exclude=None, *args, **kwargs)[source]

Initialization.

Parameters:
  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

  • *args – Additional positional arguments.

  • **kwargs – Additional keyword arguments.

set_exclude(exclude=None)[source]

Set the keys to exclude from inputs when creating cache entries.

Parameters:

exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

add_exclude(exclude=None)[source]

Add keys to exclude from inputs when creating cache entries.

Parameters:

exclude (Optional[Iterable[str]]) – Keys to add to the exclusion list.

__contains__(key)[source]

Checks if a cache entry exists for the given key.

Parameters:

key (Union[int, CacheEntry]) – The key or CacheEntry to check in the cache.

Returns:

True if the cache entry exists, False otherwise.

Return type:

bool

exists(func, **kwargs)[source]

Checks if a cache entry exists for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to check in the cache.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

Returns:

True if the cache entry exists, False otherwise.

Return type:

bool

__getitem__(key)[source]

Retrieves a cache entry for the given function and inputs.

Parameters:

key (Union[int, str, CacheEntry]) – The key or CacheEntry to retrieve.

Returns:

The cached entry if found. Otherwise Ellipsis.

Return type:

CacheEntry

retrieve(func, **kwargs)[source]

Retrieves a cached entry for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to retrieve the cached value for.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

Returns:

The cached output if found, otherwise Ellipsis (to avoid collisions with functions returning None).

Return type:

Any

get(func, **kwargs)[source]

Gets a cached value for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to retrieve the cached value for.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

Returns:

The cached output if found, otherwise Ellipsis (to avoid collisions with functions returning None).

Return type:

Any

__setitem__(key, value)[source]

Sets a cache entry for the given function and inputs.

Parameters:
set(func, output=..., expected=..., metadata=None, **kwargs)[source]

Sets a cached value for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to cache the value for.

  • output (Any) – The output to cache.

  • expected (Any) – The expected output of the function.

  • metadata (Optional[Dict[str, Any]]) – Optional metadata to store with the cache entry.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

add(entry)[source]

Sets a cache entry by directly adding it to the cache.

Parameters:

entry (CacheEntry) – The cache entry to add.

annotate(func, expected=..., metadata=None, **kwargs)[source]

Annotates a cached value for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to annotate the cached value for.

  • expected (Any) – The expected output of the function. If the cache entry exists, its expected will be modified, but its output will remain unchanged. Otherwise, a new entry with output and expected both set as the annotation will be created. If set to and the cache entry exists, it will use the actual output as the annotation. If set to but the cache entry does not exist, raise an error.

  • metadata (Optional[Dict[str, Any]]) – Optional metadata to store with the cache entry.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

Raises:

ValueError – If the original cache entry does not exist and expected is not provided.

__delitem__(key)[source]

Deletes a cache entry for the given function and inputs.

Parameters:

key (Union[int, str, CacheEntry]) – The key or CacheEntry of the cache entry to delete.

unset(func, **kwargs)[source]

Deletes a cache entry for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to delete the cache entry for.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

remove(entry)[source]

Deletes a cache entry by directly removing it from the cache.

Parameters:

entry (CacheEntry) – The cache entry to remove.

__iter__()[source]

Iterates over the cache entries.

Yields:

CacheEntry – The CacheEntry objects in the cache.

Return type:

Generator[CacheEntry, None, None]

pop()[source]

Pops an arbitrary cache entry from the cache.

Returns:

The popped CacheEntry if the cache is not empty, otherwise None.

Return type:

Optional[CacheEntry]

popall()[source]

Pops all cache entries from the cache.

Returns:

A list of all popped CacheEntry objects.

Return type:

List[CacheEntry]

clear()[source]

Clears the cache.

close()[source]

Closes the cache, if applicable.

flush(**kwargs)[source]

Flushes the cache, if applicable.

memoize(func=None, *, name=None)[source]

Decorator (or decorator factory) to cache the output of a function based on its inputs.

Return type:

Callable

Parameters:
Usage:

@cache.memoize def f(…): …

@cache.memoize(name=”xxx”) def g(…): …

When name is provided, it is used as the function identifier in the cache key. Otherwise, the wrapped function’s name is used.

batch_memoize(func=None, *, name=None)[source]

Decorator (or decorator factory) to cache the output of a function based on its inputs in batch mode.

Usage:

@cache.batch_memoize def f(…): …

@cache.batch_memoize(name=”xxx”) def g(…): …

Parameters:
  • func (Callable) – The function to cache.

  • name (Optional[str]) – Optional name for the function in the cache key.

Returns:

The wrapped function with batch caching.

Return type:

Callable

class ahvn.cache.NoCache(exclude=None, *args, **kwargs)[source]

Bases: BaseCache

An implementation of BaseCache that does not cache any data.

Parameters:

exclude (Iterable[str] | None)

__init__(exclude=None, *args, **kwargs)[source]

Initialization.

Parameters:
  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

  • *args – Additional positional arguments.

  • **kwargs – Additional keyword arguments.

class ahvn.cache.DiskCache(path, size_limit=int(32e9), exclude=None, *args, **kwargs)[source]

Bases: BaseCache

An implementation of BaseCache that stores data on disk using diskcache.

Parameters:
__init__(path, size_limit=int(32e9), exclude=None, *args, **kwargs)[source]

Initialization.

Parameters:
  • path (str) – Path to the directory where cache files will be stored.

  • size_limit (int) – Maximum size of the cache in bytes. Defaults to 32e9 (32 GB).

  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

  • *args – Additional positional arguments.

  • **kwargs – Additional keyword arguments.

close()[source]

Closes the cache.

Return type:

None

class ahvn.cache.JsonCache(path, exclude=None, *args, **kwargs)[source]

Bases: BaseCache

An implementation of BaseCache that stores data in JSON files in a specified directory. Each item key:value is stored in a separate JSON file named after the key, with values serialized as JSON.

Parameters:
__init__(path, exclude=None, *args, **kwargs)[source]

Initialization.

Parameters:
  • path (str) – Path to the directory where JSON files will be stored.

  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

  • *args – Additional positional arguments.

  • **kwargs – Additional keyword arguments.

class ahvn.cache.InMemCache(exclude=None, *args, **kwargs)[source]

Bases: BaseCache

An implementation of BaseCache that stores data in memory as Python dictionaries.

Parameters:

exclude (Iterable[str] | None)

__init__(exclude=None, *args, **kwargs)[source]

Initialization.

Parameters:
  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

  • *args – Additional positional arguments.

  • **kwargs – Additional keyword arguments.

close()[source]

Closes the cache, if applicable.

class ahvn.cache.CallbackCache(callbacks=None, feeds=None, exclude=None, *args, **kwargs)[source]

Bases: BaseCache

An implementation of BaseCache that does not cache any data, but calls callbacks on set, and feeds on get.

Parameters:
__init__(callbacks=None, feeds=None, exclude=None, *args, **kwargs)[source]

Initialization.

Parameters:
  • callbacks (Optional[Iterable[Callable[[int, Dict[str, Any]], None]]]) – List of callback functions to call on set. Each callback function must has API callback(key: int, value: Dict[str, Any]), which handles a cache set event.

  • feeds (Optional[Iterable[Callable[[Union[Callable, str], Any], None]]]) – List of feed functions to call on get. Each feed function must have API feed(func: Union[Callable, str], **kwargs), which handles a cache get event. The kwargs are the input to the function. Notice that feeds must be ordered: the first feed function with a non-Ellipsis return value will be used.

  • exclude (Optional[Iterable[str]]) – Keys to exclude from inputs when creating cache entries.

  • *args – Additional positional arguments.

  • **kwargs – Additional keyword arguments.

get(func, **kwargs)[source]

Retrieves a cached value for the given function and inputs.

Parameters:
  • func (Union[Callable, str]) – The function or its name to retrieve the cached value for. Notice that for CallbackCache, when all feed functions return …, the function will be called: # (deprecated) If the func is callable, it will be called with the provided keyword arguments. # (deprecated) Otherwise, it will NOT be called. For better stability, it is recommend to use a default feed function that can handle missing values.

  • **kwargs – Arbitrary keyword arguments representing the inputs to the function.

Returns:

The cached output if found, otherwise Ellipsis (to avoid collisions with functions returning None).

Return type:

Any

Submodules