main as of 3/18/26 pins aind-data-schema to 0.5.6 , which is incompatible with pydantic>=2.11. This old version of aind-data-schema-models passes model_config=ConfigDict(...) as a keyword argument to pydantic.create_model() in utils.py. In pydantic 2.11, this is now interpreted as trying to create a field named model_config, which is a reserved name — causing a crash:
(Foraging) PS C:\Users\svc_aind_behavior\Documents\GitHub\dynamic-foraging-task> python .\src\foraging_gui\Foraging.py
Traceback (most recent call last):
File "C:\Users\svc_aind_behavior\Documents\GitHub\dynamic-foraging-task\src\foraging_gui\Foraging.py", line 33, in <module>
from aind_data_schema.core.session import Session
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\aind_data_schema\core\session.py", line 8, in <module>
from aind_data_schema_models.modalities import Modality
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\aind_data_schema_models\modalities.py", line 20, in <module>
Modality = create_literal_class(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\aind_data_schema_models\utils.py", line 121, in create_literal_class
all_models = tuple(
^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\aind_data_schema_models\utils.py", line 122, in <genexpr>
create_literal_model(
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\aind_data_schema_models\utils.py", line 56, in create_literal_model
m = create_model(class_name, model_config=ConfigDict(frozen=True), __base__=base_model, **fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\pydantic\main.py", line 1763, in create_model
return meta(
^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\pydantic\_internal\_model_construction.py", line 110, in __new__
config_wrapper = ConfigWrapper.for_model(bases, namespace, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\pydantic\_internal\_config.py", line 128, in for_model
raise PydanticUserError(
pydantic.errors.PydanticUserError: `model_config` cannot be used as a model field name. Use `model_config` for model configuration.
For further information visit https://errors.pydantic.dev/2.11/u/model-config-invalid-field-name
Environment with bug:
$ pip freeze
aind-auto-train @ git+https://github.com/AllenNeuralDynamics/aind-foraging-behavior-bonsai-automatic-training.git@b6fee22adf1bb35d3729b455500e7bae84ee4aee
aind-behavior-curriculum==0.0.27
aind-behavior-services==0.8.9
aind-data-access-api==1.9.4
aind-data-schema==1.1.0
aind-data-schema-models==0.5.6
aind-dynamic-foraging-basic-analysis==0.3.37
aind-dynamic-foraging-data-utils==0.1.40
aind-dynamic-foraging-models==0.13.1
aind-slims-api @ git+https://github.com/AllenNeuralDynamics/aind-slims-api@fdfd769e97abc21bbac2cb30a40b9f65e24b0098
aind_ephys_utils==0.1.1
aind_hierarchical_bootstrap==0.0.7
aiobotocore==2.26.0
aiohappyeyeballs==2.6.1
aiohttp==3.13.3
aioitertools==0.13.0
aiosignal==1.4.0
altgraph==0.17.5
annotated-types==0.7.0
argon2-cffi==25.1.0
argon2-cffi-bindings==25.1.0
asciitree==0.3.3
asttokens==3.0.1
attrs==25.4.0
bidict==0.23.1
bitarray==3.8.0
bitstring==4.4.0
blinker==1.9.0
boto3==1.41.5
botocore==1.41.5
certifi==2026.2.25
cffi==2.0.0
charset-normalizer==2.1.1
click==8.3.1
codeocean==0.14.0
colorama==0.4.6
comm==0.2.3
construct==2.10.70
contourpy==1.3.3
cryptography==46.0.5
cycler==0.12.1
dataclasses-json==0.6.7
decorator==5.2.1
deepdiff==8.6.2
Deprecated==1.3.1
deprecation==2.1.0
dictdiffer==0.9.0
dnspython==2.8.0
-e git+https://github.com/AllenNeuralDynamics/dynamic-foraging-task.git@653293091179fa284c22c6dccff4f0bd49848b1e#egg=dynamic_foraging_task
et_xmlfile==2.0.0
executing==2.2.1
fasteners==0.20
Flask==3.1.3
fonttools==4.62.1
frozenlist==1.8.0
fsspec==2024.12.0
gitdb==4.0.12
GitPython==3.1.46
graphviz==0.21
h5py==3.16.0
harp-python==0.4.1
hdmf==5.0.1
hdmf_zarr==0.12.0
idna==3.11
importlib_resources==6.5.2
inflection==0.5.1
ipympl==0.10.0
ipython==9.10.0
ipython-genutils==0.2.0
ipython_pygments_lexers==1.1.1
ipywidgets==8.1.8
itsdangerous==2.2.0
jedi==0.19.2
Jinja2==3.1.6
jmespath==1.1.0
joblib==1.5.3
jsonschema==4.26.0
jsonschema-specifications==2025.9.1
jupyter_core==5.9.1
jupyterlab_widgets==3.0.16
kazoo==2.10.0
kiwisolver==1.5.0
ldap3==2.9.1
librt==0.8.1
lxml==6.0.2
MarkupSafe==3.0.3
marshmallow==3.26.2
matplotlib==3.10.8
matplotlib-inline==0.2.1
mpetk==0.5.2.dev4+g5fec960.b169542
ms_active_directory==1.14.1
msal==1.35.1
multidict==6.7.1
mypy==1.19.1
mypy_extensions==1.1.0
narwhals==2.18.0
nbformat==5.1.2
newscale @ git+https://github.com/AllenNeuralDynamics/python-newscale@7c1749730702ebcef389cf9221ebaf66c4b251e6
numcodecs==0.15.1
numpy==2.4.3
oauthlib==3.3.1
openpyxl==3.1.5
orderly-set==5.5.0
packaging @ file:///C:/miniconda3/conda-bld/packaging_1761049096285/work
pandas==2.3.3
parso==0.8.6
pathlib==1.0.1
pathspec==1.0.4
pefile==2023.2.7
pillow==12.1.1
platformdirs==4.9.4
plotly==6.6.0
prompt_toolkit==3.0.52
propcache==0.4.1
protobuf==4.25.3
psutil==5.9.8
pure_eval==0.2.3
pyasn1==0.6.3
pycparser==3.0
pycryptodome==3.23.0
pycryptodomex==3.23.0
pydantic==2.11.10
pydantic-settings==2.1.0
pydantic-yaml==1.6.0
pydantic_core==2.33.2
Pygments==2.19.2
pyharp==0.1.0
pyinstaller==6.11.0
pyinstaller-hooks-contrib==2026.3
PyJWT==2.12.1
pykeepass==4.0.7.post1
pymsteams==0.2.5
pynwb==2.8.3
pyOSC3 @ git+https://github.com/glopesdev/pyosc3.git@f853711fa836ebee6d1914cb007341611e74e5a5
pyparsing==3.3.2
PyQt5==5.15.11
PyQt5-Qt5==5.15.2
PyQt5_sip==12.18.0
pyqtgraph==0.14.0
pyserial==3.5
python-dateutil==2.9.0.post0
python-dotenv==1.2.2
python-logging-loki==0.3.1
pytz==2026.1.post1
pywin32-ctypes==0.2.3
PyYAML==6.0.1
pyzmq==26.0.2
redis==5.0.8
referencing==0.37.0
requests==2.31.0
requests-oauthlib==2.0.0
requests-toolbelt==1.0.0
rfc3339==6.2
rpds-py==0.30.0
ruamel.yaml==0.18.17
ruamel.yaml.clib==0.2.15
ruff==0.15.6
s3fs==2024.12.0
s3transfer==0.15.0
scikit-learn==1.8.0
scipy==1.17.1
semver==3.0.4
six==1.17.0
slims-python-api==6.9.0
smmap==5.0.3
stack-data==0.6.3
stagewidget==1.0.5
threadpoolctl==3.6.0
tibs==0.5.7
tornado==6.5.5
tqdm==4.67.3
traitlets==5.14.3
types-pyserial==3.5.0.20251001
types-PyYAML==6.0.12.20250915
typing-inspect==0.9.0
typing-inspection==0.4.2
typing_extensions==4.15.0
tzdata==2025.3
urllib3==2.2.3
watchdog==4.0.2
wcwidth==0.6.0
Werkzeug==3.1.6
widgetsnbextension==4.0.15
winkerberos==0.13.0
wrapt==1.17.3
xarray==2026.2.0
yarl==1.23.0
zarr==2.18.7
Capping pydantic to <2.10 seems to solve the pydantic issues (2.10 itself causes other compatibility problems with aind-data-schema at the pinned version).
Unfortunately, that reveals perhaps unrelated stage-widget / ZooKeeper mismatch which I'll make another issue about:
local repository has untracked changes to the following files: bonsai/Bonsai.config, pyproject.toml
Encountered a fatal error:
Traceback (most recent call last):
File "C:\Users\svc_aind_behavior\Documents\GitHub\dynamic-foraging-task\src\foraging_gui\Foraging.py", line 7700, in <module>
win = Window(box_number=box_number, start_bonsai_ide=start_bonsai_ide)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\Documents\GitHub\dynamic-foraging-task\src\foraging_gui\Foraging.py", line 218, in __init__
self._load_stage()
File "C:\Users\svc_aind_behavior\Documents\GitHub\dynamic-foraging-task\src\foraging_gui\Foraging.py", line 405, in _load_stage
self._insert_stage_widget(widget_to_replace)
File "C:\Users\svc_aind_behavior\Documents\GitHub\dynamic-foraging-task\src\foraging_gui\Foraging.py", line 427, in _insert_stage_widget
self.stage_widget = get_stage_widget()
^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\StageWidget\main.py", line 25, in get_stage_widget
config = get_config_and_setup_logging("widget", log)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\StageWidget\main.py", line 45, in get_config_and_setup_logging
return ConfigModel(**zk_config)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\pydantic_settings\main.py", line 71, in __init__
super().__init__(
File "C:\Users\svc_aind_behavior\AppData\Local\miniconda3\envs\Foraging\Lib\site-packages\pydantic\main.py", line 212, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for ConfigModel
stage_configuration.steps_per_mm
Input should be a valid list [type=list_type, input_value=800, input_type=int]
For further information visit https://errors.pydantic.dev/2.9/v/list_type
mainas of 3/18/26 pins aind-data-schema to0.5.6, which is incompatible with pydantic>=2.11. This old version of aind-data-schema-models passesmodel_config=ConfigDict(...)as a keyword argument topydantic.create_model()in utils.py. In pydantic 2.11, this is now interpreted as trying to create a field named model_config, which is a reserved name — causing a crash:Environment with bug:
Capping pydantic to <2.10 seems to solve the pydantic issues (2.10 itself causes other compatibility problems with aind-data-schema at the pinned version).
Unfortunately, that reveals perhaps unrelated stage-widget / ZooKeeper mismatch which I'll make another issue about: