killer2 / werewolf /core /action_parser.py
JackWPP's picture
feat: Implement core functionality for werewolf game agents
08f891f
from typing import Optional
from agent_build_sdk.model.werewolf_model import (
STATUS_DISCUSS,
STATUS_SHERIFF,
STATUS_SHERIFF_ELECTION,
STATUS_SHERIFF_SPEECH,
STATUS_SHERIFF_PK,
STATUS_SHERIFF_SPEECH_ORDER,
STATUS_SHERIFF_VOTE,
STATUS_VOTE,
STATUS_SKILL,
STATUS_WOLF_SPEECH,
)
from core import ruleset
from core.actions import (
DiscussAction,
SheriffRunAction,
SheriffSpeechOrderAction,
SheriffTransferAction,
SheriffVoteAction,
SkillAction,
VoteAction,
)
from core.output_guard import normalize_llm_text
def parse_action(status: str, text: Optional[str]):
s = normalize_llm_text(text)
if status in {STATUS_DISCUSS, STATUS_WOLF_SPEECH, STATUS_SHERIFF_SPEECH, STATUS_SHERIFF_PK}:
return DiscussAction(text=s)
if status == STATUS_VOTE:
return VoteAction(target=s)
if status == STATUS_SKILL:
if s == ruleset.NO_SHOOT or s == ruleset.WITCH_NO_USE:
return SkillAction(target=None)
return SkillAction(target=s)
if status == STATUS_SHERIFF_VOTE:
return SheriffVoteAction(target=s)
if status == STATUS_SHERIFF:
return SheriffTransferAction(target=s)
if status == STATUS_SHERIFF_ELECTION:
if s == ruleset.SHERIFF_RUN:
return SheriffRunAction(join=True)
if s == ruleset.SHERIFF_NOT_RUN:
return SheriffRunAction(join=False)
return None
if status == STATUS_SHERIFF_SPEECH_ORDER:
return SheriffSpeechOrderAction(order=s)
return None