"""Single production composition root for the FCC server.""" import os from functools import partial from pathlib import Path from free_claude_code.api.app import create_app from free_claude_code.api.ports import ApiServices from free_claude_code.config.logging_config import configure_logging from free_claude_code.config.paths import server_log_path from free_claude_code.config.settings import Settings from free_claude_code.messaging.transcription import TranscriptionService from free_claude_code.messaging.voice import Transcriber from free_claude_code.providers.admission import ProviderAdmissionController from free_claude_code.providers.base import BaseProvider, ProviderConfig from free_claude_code.providers.nvidia_nim.voice import NvidiaNimTranscriber from free_claude_code.providers.openai_codex import ( OpenAIAuthManager, OpenAICodexProvider, ) from free_claude_code.providers.runtime import ProviderRuntime from free_claude_code.providers.runtime.factory import create_provider from .application import ApplicationRuntime, RestartCallback from .asgi import RuntimeASGIApp from .provider_manager import ProviderRuntimeManager def build_asgi_app( settings: Settings, restart_callback: RestartCallback | None = None, ) -> RuntimeASGIApp: """Construct the complete server application and its resource owner.""" log_path = Path(os.getenv("LOG_FILE", server_log_path())) configure_logging( log_path, level=settings.log_level, verbose_third_party=settings.log_raw_api_payloads, ) openai_auth = OpenAIAuthManager(proxy=settings.openai_proxy) openai_factory = partial(_create_openai_provider, auth=openai_auth) provider_constructor = partial( create_provider, injected_factories={"openai": openai_factory}, ) runtime_factory = partial( ProviderRuntime, provider_constructor=provider_constructor, ) provider_manager = ProviderRuntimeManager( settings, runtime_factory=runtime_factory, connected_provider_ids=openai_auth.connected_provider_ids, ) runtime = ApplicationRuntime( provider_manager, transcriber=_create_transcriber(settings), restart_callback=restart_callback, connected_accounts={"openai": openai_auth}, ) services = ApiServices( requests=provider_manager, admin=runtime, tasks=runtime, ) return RuntimeASGIApp(create_app(services), runtime) def _create_openai_provider( config: ProviderConfig, _settings: Settings, admission: ProviderAdmissionController, *, auth: OpenAIAuthManager, ) -> BaseProvider: return OpenAICodexProvider(config, auth=auth, admission=admission) def _create_transcriber(settings: Settings) -> Transcriber | None: if not settings.voice_note_enabled: return None if settings.whisper_device == "nvidia_nim": return NvidiaNimTranscriber( model=settings.whisper_model, api_key=settings.nvidia_nim_api_key, ) return TranscriptionService( model=settings.whisper_model, device=settings.whisper_device, huggingface_api_key=settings.huggingface_api_key, )