Move CircuitBreaker to a shared module

Relocate CircuitBreaker from ingester/pollers to haiku/rag/circuit_breaker
so non-ingester callers (docling-serve provider) can reuse it without
depending on the ingester package.

Co-Authored-By: bryan davis <bryan@monkeytronics.org>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Yiorgis Gozadinos 2026-07-08 10:40:24 +03:00
parent d71695833d
commit d781335868
No known key found for this signature in database
9 changed files with 9 additions and 9 deletions

View file

@ -5,7 +5,7 @@ from haiku.rag.config import CircuitBreakerConfig
class CircuitBreaker:
"""Three-state breaker over discover() failures.
"""Three-state breaker over repeated failures of a single target.
- closed: failures are counted; threshold flips to open.
- open: probes are blocked until cooldown elapses, then a single probe

View file

@ -1,4 +1,4 @@
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.pollers.factory import build_source
from haiku.rag.ingester.pollers.fs import FSPoller
from haiku.rag.ingester.pollers.manager import PollerManager

View file

@ -3,9 +3,9 @@ import logging
import random
from datetime import UTC, datetime
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import SourceConfig
from haiku.rag.ingester.batch import BatchChange, BatchSourceSummary
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.queue.models import JobOp, SyncRow
from haiku.rag.ingester.queue.repository import JobRepo, SyncStateRepo
from haiku.rag.ingester.sources.base import (

View file

@ -11,8 +11,8 @@ from haiku.rag.ingester.sources.filter import FileFilter
from haiku.rag.telemetry import logfire
if TYPE_CHECKING:
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import FSSourceConfig
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.sources.fs import FSSource
logger = logging.getLogger(__name__)

View file

@ -4,10 +4,10 @@ from collections.abc import Sequence
from datetime import UTC, datetime
from typing import TYPE_CHECKING
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import FSSourceConfig, SourceConfig
from haiku.rag.ingester.batch import BatchManifest
from haiku.rag.ingester.pollers.base import BasePoller
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.pollers.factory import build_source
from haiku.rag.ingester.pollers.fs import FSPoller
from haiku.rag.ingester.pollers.periodic import PeriodicPoller

View file

@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
from haiku.rag.ingester.pollers.base import BasePoller
if TYPE_CHECKING:
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.circuit_breaker import CircuitBreaker
class PeriodicPoller(BasePoller):

View file

@ -5,9 +5,9 @@ import time
from typing import TYPE_CHECKING
from uuid import uuid4
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import CircuitBreakerConfig
from haiku.rag.ingester.exceptions import PermanentError, TransientError
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.queue.models import Job, JobOp
from haiku.rag.ingester.queue.repository import JobRepo, SyncStateRepo
from haiku.rag.ingester.workers.pipeline import run_job

View file

@ -1,5 +1,5 @@
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import CircuitBreakerConfig
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
class _Clock:

View file

@ -4,6 +4,7 @@ from pathlib import Path
import pytest
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import (
CircuitBreakerConfig,
FSSourceConfig,
@ -11,7 +12,6 @@ from haiku.rag.config import (
S3SourceConfig,
WebDAVSourceConfig,
)
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.pollers.manager import PollerManager
from haiku.rag.ingester.pollers.periodic import PeriodicPoller
from haiku.rag.ingester.queue.models import JobOp, JobStatus