Build and Push Docker Container / build-and-push (push) Successful in 2m18s
- Register Zenith 1.1 with balanced duel verdicts and forced-outcome overrides. - Prioritize permanent-trail space in Constrictor and health-aware hazard routes. - Deduct executor queue delays and return fallback directions on move timeouts. - Correlate response headers, replay timings, and sampled structured trace logs. - Move shared metrics publication off the response path without losing local counts. - Allow configurable tournament opponents and add a psql helper recipe. - Preserve empty latency values through compact replay encoding and migration. - Update Arena game links and use default assets for missing customizations. - Cover strategy, HTTP lifecycle, tracing, replay codecs, and dashboard behavior. - Validate with 260 passing Python tests, 4 skips, and 2 passing JavaScript tests.
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
import importlib
|
|
from dataclasses import dataclass
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class SnakeRegistration:
|
|
module: str
|
|
version: str
|
|
|
|
SNAKE_REGISTRATIONS = {
|
|
"TemplateSnake": SnakeRegistration("snakes.core.template", "1.0.0"),
|
|
"ApexBattleSnake": SnakeRegistration("snakes.strategies.apex", "1.0.0"),
|
|
"PrismBattleSnake_GPT_5_6_Sol": SnakeRegistration(
|
|
"snakes.strategies.prism", "1.5.0"
|
|
),
|
|
"ZenithBattleSnake_ClaudeOpus5_5": SnakeRegistration(
|
|
"snakes.strategies.zenith", "1.1.0"
|
|
),
|
|
"DummSnake": SnakeRegistration("snakes.legacy.DummSnake", "1.0.0"),
|
|
"LogicSnake": SnakeRegistration("snakes.legacy.LogicSnake", "1.1.0"),
|
|
"MasterSnake": SnakeRegistration("snakes.legacy.MasterSnake", "1.2.0"),
|
|
"BetterMasterSnake": SnakeRegistration("snakes.legacy.BetterMasterSnake", "1.3.0"),
|
|
"BestBattleSnake": SnakeRegistration("snakes.legacy.BestBattleSnake", "2.6.0"),
|
|
"TrainedBattleSnake": SnakeRegistration(
|
|
"snakes.legacy.TrainedBattleSnake", "0.1.0"
|
|
),
|
|
"UltimateBattleSnake": SnakeRegistration(
|
|
"snakes.legacy.UltimateBattleSnake", "4.5.0"
|
|
),
|
|
"SupremeBattleSnake_ClaudeOpus4_6": SnakeRegistration(
|
|
"snakes.legacy.SupremeBattleSnake_ClaudeOpus4_6",
|
|
"1.0.0",
|
|
),
|
|
}
|
|
|
|
# Backward-compatible public version map.
|
|
SNAKE_REGISTRY = {
|
|
name: registration.version for name, registration in SNAKE_REGISTRATIONS.items()
|
|
}
|
|
|
|
DEFAULT_SNAKE_CONFIG = {
|
|
"apiversion": "1",
|
|
"author": "",
|
|
"color": "#888888",
|
|
"head": "default",
|
|
"tail": "default",
|
|
}
|
|
|
|
def build_snake(selected_snake: str):
|
|
registration = SNAKE_REGISTRATIONS.get(selected_snake)
|
|
if registration is None:
|
|
raise ValueError(f"Unknown snake: {selected_snake}")
|
|
|
|
snake_module = importlib.import_module(registration.module)
|
|
snake_class = getattr(snake_module, selected_snake)
|
|
return snake_class()
|
|
|
|
def get_snake_version(selected_snake: str) -> str | None:
|
|
registration = SNAKE_REGISTRATIONS.get(selected_snake)
|
|
return registration.version if registration is not None else None
|
|
|
|
class SnakeBuilder:
|
|
@classmethod
|
|
def build(self, selected_snake: str):
|
|
return build_snake(selected_snake)
|
|
|
|
@classmethod
|
|
def get_version(self, selected_snake: str) -> str | None:
|
|
return get_snake_version(selected_snake)
|