classDiagram Agent AgentChannel AgentChat AgentChat <|-- AgentGroupChat AgentGroupChat o-- Agent AgentGroupChat --> AgentGroupChatSettings class AgentGroupChat { <> +IReadOnlyList~Agent~ Agents +AgentGroupChatSettings ExecutionSettings +bool IsComplete +void AddAgent(Agent agent) +IAsyncEnumerable~ChatMessageContent~ InvokeAgentAsync() +IAsyncEnumerable~ChatMessageContent~ InvokeAgentAsync(Agent agent) +IAsyncEnumerable~ChatMessageContent~ InvokeAgentAsync(Agent agent, bool isJoining) } AgentGroupChatSettings --> SelectionStrategy AgentGroupChatSettings --> TerminationStrategy class AgentGroupChatSettings { <> +SelectionStrategy SelectionStrategy +TerminationStrategy TerminationStrategy } class SelectionStrategy { <> #ILogger Logger +Task~Agent~ NextAsync(IReadOnlyList~Agent~ agents, IReadOnlyList~ChatMessageContent~ history)* } class TerminationStrategy { <> +bool AutomaticReset +int MaximumIterations +IReadOnlyList~Agent~? Agents #ILogger Logger +Task~bool~ ShouldTerminateAsync(Agent agent, IReadOnlyList~ChatMessageContent~ history) #Task~bool~ ShouldAgentTerminateAsync(Agent agent, IReadOnlyList~ChatMessageContent~ history)* }