Spaces:
Paused
Paused
File size: 2,870 Bytes
ed4bdac | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | """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)
|