| 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 |
|
|