from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from yuxi.channel.container import ChannelContainer from yuxi.channel.container import ChannelContainerFactory, setup_channel _container: ChannelContainer | None = None async def init_channel( redis_url: str = "", agent_port=None, *, config_yaml_path: str = "channel_config.yaml", mq_workers: int = 4, mq_max_concurrent: int = 20, default_agent_config_id: int = 1, ) -> ChannelContainer: global _container _container = await ChannelContainerFactory.create( redis_url=redis_url, agent_port=agent_port, config_yaml_path=config_yaml_path, mq_workers=mq_workers, mq_max_concurrent=mq_max_concurrent, default_agent_config_id=default_agent_config_id, ) return _container async def shutdown_channel(container: ChannelContainer | None = None) -> None: global _container target = container or _container if target: await target.shutdown() _container = None def get_container() -> ChannelContainer | None: return _container def register_channel_middleware(app) -> None: if _container: setup_channel(app, _container)