chore: remove cloud-specific language from cache provider API

Make all docstrings and comments generic for the OSS codebase.
Remove references to Kubernetes, Redis, GCS, pods, and other
infrastructure-specific terminology.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Deep Mehta 2026-03-03 16:52:08 -08:00
parent 33a0cc2885
commit 311a2d59e4
3 changed files with 26 additions and 27 deletions

View File

@ -119,24 +119,23 @@ class Types:
class Caching: class Caching:
""" """
External cache provider API for distributed caching. External cache provider API.
Enables sharing cached results across multiple ComfyUI instances Enables sharing cached results across multiple ComfyUI instances.
(e.g., Kubernetes pods) without monkey-patching internal methods.
Example usage: Example usage:
from comfy_api.latest import Caching from comfy_api.latest import Caching
class MyRedisProvider(Caching.CacheProvider): class MyCacheProvider(Caching.CacheProvider):
async def on_lookup(self, context): async def on_lookup(self, context):
# Check Redis for cached result # Check external storage for cached result
... ...
async def on_store(self, context, value): async def on_store(self, context, value):
# Store to Redis # Store result to external storage
... ...
Caching.register_provider(MyRedisProvider()) Caching.register_provider(MyCacheProvider())
""" """
# Import from comfy_execution.cache_provider (source of truth) # Import from comfy_execution.cache_provider (source of truth)
from comfy_execution.cache_provider import ( from comfy_execution.cache_provider import (

View File

@ -1,8 +1,8 @@
""" """
External Cache Provider API for distributed caching. External Cache Provider API.
This module provides a public API for external cache providers, enabling This module provides a public API for external cache providers, enabling
distributed caching across multiple ComfyUI instances (e.g., Kubernetes pods). shared caching across multiple ComfyUI instances.
Public API is also available via: Public API is also available via:
from comfy_api.latest import Caching from comfy_api.latest import Caching
@ -12,16 +12,16 @@ Example usage:
CacheProvider, CacheContext, CacheValue, register_cache_provider CacheProvider, CacheContext, CacheValue, register_cache_provider
) )
class MyRedisProvider(CacheProvider): class MyCacheProvider(CacheProvider):
async def on_lookup(self, context: CacheContext) -> Optional[CacheValue]: async def on_lookup(self, context: CacheContext) -> Optional[CacheValue]:
# Check Redis/GCS for cached result # Check external storage for cached result
... ...
async def on_store(self, context: CacheContext, value: CacheValue) -> None: async def on_store(self, context: CacheContext, value: CacheValue) -> None:
# Store to Redis/GCS # Store result to external storage
... ...
register_cache_provider(MyRedisProvider()) register_cache_provider(MyCacheProvider())
""" """
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
@ -72,16 +72,16 @@ class CacheProvider(ABC):
Async Safety: Async Safety:
Provider methods are called from async context. Implementations Provider methods are called from async context. Implementations
can use async I/O (aiohttp, asyncpg, etc.) directly. can use async I/O directly.
Error Handling: Error Handling:
All methods are wrapped in try/except by the caller. Exceptions All methods are wrapped in try/except by the caller. Exceptions
are logged but never propagate to break execution. are logged but never propagate to break execution.
Performance Guidelines: Performance Guidelines:
- on_lookup: Should complete in <500ms (including network) - on_lookup: Should complete quickly (including any network I/O)
- on_store: Fire-and-forget via asyncio.create_task - on_store: Dispatched via asyncio.create_task (non-blocking)
- should_cache: Should be fast (<1ms), called frequently - should_cache: Should be fast, called frequently
""" """
@abstractmethod @abstractmethod
@ -106,10 +106,10 @@ class CacheProvider(ABC):
Store value to external cache. Store value to external cache.
Called AFTER value is stored in local cache. Called AFTER value is stored in local cache.
Dispatched as asyncio.create_task (fire-and-forget). Dispatched via asyncio.create_task (non-blocking).
Important: Important:
- Should never block execution - Should not block execution
- Handle serialization failures gracefully - Handle serialization failures gracefully
""" """
pass pass
@ -209,9 +209,9 @@ def _canonicalize(obj: Any) -> Any:
""" """
Convert an object to a canonical, JSON-serializable form. Convert an object to a canonical, JSON-serializable form.
This ensures deterministic ordering regardless of Python's hash randomization, This ensures deterministic ordering regardless of Python's hash randomization.
which is critical for cross-pod cache key consistency. Frozensets in particular Frozensets in particular have non-deterministic iteration order between
have non-deterministic iteration order between Python sessions. Python sessions, so consistent serialization requires explicit sorting.
""" """
if isinstance(obj, frozenset): if isinstance(obj, frozenset):
# Sort frozenset items for deterministic ordering # Sort frozenset items for deterministic ordering
@ -246,13 +246,13 @@ def _serialize_cache_key(cache_key: Any) -> Optional[str]:
""" """
Serialize cache key to a hex digest string for external storage. Serialize cache key to a hex digest string for external storage.
Returns SHA256 hex string suitable for Redis/database keys, Returns SHA256 hex string suitable as an external storage key,
or None if serialization fails entirely (fail-closed). or None if serialization fails entirely (fail-closed).
Note: Uses canonicalize + JSON serialization instead of pickle because Note: Uses canonicalize + JSON serialization instead of pickle because
pickle is NOT deterministic across Python sessions due to hash randomization pickle is NOT deterministic across Python sessions due to hash randomization
affecting frozenset iteration order. This is critical for distributed caching affecting frozenset iteration order. Consistent hashing is required so that
where different pods need to compute the same hash for identical inputs. different instances compute the same key for identical inputs.
""" """
try: try:
canonical = _canonicalize(cache_key) canonical = _canonicalize(cache_key)

View File

@ -242,7 +242,7 @@ class BasicCache:
return None return None
async def _notify_providers_store(self, node_id, cache_key, value): async def _notify_providers_store(self, node_id, cache_key, value):
"""Notify external providers of cache store (fire-and-forget).""" """Notify external providers of cache store (non-blocking)."""
from comfy_execution.cache_provider import ( from comfy_execution.cache_provider import (
_has_cache_providers, _get_cache_providers, _has_cache_providers, _get_cache_providers,
CacheValue, _contains_nan, _logger CacheValue, _contains_nan, _logger
@ -272,7 +272,7 @@ class BasicCache:
@staticmethod @staticmethod
async def _safe_provider_store(provider, context, cache_value): async def _safe_provider_store(provider, context, cache_value):
"""Wrapper for fire-and-forget provider.on_store with error handling.""" """Wrapper for async provider.on_store with error handling."""
from comfy_execution.cache_provider import _logger from comfy_execution.cache_provider import _logger
try: try:
await provider.on_store(context, cache_value) await provider.on_store(context, cache_value)