mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-10-08 18:42:12 -03:00
update_model_metadata ignored the save_metadata result, so a fetch on a drive that went offline mid-run was counted as success: the cache got the fresh CivitAI payload while the durable sidecar never landed, and every later fetch skipped the model as already fetched. The save result now raises MetadataPersistError. In the bulk fetch path this fails the item (reported in the summary, cache untouched, model stays eligible for the next run); relink surfaces an honest 500. Also corrects the stale known-limitation note in the scoped-scan plan: a startup-offline root has been listed and re-admitted since Wave 6.
71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
"""Common service-level exception types."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
|
|
class RateLimitError(RuntimeError):
|
|
"""Raised when a remote provider rejects a request due to rate limiting."""
|
|
|
|
def __init__(
|
|
self,
|
|
message: str,
|
|
*,
|
|
retry_after: Optional[float] = None,
|
|
provider: Optional[str] = None,
|
|
) -> None:
|
|
super().__init__(message)
|
|
self.retry_after = retry_after
|
|
self.provider = provider
|
|
|
|
|
|
class DownloadRateLimitError(RateLimitError):
|
|
"""Raised when a file download is rejected with HTTP 429.
|
|
|
|
Carries the vendor's ``Retry-After`` hint (when present) and the target
|
|
host so the download manager can build the structured rate-limit result
|
|
the download queue contract expects.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
message: str,
|
|
*,
|
|
retry_after: Optional[float] = None,
|
|
host: Optional[str] = None,
|
|
) -> None:
|
|
super().__init__(message, retry_after=retry_after)
|
|
self.host = host
|
|
|
|
|
|
class ResourceNotFoundError(RuntimeError):
|
|
"""Raised when a remote resource is permanently missing."""
|
|
|
|
pass
|
|
|
|
|
|
class MetadataPersistError(RuntimeError):
|
|
"""Raised when the metadata sidecar cannot be written to disk."""
|
|
|
|
pass
|
|
|
|
|
|
class LLMNotConfiguredError(RuntimeError):
|
|
"""Raised when an LLM-dependent operation is attempted but no provider is configured."""
|
|
|
|
pass
|
|
|
|
|
|
class LLMRateLimitError(RateLimitError):
|
|
"""Raised when the LLM provider rejects a request due to rate limiting."""
|
|
|
|
pass
|
|
|
|
|
|
class LLMResponseError(RuntimeError):
|
|
"""Raised when the LLM returns an unparseable or schema-invalid response."""
|
|
|
|
pass
|
|
|