diff --git a/haiku_rag_slim/haiku/rag/ingester/pollers/circuit_breaker.py b/haiku_rag_slim/haiku/rag/circuit_breaker.py similarity index 95% rename from haiku_rag_slim/haiku/rag/ingester/pollers/circuit_breaker.py rename to haiku_rag_slim/haiku/rag/circuit_breaker.py index 25c03e75..664e2826 100644 --- a/haiku_rag_slim/haiku/rag/ingester/pollers/circuit_breaker.py +++ b/haiku_rag_slim/haiku/rag/circuit_breaker.py @@ -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 diff --git a/haiku_rag_slim/haiku/rag/ingester/pollers/__init__.py b/haiku_rag_slim/haiku/rag/ingester/pollers/__init__.py index 2c581799..19bf24b9 100644 --- a/haiku_rag_slim/haiku/rag/ingester/pollers/__init__.py +++ b/haiku_rag_slim/haiku/rag/ingester/pollers/__init__.py @@ -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 diff --git a/haiku_rag_slim/haiku/rag/ingester/pollers/base.py b/haiku_rag_slim/haiku/rag/ingester/pollers/base.py index c3d6a859..e6700b8f 100644 --- a/haiku_rag_slim/haiku/rag/ingester/pollers/base.py +++ b/haiku_rag_slim/haiku/rag/ingester/pollers/base.py @@ -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 ( diff --git a/haiku_rag_slim/haiku/rag/ingester/pollers/fs.py b/haiku_rag_slim/haiku/rag/ingester/pollers/fs.py index e27e8b80..f30f5111 100644 --- a/haiku_rag_slim/haiku/rag/ingester/pollers/fs.py +++ b/haiku_rag_slim/haiku/rag/ingester/pollers/fs.py @@ -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__) diff --git a/haiku_rag_slim/haiku/rag/ingester/pollers/manager.py b/haiku_rag_slim/haiku/rag/ingester/pollers/manager.py index a947ddf0..7067e215 100644 --- a/haiku_rag_slim/haiku/rag/ingester/pollers/manager.py +++ b/haiku_rag_slim/haiku/rag/ingester/pollers/manager.py @@ -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 diff --git a/haiku_rag_slim/haiku/rag/ingester/pollers/periodic.py b/haiku_rag_slim/haiku/rag/ingester/pollers/periodic.py index 45ec5fa8..8417c7da 100644 --- a/haiku_rag_slim/haiku/rag/ingester/pollers/periodic.py +++ b/haiku_rag_slim/haiku/rag/ingester/pollers/periodic.py @@ -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): diff --git a/haiku_rag_slim/haiku/rag/ingester/workers/pool.py b/haiku_rag_slim/haiku/rag/ingester/workers/pool.py index f270bcf5..501477bb 100644 --- a/haiku_rag_slim/haiku/rag/ingester/workers/pool.py +++ b/haiku_rag_slim/haiku/rag/ingester/workers/pool.py @@ -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 diff --git a/tests/ingester/test_circuit_breaker.py b/tests/ingester/test_circuit_breaker.py index 0267c68e..ad098d02 100644 --- a/tests/ingester/test_circuit_breaker.py +++ b/tests/ingester/test_circuit_breaker.py @@ -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: diff --git a/tests/ingester/test_pollers.py b/tests/ingester/test_pollers.py index c9daed5e..d7970d13 100644 --- a/tests/ingester/test_pollers.py +++ b/tests/ingester/test_pollers.py @@ -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