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: 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. - closed: failures are counted; threshold flips to open.
- open: probes are blocked until cooldown elapses, then a single probe - 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.factory import build_source
from haiku.rag.ingester.pollers.fs import FSPoller from haiku.rag.ingester.pollers.fs import FSPoller
from haiku.rag.ingester.pollers.manager import PollerManager from haiku.rag.ingester.pollers.manager import PollerManager

View file

@ -3,9 +3,9 @@ import logging
import random import random
from datetime import UTC, datetime from datetime import UTC, datetime
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import SourceConfig from haiku.rag.config import SourceConfig
from haiku.rag.ingester.batch import BatchChange, BatchSourceSummary 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.models import JobOp, SyncRow
from haiku.rag.ingester.queue.repository import JobRepo, SyncStateRepo from haiku.rag.ingester.queue.repository import JobRepo, SyncStateRepo
from haiku.rag.ingester.sources.base import ( 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 from haiku.rag.telemetry import logfire
if TYPE_CHECKING: if TYPE_CHECKING:
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import FSSourceConfig from haiku.rag.config import FSSourceConfig
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
from haiku.rag.ingester.sources.fs import FSSource from haiku.rag.ingester.sources.fs import FSSource
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -4,10 +4,10 @@ from collections.abc import Sequence
from datetime import UTC, datetime from datetime import UTC, datetime
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import FSSourceConfig, SourceConfig from haiku.rag.config import FSSourceConfig, SourceConfig
from haiku.rag.ingester.batch import BatchManifest from haiku.rag.ingester.batch import BatchManifest
from haiku.rag.ingester.pollers.base import BasePoller 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.factory import build_source
from haiku.rag.ingester.pollers.fs import FSPoller from haiku.rag.ingester.pollers.fs import FSPoller
from haiku.rag.ingester.pollers.periodic import PeriodicPoller 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 from haiku.rag.ingester.pollers.base import BasePoller
if TYPE_CHECKING: if TYPE_CHECKING:
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker from haiku.rag.circuit_breaker import CircuitBreaker
class PeriodicPoller(BasePoller): class PeriodicPoller(BasePoller):

View file

@ -5,9 +5,9 @@ import time
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from uuid import uuid4 from uuid import uuid4
from haiku.rag.circuit_breaker import CircuitBreaker
from haiku.rag.config import CircuitBreakerConfig from haiku.rag.config import CircuitBreakerConfig
from haiku.rag.ingester.exceptions import PermanentError, TransientError 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.models import Job, JobOp
from haiku.rag.ingester.queue.repository import JobRepo, SyncStateRepo from haiku.rag.ingester.queue.repository import JobRepo, SyncStateRepo
from haiku.rag.ingester.workers.pipeline import run_job 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.config import CircuitBreakerConfig
from haiku.rag.ingester.pollers.circuit_breaker import CircuitBreaker
class _Clock: class _Clock:

View file

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