Spaces:
Build error
Build error
from __future__ import annotations | |
from typing import TYPE_CHECKING, List | |
from agentverse.message import Message | |
from . import selector_registry as SelectorRegistry | |
from .base import BaseSelector | |
if TYPE_CHECKING: | |
from agentverse.environments import BaseEnvironment | |
class ClassroomSelector(BaseSelector): | |
def select_message( | |
self, environment: BaseEnvironment, messages: List[Message] | |
) -> List[Message]: | |
selected = [] | |
for message in messages: | |
if message.sender.startswith("Student"): | |
if message.content.startswith("[RaiseHand]"): | |
message.content = "[RaiseHand]" | |
selected.append(message) | |
elif message.content != "" or len(message.tool_response) > 0: | |
selected.append(message) | |
elif message.sender.startswith("Professor"): | |
# If the professor launch a group discussion, then we | |
# brutely discard the student's message in this turn | |
if message.content.startswith("[GroupDiscuss]"): | |
return [message] | |
selected.append(message) | |
# If some student speak while the professor is speaking, then | |
# we brutely discard the student's message in this turn | |
if ( | |
len(selected) > 1 | |
and selected[0].sender.startswith("Professor") | |
and selected[0].content != "" | |
): | |
filtered_selected = [] | |
filtered_selected.append(selected[0]) | |
for message in selected[1:]: | |
if message.content.startswith("[RaiseHand]"): | |
filtered_selected.append(message) | |
selected = filtered_selected | |
return selected | |