4747from src .core .interfaces .command_service_interface import ICommandService
4848from src .core .interfaces .configuration_interface import IConfig
4949from src .core .interfaces .di_interface import IServiceProvider
50+ from src .core .interfaces .failure_strategy_interface import (
51+ FailureHandlingConfig ,
52+ IFailureHandlingStrategy ,
53+ )
5054from src .core .interfaces .loop_detector_interface import ILoopDetector
5155from src .core .interfaces .memory_service_interface import IMemoryService
5256
@@ -1216,12 +1220,14 @@ def _backend_request_manager_factory(
12161220 wire_capture = provider .get_required_service (IWireCapture ) # type: ignore[type-abstract]
12171221 # Optional: history compaction service for context compaction feature
12181222 history_compaction_service = provider .get_service (HistoryCompactionService )
1223+ config = provider .get_required_service (AppConfig )
12191224 return BackendRequestManager (
12201225 backend_processor ,
12211226 response_processor ,
12221227 angel_service_factory ,
12231228 wire_capture ,
12241229 history_compaction_service = history_compaction_service ,
1230+ config = config ,
12251231 )
12261232
12271233 _add_singleton (
@@ -2432,6 +2438,37 @@ def _resilience_coordinator_factory(
24322438 ResilienceCoordinator , implementation_factory = _resilience_coordinator_factory
24332439 )
24342440
2441+ # Register failure handling strategy
2442+ def _failure_handling_strategy_factory (
2443+ provider : IServiceProvider ,
2444+ ) -> IFailureHandlingStrategy :
2445+ from src .core .services .backend_routing_service import BackendRoutingService
2446+ from src .core .services .failure_handling_strategy import (
2447+ DefaultFailureHandlingStrategy ,
2448+ )
2449+
2450+ # Get routing service for backend discovery
2451+ routing_service = provider .get_service (BackendRoutingService )
2452+
2453+ # Create default configuration
2454+ config = FailureHandlingConfig (
2455+ max_silent_wait = 30.0 ,
2456+ total_timeout_budget = 90.0 ,
2457+ keepalive_interval = 8.0 ,
2458+ max_failover_hops = 5 ,
2459+ min_retry_wait = 1.0 ,
2460+ )
2461+
2462+ return DefaultFailureHandlingStrategy (
2463+ config = config ,
2464+ backend_discovery = routing_service ,
2465+ )
2466+
2467+ _add_singleton (
2468+ cast (type , IFailureHandlingStrategy ),
2469+ implementation_factory = _failure_handling_strategy_factory ,
2470+ )
2471+
24352472 # Register backend service
24362473 def _backend_service_factory (provider : IServiceProvider ) -> BackendService :
24372474 # Import required modules
@@ -2531,6 +2568,11 @@ def _backend_service_factory(provider: IServiceProvider) -> BackendService:
25312568 # Get or create resilience coordinator
25322569 resilience_coordinator = provider .get_service (ResilienceCoordinator )
25332570
2571+ # Get or create failure handling strategy
2572+ failure_handling_strategy = provider .get_service (
2573+ cast (type , IFailureHandlingStrategy )
2574+ )
2575+
25342576 # Return backend service
25352577 return BackendService (
25362578 backend_factory ,
@@ -2544,6 +2586,7 @@ def _backend_service_factory(provider: IServiceProvider) -> BackendService:
25442586 wire_capture = provider .get_required_service (IWireCapture ), # type: ignore[type-abstract]
25452587 routing_service = routing_service ,
25462588 resilience_coordinator = resilience_coordinator ,
2589+ failure_handling_strategy = failure_handling_strategy ,
25472590 )
25482591
25492592 # Register backend service and bind to interface
0 commit comments