APM

>Agent Skill

@gordonwatts/python-function-caching

skilldevelopment

Provide a reusable pattern for memoizing deterministic function calls to reduce latency and repeated computation. Backed by the `python` diskcache package. Use skill when updating or editing everything.

python
apm::install
$apm install @gordonwatts/python-function-caching
apm::skill.md
---
name: python-function-caching
description: Provide a reusable pattern for memoizing deterministic function calls to reduce latency and repeated computation. Backed by the `python` diskcache package. Use skill when updating or editing everything.
---

# Python Function Caching Skill

## Purpose

- Caching the function result. Works for pure functions that depend only on their inputs and have no side effects.
- Perfect for expensive calls (calculations, or calls to external services like LLM's).

## Workflow

1. Copy the contents of the file `assets/disk_cache.py` into the project.
2. In the file update the `project_name` in the line `cache = Cache("~/.cache/project_name")` to be the appropriate name. Also replace `project_name` further down in the docstring.
3. Use `@diskcache_decorator` or `@diskcache_decorator(seconds-till-expired)` for any function the user wants cached.
    - By default, the cache should not expire.
    - If it makes sense that it should expire, 1 hour (3600 seconds seconds), 1 day (86400 seconds), or 1 week (604800 seconds) are common settings.
4. Tricky part is invoking tests to make sure that the cache isn't used. Tests should use the `ignore_cache=True` to get around this unless otherwise requested by the user.

## Behavior

- Uses the function arguments to compute the hash
- Unless `ignore_cache` is `True`, the result is returned right away.
- If the function is called, the result is always stored in the cache.
- Current code does not have an eviction policy.
@gordonwatts/python-function-caching — Agent Skill — APM