Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 20 additions & 11 deletions src/core/services/backend_request_manager_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from src.core.interfaces.backend_request_manager_interface import IBackendRequestManager
from src.core.interfaces.loop_detector_interface import ILoopDetector
from src.core.interfaces.response_processor_interface import (
IResponseMiddleware,
IResponseProcessor,
ProcessedResponse,
)
Expand All @@ -40,12 +41,22 @@ def __init__(
backend_processor: IBackendProcessor,
response_processor: IResponseProcessor,
wire_capture: Any | None = None,
*,
structured_output_middleware: IResponseMiddleware | None = None,
) -> None:
"""Initialize the backend request manager."""
self._backend_processor = backend_processor
self._response_processor = response_processor
# wire_capture is currently applied at BackendService level to avoid
# duplicating backend resolution logic; accepted here for future use.
self._structured_output_middleware = structured_output_middleware

def set_structured_output_middleware(
self, middleware: IResponseMiddleware | None
) -> None:
"""Replace the structured output middleware dependency."""

self._structured_output_middleware = middleware

async def prepare_backend_request(
self, request_data: ChatRequest, command_result: ProcessedResult
Expand Down Expand Up @@ -251,21 +262,19 @@ async def _process_backend_request_with_retry(
f"request_id={request_id}, schema_name={schema_name}"
)

# Import here to avoid circular imports
from src.core.di.services import get_service_provider
from src.core.services.structured_output_middleware import (
StructuredOutputMiddleware,
)
structured_output_middleware = self._structured_output_middleware

if structured_output_middleware is None:
from src.core.di.services import get_service_provider
from src.core.services.structured_output_middleware import (
StructuredOutputMiddleware,
)

# Get services from DI container
service_provider = get_service_provider()
structured_output_middleware = (
service_provider.get_required_service(
service_provider = get_service_provider()
structured_output_middleware = service_provider.get_required_service(
StructuredOutputMiddleware
)
)

# Apply the middleware
try:
processed_response = (
await structured_output_middleware.process(
Expand Down
Loading
Loading