Skip to content

ccproxy.services.factories

ccproxy.services.factories

Concrete service factory implementations.

This module provides concrete implementations of service factories that create and configure service instances according to their interfaces.

ConcreteServiceFactory

ConcreteServiceFactory(container)

Concrete implementation of service factory.

Source code in ccproxy/services/factories.py
def __init__(self, container: ServiceContainer) -> None:
    """Initialize the service factory."""
    self._container = container

register_services

register_services()

Register all services with the container.

Source code in ccproxy/services/factories.py
def register_services(self) -> None:
    """Register all services with the container."""
    self._container.register_service(
        MockResponseHandler, factory=self.create_mock_handler
    )
    self._container.register_service(
        StreamingHandler, factory=self.create_streaming_handler
    )
    self._container.register_service(
        ProxyConfiguration, factory=self.create_proxy_config
    )
    self._container.register_service(
        httpx.AsyncClient, factory=self.create_http_client
    )
    self._container.register_service(
        CLIDetectionService, factory=self.create_cli_detection_service
    )
    self._container.register_service(
        HTTPPoolManager, factory=self.create_http_pool_manager
    )
    self._container.register_service(
        ResponseCache, factory=self.create_response_cache
    )
    self._container.register_service(
        BinaryResolver, factory=self.create_binary_resolver
    )

    self._container.register_service(
        FormatRegistry, factory=self.create_format_registry
    )

    # Registries
    self._container.register_service(
        HookRegistry, factory=self.create_hook_registry
    )

    self._container.register_service(
        oauth_registry_module.OAuthRegistry, factory=self.create_oauth_registry
    )
    self._container.register_service(
        TaskRegistry, factory=self.create_task_registry
    )
    self._container.register_service(
        AuthManagerRegistry, factory=self.create_auth_manager_registry
    )

    # Register background thread manager for hooks
    self._container.register_service(
        BackgroundHookThreadManager,
        factory=self.create_background_hook_thread_manager,
    )
    from ccproxy.core.async_task_manager import AsyncTaskManager

    self._container.register_service(
        AsyncTaskManager,
        factory=self.create_async_task_manager,
    )

create_mock_handler

create_mock_handler()

Create mock handler instance.

Source code in ccproxy/services/factories.py
def create_mock_handler(self) -> MockResponseHandler:
    """Create mock handler instance."""
    mock_generator = RealisticMockResponseGenerator()
    settings = self._container.get_service(Settings)
    # Create simple format adapter for anthropic->openai conversion (for mock responses)
    openai_adapter = DictFormatAdapter(
        response=convert_anthropic_to_openai_response,
        name="mock_anthropic_to_openai",
    )
    # Configure streaming settings if needed
    openai_thinking_xml = getattr(
        getattr(settings, "llm", object()), "openai_thinking_xml", True
    )
    if hasattr(openai_adapter, "configure_streaming"):
        openai_adapter.configure_streaming(openai_thinking_xml=openai_thinking_xml)

    handler = MockResponseHandler(
        mock_generator=mock_generator,
        openai_adapter=openai_adapter,
        error_rate=0.05,
        latency_range=(0.5, 2.0),
    )
    return handler

create_streaming_handler

create_streaming_handler()

Create streaming handler instance.

Requires HookManager to be registered before resolution to avoid post-hoc patching of the handler.

Source code in ccproxy/services/factories.py
def create_streaming_handler(self) -> StreamingHandler:
    """Create streaming handler instance.

    Requires HookManager to be registered before resolution to avoid
    post-hoc patching of the handler.
    """
    hook_manager = self._container.get_service(HookManager)
    handler = StreamingHandler(hook_manager=hook_manager)
    return handler

create_proxy_config

create_proxy_config()

Create proxy configuration instance.

Source code in ccproxy/services/factories.py
def create_proxy_config(self) -> ProxyConfiguration:
    """Create proxy configuration instance."""
    config = ProxyConfiguration()
    return config

create_http_client

create_http_client()

Create HTTP client instance.

Source code in ccproxy/services/factories.py
def create_http_client(self) -> httpx.AsyncClient:
    """Create HTTP client instance."""
    settings = self._container.get_service(Settings)
    hook_manager = self._container.get_service(HookManager)
    client = HTTPClientFactory.create_client(
        settings=settings, hook_manager=hook_manager
    )
    logger.debug("http_client_created", category="lifecycle")
    return client

create_cli_detection_service

create_cli_detection_service()

Create CLI detection service instance.

Source code in ccproxy/services/factories.py
def create_cli_detection_service(self) -> CLIDetectionService:
    """Create CLI detection service instance."""
    settings = self._container.get_service(Settings)
    return CLIDetectionService(settings)

create_http_pool_manager

create_http_pool_manager()

Create HTTP pool manager instance.

Source code in ccproxy/services/factories.py
def create_http_pool_manager(self) -> HTTPPoolManager:
    """Create HTTP pool manager instance."""
    settings = self._container.get_service(Settings)
    hook_manager = self._container.get_service(HookManager)
    logger.debug(
        "http_pool_manager_created",
        has_hook_manager=hook_manager is not None,
        hook_manager_type=type(hook_manager).__name__ if hook_manager else "None",
        category="lifecycle",
    )
    return HTTPPoolManager(settings, hook_manager)

create_response_cache

create_response_cache()

Create response cache instance.

Source code in ccproxy/services/factories.py
def create_response_cache(self) -> ResponseCache:
    """Create response cache instance."""
    return ResponseCache()

create_binary_resolver

create_binary_resolver()

Create a BinaryResolver from settings.

Source code in ccproxy/services/factories.py
def create_binary_resolver(self) -> BinaryResolver:
    """Create a BinaryResolver from settings."""
    settings = self._container.get_service(Settings)
    return BinaryResolver.from_settings(settings)

create_format_registry

create_format_registry()

Create format adapter registry with core adapters pre-registered.

Pre-registers common format conversions to prevent plugin conflicts. Plugins can still register their own plugin-specific adapters.

Source code in ccproxy/services/factories.py
def create_format_registry(self) -> FormatRegistry:
    """Create format adapter registry with core adapters pre-registered.

    Pre-registers common format conversions to prevent plugin conflicts.
    Plugins can still register their own plugin-specific adapters.
    """
    settings = self._container.get_service(Settings)

    # Always use priority mode (latest behavior)
    registry = FormatRegistry()

    # Pre-register core format adapters
    self._register_core_format_adapters(registry, settings)
    registry.flush_all_logs()

    logger.debug(
        "format_registry_created",
        category="format",
    )

    return registry

create_hook_registry

create_hook_registry()

Create a HookRegistry instance.

Source code in ccproxy/services/factories.py
def create_hook_registry(self) -> HookRegistry:
    """Create a HookRegistry instance."""
    return HookRegistry()

create_oauth_registry

create_oauth_registry()

Create an OAuthRegistry instance (imported lazily to avoid cycles).

Source code in ccproxy/services/factories.py
def create_oauth_registry(self) -> Any:
    """Create an OAuthRegistry instance (imported lazily to avoid cycles)."""
    from ccproxy.auth.oauth.registry import OAuthRegistry

    return OAuthRegistry()

create_task_registry

create_task_registry()

Create a TaskRegistry instance.

Source code in ccproxy/services/factories.py
def create_task_registry(self) -> TaskRegistry:
    """Create a TaskRegistry instance."""
    return TaskRegistry()

create_auth_manager_registry

create_auth_manager_registry()

Create an AuthManagerRegistry instance.

Note: Auth managers are registered by their respective plugins during initialization.

Source code in ccproxy/services/factories.py
def create_auth_manager_registry(self) -> AuthManagerRegistry:
    """Create an AuthManagerRegistry instance.

    Note: Auth managers are registered by their respective plugins during initialization.
    """
    return AuthManagerRegistry()

create_background_hook_thread_manager

create_background_hook_thread_manager()

Create background hook thread manager instance.

Source code in ccproxy/services/factories.py
def create_background_hook_thread_manager(self) -> BackgroundHookThreadManager:
    """Create background hook thread manager instance."""
    manager = BackgroundHookThreadManager()
    logger.debug("background_hook_thread_manager_created", category="lifecycle")
    return manager

create_async_task_manager

create_async_task_manager()

Create async task manager instance.

Source code in ccproxy/services/factories.py
def create_async_task_manager(self) -> AsyncTaskManager:
    """Create async task manager instance."""
    from ccproxy.core.async_task_manager import AsyncTaskManager

    return AsyncTaskManager()