import os # Paths PROJECT_DIR = os.path.dirname(os.path.abspath(__file__)) TASKS_DIR = os.path.join(PROJECT_DIR, "tasks") # Docker sandbox defaults SANDBOX_IMAGE = os.environ.get("ARENA_SANDBOX_IMAGE", "python:3.12-slim") SANDBOX_NETWORK = os.environ.get("ARENA_SANDBOX_NETWORK", "arena-net") SANDBOX_MEMORY_LIMIT = os.environ.get("ARENA_SANDBOX_MEMORY", "2g") # CLI paths CLAUDE_CLI_PATH = os.environ.get("CLAUDE_CLI_PATH", "claude") AIDER_CLI_PATH = os.environ.get("AIDER_CLI_PATH", "aider") CODEX_CLI_PATH = os.environ.get("CODEX_CLI_PATH", "codex") # Anthropic pricing (per 1M tokens) — March 2026 ANTHROPIC_PRICING = { "claude-opus-4-6": (5.00, 6.25, 0.50, 25.0), "claude-sonnet-4-6": (3.00, 3.75, 0.30, 15.0), "claude-haiku-4-5-20251001": (1.00, 1.25, 0.10, 5.0), } DEFAULT_PRICING = (3.00, 3.75, 0.30, 15.0) # Sonnet as default # OpenAI pricing (per 1M tokens): (input, cache_write, cache_read, output) OPENAI_PRICING = { "gpt-4o": (2.50, 0, 0, 10.0), "o3": (2.00, 0, 0, 8.0), "o4-mini": (1.10, 0, 0, 4.40), } # Aider default model — uses MiniMax via litellm (cheapest available) AIDER_DEFAULT_MODEL = os.environ.get("AIDER_MODEL", "openai/MiniMax-M2.5") # MiniMax settings MINIMAX_BASE_URL = "https://api.minimax.io/v1" MINIMAX_PRICING = { "MiniMax-M2.5": (0.05, 0, 0, 0.05), # ~$0.05/1M tokens (input, cache_w, cache_r, output) } # Unified pricing registry (all providers) ALL_PRICING = {} ALL_PRICING.update(ANTHROPIC_PRICING) ALL_PRICING.update(OPENAI_PRICING) ALL_PRICING.update(MINIMAX_PRICING) def get_pricing(model_id: str) -> tuple: """Look up pricing rates for a model. Returns (input, cache_write, cache_read, output) per 1M tokens.""" if model_id in ALL_PRICING: return ALL_PRICING[model_id] # Strip provider prefix (e.g., "openai/MiniMax-M2.5" -> "MiniMax-M2.5") short = model_id.split("/")[-1] if "/" in model_id else model_id if short in ALL_PRICING: return ALL_PRICING[short] # Case-insensitive fallback lower = short.lower() for key, val in ALL_PRICING.items(): if key.lower() == lower: return val return DEFAULT_PRICING # Pass@k defaults DEFAULT_K = 3 MAX_K = 10 # Server HOST = os.environ.get("ARENA_HOST", "127.0.0.1") PORT = int(os.environ.get("ARENA_PORT", "8420"))