synth-ai 0.2.13.dev1__py3-none-any.whl → 0.2.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of synth-ai might be problematic. Click here for more details.
- examples/multi_step/configs/README_verilog_rl.md +77 -0
- examples/multi_step/configs/VERILOG_REWARDS.md +90 -0
- examples/multi_step/configs/VERILOG_RL_CHECKLIST.md +183 -0
- examples/multi_step/configs/crafter_eval_synth_qwen4b.toml +35 -0
- examples/multi_step/configs/crafter_eval_text_only_groq_qwen32b.toml +36 -0
- examples/multi_step/configs/crafter_rl_stepwise_hosted_judge.toml +17 -5
- examples/multi_step/configs/crafter_synth_backend.md +40 -0
- examples/multi_step/configs/verilog_eval_groq_qwen32b.toml +31 -0
- examples/multi_step/configs/verilog_eval_synth_qwen8b.toml +33 -0
- examples/multi_step/configs/verilog_rl_lora.toml +190 -0
- examples/multi_step/judges/crafter_backend_judge.py +220 -0
- examples/multi_step/judges/verilog_backend_judge.py +234 -0
- examples/multi_step/readme.md +48 -0
- examples/multi_step/verilog_rl_lora.md +218 -0
- examples/qwen_coder/configs/coder_lora_30b.toml +1 -1
- examples/sft/evaluate.py +2 -0
- examples/sft/generate_traces.py +2 -0
- examples/swe/task_app/grpo_swe_mini.py +56 -26
- examples/swe/task_app/hosted/rollout.py +42 -0
- examples/swe/task_app/hosted/test_service.py +5 -6
- examples/task_apps/IMAGE_ONLY_EVAL_QUICKSTART.md +258 -0
- examples/task_apps/TESTING.md +275 -0
- examples/task_apps/__init__.py +0 -0
- examples/task_apps/crafter/CREATE_SFT_DATASET.md +273 -0
- examples/task_apps/crafter/EVAL_IMAGE_ONLY_RESULTS.md +152 -0
- examples/task_apps/crafter/FILTER_COMMAND_STATUS.md +174 -0
- examples/task_apps/crafter/FILTER_COMMAND_SUCCESS.md +268 -0
- examples/task_apps/crafter/QUERY_EXAMPLES.md +203 -0
- examples/task_apps/crafter/README_IMAGE_ONLY_EVAL.md +316 -0
- examples/task_apps/crafter/__init__.py +0 -0
- examples/task_apps/crafter/eval_image_only_gpt4o.toml +28 -0
- examples/task_apps/crafter/eval_text_only_groq_llama.toml +36 -0
- examples/task_apps/crafter/filter_sft_dataset.toml +16 -0
- examples/task_apps/crafter/task_app/__init__.py +5 -0
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/grpo_crafter.py +324 -21
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/grpo_crafter_task_app.py +1 -1
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/environment.py +10 -0
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/policy.py +76 -7
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/react_agent.py +17 -2
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/inference/openai_client.py +25 -3
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/policy_routes.py +77 -4
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/rollout.py +117 -9
- examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/test_service.py +5 -6
- examples/task_apps/crafter/task_app/synth_envs_hosted/utils.py +218 -0
- examples/task_apps/dev/pokemon_emerald/__init__.py +2 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/README.md +811 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/__init__.py +120 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/action.py +160 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/memory.py +155 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/perception.py +69 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/planning.py +96 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/simple.py +1502 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/system_prompt.py +4 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/grab_map.py +68 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/manual.py +216 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/__init__.py +35 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/emerald_utils.py +631 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/emulator.py +1544 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/enums.py +1428 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/memory_reader.py +4848 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/types.py +41 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/utils.py +298 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pyproject.toml +95 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/run.py +204 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/__init__.py +0 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/app.py +2152 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/client.py +429 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/frame_server.py +155 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/README.md +78 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/__init__.py +0 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/run_tests.py +122 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_agent_direct.py +76 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_agent_prompts.py +413 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_battle_state_formatting.py +204 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_dialogue_detection.py +133 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_dialogue_detection_comprehensive.py +229 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_direct_agent_emulator.py +300 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_fps_adjustment_pytest.py +205 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_house_to_outside_direct.py +200 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_house_to_outside_transition.py +284 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_map_ground_truth_comparison.py +468 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_memory_map.py +575 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_server_map_validation.py +311 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_torchic_state.py +259 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/__init__.py +0 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/anticheat.py +372 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/checkpoint.py +296 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/error_handler.py +275 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/get_local_ip.py +22 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/helpers.py +44 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/llm_logger.py +514 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_formatter.py +415 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_stitcher.py +1763 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_stitcher_singleton.py +33 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_trimmer.py +106 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_visualizer.py +334 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/ocr_dialogue.py +1020 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/recording.py +188 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/state_formatter.py +1481 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/vlm.py +862 -0
- examples/task_apps/dev/pokemon_emerald/modal_app.py +114 -0
- examples/task_apps/dev/pokemon_emerald/task_app/README.md +81 -0
- examples/task_apps/dev/pokemon_emerald/task_app/__init__.py +6 -0
- examples/task_apps/dev/pokemon_emerald/task_app/pokemon_emerald.py +685 -0
- examples/task_apps/enron/__init__.py +1 -0
- examples/task_apps/enron/eval_groq_qwen32.toml +16 -0
- examples/task_apps/enron/filter_sft.toml +5 -0
- examples/task_apps/enron/task_app/README.md +14 -0
- examples/task_apps/enron/task_app/__init__.py +1 -0
- examples/task_apps/enron/task_app/grpo_enron.py +906 -0
- examples/task_apps/enron/task_app/grpo_enron_task_app.py +146 -0
- examples/task_apps/enron/tests/__init__.py +4 -0
- examples/task_apps/enron/tests/conftest.py +115 -0
- examples/task_apps/enron/tests/integration/__init__.py +4 -0
- examples/task_apps/enron/tests/integration/test_enron_eval.py +179 -0
- examples/task_apps/enron/tests/integration/test_enron_rollout.py +135 -0
- examples/task_apps/enron/tests/unit/__init__.py +4 -0
- examples/task_apps/enron/tests/unit/test_enron_environment.py +126 -0
- examples/task_apps/math/__init__.py +0 -0
- examples/{rl/task_app → task_apps/math}/math_single_step.py +19 -10
- examples/task_apps/pokemon_battle/__init__.py +2 -0
- examples/task_apps/pokemon_battle/modal_app.py +104 -0
- examples/task_apps/pokemon_battle/task_app/README.md +68 -0
- examples/task_apps/pokemon_battle/task_app/__init__.py +6 -0
- examples/task_apps/pokemon_battle/task_app/pokemon_showdown.py +932 -0
- examples/task_apps/pokemon_red/EVAL_IMAGE_ONLY_COMPLETE.md +283 -0
- examples/task_apps/pokemon_red/EVAL_IMAGE_ONLY_STATUS.md +155 -0
- examples/task_apps/pokemon_red/README.md +357 -0
- examples/task_apps/pokemon_red/README_IMAGE_ONLY_EVAL.md +415 -0
- examples/task_apps/pokemon_red/__init__.py +3 -0
- examples/task_apps/pokemon_red/eval_image_only_gpt4o.toml +29 -0
- examples/task_apps/pokemon_red/eval_pokemon_red_policy.py +225 -0
- examples/task_apps/pokemon_red/pallet_town_rl_config.toml +75 -0
- examples/task_apps/pokemon_red/task_app.py +799 -0
- examples/task_apps/pokemon_red/test_pallet_town_rewards.py +193 -0
- examples/task_apps/sokoban/README.md +307 -0
- examples/task_apps/sokoban/__init__.py +3 -0
- examples/task_apps/sokoban/eval_groq_qwen32.toml +16 -0
- examples/task_apps/sokoban/eval_openai_gpt5.toml +16 -0
- examples/task_apps/sokoban/filter_sft.toml +5 -0
- examples/task_apps/sokoban/task_app.py +1058 -0
- examples/task_apps/sokoban/tests/__init__.py +4 -0
- examples/task_apps/sokoban/tests/conftest.py +113 -0
- examples/task_apps/sokoban/tests/integration/__init__.py +4 -0
- examples/task_apps/sokoban/tests/integration/test_sokoban_eval.py +57 -0
- examples/task_apps/sokoban/tests/integration/test_sokoban_rollout.py +198 -0
- examples/task_apps/sokoban/tests/unit/__init__.py +4 -0
- examples/task_apps/sokoban/tests/unit/test_sokoban_environment.py +114 -0
- examples/task_apps/verilog/__init__.py +1 -0
- examples/task_apps/verilog/eval_groq_qwen32b.toml +24 -0
- examples/task_apps/verilog/filter_sft.toml +5 -0
- examples/task_apps/verilog/task_app/README.md +12 -0
- examples/task_apps/verilog/task_app/__init__.py +1 -0
- examples/task_apps/verilog/task_app/grpo_verilog.py +1166 -0
- examples/task_apps/verilog/task_app/grpo_verilog_task_app.py +145 -0
- examples/task_apps/verilog/tests/__init__.py +4 -0
- examples/task_apps/verilog/tests/conftest.py +115 -0
- examples/task_apps/verilog/tests/integration/__init__.py +4 -0
- examples/task_apps/verilog/tests/integration/test_verilog_eval.py +181 -0
- examples/task_apps/verilog/tests/integration/test_verilog_rollout.py +55 -0
- examples/task_apps/verilog/tests/unit/__init__.py +4 -0
- examples/task_apps/verilog/tests/unit/test_verilog_scoring.py +118 -0
- examples/vlm/crafter_openai_vlm_agent.py +4 -4
- examples/vlm/run_crafter_vlm_benchmark.py +4 -4
- examples/warming_up_to_rl/groq_test.py +2 -0
- examples/warming_up_to_rl/run_local_rollout.py +2 -0
- examples/warming_up_to_rl/run_local_rollout_modal.py +2 -0
- examples/warming_up_to_rl/run_local_rollout_parallel.py +2 -0
- examples/warming_up_to_rl/run_local_rollout_traced.py +2 -0
- examples/warming_up_to_rl/run_rollout_remote.py +2 -0
- examples/workflows/__init__.py +0 -0
- examples/workflows/math_rl/__init__.py +0 -0
- examples/workflows/math_rl/download_dataset.py +80 -0
- synth_ai/__init__.py +2 -2
- synth_ai/api/models/supported.py +1 -0
- synth_ai/api/train/builders.py +25 -11
- synth_ai/api/train/cli.py +12 -6
- synth_ai/api/train/configs/__init__.py +10 -10
- synth_ai/api/train/configs/rl.py +5 -4
- synth_ai/api/train/configs/sft.py +4 -3
- synth_ai/api/train/env_resolver.py +5 -2
- synth_ai/api/train/supported_algos.py +10 -5
- synth_ai/api/train/utils.py +7 -4
- synth_ai/cli/__init__.py +48 -59
- synth_ai/cli/_modal_wrapper.py +3 -2
- synth_ai/cli/_storage.py +4 -3
- synth_ai/cli/_validate_task_app.py +11 -0
- synth_ai/cli/balance.py +4 -3
- synth_ai/cli/calc.py +2 -2
- synth_ai/cli/demo.py +14 -7
- synth_ai/cli/legacy_root_backup.py +1 -1
- synth_ai/cli/recent.py +1 -1
- synth_ai/cli/rl_demo.py +8 -7
- synth_ai/cli/root.py +0 -97
- synth_ai/cli/status.py +1 -1
- synth_ai/cli/task_apps.py +1922 -190
- synth_ai/cli/traces.py +1 -1
- synth_ai/cli/tui.py +57 -0
- synth_ai/cli/turso.py +1 -1
- synth_ai/cli/watch.py +1 -1
- synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py +29 -17
- synth_ai/environments/examples/crafter_classic/environment.py +1 -1
- synth_ai/environments/examples/enron/engine.py +7 -2
- synth_ai/environments/examples/enron/environment.py +68 -0
- synth_ai/environments/examples/red/engine.py +27 -0
- synth_ai/environments/examples/red/engine_helpers/memory_map.py +7 -0
- synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_progression.py +477 -0
- synth_ai/environments/examples/red/engine_helpers/state_extraction.py +32 -0
- synth_ai/environments/examples/red/environment.py +60 -0
- synth_ai/environments/examples/sokoban/taskset.py +116 -0
- synth_ai/environments/examples/verilog/engine.py +104 -12
- synth_ai/evals/client.py +58 -61
- synth_ai/jobs/client.py +16 -4
- synth_ai/judge_schemas.py +9 -9
- synth_ai/py.typed +0 -0
- synth_ai/task/__init__.py +24 -5
- synth_ai/task/apps/__init__.py +1 -0
- synth_ai/task/config.py +257 -0
- synth_ai/task/contracts.py +138 -39
- synth_ai/task/proxy.py +48 -56
- synth_ai/task/rubrics/__init__.py +56 -0
- synth_ai/task/rubrics/loaders.py +152 -0
- synth_ai/task/rubrics/models.py +57 -0
- synth_ai/task/rubrics/scoring.py +116 -0
- synth_ai/{rubrics/validators.py → task/rubrics/strict.py} +53 -30
- synth_ai/task/server.py +8 -7
- synth_ai/task/trace_correlation_helpers.py +315 -0
- synth_ai/task/validators.py +413 -6
- synth_ai/tracing_v3/abstractions.py +3 -3
- synth_ai/tracing_v3/decorators.py +7 -3
- synth_ai/tracing_v3/llm_call_record_helpers.py +5 -5
- synth_ai/tracing_v3/replica_sync.py +4 -4
- synth_ai/tracing_v3/serialization.py +5 -5
- synth_ai/tracing_v3/session_tracer.py +16 -6
- synth_ai/tracing_v3/storage/base.py +29 -29
- synth_ai/tracing_v3/storage/config.py +3 -3
- synth_ai/tracing_v3/trace_utils.py +317 -0
- synth_ai/tracing_v3/turso/daemon.py +8 -7
- synth_ai/tracing_v3/turso/native_manager.py +66 -43
- synth_ai/tracing_v3/utils.py +3 -3
- synth_ai/tui/__init__.py +5 -0
- synth_ai/tui/__main__.py +13 -0
- synth_ai/tui/cli/__init__.py +1 -0
- synth_ai/tui/cli/query_experiments.py +164 -0
- synth_ai/tui/cli/query_experiments_v3.py +164 -0
- synth_ai/tui/dashboard.py +906 -0
- {synth_ai-0.2.13.dev1.dist-info → synth_ai-0.2.14.dist-info}/METADATA +4 -1
- {synth_ai-0.2.13.dev1.dist-info → synth_ai-0.2.14.dist-info}/RECORD +278 -126
- examples/agora_ex/README_MoE.md +0 -224
- examples/agora_ex/__init__.py +0 -7
- examples/agora_ex/agora_ex.py +0 -65
- examples/agora_ex/agora_ex_task_app.py +0 -590
- examples/agora_ex/configs/rl_lora_qwen3_moe_2xh200.toml +0 -121
- examples/agora_ex/reward_fn_grpo-human.py +0 -129
- examples/agora_ex/system_prompt_CURRENT.md +0 -63
- examples/agora_ex/task_app/agora_ex_task_app.py +0 -590
- examples/agora_ex/task_app/reward_fn_grpo-human.py +0 -129
- examples/agora_ex/task_app/system_prompt_CURRENT.md +0 -63
- examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py +0 -62
- synth_ai/rubrics/__init__.py +0 -22
- synth_ai/task/rubrics.py +0 -219
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/README.md +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/README.md +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/__init__.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/branching.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/environment_routes.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/__init__.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/__init__.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/app.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/shared.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/envs/crafter/tools.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/hosted_app.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/inference/__init__.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/main.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/registry.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/storage/__init__.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/storage/volume.py +0 -0
- /examples/{warming_up_to_rl → task_apps/crafter}/task_app/synth_envs_hosted/test_agents.py +0 -0
- /examples/{rl/task_app → task_apps/math}/README.md +0 -0
- /examples/{rl/task_app → task_apps/math}/math_task_app.py +0 -0
- /examples/{rl → workflows/math_rl}/configs/eval_base_qwen.toml +0 -0
- /examples/{rl → workflows/math_rl}/configs/eval_rl_qwen.toml +0 -0
- /examples/{rl → workflows/math_rl}/configs/rl_from_base_qwen.toml +0 -0
- /examples/{rl → workflows/math_rl}/configs/rl_from_base_qwen17.toml +0 -0
- /examples/{rl → workflows/math_rl}/configs/rl_from_ft_qwen.toml +0 -0
- /examples/{rl → workflows/math_rl}/run_eval.py +0 -0
- /examples/{rl → workflows/math_rl}/run_rl_and_save.py +0 -0
- {synth_ai-0.2.13.dev1.dist-info → synth_ai-0.2.14.dist-info}/WHEEL +0 -0
- {synth_ai-0.2.13.dev1.dist-info → synth_ai-0.2.14.dist-info}/entry_points.txt +0 -0
- {synth_ai-0.2.13.dev1.dist-info → synth_ai-0.2.14.dist-info}/licenses/LICENSE +0 -0
- {synth_ai-0.2.13.dev1.dist-info → synth_ai-0.2.14.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# System prompt for the Pokémon Emerald AI agent
|
|
2
|
+
system_prompt = """
|
|
3
|
+
You are an AI agent playing Pokémon Emerald on a Game Boy Advance emulator. Your goal is to analyze the current game frame, understand the game state, and make intelligent decisions to progress efficiently. Use your perception, memory, planning, and action modules to interact with the game world. Always provide detailed, context-aware responses and consider the current situation in the game.
|
|
4
|
+
"""
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Script to grab and display the current map data from the running Pokemon Emerald server.
|
|
4
|
+
Usage: python grab_map.py [--save FILENAME]
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import requests
|
|
9
|
+
import sys
|
|
10
|
+
from tests.test_memory_map import print_map_data
|
|
11
|
+
|
|
12
|
+
SERVER_URL = "http://127.0.0.1:8000"
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
parser = argparse.ArgumentParser(description='Grab and display current map data from running Pokemon Emerald server')
|
|
16
|
+
parser.add_argument('--save', type=str, default=None,
|
|
17
|
+
help='Save the formatted map to a text file')
|
|
18
|
+
parser.add_argument('--server', type=str, default=SERVER_URL,
|
|
19
|
+
help=f'Server URL (default: {SERVER_URL})')
|
|
20
|
+
args = parser.parse_args()
|
|
21
|
+
|
|
22
|
+
print(f"Connecting to server at {args.server}...")
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
# Get comprehensive state from server
|
|
26
|
+
response = requests.get(f"{args.server}/state", timeout=5)
|
|
27
|
+
if response.status_code != 200:
|
|
28
|
+
print(f"Error: Failed to get state from server (HTTP {response.status_code})")
|
|
29
|
+
print("Make sure server/app.py is running!")
|
|
30
|
+
sys.exit(1)
|
|
31
|
+
|
|
32
|
+
state_data = response.json()
|
|
33
|
+
|
|
34
|
+
# Extract map data
|
|
35
|
+
if 'map' not in state_data or 'tiles' not in state_data['map']:
|
|
36
|
+
print("Error: No map data in server response")
|
|
37
|
+
print("The server might not have map data available yet")
|
|
38
|
+
sys.exit(1)
|
|
39
|
+
|
|
40
|
+
map_data = state_data['map']['tiles']
|
|
41
|
+
|
|
42
|
+
# Get additional info
|
|
43
|
+
location = state_data.get('player', {}).get('location', 'Unknown')
|
|
44
|
+
coords = state_data.get('player', {}).get('position', {})
|
|
45
|
+
|
|
46
|
+
# Format and display the map
|
|
47
|
+
title = f"Current Map - {location} ({coords.get('x', '?')}, {coords.get('y', '?')})"
|
|
48
|
+
formatted_map = print_map_data(map_data, title)
|
|
49
|
+
|
|
50
|
+
# Save to file if requested
|
|
51
|
+
if args.save:
|
|
52
|
+
with open(args.save, 'w') as f:
|
|
53
|
+
f.write(formatted_map)
|
|
54
|
+
print(f"\nMap saved to {args.save}")
|
|
55
|
+
|
|
56
|
+
except requests.exceptions.ConnectionError:
|
|
57
|
+
print(f"Error: Could not connect to server at {args.server}")
|
|
58
|
+
print("Make sure server/app.py is running!")
|
|
59
|
+
sys.exit(1)
|
|
60
|
+
except requests.exceptions.Timeout:
|
|
61
|
+
print("Error: Server request timed out")
|
|
62
|
+
sys.exit(1)
|
|
63
|
+
except Exception as e:
|
|
64
|
+
print(f"Error: {e}")
|
|
65
|
+
sys.exit(1)
|
|
66
|
+
|
|
67
|
+
if __name__ == "__main__":
|
|
68
|
+
main()
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Manual mode utilities for debugging and testing the Pokemon agent.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from utils.state_formatter import format_state_for_llm
|
|
7
|
+
from utils.map_formatter import format_map_for_display
|
|
8
|
+
from pokemon_env.enums import MetatileBehavior
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def display_comprehensive_state(emulator):
|
|
12
|
+
"""
|
|
13
|
+
Display comprehensive game state exactly as the LLM sees it.
|
|
14
|
+
This is triggered by pressing 'M' in manual mode.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
emulator: The game emulator instance
|
|
18
|
+
"""
|
|
19
|
+
print("\n" + "="*80)
|
|
20
|
+
print("COMPREHENSIVE GAME STATE (What the LLM sees)")
|
|
21
|
+
print("="*80)
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
# Get the comprehensive state with screenshot for OCR
|
|
25
|
+
screenshot = emulator.get_screenshot()
|
|
26
|
+
state = emulator.get_comprehensive_state(screenshot)
|
|
27
|
+
|
|
28
|
+
# Format the state using the same formatter the agent uses
|
|
29
|
+
formatted_state = format_state_for_llm(state)
|
|
30
|
+
|
|
31
|
+
print(formatted_state)
|
|
32
|
+
|
|
33
|
+
# Show additional debug info
|
|
34
|
+
print("\n" + "="*80)
|
|
35
|
+
# print("ADDITIONAL DEBUG INFO")
|
|
36
|
+
print("="*80)
|
|
37
|
+
|
|
38
|
+
# Show raw game state
|
|
39
|
+
game_state = state.get('game_state', {})
|
|
40
|
+
print(f"\n📍 Player Position: {game_state.get('player_location', 'Unknown')}")
|
|
41
|
+
print(f"🗺️ Map: {game_state.get('current_map', 'Unknown')}")
|
|
42
|
+
print(f"💰 Money: ${game_state.get('money', 0)}")
|
|
43
|
+
print(f"🎮 Play Time: {game_state.get('play_time', 'Unknown')}")
|
|
44
|
+
|
|
45
|
+
# Show party info
|
|
46
|
+
party = game_state.get('party', [])
|
|
47
|
+
if party:
|
|
48
|
+
print(f"\n🎭 Party ({len(party)} Pokémon):")
|
|
49
|
+
for i, mon in enumerate(party, 1):
|
|
50
|
+
print(f" {i}. {mon.get('species', 'Unknown')} "
|
|
51
|
+
f"Lv.{mon.get('level', '?')} "
|
|
52
|
+
f"HP: {mon.get('hp', '?')}/{mon.get('max_hp', '?')}")
|
|
53
|
+
|
|
54
|
+
# Show battle info if in battle
|
|
55
|
+
if game_state.get('in_battle'):
|
|
56
|
+
print(f"\n⚔️ BATTLE MODE:")
|
|
57
|
+
print(f" Enemy: {game_state.get('enemy_pokemon', 'Unknown')}")
|
|
58
|
+
print(f" Type: {game_state.get('battle_type', 'Unknown')}")
|
|
59
|
+
|
|
60
|
+
# Show dialogue if present
|
|
61
|
+
dialogue = state.get('visual', {}).get('dialogue_text', '')
|
|
62
|
+
if dialogue:
|
|
63
|
+
print(f"\n💬 Current Dialogue:")
|
|
64
|
+
print(f" {dialogue}")
|
|
65
|
+
|
|
66
|
+
# Show milestone progress
|
|
67
|
+
progress = state.get('progress', {})
|
|
68
|
+
milestones = progress.get('milestones', {})
|
|
69
|
+
if milestones:
|
|
70
|
+
completed = sum(1 for v in milestones.values() if v)
|
|
71
|
+
total = len(milestones)
|
|
72
|
+
print(f"\n🏆 Milestones: {completed}/{total} completed")
|
|
73
|
+
|
|
74
|
+
# Show next uncompleted milestone
|
|
75
|
+
for name, completed in milestones.items():
|
|
76
|
+
if not completed:
|
|
77
|
+
print(f" Next: {name}")
|
|
78
|
+
break
|
|
79
|
+
|
|
80
|
+
print("\n" + "="*80)
|
|
81
|
+
|
|
82
|
+
except Exception as e:
|
|
83
|
+
print(f"❌ Error displaying state: {e}")
|
|
84
|
+
import traceback
|
|
85
|
+
traceback.print_exc()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def display_map_visualization(emulator):
|
|
89
|
+
"""
|
|
90
|
+
Display a visual representation of the current map.
|
|
91
|
+
This is triggered by pressing Shift+M in manual mode.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
emulator: The game emulator instance
|
|
95
|
+
"""
|
|
96
|
+
print("\n" + "="*80)
|
|
97
|
+
print("MAP VISUALIZATION")
|
|
98
|
+
print("="*80)
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
# Get current state
|
|
102
|
+
screenshot = emulator.get_screenshot()
|
|
103
|
+
state = emulator.get_comprehensive_state(screenshot)
|
|
104
|
+
game_state = state.get('game_state', {})
|
|
105
|
+
|
|
106
|
+
# Get map data
|
|
107
|
+
map_grid = game_state.get('map_grid', [[]])
|
|
108
|
+
player_pos = game_state.get('player_position', (0, 0))
|
|
109
|
+
map_name = game_state.get('current_map', 'Unknown')
|
|
110
|
+
|
|
111
|
+
print(f"\n🗺️ Current Map: {map_name}")
|
|
112
|
+
print(f"📍 Player Position: {player_pos}")
|
|
113
|
+
|
|
114
|
+
if map_grid:
|
|
115
|
+
# Use the map formatter to display
|
|
116
|
+
formatted_map = format_map_for_display(
|
|
117
|
+
map_grid,
|
|
118
|
+
player_pos,
|
|
119
|
+
view_radius=7
|
|
120
|
+
)
|
|
121
|
+
print(formatted_map)
|
|
122
|
+
|
|
123
|
+
# Show tile legend
|
|
124
|
+
print("\n📋 Tile Legend:")
|
|
125
|
+
print(" @ = Player")
|
|
126
|
+
print(" . = Walkable")
|
|
127
|
+
print(" # = Wall/Obstacle")
|
|
128
|
+
print(" ~ = Water")
|
|
129
|
+
print(" ^ = Grass")
|
|
130
|
+
print(" D = Door/Warp")
|
|
131
|
+
print(" N = NPC")
|
|
132
|
+
print(" ! = Ledge")
|
|
133
|
+
print(" ? = Unknown")
|
|
134
|
+
else:
|
|
135
|
+
print("⚠️ No map data available")
|
|
136
|
+
|
|
137
|
+
# Try to use the visual map if available
|
|
138
|
+
try:
|
|
139
|
+
visualize_map_state(emulator.memory_reader)
|
|
140
|
+
except:
|
|
141
|
+
pass # Silent fail if visualization not available
|
|
142
|
+
|
|
143
|
+
except Exception as e:
|
|
144
|
+
print(f"❌ Error displaying map: {e}")
|
|
145
|
+
import traceback
|
|
146
|
+
traceback.print_exc()
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def show_debug_menu():
|
|
150
|
+
"""Display the debug menu with available commands"""
|
|
151
|
+
print("\n" + "="*50)
|
|
152
|
+
# print("DEBUG MENU")
|
|
153
|
+
print("="*50)
|
|
154
|
+
print("M - Display comprehensive state (LLM view)")
|
|
155
|
+
print("Shift+M - Display map visualization")
|
|
156
|
+
print("S - Save screenshot")
|
|
157
|
+
print("1 - Save state")
|
|
158
|
+
print("2 - Load state")
|
|
159
|
+
print("Tab - Toggle Agent/Manual mode")
|
|
160
|
+
print("A - Toggle auto-agent mode")
|
|
161
|
+
print("Space - Single agent step")
|
|
162
|
+
print("Esc - Quit")
|
|
163
|
+
print("="*50)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def handle_debug_command(key, emulator, agent_mode=False):
|
|
167
|
+
"""
|
|
168
|
+
Handle debug keyboard commands.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
key: The key pressed
|
|
172
|
+
emulator: The emulator instance
|
|
173
|
+
agent_mode: Whether in agent mode
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
dict: Action to take based on the command
|
|
177
|
+
"""
|
|
178
|
+
action = {}
|
|
179
|
+
|
|
180
|
+
if key == 'm':
|
|
181
|
+
display_comprehensive_state(emulator)
|
|
182
|
+
elif key == 'M': # Shift+M
|
|
183
|
+
display_map_visualization(emulator)
|
|
184
|
+
elif key == 's':
|
|
185
|
+
# Save screenshot
|
|
186
|
+
screenshot = emulator.get_screenshot()
|
|
187
|
+
filename = f"screenshot_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png"
|
|
188
|
+
screenshot.save(filename)
|
|
189
|
+
print(f"💾 Screenshot saved to {filename}")
|
|
190
|
+
elif key == '1':
|
|
191
|
+
# Save state
|
|
192
|
+
import os
|
|
193
|
+
os.makedirs(".pokeagent_cache", exist_ok=True)
|
|
194
|
+
emulator.save_state(".pokeagent_cache/manual_save.state")
|
|
195
|
+
print("💾 State saved to .pokeagent_cache/manual_save.state")
|
|
196
|
+
elif key == '2':
|
|
197
|
+
# Load state
|
|
198
|
+
try:
|
|
199
|
+
emulator.load_state(".pokeagent_cache/manual_save.state")
|
|
200
|
+
print("📂 State loaded from .pokeagent_cache/manual_save.state")
|
|
201
|
+
except:
|
|
202
|
+
print("⚠️ No save state found")
|
|
203
|
+
elif key == 'tab':
|
|
204
|
+
action['toggle_mode'] = True
|
|
205
|
+
elif key == 'a':
|
|
206
|
+
action['toggle_auto'] = True
|
|
207
|
+
elif key == ' ' and agent_mode:
|
|
208
|
+
action['agent_step'] = True
|
|
209
|
+
elif key == 'h':
|
|
210
|
+
show_debug_menu()
|
|
211
|
+
|
|
212
|
+
return action
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
# Add missing import
|
|
216
|
+
from datetime import datetime
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pokemon Emerald Memory Reader Package
|
|
3
|
+
|
|
4
|
+
This package provides tools for reading memory from Pokemon Emerald games
|
|
5
|
+
running in mGBA or other GBA emulators.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .memory_reader import PokemonEmeraldReader
|
|
9
|
+
from .enums import (
|
|
10
|
+
MetatileBehavior,
|
|
11
|
+
PokemonType,
|
|
12
|
+
PokemonSpecies,
|
|
13
|
+
Move,
|
|
14
|
+
Badge,
|
|
15
|
+
MapLocation,
|
|
16
|
+
Tileset,
|
|
17
|
+
StatusCondition
|
|
18
|
+
)
|
|
19
|
+
from .types import PokemonData
|
|
20
|
+
|
|
21
|
+
__version__ = "3.0.0-preview"
|
|
22
|
+
__author__ = "Seth Karten"
|
|
23
|
+
|
|
24
|
+
__all__ = [
|
|
25
|
+
"PokemonEmeraldReader",
|
|
26
|
+
"MetatileBehavior",
|
|
27
|
+
"PokemonType",
|
|
28
|
+
"PokemonSpecies",
|
|
29
|
+
"Move",
|
|
30
|
+
"Badge",
|
|
31
|
+
"MapLocation",
|
|
32
|
+
"Tileset",
|
|
33
|
+
"StatusCondition",
|
|
34
|
+
"PokemonData"
|
|
35
|
+
]
|