AgentVerse's picture
bump version to 0.1.8
01523b5
from __future__ import annotations
import logging
import re
from typing import TYPE_CHECKING, Any, List, Optional
from . import order_registry as OrderRegistry
from .base import BaseOrder
if TYPE_CHECKING:
from agentverse.environments import BaseEnvironment
@OrderRegistry.register("prisoner")
class PrisonerOrder(BaseOrder):
"""The order for a classroom discussion
The agents speak in the following order:
1. The professor speaks first
2. Then the professor can continue to speak, and the students can raise hands
3. The professor can call on a student, then the student can speak or ask a question
4. In the group discussion, the students in the group can speak in turn
"""
# try police, prisoner1 prisoner2 first
last_prisoner_index: int = 1
switch_func: dict = {1: 2, 2: 1}
def get_next_agent_idx(self, environment: BaseEnvironment) -> List[int]:
if len(environment.last_messages) == 0:
# If the game just begins or , we let only the police speak
return [0]
elif len(environment.last_messages) == 1:
message = environment.last_messages[0]
sender = message.sender
content = message.content
if sender.startswith("Police"):
next_prisoner = self.last_prisoner_index
self.last_prisoner_index = self.switch_func[self.last_prisoner_index]
return [next_prisoner]
elif sender.startswith("Suspect"):
# 3. when one prisoner made his action, let the police tell another prisoner
return [0]
else:
# If len(last_messages) > 1, then
# 1. there must be at least one student raises hand or speaks.
# 2. the group discussion is just over.
return [0]