mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-10 15:50:02 +00:00
Remove prompt_id from CacheContext — it's not relevant for cache matching and added unnecessary plumbing (_current_prompt_id on every cache). Lifecycle hooks still receive prompt_id directly. Include type name in canonicalized primitives so that int 7 and str "7" produce distinct hashes. Also canonicalize dict keys properly instead of str() coercion. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Optional
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class CacheContext:
|
|
node_id: str
|
|
class_type: str
|
|
cache_key_hash: str # SHA256 hex digest
|
|
|
|
|
|
@dataclass
|
|
class CacheValue:
|
|
outputs: list
|
|
ui: dict = None
|
|
|
|
|
|
class CacheProvider(ABC):
|
|
"""Abstract base class for external cache providers.
|
|
Exceptions from provider methods are caught by the caller and never break execution.
|
|
"""
|
|
|
|
@abstractmethod
|
|
async def on_lookup(self, context: CacheContext) -> Optional[CacheValue]:
|
|
"""Called on local cache miss. Return CacheValue if found, None otherwise."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def on_store(self, context: CacheContext, value: CacheValue) -> None:
|
|
"""Called after local store. Dispatched via asyncio.create_task."""
|
|
pass
|
|
|
|
def should_cache(self, context: CacheContext, value: Optional[CacheValue] = None) -> bool:
|
|
"""Return False to skip external caching for this node. Default: True."""
|
|
return True
|
|
|
|
def on_prompt_start(self, prompt_id: str) -> None:
|
|
pass
|
|
|
|
def on_prompt_end(self, prompt_id: str) -> None:
|
|
pass
|