A repository for the Dynamic Foraging task and its associated curricula.
This repository follows the project structure laid out in the Aind.Behavior.Services repository.
Pre-requisites for running the project can be found here.
For convenience, once third-party dependencies are installed, Bonsai and python virtual environments can be bootstrapped by running:
./scripts/deploy.ps1from the root of the repository.
The Dynamic Foraging task is instantiated by a set of three settings files that strictly follow a DSL schema. These files are:
task_logic.jsonrig.jsonsession.json
Examples on how to generate these files can be found in the ./Examples directory of the repository. Once generated, these are the the only required inputs to run the Bonsai workflow in ./src/main.bonsai.
The workflow can thus be executed using the Bonsai CLI:
"./.bonsai/bonsai.exe" "./src/main.bonsai" -p SessionPath=<path-to-session.json> -p RigPath=<path-to-rig.json> -p TaskLogicPath=<path-to-task_logic.json>However, for a better experiment management user experience, it is recommended to use the provided experiment launcher below.
The platform exposes a few CLI tools to facilitate various tasks. Tools are available via:
uv run dynamic-foraging <subcommand>for a list of all sub commands available:
uv run dynamic-foraging -hYou may need to install optional dependencies depending on the sub-commands you run.
Curricula are available via the curriculum CLI entry point. For a full list of commands:
uv run curriculum -huv run curriculum listCreates an initial trainer state for enrolling a subject in a curriculum.
# Start at the first stage
uv run curriculum init --curriculum coupled_baiting --output initial_state.json
# Start at a specific stage
uv run curriculum init --curriculum coupled_baiting --stage s_stage_1 --output initial_state.jsonEvaluates a curriculum based on session data and current trainer state.
uv run curriculum run \
--data-directory /path/to/session/data \
--input-trainer-state current_state.json \
--output-suggestion /path/to/outputForce a specific curriculum:
uv run curriculum run \
--data-directory /path/to/session/data \
--input-trainer-state current_state.json \
--curriculum coupled_baiting \
--output-suggestion /path/to/outputuv run curriculum version # Package version
uv run curriculum dsl-version # Underlying DSL library version-
List available curricula:
uv run curriculum list
-
Initialize a subject:
uv run curriculum init --curriculum coupled_baiting --output trainer_state.json
-
After a session, evaluate progress:
uv run curriculum run \ --data-directory /path/to/session/data \ --input-trainer-state trainer_state.json \ --output-suggestion /path/to/output
-
Use the suggestion for the next session: The
suggestion.jsonoutput can be passed as--input-trainer-statefor the next session.
To keep things clear, the following naming conventions are recommended:
- Policies should start with
p_(e.g.,p_identity_policy) - Policy transitions should start with
pt_ - Stages should start with
s_(e.g.,s_stage1) - Stage transitions should start with
st_and be named after the stages they transition between (e.g.,st_s_stage1_s_stage2)
Define the following modules within a curriculum:
- metrics: Defines (or imports) metrics classes and how to calculate them from data
- stages: Defines the different stages of the task, including task settings and optionally policies
- curriculum: Defines transitions between stages and generates the entry point to the application
Once an experiment is collected, the primary data quality-control script can be run to check the data for issues. This script can be launcher using:
uv run dynamic-foraging data-qc <path-to-data-dir>DSL schemas can be modified in ./src/aind_behavior_dynamic_foraging/rig.py (or (...)/task_logic.py`).
Once modified, changes to the DSL must be propagated to json-schema and csharp API. This can be done by running:
uv run dynamic-foraging regenerate