{"slug": "someone-made-jev-play-atari-games", "title": "Someone made jev play Atari games", "summary": "A developer released an open-source project that evaluates TypeSafe's Jev model, version jev-1.13.0, as a policy in Gymnasium and Atari environments, converting game observations into structured JSON so Jev selects a legal action through a single Choice question. The project supports CartPole, Pong, Breakout, and Ms. Pac-Man, with Montezuma's Revenge marked experimental and development paused, and records rewards and decisions without training or updating model weights, using a seeded random policy as a local baseline. Atari runs use the Arcade Learning Environment with Python 3.14, a committed uv.lock, and a trial wrapper defaulting to 64 decisions per game, 2 emulator frames per decision, and a 0.25 sticky-action probability.", "body_md": "Evaluate [TypeSafe Jev](https://docs.typesafe.ai/introduction) as a policy in\nGymnasium and Atari environments. Game-specific adapters convert observations\ninto structured JSON; Jev selects a legal action through a single Choice question.\n\nThis project evaluates a fixed model. It records rewards and decisions without training or updating model weights. A seeded random policy provides a local baseline.\n\nThree games, one shared action-selection question. Joysticks and probability bars\nshow Jev's recorded decisions at 2× game speed. See [recording details](https://github.com/taodav/jev_deep_rl/blob/main/media/README.md)\nfor the source runs, rendering command, and smaller gameplay-only GIF.\n\n```\nEnvironment → structured state → Jev Choice → legal action → environment\n                   ↓                ↓\n             RAM, frames, requests, responses, rewards → NPY / JSONL / GIF\n```\n\n| Environment | Observation adapter | Status | \n|---|---|---|\n| CartPole | Named position, velocity, angle, and angular velocity | Supported | \n| Pong | RAM or RGB object detection | Supported | \n| Breakout | RAM: ball, paddle, lives, and brick map | Supported | \n| Ms. Pac-Man | RAM: maze, actors, food, and local navigation | Supported | \n| Montezuma's Revenge | RAM and reference room geometry | Experimental; development paused | \n\nRAM and known room geometry provide privileged information compared with\npixel-only Atari benchmarks. Adapter limitations are documented in\n[observation adapters](https://github.com/taodav/jev_deep_rl/blob/main/docs/observations.md) and the\n[Montezuma prototype](https://github.com/taodav/jev_deep_rl/blob/main/docs/montezuma.md).\n\nInstall [uv](https://docs.astral.sh/uv/getting-started/installation/), then from\nthe repository root:\n\n```\nuv sync --locked --extra atari --extra recording\n\n# Local run: no credentials or API requests.\nuv run --locked --no-env-file --extra atari --extra recording main.py \\\n  --env ALE/Breakout-v5 --policy random --max-steps 500 \\\n  --log runs/breakout-random.jsonl --save-npy runs/breakout-random.npy\n\nuv run --locked --no-env-file --extra recording npy_to_gif.py \\\n  runs/breakout-random.npy --scale 2\n```\n\nThe project uses Python 3.14 and a committed `uv.lock`. Atari runs through\n[Arcade Learning Environment](https://ale.farama.org/getting-started/). No ROM\nfiles or credentials are included in this repository. Raw experiment recordings\nstay local; `media/` contains selected demonstration GIFs and a showcase preview.\nCartPole can run without the Atari extra:\n\n```\nuv run --locked --no-env-file main.py --env CartPole-v1 --policy random\n```\n\nCreate `.env` from the blank template **only if you do not already have one**:\n\n```\ncp -n .env.example .env\n```\n\nSet `TYPESAFE_API_KEY` in your local `.env` or process environment. The `.env` file\nis ignored by Git. `uv --env-file .env` loads it at runtime; the Python scripts\ndo not open it. CLI entry points suppress SDK/HTTP debug output and raw exception\npayloads. Response capture redacts runtime credentials and excludes headers/cookies.\n\nStart with a bounded live trial:\n\n```\nuv run --locked --env-file .env --extra atari --extra recording run_jev_trial.py \\\n  --game breakout --max-steps 64 --output-dir runs/breakout-trial\n```\n\nGame choices: `pong`, `breakout`, `mspacman`, `montezuma`, or `both` (Pong and\nBreakout). The wrapper uses RAM observations, one episode, no HTTP retries, and\nexports a GIF automatically. Existing outputs are never overwritten; use a new\noutput directory for each trial. Runs stop at game over, truncation, or the\nrequested decision limit.\n\n| Setting | Default | \n|---|---|\n| Model | `jev-1.13.0` | \n| Emulator frames per Atari decision | 2 | \n| Sticky-action probability | 0.25 | \n| Seed / episodes | 7 / 1 | \n| General CLI decision limit | 500 | \n| Trial-wrapper decision limit | 64 per game | \n| HTTP retries | General CLI: 2; trial wrapper: 0 | \n\nThe general CLI exposes frame skipping, sticky actions, model, seed, episode count,\nand replay controls. Run `main.py --help` for details. Pong uses RGB by default\nin the general CLI; add `--pong-state ram` for RAM input.\n\nThe simulator pauses during each API request. Playback uses emulator time, so\nnetwork latency affects runtime but not the recorded game speed. Each decision\nnormally uses one API request; general-CLI retries can add requests. Check\n[current TypeSafe pricing and limits](https://docs.typesafe.ai/models) before\nlarge runs, and use logged token usage to measure cost.\n\n- `.npy` : RGB frames, raw observations, exact structured states, actions, rewards,\nepisode summaries, and redacted API responses.\n- `.jsonl` : transition records;`.responses.jsonl` : exact redacted API requests\nand response bodies, captured before validation.\n- `.gif` : game-time playback exported from the recording.\n\nAll local outputs belong under the ignored `runs/` directory. NPY files contain\npickled dictionaries; only load your own trusted recordings. Details and examples:\n[recordings, replay, GIF conversion, and offline debugging](https://github.com/taodav/jev_deep_rl/blob/main/docs/recordings.md).\n\nJoin GIFs side by side, stopping when the shortest finishes:\n\n```\nuv run --locked --no-env-file --extra recording join_gifs.py \\\n  runs/pong.gif runs/breakout.gif runs/mspacman.gif --output runs/combined.gif\nuv sync --locked --extra atari --extra recording\nuv run --locked --no-env-file ruff check .\nuv run --locked --no-env-file ruff format --check .\nuv run --locked --no-env-file --extra atari --extra recording python -m pytest -q\n```\n\nTests use local emulators and mock HTTP transports. No live TypeSafe requests or\nAPI key are required. See [CONTRIBUTING.md](https://github.com/taodav/jev_deep_rl/blob/main/CONTRIBUTING.md) for adapter development\nand [AGENTS.md](https://github.com/taodav/jev_deep_rl/blob/main/AGENTS.md) for agent instructions.\n\nThe core modules are `adapters.py` and the game decoders (state), `policies.py`\n(action selection), `runner.py` (episode loop), `recording.py` (NPY), and\n`responses.py` (redacted capture and replay), under `jev_rl/`.\n\nBuilt with [Gymnasium](https://gymnasium.farama.org/),\n[ALE](https://ale.farama.org/), and [TypeSafe](https://docs.typesafe.ai/).\nRAM decoding references and Montezuma room geometry draw on\n[OCAtari](https://github.com/k4ntz/OC_Atari). Its license and the installed\nTypeSafe skill's license are recorded in [third-party notices](https://github.com/taodav/jev_deep_rl/blob/main/THIRD_PARTY_NOTICES.md).", "url": "https://wpnews.pro/news/someone-made-jev-play-atari-games", "canonical_source": "https://github.com/taodav/jev_deep_rl", "published_at": "2026-09-20 18:04:07+00:00", "updated_at": "2026-09-20 18:23:11.212280+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-research", "large-language-models"], "entities": ["TypeSafe", "Jev", "Gymnasium", "Arcade Learning Environment", "CartPole", "Pong", "Breakout", "Ms. Pac-Man"], "alternates": {"html": "https://wpnews.pro/news/someone-made-jev-play-atari-games", "markdown": "https://wpnews.pro/news/someone-made-jev-play-atari-games.md", "text": "https://wpnews.pro/news/someone-made-jev-play-atari-games.txt", "jsonld": "https://wpnews.pro/news/someone-made-jev-play-atari-games.jsonld"}}