"""Factory for creating message channels from target configuration.""" from agenteval.channels.base import EvalChannel from agenteval.channels.http import HttpChannel from agenteval.channels.openclaw import OpenClawChannel from agenteval.channels.tutu import TutuApiChannel from agenteval.models import ChannelType, EvalTarget class ChannelFactory: """Create the appropriate channel adapter for a target.""" _mapping: dict[ChannelType, type[EvalChannel]] = { ChannelType.TUTU_API: TutuApiChannel, ChannelType.HTTP: HttpChannel, ChannelType.OPENCLAW: OpenClawChannel, } @classmethod def create(cls, target: EvalTarget) -> EvalChannel: if target.channel_type not in cls._mapping: raise ValueError(f"unsupported channel type: {target.channel_type}") return cls._mapping[target.channel_type](target.channel_config) @classmethod def register(cls, channel_type: ChannelType, channel_cls: type[EvalChannel]) -> None: cls._mapping[channel_type] = channel_cls