KantBench / env /arena /models.py
jtowarek's picture
Upload folder using huggingface_hub
ed4bdac verified
"""Pydantic data models for the metagame arena system."""
from __future__ import annotations
from typing import Any, Optional
from pydantic import BaseModel, Field
from constant_definitions.arena.arena_constants import (
PROPOSAL_BAN,
)
from constant_definitions.arena.reputation_weights import (
DEFAULT_ARENA_SCORE_NUMERATOR,
DEFAULT_ARENA_SCORE_DENOMINATOR,
)
from constant_definitions.arena.messaging_constants import (
MSG_TYPE_DIRECT,
)
_ZERO = int()
_ONE = int(bool(True))
_ZERO_F = float()
_DEFAULT_SCORE = (
DEFAULT_ARENA_SCORE_NUMERATOR / DEFAULT_ARENA_SCORE_DENOMINATOR
)
class ArenaMessage(BaseModel):
"""A message sent between models during the communication phase."""
sender: str
recipients: list[str] = Field(default_factory=list)
msg_type: str = MSG_TYPE_DIRECT
content: str = ""
gossip_target: Optional[str] = None
gossip_rating: Optional[str] = None
class ArenaModelProfile(BaseModel):
"""Tracks per-model metadata, reputation signals, and game history."""
model_id: str
model_type: str = ""
reputation: float = _DEFAULT_SCORE
cooperation_history: list[float] = Field(default_factory=list)
honesty: float = _DEFAULT_SCORE
fairness: float = _DEFAULT_SCORE
peer_ratings: list[dict[str, str]] = Field(default_factory=list)
games_played: int = _ZERO
is_active: bool = True
banned_round: Optional[int] = None
class ArenaProposal(BaseModel):
"""A governance proposal submitted by a model."""
proposer: str
proposal_type: str = PROPOSAL_BAN
target_model: Optional[str] = None
rule_description: Optional[str] = None
game_definition: Optional[dict[str, Any]] = None
class ArenaVote(BaseModel):
"""A model's vote on a governance proposal."""
voter: str
proposal_index: int = _ZERO
approve: bool = True
weight: float = _DEFAULT_SCORE
class ArenaRoundResult(BaseModel):
"""Complete record of one arena round across all phases."""
round_number: int = _ZERO
messages: list[ArenaMessage] = Field(default_factory=list)
proposals: list[ArenaProposal] = Field(default_factory=list)
votes: list[ArenaVote] = Field(default_factory=list)
adopted: list[int] = Field(default_factory=list)
game_results: list[dict[str, Any]] = Field(default_factory=list)
reputation_updates: dict[str, float] = Field(default_factory=dict)
class ArenaState(BaseModel):
"""Mutable state of the metagame arena across rounds."""
round_number: int = _ZERO
total_rounds: int = _ZERO
roster: dict[str, ArenaModelProfile] = Field(default_factory=dict)
game_pool: list[str] = Field(default_factory=list)
custom_games: list[str] = Field(default_factory=list)
round_history: list[ArenaRoundResult] = Field(default_factory=list)
active_rules: list[str] = Field(default_factory=list)