From f94d65135aeb5131cb347596984bfbc09352cc14 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Thu, 9 Oct 2025 13:12:45 -0600 Subject: [PATCH 01/42] Bump ELM version --- pixi.lock | 72 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/pixi.lock b/pixi.lock index ee77728d..5d00f3d2 100644 --- a/pixi.lock +++ b/pixi.lock @@ -264,7 +264,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/67/c3/135fdbbbf84e0979712df58e5e22b4f257b3f5e52a3c4aacf1b8abec0d09/matplotlib-3.10.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl @@ -598,7 +598,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/9c/be/c443ea428fb2488a3ea7608714b1bd85a82738c45da21b447dc49e2f8e5d/matplotlib-3.10.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl @@ -879,7 +879,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/ea/1a/7042f7430055d567cc3257ac409fcf608599ab27459457f13772c2d9778b/matplotlib-3.10.6-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl @@ -1162,7 +1162,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a9/5d/1d5f33f5b43f4f9e69e6a5fe1fb9090936ae7bc8e2ff6158e7a76542633b/matplotlib-3.10.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl @@ -1438,7 +1438,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/45/c3/994ef20eb4154ab84cc08d033834555319e4af970165e6c8894050af0b3c/matplotlib-3.10.6-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl @@ -1778,7 +1778,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -2134,7 +2134,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -2437,7 +2437,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -2740,7 +2740,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -3036,7 +3036,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -3508,7 +3508,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -4011,7 +4011,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -4462,7 +4462,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -4913,7 +4913,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -5358,7 +5358,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -5684,7 +5684,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6042,7 +6042,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6349,7 +6349,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6656,7 +6656,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6955,7 +6955,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -7279,7 +7279,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -7634,7 +7634,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -7939,7 +7939,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -8244,7 +8244,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -8541,7 +8541,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -8783,7 +8783,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/80/e5/5e22c5bf96a64bdd43518b1834c6d95a4922cc2066b7d8e467dae9b6cee6/multidict-6.6.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9102,7 +9102,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c4/1c/8a10c1c25b23156e63b12165a929d8eb49a6ed769fdbefb06e6f07c1e50d/multidict-6.6.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9374,7 +9374,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/4c/aa/8b6f548d839b6c13887253af4e29c939af22a18591bfb5d0ee6f1931dae8/multidict-6.6.4-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9648,7 +9648,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/eb/c6/f5e97e5d99a729bc2aa58eb3ebfa9f1e56a9b517cc38c60537c81834a73f/multidict-6.6.4-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9903,7 +9903,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9d/34/746696dffff742e97cd6a23da953e55d0ea51fa601fa2ff387b3edcfaa2c/multidict-6.6.4-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -23545,15 +23545,15 @@ packages: timestamp: 1733408419340 - pypi: ./ name: nrel-compass - version: 0.9.1.dev3+g683ef3b.d20251007 - sha256: 570518a8486f14566f8b03ed226cd9cdf62c0c8133a67ba5592dcd9453a45c84 + version: 0.9.1.dev4+g7c68bbf.d20251009 + sha256: 040a4e1a12360d38dccaee4e150077252eed6ceceba756dffe27458de0cc3e7c requires_dist: - click>=8.1.7,<9 - html5lib>=1.1,<2 - langchain>=0.3.7,<0.4 - networkx>=3.4.2,<4 - nltk>=3.9.1,<4 - - nrel-elm>=0.0.26,<1 + - nrel-elm>=0.0.27,<1 - openai>=1.1.0 - pandas>=2.2.3,<3 - pdftotext>=2.2.2,<3 @@ -23589,10 +23589,10 @@ packages: - twine>=6.1.0,<7 ; extra == 'build' requires_python: '>=3.12' editable: true -- pypi: https://files.pythonhosted.org/packages/6a/b3/aca721b05b25075a64cb78f2d9989d437b415d936db8e60cd17739608977/NREL_elm-0.0.26-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl name: nrel-elm - version: 0.0.26 - sha256: 3fc6392d9ce3636444169deb89344abf64324d2d2b0cf8cd8ab978d564bb55f9 + version: 0.0.27 + sha256: ec02a3fce1c30b2e2ab5f6f17dc7eae7a453e36d6c0c879a24691305632a9f15 requires_dist: - openai>=1.1.0 - aiohttp diff --git a/pyproject.toml b/pyproject.toml index dfccafca..82e3a7b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ "langchain>=0.3.7,<0.4", "networkx>=3.4.2,<4", "nltk>=3.9.1,<4", - "nrel-elm>=0.0.26,<1", + "nrel-elm>=0.0.27,<1", "openai>=1.1.0", "pandas>=2.2.3,<3", "pdftotext>=2.2.2,<3", From b266fdee1d700249665b53f5f9c1ae59b979c902 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Thu, 9 Oct 2025 13:19:36 -0600 Subject: [PATCH 02/42] No area values for coverage --- compass/common/base.py | 15 +++++++++++++++ compass/extraction/solar/parse.py | 3 +++ 2 files changed, 18 insertions(+) diff --git a/compass/common/base.py b/compass/common/base.py index 4958b493..a3813e55 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -440,6 +440,21 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "value", condition=llm_response_starts_with_yes, ) + elif "coverage" in kwargs.get("restriction", ""): + G.add_edge( + "init", "is_area", condition=llm_response_starts_with_yes + ) + G.add_node( + "is_area", + prompt=( + "Is the coverage reported as an area value? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "is_area", "value", condition=llm_response_starts_with_no + ) elif "maximum project size" in kwargs.get("restriction", ""): G.add_edge( "init", diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index b3b6ccad..2fefe371 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -115,6 +115,9 @@ "Do **not** consider glare restrictions as part of visual impact - " "these are collected separately." ), + "coverage": ( + "Do not confuse this with density or min/max lot size requirements." + ), } _FEATURE_TO_OWNED_TYPE = { "structures": "structure", From b37795c0e2686efa239fee763196e1256a60944c Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Thu, 9 Oct 2025 13:50:17 -0600 Subject: [PATCH 03/42] Add comment about commercial energy production systems --- compass/extraction/solar/ordinance.py | 3 ++- compass/extraction/solar/parse.py | 3 ++- compass/extraction/wind/ordinance.py | 3 ++- compass/extraction/wind/parse.py | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compass/extraction/solar/ordinance.py b/compass/extraction/solar/ordinance.py index 3667787e..c2001e65 100644 --- a/compass/extraction/solar/ordinance.py +++ b/compass/extraction/solar/ordinance.py @@ -21,7 +21,8 @@ "facilities (SEF), solar energy farms (SEF), solar farms (SF), " "utility-scale solar energy systems (USES), commercial solar energy " "systems (CSES), ground-mounted solar energy systems (GSES), " - "alternate energy systems (AES), or similar" + "alternate energy systems (AES), commercial energy production " + "systems (CEPCS), or similar" ) _SEARCH_TERMS_AND = ( "zoning, siting, setback, system design, and operational " diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index 2fefe371..f216119c 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -446,7 +446,8 @@ class StructuredSolarPermittedUseDistrictsParser(StructuredSolarParser): "panels, solar energy conversion systems (SECS), solar energy " "facilities (SEF), solar energy farms (SEF), solar farms (SF), " "utility-scale solar energy systems (USES), commercial solar energy " - "systems (CSES), alternate energy systems (AES), or similar. " + "systems (CSES), alternate energy systems (AES), commercial energy " + "production systems (CEPCS), or similar" ) _USE_TYPES = [ { diff --git a/compass/extraction/wind/ordinance.py b/compass/extraction/wind/ordinance.py index e581513c..47fa70ca 100644 --- a/compass/extraction/wind/ordinance.py +++ b/compass/extraction/wind/ordinance.py @@ -21,7 +21,8 @@ "facilities (WEF), wind energy turbines (WET), large wind energy " "turbines (LWET), utility-scale wind energy turbines (UWET), " "commercial wind energy conversion systems (CWECS), alternate " - "energy systems (AES), or similar" + "energy systems (AES), commercial energy production " + "systems (CEPCS), or similar" ) _SEARCH_TERMS_AND = ( "zoning, siting, setback, system design, and operational " diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index b5a27cab..0744aa1d 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -466,7 +466,8 @@ class StructuredWindPermittedUseDistrictsParser(StructuredWindParser): "facilities (WEF), wind energy turbines (WET), large wind energy " "turbines (LWET), utility-scale wind energy turbines (UWET), " "commercial wind energy conversion systems (CWECS), alternate " - "energy systems (AES), or similar. " + "energy systems (AES), commercial energy production systems (CEPCS), " + "or similar" ) _USE_TYPES = [ { From 4470069a196c4494bb057ef080fae6bbbee0f06c Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Thu, 9 Oct 2025 13:50:42 -0600 Subject: [PATCH 04/42] Add CSP to ignore list --- compass/extraction/solar/ordinance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compass/extraction/solar/ordinance.py b/compass/extraction/solar/ordinance.py index c2001e65..391ed9cc 100644 --- a/compass/extraction/solar/ordinance.py +++ b/compass/extraction/solar/ordinance.py @@ -30,7 +30,7 @@ ) _SEARCH_TERMS_OR = _SEARCH_TERMS_AND.replace("and", "or") _IGNORE_TYPES = ( - "private, residential, roof-mounted, micro, small, or medium sized" + "CSP, private, residential, roof-mounted, micro, small, or medium sized" ) From 5561bb00fdb35d218176fa99ca5bd0921349652b Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Fri, 10 Oct 2025 15:09:41 -0600 Subject: [PATCH 05/42] Raise error to force re-try --- compass/services/openai.py | 1 + 1 file changed, 1 insertion(+) diff --git a/compass/services/openai.py b/compass/services/openai.py index 17cd9982..c38069e8 100644 --- a/compass/services/openai.py +++ b/compass/services/openai.py @@ -235,6 +235,7 @@ async def _call_gpt(self, **kwargs): ) else: logger.exception("Got 'BadRequestError'") + raise def _get_response_message(response): From 830f9f6c722e121d137864e69a2ece127c3926c2 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Fri, 10 Oct 2025 15:39:40 -0600 Subject: [PATCH 06/42] Minor instruction update --- compass/common/base.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/compass/common/base.py b/compass/common/base.py index a3813e55..7b08b743 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -734,9 +734,8 @@ class BaseTextExtractor: "verbatim, **unmodified** excerpts from provided legal or policy " "documents. Do not interpret or paraphrase. Do not summarize. Only " "return exactly copied segments that match the specified scope. If " - "the relevant content appears within a space-delimited table, return " - "the entire table, including headers and footers, exactly as " - "formatted." + "the relevant content appears within a table, return the entire " + "table, including headers and footers, exactly as formatted." ) _USAGE_LABEL = LLMUsageCategory.DOCUMENT_ORDINANCE_SUMMARY From 0bb307fa89adc5c11f72d0fa6a1d894b090345b4 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Thu, 16 Oct 2025 15:08:59 -0600 Subject: [PATCH 07/42] Rename node --- compass/validation/graphs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/compass/validation/graphs.py b/compass/validation/graphs.py index 8192275a..d4310b26 100644 --- a/compass/validation/graphs.py +++ b/compass/validation/graphs.py @@ -116,10 +116,12 @@ def setup_graph_correct_document_type(**kwargs): ) G.add_edge( - "is_single_project", "is_pd", condition=llm_response_starts_with_no + "is_single_project", + "is_planning_doc", + condition=llm_response_starts_with_no, ) G.add_node( - "is_pd", + "is_planning_doc", prompt=( "Does this text appear to be from a project planning document? " "Please start your response with either 'Yes' or 'No' and briefly " @@ -127,7 +129,9 @@ def setup_graph_correct_document_type(**kwargs): ), ) - G.add_edge("is_pd", "is_pres", condition=llm_response_starts_with_no) + G.add_edge( + "is_planning_doc", "is_pres", condition=llm_response_starts_with_no + ) G.add_node( "is_pres", prompt=( From 907a8e4d9c3940bf9b5ed4d7439f1e370b051a63 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sat, 18 Oct 2025 10:51:22 -0600 Subject: [PATCH 08/42] Update deps --- compass/extraction/date.py | 6 +- compass/llm/config.py | 2 +- compass/validation/location.py | 6 +- pixi.lock | 935 ++++++++-------------------- pyproject.toml | 6 +- tests/python/validation/conftest.py | 2 +- 6 files changed, 262 insertions(+), 695 deletions(-) diff --git a/compass/extraction/date.py b/compass/extraction/date.py index 942ccf3d..66240e0e 100644 --- a/compass/extraction/date.py +++ b/compass/extraction/date.py @@ -44,8 +44,10 @@ def __init__(self, structured_llm_caller, text_splitter=None): structured_llm_caller : compass.llm.StructuredLLMCaller StructuredLLMCaller instance. Used for structured validation queries. - text_splitter : langchain.text_splitter.TextSplitter, optional - Optional text splitter instance to attach to doc (used for + text_splitter : TextSplitter, optional + Optional + :class:`langchain_text_splitters.character.TextSplitter` + text splitter instance to attach to doc (used for splitting out pages in an HTML document). By default, ``None``. """ diff --git a/compass/llm/config.py b/compass/llm/config.py index d4cc7f7a..c18486e2 100644 --- a/compass/llm/config.py +++ b/compass/llm/config.py @@ -7,7 +7,7 @@ import openai from elm import ApiBase -from langchain.text_splitter import RecursiveCharacterTextSplitter +from langchain_text_splitters.character import RecursiveCharacterTextSplitter from compass.services.openai import OpenAIService from compass.utilities import RTS_SEPARATORS diff --git a/compass/validation/location.py b/compass/validation/location.py index 8efe20d2..4def34af 100644 --- a/compass/validation/location.py +++ b/compass/validation/location.py @@ -176,8 +176,10 @@ def __init__(self, score_thresh=0.8, text_splitter=None, **kwargs): score_thresh : float, optional Score threshold to exceed when voting on content from raw pages. By default, ``0.8``. - text_splitter : langchain.text_splitter.TextSplitter, optional - Optional text splitter instance to attach to doc (used for + text_splitter : TextSplitter, optional + Optional + :class:`langchain_text_splitters.character.TextSplitter` + text splitter instance to attach to doc (used for splitting out pages in an HTML document). By default, ``None``. **kwargs diff --git a/pixi.lock b/pixi.lock index 5d00f3d2..e19d2488 100644 --- a/pixi.lock +++ b/pixi.lock @@ -18,7 +18,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h1289d80_4.conda @@ -73,9 +72,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda @@ -191,7 +189,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.43-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -264,7 +261,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/67/c3/135fdbbbf84e0979712df58e5e22b4f257b3f5e52a3c4aacf1b8abec0d09/matplotlib-3.10.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl @@ -311,7 +308,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils-2.44-hf1166c9_1.conda @@ -391,9 +387,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.17-hc88f144_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.44-h5e2c951_1.conda @@ -523,7 +518,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.43-py312hefbd42c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda @@ -598,7 +592,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/9c/be/c443ea428fb2488a3ea7608714b1bd85a82738c45da21b447dc49e2f8e5d/matplotlib-3.10.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl @@ -644,7 +638,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312h462f358_4.conda @@ -698,9 +691,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py312hb401068_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/leptonica-1.83.1-h19e8429_6.conda @@ -810,7 +802,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.43-py312h2f459f6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -879,7 +870,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/ea/1a/7042f7430055d567cc3257ac409fcf608599ab27459457f13772c2d9778b/matplotlib-3.10.6-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl @@ -927,7 +918,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312h6b01ec3_4.conda @@ -981,9 +971,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jsonpointer-3.0.0-py312h81bd7bf_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/leptonica-1.83.1-h64fa29b_6.conda @@ -1093,7 +1082,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.43-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -1162,7 +1150,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a9/5d/1d5f33f5b43f4f9e69e6a5fe1fb9090936ae7bc8e2ff6158e7a76542633b/matplotlib-3.10.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl @@ -1211,7 +1199,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py312hbb81ca0_4.conda @@ -1263,9 +1250,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/jsonpointer-3.0.0-py312h2e8e312_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/leptonica-1.83.1-hb723d09_6.conda @@ -1365,7 +1351,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.43-py312he06e257_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda @@ -1438,7 +1423,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/45/c3/994ef20eb4154ab84cc08d033834555319e4af970165e6c8894050af0b3c/matplotlib-3.10.6-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5c/c948539727ee833688958d711dd8237c1ccd04a2383ad26c84aec6705b7c/NREL_rex-0.2.99-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl @@ -1495,7 +1480,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda @@ -1579,9 +1563,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda @@ -1720,7 +1703,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.43-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -1778,7 +1760,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -1811,7 +1793,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda @@ -1920,9 +1901,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.17-hc88f144_0.conda @@ -2075,7 +2055,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.43-py312hefbd42c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda @@ -2134,7 +2113,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -2166,7 +2145,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda @@ -2247,9 +2225,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.9-py312hef387a8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda @@ -2383,7 +2360,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.43-py312h2f459f6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -2437,7 +2413,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -2469,7 +2445,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda @@ -2550,9 +2525,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda @@ -2686,7 +2660,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.43-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -2740,7 +2713,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -2773,7 +2746,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda @@ -2852,9 +2824,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.9-py312h78d62e6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda @@ -2977,7 +2948,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.43-py312he06e257_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda @@ -3036,7 +3006,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -3085,7 +3055,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.5-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda @@ -3217,9 +3186,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda @@ -3429,7 +3397,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.43-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.5-py312h8b63200_0.conda @@ -3508,7 +3475,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -3548,7 +3515,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.5-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda @@ -3705,9 +3671,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.17-hc88f144_0.conda @@ -3931,7 +3896,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.43-py312hefbd42c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.50.4-he8854b5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/statsmodels-0.14.5-py312h5beaf2f_0.conda @@ -4011,7 +3975,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -4051,7 +4015,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.5-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda @@ -4180,9 +4143,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.9-py312hef387a8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda @@ -4387,7 +4349,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.43-py312h2f459f6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.50.4-h64b5abc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.5-py312h34a05c3_0.conda @@ -4462,7 +4423,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -4502,7 +4463,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.5-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda @@ -4631,9 +4591,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda @@ -4838,7 +4797,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.43-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.50.4-hb5dd463_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.5-py312hcde60ef_0.conda @@ -4913,7 +4871,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -4953,7 +4911,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.5-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda @@ -5079,9 +5036,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.9-py312h78d62e6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda @@ -5277,7 +5233,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.43-py312he06e257_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.50.4-hdb435a2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.5-py312h196c9fc_0.conda @@ -5358,7 +5313,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -5403,7 +5358,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda @@ -5479,9 +5433,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda @@ -5626,7 +5579,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.43-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -5684,7 +5636,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -5720,7 +5672,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda @@ -5821,9 +5772,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.17-hc88f144_0.conda @@ -5982,7 +5932,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.43-py312hefbd42c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda @@ -6042,7 +5991,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6077,7 +6026,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda @@ -6152,9 +6100,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.9-py312hef387a8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda @@ -6295,7 +6242,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.43-py312h2f459f6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -6349,7 +6295,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6384,7 +6330,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda @@ -6459,9 +6404,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda @@ -6602,7 +6546,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.43-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -6656,7 +6599,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -6692,7 +6635,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda @@ -6765,9 +6707,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.9-py312h78d62e6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda @@ -6896,7 +6837,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.43-py312he06e257_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda @@ -6955,7 +6895,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/8b/af4b541d2a6e1ea2021dc95f5fd75fc5679462e5b06b155eed65b25cc2eb/make-0.1.6.post2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -6997,7 +6937,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb03c661_4.conda @@ -7076,9 +7015,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda @@ -7220,7 +7158,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.43-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -7279,7 +7216,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/7a/ba7995d1f6b405c057e6f4bd5751fe667535b0ba84f65ee6eb1493bccb80/maxminddb-2.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/cb/e7cd2f6161e30a4009cf38dd00024b1303197afcd4297081b0ccd21016a8/patchright-1.51.3-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -7312,7 +7249,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils-2.44-hf1166c9_1.conda @@ -7416,9 +7352,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.17-hc88f144_0.conda @@ -7574,7 +7509,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.43-py312hefbd42c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda @@ -7634,7 +7568,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/21/05c8f50c1b4138516f2bde2810d32c97b84c6d0aefe7e1a1b41635241041/maxminddb-2.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/09/e6126d32175f96ea963616debbb8e380e7c987ca913efeb59bf7e7f39438/patchright-1.51.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -7666,7 +7600,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.1.0-h1c43f85_4.conda @@ -7744,9 +7677,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.9-py312hef387a8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda @@ -7884,7 +7816,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.43-py312h2f459f6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -7939,7 +7870,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/44/2703121c2dbba7d03c37294dd407cca2e31dc4542543b93808dd26fd144b/maxminddb-2.8.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/55/d62c85fff36e9e9e515ee92407b02acb556e6832d4fbcc8624b638cf70bb/patchright-1.51.3-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -7971,7 +7902,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-h6caf38d_4.conda @@ -8049,9 +7979,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda @@ -8189,7 +8118,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.43-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.2-pyhd8ed1ab_0.conda @@ -8244,7 +8172,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/25/99e999e630b1a44936c5261827cc94def5eec82ae57a667a76d641b93925/maxminddb-2.8.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/4df3f817c28938e22ee7c7c4b28d8b3a212e5a111c3bd9633bc410267daa/patchright-1.51.3-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/e3/79a2ad7ca71160fb6442772155389881672c98bd44c6022303ce242cbfb9/pdftotext-2.2.2.tar.gz @@ -8277,7 +8205,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-hfd05255_4.conda @@ -8353,9 +8280,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.9-py312h78d62e6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/langsmith-0.3.45-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda @@ -8481,7 +8407,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.43-py312he06e257_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda @@ -8541,7 +8466,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/50/25720ed19f2d62440b94a1333656cccf6c3c1ce2527ed9abf7b35e2557e1/maxminddb-2.8.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/15/b6b2b49b4e5e17f0d2c1006d609b8adb13aa96944c6b8b5eb02a39df99a4/NREL_rex-0.2.98-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/fd/97e3e26893904bdeff36d54e6ea5fe5f81a245a96c1b73ebe37e956ce11d/patchright-1.51.3-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/0f/098488de02e3d52fc77e8d55c1467f6703701b6ea6788f40409bb8c00dd4/playwright-1.51.0-py3-none-win_amd64.whl @@ -8703,7 +8628,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e4/ad/77fad9d6f974ec58d837cb49fb9b483d6227a420c4f908c3578633de1d47/alphashape-1.3.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/f5/bd57bf21fdcc4e500cc406ed2c296e626ddd160f0fee2a4932256e5d62d8/botocore-1.40.18-py3-none-any.whl @@ -8711,10 +8636,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/8b/53/c60eb5bd26cf8689e361031bebc431437bc988555e80ba52d48c12c1d866/browserforge-1.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/7b/a2f099a5afb9660271b3f20f6056ba679e7ab4eba42682266a65d5730f7e/camoufox-0.4.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl @@ -8755,7 +8680,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fe/85/a18508becfa01f1e4351b5e18651b06d210dbd96debccd48a452acccb901/huggingface_hub-0.35.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/7f/8ebe15b6e0a8026b0d286c083b553779b4dd63db35b43a3f171b544de91d/jiter-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -8766,10 +8691,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/a5/56169ce49b3020b47112703b2f9ed0e3255073c8d438b74406b290fb5687/langsmith-0.4.29-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/6a/8dd566cb7379d6e3a921f94713babba2f71cbed65c73c784c649c1fd7d4e/langchain_core-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/e8/edff4de49cf364eb9ee88d13da0a555844df32438413bf53d90d507b97cd/langsmith-0.4.37-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl @@ -8783,7 +8707,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/80/e5/5e22c5bf96a64bdd43518b1834c6d95a4922cc2066b7d8e467dae9b6cee6/multidict-6.6.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -8804,8 +8728,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/62/273dd70b0026a085c7b74b000394e1ef95719ea579c76ea2f0cc8893736d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/d4/6eee789f1a574d5f20a8a5370ac7c68efe421449d49431510c8112b1bc8d/pyjson5-1.6.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -8817,7 +8741,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/21/f691fb2613100a62b3fa91e9988c991e9ca5b89ea31c0d3152a3210344f9/rank_bm25-0.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/91/9fbff3e85dd2fd765452b1d287ef4ae93a96b669385228fa8e516085f7ca/rebrowser_playwright-1.52.0-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl @@ -8841,7 +8765,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/c3/6eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c/socksio-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/29/11ae2c2b981de60187f7cbc84277d9d21f101093d1b2e945c63774477aba/sqlalchemy-2.0.43-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/e2/dbc246d9fb24433f77b17d9ee4e750a1e2718432ebde2756589c9154cbad/tavily_python-0.7.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl @@ -8856,7 +8779,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/70/d4376ceb7fe7ab8f9bf70b4f24f5bb7d436f51dc50cf21432401bc8233b2/trimesh-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/13adff37f15489c784cc7669c35a6c3bf94b87540229eedf52ef2a1d0175/ua_parser_builtins-0.18.0.post1-py3-none-any.whl @@ -9022,7 +8945,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e4/ad/77fad9d6f974ec58d837cb49fb9b483d6227a420c4f908c3578633de1d47/alphashape-1.3.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/f5/bd57bf21fdcc4e500cc406ed2c296e626ddd160f0fee2a4932256e5d62d8/botocore-1.40.18-py3-none-any.whl @@ -9030,10 +8953,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/8b/53/c60eb5bd26cf8689e361031bebc431437bc988555e80ba52d48c12c1d866/browserforge-1.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/7b/a2f099a5afb9660271b3f20f6056ba679e7ab4eba42682266a65d5730f7e/camoufox-0.4.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl @@ -9074,7 +8997,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fe/85/a18508becfa01f1e4351b5e18651b06d210dbd96debccd48a452acccb901/huggingface_hub-0.35.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/9c/824334de0b037b91b6f3fa9fe5a191c83977c7ec4abe17795d3cb6d174cf/jiter-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl @@ -9085,10 +9008,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/a5/56169ce49b3020b47112703b2f9ed0e3255073c8d438b74406b290fb5687/langsmith-0.4.29-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/6a/8dd566cb7379d6e3a921f94713babba2f71cbed65c73c784c649c1fd7d4e/langchain_core-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/e8/edff4de49cf364eb9ee88d13da0a555844df32438413bf53d90d507b97cd/langsmith-0.4.37-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl @@ -9102,7 +9024,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c4/1c/8a10c1c25b23156e63b12165a929d8eb49a6ed769fdbefb06e6f07c1e50d/multidict-6.6.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9123,8 +9045,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/3e/800d3d02c8beb0b5c069c870cbb83799d085debf43499c897bb4b4aaff0d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/18/797fe865de243fe96315218a284c9b2f6eb327bbba65a80ada1175686b0a/pyjson5-1.6.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl @@ -9136,7 +9058,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/2a/21/f691fb2613100a62b3fa91e9988c991e9ca5b89ea31c0d3152a3210344f9/rank_bm25-0.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/67/8c6e02660ae209790cd73ecd99f6cacd2b85da19139d1e158f332f6a471e/rebrowser_playwright-1.52.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl @@ -9160,7 +9082,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/c3/6eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c/socksio-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/ff/22ab2328148492c4d71899d62a0e65370ea66c877aea017a244a35733685/sqlalchemy-2.0.43-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/e2/dbc246d9fb24433f77b17d9ee4e750a1e2718432ebde2756589c9154cbad/tavily_python-0.7.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl @@ -9175,7 +9096,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/70/d4376ceb7fe7ab8f9bf70b4f24f5bb7d436f51dc50cf21432401bc8233b2/trimesh-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/13adff37f15489c784cc7669c35a6c3bf94b87540229eedf52ef2a1d0175/ua_parser_builtins-0.18.0.post1-py3-none-any.whl @@ -9293,7 +9214,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e4/ad/77fad9d6f974ec58d837cb49fb9b483d6227a420c4f908c3578633de1d47/alphashape-1.3.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/f5/bd57bf21fdcc4e500cc406ed2c296e626ddd160f0fee2a4932256e5d62d8/botocore-1.40.18-py3-none-any.whl @@ -9301,10 +9222,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/8b/53/c60eb5bd26cf8689e361031bebc431437bc988555e80ba52d48c12c1d866/browserforge-1.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/7b/a2f099a5afb9660271b3f20f6056ba679e7ab4eba42682266a65d5730f7e/camoufox-0.4.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl @@ -9346,7 +9267,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fe/85/a18508becfa01f1e4351b5e18651b06d210dbd96debccd48a452acccb901/huggingface_hub-0.35.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/c4/d530e514d0f4f29b2b68145e7b389cbc7cac7f9c8c23df43b04d3d10fa3e/jiter-0.11.0-cp313-cp313-macosx_10_12_x86_64.whl @@ -9357,10 +9278,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/a5/56169ce49b3020b47112703b2f9ed0e3255073c8d438b74406b290fb5687/langsmith-0.4.29-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/6a/8dd566cb7379d6e3a921f94713babba2f71cbed65c73c784c649c1fd7d4e/langchain_core-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/e8/edff4de49cf364eb9ee88d13da0a555844df32438413bf53d90d507b97cd/langsmith-0.4.37-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl @@ -9374,7 +9294,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/4c/aa/8b6f548d839b6c13887253af4e29c939af22a18591bfb5d0ee6f1931dae8/multidict-6.6.4-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9395,8 +9315,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/d0/c20adabd181a029a970738dfe23710b52a31f1258f591874fcdec7359845/pydantic_core-2.41.4-cp313-cp313-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/57/76fa05e639d11ae615c782604cb7fca785ede308e832cd24dc8b7b6ecffa/pyjson5-1.6.9-cp313-cp313-macosx_10_13_x86_64.whl @@ -9410,7 +9330,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/21/f691fb2613100a62b3fa91e9988c991e9ca5b89ea31c0d3152a3210344f9/rank_bm25-0.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/ca/bc3a206788195218f15b9a44b51b74c651f0f17c29a925226434ea28bd3f/rebrowser_playwright-1.52.0-py3-none-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl @@ -9434,7 +9354,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/c3/6eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c/socksio-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/1c/a7260bd47a6fae7e03768bf66451437b36451143f36b285522b865987ced/sqlalchemy-2.0.43-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/e2/dbc246d9fb24433f77b17d9ee4e750a1e2718432ebde2756589c9154cbad/tavily_python-0.7.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl @@ -9449,7 +9368,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/70/d4376ceb7fe7ab8f9bf70b4f24f5bb7d436f51dc50cf21432401bc8233b2/trimesh-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/13adff37f15489c784cc7669c35a6c3bf94b87540229eedf52ef2a1d0175/ua_parser_builtins-0.18.0.post1-py3-none-any.whl @@ -9567,7 +9486,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e4/ad/77fad9d6f974ec58d837cb49fb9b483d6227a420c4f908c3578633de1d47/alphashape-1.3.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/f5/bd57bf21fdcc4e500cc406ed2c296e626ddd160f0fee2a4932256e5d62d8/botocore-1.40.18-py3-none-any.whl @@ -9575,10 +9494,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/8b/53/c60eb5bd26cf8689e361031bebc431437bc988555e80ba52d48c12c1d866/browserforge-1.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/7b/a2f099a5afb9660271b3f20f6056ba679e7ab4eba42682266a65d5730f7e/camoufox-0.4.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl @@ -9620,7 +9539,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fe/85/a18508becfa01f1e4351b5e18651b06d210dbd96debccd48a452acccb901/huggingface_hub-0.35.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/77/796a19c567c5734cbfc736a6f987affc0d5f240af8e12063c0fb93990ffa/jiter-0.11.0-cp313-cp313-macosx_11_0_arm64.whl @@ -9631,10 +9550,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/a5/56169ce49b3020b47112703b2f9ed0e3255073c8d438b74406b290fb5687/langsmith-0.4.29-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/6a/8dd566cb7379d6e3a921f94713babba2f71cbed65c73c784c649c1fd7d4e/langchain_core-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/e8/edff4de49cf364eb9ee88d13da0a555844df32438413bf53d90d507b97cd/langsmith-0.4.37-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl @@ -9648,7 +9566,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/eb/c6/f5e97e5d99a729bc2aa58eb3ebfa9f1e56a9b517cc38c60537c81834a73f/multidict-6.6.4-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9669,8 +9587,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/b6/0ce5c03cec5ae94cca220dfecddc453c077d71363b98a4bbdb3c0b22c783/pydantic_core-2.41.4-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/f7/5dba5b86be1bfdbc6d03bd30d1fe044e7c93fa97b670ccc8fe8f610ca4a4/pyjson5-1.6.9-cp313-cp313-macosx_11_0_arm64.whl @@ -9684,7 +9602,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/2a/21/f691fb2613100a62b3fa91e9988c991e9ca5b89ea31c0d3152a3210344f9/rank_bm25-0.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/47/e5e44a9ddb7ab3f7305eced9ada7df72472abfe5e84165fcf35f220ab5aa/rebrowser_playwright-1.52.0-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl @@ -9708,7 +9626,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/c3/6eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c/socksio-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/84/8a337454e82388283830b3586ad7847aa9c76fdd4f1df09cdd1f94591873/sqlalchemy-2.0.43-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/e2/dbc246d9fb24433f77b17d9ee4e750a1e2718432ebde2756589c9154cbad/tavily_python-0.7.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl @@ -9723,7 +9640,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/70/d4376ceb7fe7ab8f9bf70b4f24f5bb7d436f51dc50cf21432401bc8233b2/trimesh-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/13adff37f15489c784cc7669c35a6c3bf94b87540229eedf52ef2a1d0175/ua_parser_builtins-0.18.0.post1-py3-none-any.whl @@ -9823,7 +9740,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e4/ad/77fad9d6f974ec58d837cb49fb9b483d6227a420c4f908c3578633de1d47/alphashape-1.3.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/f5/bd57bf21fdcc4e500cc406ed2c296e626ddd160f0fee2a4932256e5d62d8/botocore-1.40.18-py3-none-any.whl @@ -9831,10 +9748,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/8b/53/c60eb5bd26cf8689e361031bebc431437bc988555e80ba52d48c12c1d866/browserforge-1.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/7b/a2f099a5afb9660271b3f20f6056ba679e7ab4eba42682266a65d5730f7e/camoufox-0.4.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl @@ -9875,7 +9792,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fe/85/a18508becfa01f1e4351b5e18651b06d210dbd96debccd48a452acccb901/huggingface_hub-0.35.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/c7/316e7ca04d26695ef0635dc81683d628350810eb8e9b2299fc08ba49f366/humanize-4.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/0d/8185b8e15de6dce24f6afae63380e16377dd75686d56007baa4f29723ea1/jiter-0.11.0-cp313-cp313-win_amd64.whl @@ -9886,10 +9803,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/a5/56169ce49b3020b47112703b2f9ed0e3255073c8d438b74406b290fb5687/langsmith-0.4.29-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/6a/8dd566cb7379d6e3a921f94713babba2f71cbed65c73c784c649c1fd7d4e/langchain_core-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/e8/edff4de49cf364eb9ee88d13da0a555844df32438413bf53d90d507b97cd/langsmith-0.4.37-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/42/327554649ed2dd5ce59d3f5da176c7be20f9352c7c6c51597293660b7b08/language_tags-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/dc/ff4f119cd4d783742c9648a03e0ba5c2b52fc385b2ae9f0d32acf3a78241/litellm-1.77.1-py3-none-any.whl @@ -9903,7 +9819,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9d/34/746696dffff742e97cd6a23da953e55d0ea51fa601fa2ff387b3edcfaa2c/multidict-6.6.4-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/66/404e1cea32ebd39f519d757b7c0c9e5a71e0ce2bac4a70d2098d3ab248f3/nrel_rex-0.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/38/87/6ad18ce0e7b910e3706480451df48ff9e0af3b55e5db565adafd68a0706a/openai-1.108.1-py3-none-any.whl @@ -9923,8 +9839,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/d8/fd0de71f39db91135b7a26996160de71c073d8635edfce8b3c3681be0d6d/pydantic_core-2.41.4-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/3c/d1ba137b5dac1cb3399226f93d9f5f3e4503bacdb15ee2fbadcd03a0797d/pyjson5-1.6.9-cp313-cp313-win_amd64.whl @@ -9936,7 +9852,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2a/21/f691fb2613100a62b3fa91e9988c991e9ca5b89ea31c0d3152a3210344f9/rank_bm25-0.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f3/023969defc1fe4178e38c45805e3a77f44d79def9db5329c5f3506fe2d18/rebrowser_playwright-1.52.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl @@ -9960,7 +9876,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/c3/6eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c/socksio-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/a5/ca2f07a2a201f9497de1928f787926613db6307992fe5cda97624eb07c2f/sqlalchemy-2.0.43-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/e2/dbc246d9fb24433f77b17d9ee4e750a1e2718432ebde2756589c9154cbad/tavily_python-0.7.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl @@ -9975,7 +9890,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/70/d4376ceb7fe7ab8f9bf70b4f24f5bb7d436f51dc50cf21432401bc8233b2/trimesh-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/13adff37f15489c784cc7669c35a6c3bf94b87540229eedf52ef2a1d0175/ua_parser_builtins-0.18.0.post1-py3-none-any.whl @@ -10423,16 +10338,16 @@ packages: - pkg:pypi/anthropic?source=hash-mapping size: 99470 timestamp: 1732833066115 -- pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl name: anyio - version: 4.10.0 - sha256: 60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1 + version: 4.11.0 + sha256: 0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc requires_dist: - exceptiongroup>=1.0.2 ; python_full_version < '3.11' - idna>=2.8 - sniffio>=1.1 - typing-extensions>=4.5 ; python_full_version < '3.13' - - trio>=0.26.1 ; extra == 'trio' + - trio>=0.31.0 ; extra == 'trio' requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.10.0-pyhe01879c_0.conda sha256: d1b50686672ebe7041e44811eda563e45b94a8354db67eca659040392ac74d63 @@ -10593,18 +10508,6 @@ packages: - pkg:pypi/async-lru?source=hash-mapping size: 17335 timestamp: 1742153708859 -- conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda - sha256: bd8b698e7f037a9c6107216646f1191f4f7a7fc6da6c34d1a6d4c211bcca8979 - md5: 3ce482ec3066e6d809dbbb1d1679f215 - depends: - - python >=3.7 - - typing-extensions >=3.6.5 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/async-timeout?source=hash-mapping - size: 11352 - timestamp: 1691763717537 - conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 sha256: 26ab9386e80bf196e51ebe005da77d57decf6d989b4f34d96130560bc133479c md5: 6b889f174df1e0f816276ae69281af4d @@ -11705,10 +11608,10 @@ packages: purls: [] size: 745606 timestamp: 1756645518758 -- pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl name: certifi - version: 2025.8.3 - sha256: f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 + version: 2025.10.5 + sha256: 0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda sha256: a1ad5b0a2a242f439608f22a538d2175cac4444b7b3f4e2b8c090ac337aaea40 @@ -11849,25 +11752,25 @@ packages: - pkg:pypi/chardet?source=hash-mapping size: 132170 timestamp: 1741798023836 -- pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl +- pypi: https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: charset-normalizer - version: 3.4.3 - sha256: 14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe + version: 3.4.4 + sha256: 6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl name: charset-normalizer - version: 3.4.3 - sha256: 41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 + version: 3.4.4 + sha256: e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl name: charset-normalizer - version: 3.4.3 - sha256: 416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f + version: 3.4.4 + sha256: b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: charset-normalizer - version: 3.4.3 - sha256: cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef + version: 3.4.4 + sha256: a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda sha256: 838d5a011f0e7422be6427becba3de743c78f3874ad2743c341accbba9bb2624 @@ -16498,16 +16401,16 @@ packages: - pkg:pypi/id?source=hash-mapping size: 24444 timestamp: 1737528654512 -- pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl name: idna - version: '3.10' - sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + version: '3.11' + sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea requires_dist: - ruff>=0.6.2 ; extra == 'all' - mypy>=1.11.2 ; extra == 'all' - pytest>=8.3.2 ; extra == 'all' - flake8>=7.1.1 ; extra == 'all' - requires_python: '>=3.6' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 md5: 39a4f67be3286c86d696df570b1201b7 @@ -17720,136 +17623,64 @@ packages: purls: [] size: 712034 timestamp: 1719463874284 -- pypi: https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl - name: langchain - version: 0.3.27 - sha256: 7b20c4f338826acb148d885b20a73a16e410ede9ee4f19bb02011852d5f98798 - requires_dist: - - langchain-core>=0.3.72,<1.0.0 - - langchain-text-splitters>=0.3.9,<1.0.0 - - langsmith>=0.1.17 - - pydantic>=2.7.4,<3.0.0 - - sqlalchemy>=1.4,<3 - - requests>=2,<3 - - pyyaml>=5.3 - - async-timeout>=4.0.0,<5.0.0 ; python_full_version < '3.11' - - langchain-community ; extra == 'community' - - langchain-anthropic ; extra == 'anthropic' - - langchain-openai ; extra == 'openai' - - langchain-azure-ai ; extra == 'azure-ai' - - langchain-cohere ; extra == 'cohere' - - langchain-google-vertexai ; extra == 'google-vertexai' - - langchain-google-genai ; extra == 'google-genai' - - langchain-fireworks ; extra == 'fireworks' - - langchain-ollama ; extra == 'ollama' - - langchain-together ; extra == 'together' - - langchain-mistralai ; extra == 'mistralai' - - langchain-huggingface ; extra == 'huggingface' - - langchain-groq ; extra == 'groq' - - langchain-aws ; extra == 'aws' - - langchain-deepseek ; extra == 'deepseek' - - langchain-xai ; extra == 'xai' - - langchain-perplexity ; extra == 'perplexity' - requires_python: '>=3.9,<4.0' -- conda: https://conda.anaconda.org/conda-forge/noarch/langchain-0.3.27-pymin312_hff2d567_0.conda - sha256: 590bdcc4281b0b04c546b2a97c891b25d109b7620a45a732c3be1b0da131acbf - md5: 4a56336744f41ce250ba0e417e0e1125 - depends: - - aiohttp <4.0.0,>=3.8.3 - - async-timeout >=4.0.0,<5.0.0 - - langchain-core <1.0.0,>=0.3.72 - - langchain-text-splitters <1.0.0,>=0.3.9 - - langsmith >=0.1.17 - - numpy <2,>=1.26.4 - - pydantic <3.0.0,>=2.7.4 - - python >=3.12 - - pyyaml >=5.3 - - requests <3,>=2 - - sqlalchemy <3,>=1.4 - - tenacity !=8.4.0,<10,>=8.1.0 - constrains: - - jsonschema >=4.22.0,<5 - - httpx-sse >=0.3.1,<1 - - defusedxml <0.8.0,>=0.7.1 - - fireworks-ai >=0.13.0 - - aiosqlite >=0.19.0,<0.20 - - numexpr >=2.8.6,<3 - - rapidfuzz >=3.1.1,<4 - - tiktoken >=0.7,<1 - - tokenizers >=0.15.1,<1 - - openai >=1.26.0,<2.0.0 - - openai >=1.10.0,<2.0.0 - - httpx >=0.25.2,<1 - - requests >=2.0.0,<3.0.0 - - anthropic >=0.28.0,<1 - - aiohttp >=3.9.1,<4.0.0 - - groq >=0.4.1,<1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/langchain?source=hash-mapping - size: 437546 - timestamp: 1753394330855 -- pypi: https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/68/6a/8dd566cb7379d6e3a921f94713babba2f71cbed65c73c784c649c1fd7d4e/langchain_core-1.0.0-py3-none-any.whl name: langchain-core - version: 0.3.76 - sha256: 46e0eb48c7ac532432d51f8ca1ece1804c82afe9ae3dcf027b867edadf82b3ec + version: 1.0.0 + sha256: a94561bf75dd097c7d6e3864950f28dadc963f0bd810114de4095f41f634059b requires_dist: - - langsmith>=0.3.45 + - jsonpatch>=1.33.0,<2.0.0 + - langsmith>=0.3.45,<1.0.0 + - packaging>=23.2.0,<26.0.0 + - pydantic>=2.7.4,<3.0.0 + - pyyaml>=5.3.0,<7.0.0 - tenacity>=8.1.0,!=8.4.0,<10.0.0 - - jsonpatch>=1.33,<2.0 - - pyyaml>=5.3 - - typing-extensions>=4.7 - - packaging>=23.2 - - pydantic>=2.7.4 - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.3.76-pyhd8ed1ab_0.conda - sha256: f2c3f3b59139ecc822c1b02a7df00027137cf49fc443f4025f5bfe90ce6f1f69 - md5: 9c3c2784bba7817dc418a0d404322ee1 - depends: - - jsonpatch <2.0,>=1.33 - - langsmith >=0.3.45 - - packaging >=23.2 - - pydantic >=2.7.4 + - typing-extensions>=4.7.0,<5.0.0 + requires_python: '>=3.10.0,<4.0.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/langchain-core-1.0.0-pyhd8ed1ab_0.conda + sha256: 5d3219b8af271528266cfb698d50b90c5fdf38408571db7a8048dd44b3763f1f + md5: 78e2896e59b0e7984392b075a8e71453 + depends: + - jsonpatch >=1.33.0,<2.0.0 + - langsmith >=0.3.45,<1.0.0 + - packaging >=23.2.0,<26.0.0 + - pydantic >=2.7.4,<3.0.0 - python >=3.10,<4.0 - - pyyaml >=5.3 - - tenacity !=8.4.0,<10.0.0,>=8.1.0 - - typing_extensions >=4.7 + - pyyaml >=5.3.0,<7.0.0 + - tenacity !=8.4.0,>=8.1.0,<10.0.0 + - typing_extensions >=4.7.0,<5.0.0 constrains: - jinja2 >=3.0.0,<4.0.0 license: MIT - license_family: MIT purls: - pkg:pypi/langchain-core?source=hash-mapping - size: 291790 - timestamp: 1757536350644 -- pypi: https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl + size: 307121 + timestamp: 1760728528600 +- pypi: https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl name: langchain-text-splitters - version: 0.3.11 - sha256: cf079131166a487f1372c8ab5d0bfaa6c0a4291733d9c43a34a16ac9bcd6a393 + version: 1.0.0 + sha256: f00c8219d3468f2c5bd951b708b6a7dd9bc3c62d0cfb83124c377f7170f33b2e requires_dist: - - langchain-core>=0.3.75,<2.0.0 - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.3.11-pyhd8ed1ab_0.conda - sha256: d5532d8aaeac193e07fb8294d083cdf14c74383656c55be2f92088f5a32e118e - md5: 9de037a32dbe4813277db08237726879 + - langchain-core>=1.0.0,<2.0.0 + requires_python: '>=3.10.0,<4.0.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-1.0.0-pyhd8ed1ab_0.conda + sha256: 81ed1598ffc303051cfa5becd42cb6ae02efd6b9aedca1a8d3631c2971486043 + md5: 977ab404143f69d23c767e80cd103b80 depends: - - langchain-core <2.0.0,>=0.3.75 + - langchain-core >=1.0.0,<2.0.0 - pip >=25.2 - python >=3.10 constrains: - lxml >=4.9.3,<6.0.0 - beautifulsoup4 >=4.12.3,<5.0.0 license: MIT - license_family: MIT purls: - pkg:pypi/langchain-text-splitters?source=hash-mapping - size: 33915 - timestamp: 1756689421838 -- pypi: https://files.pythonhosted.org/packages/f2/a5/56169ce49b3020b47112703b2f9ed0e3255073c8d438b74406b290fb5687/langsmith-0.4.29-py3-none-any.whl + size: 34164 + timestamp: 1760730372059 +- pypi: https://files.pythonhosted.org/packages/14/e8/edff4de49cf364eb9ee88d13da0a555844df32438413bf53d90d507b97cd/langsmith-0.4.37-py3-none-any.whl name: langsmith - version: 0.4.29 - sha256: 20f39c96057d47a83b6df2b18a5137e2389b5b41f34fe0a64a8d6812de3c0ccf + version: 0.4.37 + sha256: e34a94ce7277646299e4703a0f6e2d2c43647a28e8b800bb7ef82fd87a0ec766 requires_dist: - httpx>=0.23.0,<1 - orjson>=3.9.14 ; platform_python_implementation != 'PyPy' @@ -17858,6 +17689,7 @@ packages: - requests-toolbelt>=1.0.0 - requests>=2.0.0 - zstandard>=0.23.0 + - claude-agent-sdk>=0.1.0 ; python_full_version >= '3.10' and extra == 'claude-agent-sdk' - langsmith-pyo3>=0.1.0rc2 ; extra == 'langsmith-pyo3' - openai-agents>=0.0.3 ; extra == 'openai-agents' - opentelemetry-api>=1.30.0 ; extra == 'otel' @@ -23545,15 +23377,15 @@ packages: timestamp: 1733408419340 - pypi: ./ name: nrel-compass - version: 0.9.1.dev4+g7c68bbf.d20251009 - sha256: 040a4e1a12360d38dccaee4e150077252eed6ceceba756dffe27458de0cc3e7c + version: 0.9.1.dev11+g0bb307f.d20251018 + sha256: 3284c40a700567c6bd4489734f1f941862baf893ef62b3831d9866759619a139 requires_dist: - click>=8.1.7,<9 - html5lib>=1.1,<2 - - langchain>=0.3.7,<0.4 + - langchain-text-splitters>=1.0.0,<2 - networkx>=3.4.2,<4 - nltk>=3.9.1,<4 - - nrel-elm>=0.0.27,<1 + - nrel-elm>=0.0.29,<1 - openai>=1.1.0 - pandas>=2.2.3,<3 - pdftotext>=2.2.2,<3 @@ -23589,10 +23421,10 @@ packages: - twine>=6.1.0,<7 ; extra == 'build' requires_python: '>=3.12' editable: true -- pypi: https://files.pythonhosted.org/packages/25/91/6ffb178fcbbd4d825d9b597d83236aee453fc972f6775845e27f6d6c3e62/NREL_elm-0.0.27-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/21/fc/884f5df7dcbd561a2be2f6c94f1cf47f7180ee304217a46e3c98f47ee2c6/nrel_elm-0.0.29-py3-none-any.whl name: nrel-elm - version: 0.0.27 - sha256: ec02a3fce1c30b2e2ab5f6f17dc7eae7a453e36d6c0c879a24691305632a9f15 + version: 0.0.29 + sha256: b0dca139b3ecfaed580763665e5ba495cad44b52dcadc1cd069e196847f62c63 requires_dist: - openai>=1.1.0 - aiohttp @@ -23606,7 +23438,7 @@ packages: - google-search-results - html2text - httpx - - langchain + - langchain-text-splitters - lxml - matplotlib - networkx @@ -23635,7 +23467,7 @@ packages: - google-search-results ; extra == 'dev' - html2text ; extra == 'dev' - httpx ; extra == 'dev' - - langchain ; extra == 'dev' + - langchain-text-splitters ; extra == 'dev' - lxml ; extra == 'dev' - matplotlib ; extra == 'dev' - networkx ; extra == 'dev' @@ -26887,15 +26719,15 @@ packages: - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 -- pypi: https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl name: pydantic - version: 2.11.9 - sha256: c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2 + version: 2.12.3 + sha256: 6986454a854bc3bc6e5443e1369e06a3a456af9d339eda45510f517d9ea5c6bf requires_dist: - annotated-types>=0.6.0 - - pydantic-core==2.33.2 - - typing-extensions>=4.12.2 - - typing-inspection>=0.4.0 + - pydantic-core==2.41.4 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 - email-validator>=2.0.0 ; extra == 'email' - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' requires_python: '>=3.9' @@ -26915,40 +26747,40 @@ packages: - pkg:pypi/pydantic?source=compressed-mapping size: 307176 timestamp: 1757881787287 -- pypi: https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/00/b6/0ce5c03cec5ae94cca220dfecddc453c077d71363b98a4bbdb3c0b22c783/pydantic_core-2.41.4-cp313-cp313-macosx_11_0_arm64.whl name: pydantic-core - version: 2.33.2 - sha256: f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6 + version: 2.41.4 + sha256: e7393f1d64792763a48924ba31d1e44c2cfbc05e3b1c2c9abb4ceeadd912cced requires_dist: - - typing-extensions>=4.6.0,!=4.7.0 + - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/13/d0/c20adabd181a029a970738dfe23710b52a31f1258f591874fcdec7359845/pydantic_core-2.41.4-cp313-cp313-macosx_10_12_x86_64.whl name: pydantic-core - version: 2.33.2 - sha256: 1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f + version: 2.41.4 + sha256: 85e050ad9e5f6fe1004eec65c914332e52f429bc0ae12d6fa2092407a462c746 requires_dist: - - typing-extensions>=4.6.0,!=4.7.0 + - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/18/62/273dd70b0026a085c7b74b000394e1ef95719ea579c76ea2f0cc8893736d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core - version: 2.33.2 - sha256: 0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef + version: 2.41.4 + sha256: a1351f5bbdbbabc689727cb91649a00cb9ee7203e0a6e54e9f5ba9e22e384b84 requires_dist: - - typing-extensions>=4.6.0,!=4.7.0 + - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/68/3e/800d3d02c8beb0b5c069c870cbb83799d085debf43499c897bb4b4aaff0d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl name: pydantic-core - version: 2.33.2 - sha256: c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9 + version: 2.41.4 + sha256: 94dab0940b0d1fb28bcab847adf887c66a27a40291eedf0b473be58761c9799a requires_dist: - - typing-extensions>=4.6.0,!=4.7.0 + - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/be/d8/fd0de71f39db91135b7a26996160de71c073d8635edfce8b3c3681be0d6d/pydantic_core-2.41.4-cp313-cp313-win_amd64.whl name: pydantic-core - version: 2.33.2 - sha256: 9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d + version: 2.41.4 + sha256: d081a1f3800f05409ed868ebb2d74ac39dd0c1ff6c035b5162356d76030736d4 requires_dist: - - typing-extensions>=4.6.0,!=4.7.0 + - typing-extensions>=4.14.1 requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda sha256: 4d14d7634c8f351ff1e63d733f6bb15cba9a0ec77e468b0de9102014a4ddc103 @@ -28166,30 +27998,30 @@ packages: - pkg:pypi/pywinpty?source=hash-mapping size: 215864 timestamp: 1738661787591 -- pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: pyyaml - version: 6.0.2 - sha256: 70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 + version: 6.0.3 + sha256: ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: pyyaml - version: 6.0.2 - sha256: 50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 + version: 6.0.3 + sha256: 0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl name: pyyaml - version: 6.0.2 - sha256: 0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 + version: 6.0.3 + sha256: 79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl name: pyyaml - version: 6.0.2 - sha256: efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba + version: 6.0.3 + sha256: 2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl name: pyyaml - version: 6.0.2 - sha256: 8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 + version: 6.0.3 + sha256: 8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda sha256: 159cba13a93b3fe084a1eb9bda0a07afc9148147647f0d437c3c3da60980503b @@ -30985,275 +30817,6 @@ packages: - pkg:pypi/sphinxcontrib-serializinghtml?source=hash-mapping size: 28669 timestamp: 1733750596111 -- pypi: https://files.pythonhosted.org/packages/41/1c/a7260bd47a6fae7e03768bf66451437b36451143f36b285522b865987ced/sqlalchemy-2.0.43-cp313-cp313-macosx_10_13_x86_64.whl - name: sqlalchemy - version: 2.0.43 - sha256: e7c08f57f75a2bb62d7ee80a89686a5e5669f199235c6d1dac75cd59374091c3 - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; (python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64') - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/8e/84/8a337454e82388283830b3586ad7847aa9c76fdd4f1df09cdd1f94591873/sqlalchemy-2.0.43-cp313-cp313-macosx_11_0_arm64.whl - name: sqlalchemy - version: 2.0.43 - sha256: 14111d22c29efad445cd5021a70a8b42f7d9152d8ba7f73304c4d82460946aaa - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; (python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64') - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ac/a5/ca2f07a2a201f9497de1928f787926613db6307992fe5cda97624eb07c2f/sqlalchemy-2.0.43-cp313-cp313-win_amd64.whl - name: sqlalchemy - version: 2.0.43 - sha256: 971ba928fcde01869361f504fcff3b7143b47d30de188b11c6357c0505824197 - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; (python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64') - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/cf/ff/22ab2328148492c4d71899d62a0e65370ea66c877aea017a244a35733685/sqlalchemy-2.0.43-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - name: sqlalchemy - version: 2.0.43 - sha256: 21b27b56eb2f82653168cefe6cb8e970cdaf4f3a6cb2c5e3c3c1cf3158968ff9 - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; (python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64') - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/dc/29/11ae2c2b981de60187f7cbc84277d9d21f101093d1b2e945c63774477aba/sqlalchemy-2.0.43-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: sqlalchemy - version: 2.0.43 - sha256: 9c5a9da957c56e43d72126a3f5845603da00e0293720b03bde0aacffcf2dc04f - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; (python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64') - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.43-py312h4c3975b_0.conda - sha256: ef1faa38ee1a24a9a26755e9345c7e2ea852a678e0cd56d002a52db9fc87d163 - md5: 8a8ae29bfb3353ef70ebdad2ca373a40 - depends: - - __glibc >=2.17,<3.0.a0 - - greenlet !=0.4.17 - - libgcc >=14 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - typing-extensions >=4.6.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/sqlalchemy?source=hash-mapping - size: 3532535 - timestamp: 1754983880268 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.43-py312hefbd42c_0.conda - sha256: fb1a3a695ea1cd1978e7c8e93b1559cfc0ddd91d19afa0d4b7bcc1fd208d9775 - md5: e9624d2cd8cc3f048fbc8321e9efdad8 - depends: - - greenlet !=0.4.17 - - libgcc >=14 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - typing-extensions >=4.6.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/sqlalchemy?source=hash-mapping - size: 3568767 - timestamp: 1754985241466 -- conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.43-py312h2f459f6_0.conda - sha256: 02054457b724f5e659c982bd61c080b1b0acd9418ba80db94f9dde20ece0aa95 - md5: c3be86bc40e8aa92367364f362074af5 - depends: - - __osx >=10.13 - - greenlet !=0.4.17 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - typing-extensions >=4.6.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/sqlalchemy?source=hash-mapping - size: 3558095 - timestamp: 1754984000812 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.43-py312h163523d_0.conda - sha256: e3c1226537cbf5075b1048732287a58de84ea4d7244e2dfa06df68303b6ba42b - md5: 25c6fa217b6701c717955d3eef7110a0 - depends: - - __osx >=11.0 - - greenlet !=0.4.17 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - typing-extensions >=4.6.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/sqlalchemy?source=hash-mapping - size: 3532835 - timestamp: 1754984149277 -- conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.43-py312he06e257_0.conda - sha256: 55dc8d0253ab240c988229fdc35202a8d12647b6510f3ac60f4417126fb233c9 - md5: 0adeed53f5b3788e5c7ffcef77de8a6f - depends: - - greenlet !=0.4.17 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - typing-extensions >=4.6.0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: - - pkg:pypi/sqlalchemy?source=hash-mapping - size: 3542457 - timestamp: 1754984163082 - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda sha256: ea12e0714d70a536abe5968df612c57a966aa93c5a152cc4a1974046248d72a4 md5: 8376bd3854542be0c8c7cd07525d31c6 @@ -32404,10 +31967,10 @@ packages: purls: [] size: 91383 timestamp: 1756220668932 -- pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl name: typing-inspection - version: 0.4.1 - sha256: 389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51 + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 requires_dist: - typing-extensions>=4.12.0 requires_python: '>=3.9' diff --git a/pyproject.toml b/pyproject.toml index 82e3a7b2..7d7d0122 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,10 +34,10 @@ classifiers=[ dependencies = [ "click>=8.1.7,<9", "html5lib>=1.1,<2", - "langchain>=0.3.7,<0.4", + "langchain-text-splitters>=1.0.0,<2", "networkx>=3.4.2,<4", "nltk>=3.9.1,<4", - "nrel-elm>=0.0.27,<1", + "nrel-elm>=0.0.29,<1", "openai>=1.1.0", "pandas>=2.2.3,<3", "pdftotext>=2.2.2,<3", @@ -155,7 +155,7 @@ html2text = ">=2024.2.26,<2025" html5lib = ">=1.1,<2" httpx = ">=0.28.1,<0.29" ipython = ">=8.29.0,<9" -langchain = ">=0.3.7,<0.4" +langchain-text-splitters = ">=1.0.0,<2" lxml = ">=5.3.0,<6" networkx = ">=3.4.2,<4" nltk = ">=3.9.1,<4" diff --git a/tests/python/validation/conftest.py b/tests/python/validation/conftest.py index 84e26ac8..ccc54aab 100644 --- a/tests/python/validation/conftest.py +++ b/tests/python/validation/conftest.py @@ -9,7 +9,7 @@ from elm import ApiBase from elm.web.document import PDFDocument, HTMLDocument from elm.utilities.parse import read_pdf -from langchain.text_splitter import RecursiveCharacterTextSplitter +from langchain_text_splitters.character import RecursiveCharacterTextSplitter from compass.utilities import RTS_SEPARATORS from compass.services.openai import OpenAIService From dfd23edc93b1d613682007ee30c6f01c8b672f45 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 13:32:55 -0600 Subject: [PATCH 09/42] Pass tech down to legal text validator --- compass/extraction/apply.py | 5 +++++ compass/scripts/download.py | 7 +++++++ compass/scripts/process.py | 6 ++++++ compass/utilities/nt.py | 1 + compass/validation/content.py | 7 ++++++- 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/compass/extraction/apply.py b/compass/extraction/apply.py index cc333f77..a585b89d 100644 --- a/compass/extraction/apply.py +++ b/compass/extraction/apply.py @@ -22,6 +22,7 @@ async def check_for_ordinance_info( doc, model_config, heuristic, + tech, ordinance_text_collector_class, permitted_use_text_collector_class=None, usage_tracker=None, @@ -36,6 +37,9 @@ async def check_for_ordinance_info( ``"contains_ord_info"`` key, it will not be processed. To force a document to be processed by this function, remove that key from the documents attrs. + tech : str + Technology of interest (e.g. "solar", "wind", etc). This is + used to set up some document validation decision trees. text_splitter : obj Instance of an object that implements a `split_text` method. The method should take text as input (str) and return a list @@ -65,6 +69,7 @@ async def check_for_ordinance_info( chunks = model_config.text_splitter.split_text(doc.text) chunk_parser = ParseChunksWithMemory(chunks, num_to_recall=2) legal_text_validator = LegalTextValidator( + tech=tech, llm_service=model_config.llm_service, usage_tracker=usage_tracker, doc_is_from_ocr=doc.attrs.get("from_ocr", False), diff --git a/compass/scripts/download.py b/compass/scripts/download.py index c933b784..14a23591 100644 --- a/compass/scripts/download.py +++ b/compass/scripts/download.py @@ -504,6 +504,7 @@ async def filter_ordinance_docs( jurisdiction, model_configs, heuristic, + tech, ordinance_text_collector_class, permitted_use_text_collector_class, usage_tracker=None, @@ -519,6 +520,9 @@ async def filter_ordinance_docs( Dictionary of :class:`~compass.llm.config.LLMConfig` instances. Should have at minium a "default" key that is used as a fallback for all tasks. + tech : str + Technology of interest (e.g. "solar", "wind", etc). This is + used to set up some document validation decision trees. usage_tracker : compass.services.usage.UsageTracker, optional Optional tracker instance to monitor token usage during LLM calls. By default, ``None``. @@ -562,6 +566,7 @@ async def filter_ordinance_docs( jurisdiction=jurisdiction, model_configs=model_configs, heuristic=heuristic, + tech=tech, ordinance_text_collector_class=ordinance_text_collector_class, permitted_use_text_collector_class=permitted_use_text_collector_class, usage_tracker=usage_tracker, @@ -650,6 +655,7 @@ async def _down_select_docs_correct_content( jurisdiction, model_configs, heuristic, + tech, ordinance_text_collector_class, permitted_use_text_collector_class, usage_tracker, @@ -661,6 +667,7 @@ async def _down_select_docs_correct_content( task_name=jurisdiction.full_name, model_configs=model_configs, heuristic=heuristic, + tech=tech, ordinance_text_collector_class=ordinance_text_collector_class, permitted_use_text_collector_class=permitted_use_text_collector_class, usage_tracker=usage_tracker, diff --git a/compass/scripts/process.py b/compass/scripts/process.py index 3e185988..510c2476 100644 --- a/compass/scripts/process.py +++ b/compass/scripts/process.py @@ -823,6 +823,7 @@ async def _download_known_url_documents(self): self.jurisdiction, self.models, heuristic=self.tech_specs.heuristic, + tech=self.tech_specs.name, ordinance_text_collector_class=( self.tech_specs.ordinance_text_collector ), @@ -861,6 +862,7 @@ async def _find_documents_using_search_engine(self): self.jurisdiction, self.models, heuristic=self.tech_specs.heuristic, + tech=self.tech_specs.name, ordinance_text_collector_class=( self.tech_specs.ordinance_text_collector ), @@ -982,6 +984,7 @@ async def _try_elm_crawl(self): self.jurisdiction, self.models, heuristic=self.tech_specs.heuristic, + tech=self.tech_specs.name, ordinance_text_collector_class=( self.tech_specs.ordinance_text_collector ), @@ -1014,6 +1017,7 @@ async def _try_compass_crawl(self, scrape_results): self.jurisdiction, self.models, heuristic=self.tech_specs.heuristic, + tech=self.tech_specs.name, ordinance_text_collector_class=( self.tech_specs.ordinance_text_collector ), @@ -1148,6 +1152,7 @@ def _compile_tech_specs(tech): """Compile `TechSpec` tuple based on the user `tech` input""" if tech.casefold() == "wind": return TechSpec( + "wind", WIND_QUESTION_TEMPLATES, WindHeuristic(), WindOrdinanceTextCollector, @@ -1160,6 +1165,7 @@ def _compile_tech_specs(tech): ) if tech.casefold() == "solar": return TechSpec( + "solar", SOLAR_QUESTION_TEMPLATES, SolarHeuristic(), SolarOrdinanceTextCollector, diff --git a/compass/utilities/nt.py b/compass/utilities/nt.py index 5226c7e0..b99b6b89 100644 --- a/compass/utilities/nt.py +++ b/compass/utilities/nt.py @@ -18,6 +18,7 @@ TechSpec = namedtuple( "TechSpec", [ + "name", "questions", "heuristic", "ordinance_text_collector", diff --git a/compass/validation/content.py b/compass/validation/content.py index 52dccff5..480459cb 100644 --- a/compass/validation/content.py +++ b/compass/validation/content.py @@ -228,12 +228,15 @@ class LegalTextValidator(StructuredLLMCaller): ) def __init__( - self, *args, score_threshold=0.8, doc_is_from_ocr=False, **kwargs + self, tech, *args, score_threshold=0.8, doc_is_from_ocr=False, **kwargs ): """ Parameters ---------- + tech : str + Technology of interest (e.g. "solar", "wind", etc). This is + used to set up some document validation decision trees. score_threshold : float, optional Minimum fraction of text chunks that have to pass the legal check for the whole document to be considered legal text. @@ -244,6 +247,7 @@ def __init__( initializer. """ super().__init__(*args, **kwargs) + self.tech = tech self.score_threshold = score_threshold self._legal_text_mem = [] self.doc_is_from_ocr = doc_is_from_ocr @@ -296,6 +300,7 @@ async def _check_chunk_for_legal_text(self, key, text_chunk): tree = setup_async_decision_tree( setup_graph_correct_document_type, usage_sub_label=LLMUsageCategory.DOCUMENT_CONTENT_VALIDATION, + tech=self.tech, key=key, text=text_chunk, chat_llm_caller=chat_llm_caller, From 82201e84b57a46c91a88521501c7d7429bfa61a1 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 13:33:13 -0600 Subject: [PATCH 10/42] Add missing arg --- examples/parse_existing_docs/parse_pdf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/parse_existing_docs/parse_pdf.py b/examples/parse_existing_docs/parse_pdf.py index ba74c5d0..46d0b2fe 100644 --- a/examples/parse_existing_docs/parse_pdf.py +++ b/examples/parse_existing_docs/parse_pdf.py @@ -61,6 +61,7 @@ async def _extract_ordinances(doc, llm_config): doc, model_config=llm_config, heuristic=SolarHeuristic(), + tech="solar", ordinance_text_collector_class=SolarOrdinanceTextCollector, permitted_use_text_collector_class=None, ) From 301a4f2102d19f5ef9374f4c9196a62d3afa5a1b Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 13:33:22 -0600 Subject: [PATCH 11/42] Document new arg --- examples/parse_existing_docs/README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/parse_existing_docs/README.rst b/examples/parse_existing_docs/README.rst index 3cb6ca5e..6c89dc31 100644 --- a/examples/parse_existing_docs/README.rst +++ b/examples/parse_existing_docs/README.rst @@ -134,6 +134,7 @@ in the document. Here's how that might look: doc, model_config=llm_config, heuristic=SolarHeuristic(), + tech="solar", ordinance_text_collector_class=SolarOrdinanceTextCollector, permitted_use_text_collector_class=None, ) From 888510c0faeb89e65724384c200b14bedf514ddc Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 13:33:41 -0600 Subject: [PATCH 12/42] Add todo reminder --- compass/extraction/solar/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/compass/extraction/solar/__init__.py b/compass/extraction/solar/__init__.py index 83941c8f..1644bfc1 100644 --- a/compass/extraction/solar/__init__.py +++ b/compass/extraction/solar/__init__.py @@ -47,4 +47,5 @@ "renewable": 3, "municipal": 1, "department": 1, + # TODO: add board??? } From fc16ab6f85d379b8f79547abc2048d1c2cfd344a Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 13:36:36 -0600 Subject: [PATCH 13/42] Refactor out system size message --- compass/common/__init__.py | 1 + compass/common/base.py | 50 +++++++---------- compass/extraction/solar/graphs.py | 41 +++++--------- compass/extraction/wind/graphs.py | 86 +++++++++++------------------- 4 files changed, 66 insertions(+), 112 deletions(-) diff --git a/compass/common/__init__.py b/compass/common/__init__.py index 41896c44..fa9dd663 100644 --- a/compass/common/__init__.py +++ b/compass/common/__init__.py @@ -2,6 +2,7 @@ from .base import ( EXTRACT_ORIGINAL_TEXT_PROMPT, + SYSTEM_SIZE_REMINDER, BaseTextExtractor, empty_output, llm_response_starts_with_no, diff --git a/compass/common/base.py b/compass/common/base.py index 7b08b743..d5cd3a31 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -30,6 +30,13 @@ _UNITS_IN_SUMMARY_PROMPT = ( "Include any clarifications about the units in the summary." ) +SYSTEM_SIZE_REMINDER = ( + "systems that would typically be defined as {tech} based on the text " + "itself — for example, systems intended for offsite electricity " + "generation or sale, or those above thresholds such as height or rated " + "capacity (often 1MW+). Do not consider any text that applies **only** " + "to smaller or clearly non-commercial systems. " +) EXTRACT_ORIGINAL_TEXT_PROMPT = ( "Extract all portions of the text (with original formatting) " "that state how close I can site {tech} to {feature}. " @@ -39,11 +46,7 @@ "The extracted text will be used for structured data extraction, so it " "must be both **comprehensive** (retaining all relevant details) and " "**focused** (excluding unrelated content). Ensure that all retained " - "information is **directly applicable** to systems that would typically " - "be defined as {tech} based on the text itself — for example, systems " - "intended for electricity generation or sale, or those above " - "thresholds such as height or rated capacity. Ignore any text that " - "applies **only** to smaller or clearly non-commercial systems. " + f"information is **directly applicable** to {SYSTEM_SIZE_REMINDER}" ) @@ -191,13 +194,9 @@ def setup_base_setback_graph(**kwargs): "Is there text in the following legal document that describes " "how far I have to setback {tech} from {feature}? " "{feature_clarifications}" # expected to end in space - "Focus only on setbacks from {feature}. " - "Please only consider setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height or rated " - "capacity. Ignore any requirements that apply only to smaller " - "or clearly non-commercial systems. " + "Please consider only setbacks from {feature}. " + "Please also only consider setbacks that would apply for " + f"{SYSTEM_SIZE_REMINDER}" "Don't forget to pay extra attention to clarifying text found " "in parentheses and footnotes. " "Please start your response with either 'Yes' or 'No' and briefly " @@ -273,14 +272,10 @@ def setup_participating_owner(**kwargs): "owners? {feature_clarifications} We are only interested in " "setbacks from {feature}; do not base your response on any text " "related to {ignore_features}. " - "Please only consider setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height or rated " - "capacity. Please disregard any requirements that apply **only** " - "to smaller or clearly non-commercial systems. " - "Please start your response with either 'Yes' or 'No' and " - "briefly explain your answer." + "Please only consider setbacks that would apply for " + f"{SYSTEM_SIZE_REMINDER}" + "Please start your response with either 'Yes' or 'No' " + "and briefly explain your answer." ), ) G.add_edge("init", "waiver", condition=llm_response_starts_with_yes) @@ -404,10 +399,8 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "respond with 'No'.\n" "2) If the text only provides a definition of what {restriction} " "are without providing specifics, please respond with 'No'.\n" - "3) Focus only on {restriction} specifically for systems that " - "would typically be defined as {tech} based on the text itself. " - "Ignore any requirements that apply only to smaller or clearly " - "non-commercial systems. " + "3) Please focus only on {restriction} that would apply for " + f"{SYSTEM_SIZE_REMINDER}\n" "4) Pay close attention to clarifying details in parentheses, " "footnotes, or additional explanatory text.\n" "5) Please start your response with either 'Yes' or 'No' and " @@ -504,10 +497,8 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "2) If multiple values are given, select the most restrictive " "one (i.e., the smallest allowable limit, the lowest maximum, " "etc.).\n" - "3) Focus only on {restriction} specifically for systems that " - "would typically be defined as {tech} based on the text " - "itself. Ignore any requirements that apply only to smaller " - "or clearly non-commercial systems. " + "3) Please focus only on {restriction} that would apply for " + f"{SYSTEM_SIZE_REMINDER}\n" "4) Pay close attention to clarifying details in parentheses, " "footnotes, or additional explanatory text.\n\n" "Example Inputs and Outputs:\n" @@ -578,8 +569,7 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "below, or `null` if the text does not mention such a " "restriction. " "As before, focus only on {restriction} specifically for " - "systems that would typically be defined as {tech} based on " - "the text itself. " + f"{SYSTEM_SIZE_REMINDER}" "{SUMMARY_PROMPT} {UNITS_IN_SUMMARY_PROMPT} {SECTION_PROMPT}" ), ) diff --git a/compass/extraction/solar/graphs.py b/compass/extraction/solar/graphs.py index c4eed69c..9341ec05 100644 --- a/compass/extraction/solar/graphs.py +++ b/compass/extraction/solar/graphs.py @@ -4,6 +4,7 @@ setup_graph_no_nodes, llm_response_starts_with_yes, llm_response_starts_with_no, + SYSTEM_SIZE_REMINDER, ) @@ -92,12 +93,8 @@ def setup_multiplier(**kwargs): "for {tech}? " "Focus only on {feature}; do not respond based on any text " "related to {ignore_features}. " - "Please only consider setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height or rated " - "capacity. Ignore any requirements that apply only to smaller " - "or clearly non-commercial systems. " + "Please also only consider setbacks specifically for " + f"{SYSTEM_SIZE_REMINDER}" "Please start your response with either 'Yes' or 'No' and briefly " "explain your answer." ), @@ -108,14 +105,10 @@ def setup_multiplier(**kwargs): prompt=( "Does the ordinance give the setback from {feature} as a fixed " "distance value? " - "Focus only on {feature}; do not respond based on any text " - "related to {ignore_features}. " - "Please only consider setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height or rated " - "capacity. Ignore any requirements that apply only to smaller " - "or clearly non-commercial systems. " + "Please consider only on {feature}; do not respond based on any " + "text related to {ignore_features}. " + "Please also only consider setbacks specifically for " + f"{SYSTEM_SIZE_REMINDER}" "Please start your response with either 'Yes' or " "'No' and briefly explain your answer." ), @@ -156,8 +149,8 @@ def setup_multiplier(**kwargs): "of the 'units' key should be a string corresponding to the " "(standard) units of the setback distance value from {feature} " "or `null` if there was no such value. " - "As before, focus only on setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself. " + "As before, focus only on setbacks that would apply for" + f"{SYSTEM_SIZE_REMINDER}" "{SUMMARY_PROMPT} {SECTION_PROMPT}" ), ) @@ -169,12 +162,8 @@ def setup_multiplier(**kwargs): "Are multiple values given for the multiplier used to " "compute the setback distance value from {feature} for {tech}? " "Remember to ignore any text related to {ignore_features}. " - "Focus only on setbacks specifically for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height or rated capacity. " - "Ignore any requirements that apply only to smaller or clearly " - "non-commercial systems. " + "Please only consider setbacks specifically for " + f"{SYSTEM_SIZE_REMINDER}" "If so, select and state the largest one. Otherwise, repeat the " "single multiplier value that was given in the text. " ), @@ -187,12 +176,8 @@ def setup_multiplier(**kwargs): "static distance value that should be added to the result of " "the multiplication? " "Remember to ignore any text related to {ignore_features}. " - "Focus only on setbacks specifically for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height or rated capacity. " - "Ignore any requirements that apply only to smaller or clearly " - "non-commercial systems. " + "Please only consider setbacks specifically for " + f"{SYSTEM_SIZE_REMINDER}" "Do not confuse this value with static setback requirements. " "Ignore text with clauses such as 'no lesser than', 'no greater " "than', 'the lesser of', or 'the greater of'. Please start your " diff --git a/compass/extraction/wind/graphs.py b/compass/extraction/wind/graphs.py index 4fb42c2f..2dd4aaa3 100644 --- a/compass/extraction/wind/graphs.py +++ b/compass/extraction/wind/graphs.py @@ -4,6 +4,14 @@ setup_graph_no_nodes, llm_response_starts_with_yes, llm_response_starts_with_no, + SYSTEM_SIZE_REMINDER, +) + +WES_SYSTEM_SIZE_REMINDER = SYSTEM_SIZE_REMINDER.replace( + "height or rated capacity", "height, rotor diameter, or rated capacity" +).replace( + "smaller or clearly non-commercial systems", + "smaller or clearly non-commercial systems or to meteorological towers", ) @@ -92,13 +100,9 @@ def setup_multiplier(**kwargs): "the setback distance from {feature} for {tech}? " "Focus only on {feature}; do not respond based on any text " "related to {ignore_features}. " - "Please only consider setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height, rotor diameter, " - "or rated capacity. Ignore any requirements that apply only to " - "smaller or clearly non-commercial systems or to meteorological " - "towers. Remember that 1 is a valid multiplier, and treat any " + "Please also only consider setbacks specifically for " + f"{WES_SYSTEM_SIZE_REMINDER}" + "Remember that 1 is a valid multiplier, and treat any " "mention of 'fall zone' as a system height multiplier of 1. " "Please start your response with either 'Yes' or 'No' and " "briefly explain your answer." @@ -112,13 +116,9 @@ def setup_multiplier(**kwargs): "distance value? " "Focus only on {feature}; do not respond based on any text " "related to {ignore_features}. " - "Please only consider setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height, rotor diameter, " - "or rated capacity. Ignore any requirements that apply only to " - "smaller or clearly non-commercial systems or to meteorological " - "towers. Please start your response with either 'Yes' or " + "Please also only consider setbacks specifically for " + f"{WES_SYSTEM_SIZE_REMINDER}" + "Please start your response with either 'Yes' or " "'No' and briefly explain your answer." ), ) @@ -158,8 +158,8 @@ def setup_multiplier(**kwargs): "The value of the 'units' key should be a string corresponding to " "the (standard) units of the setback distance value from " "{feature} or `null` if there was no such value. " - "As before, focus only on setbacks specifically for systems that " - "would typically be defined as {tech} based on the text itself. " + "As before, focus only on setbacks that would apply for " + f"{WES_SYSTEM_SIZE_REMINDER}" "{SUMMARY_PROMPT} {SECTION_PROMPT}" ), ) @@ -171,13 +171,9 @@ def setup_multiplier(**kwargs): "Are multiple values given for the multiplier used to compute the " "setback distance value from {feature} for {tech}? " "Remember to ignore any text related to {ignore_features}. " - "Focus only on setbacks specifically for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height, rotor diameter, or " - "rated capacity. Ignore any requirements that apply only to " - "smaller or clearly non-commercial systems or to meteorological " - "towers. If so, select and state the largest one. Otherwise, " + "Please consider only on setbacks specifically for " + f"{WES_SYSTEM_SIZE_REMINDER}" + "If so, select and state the largest one. Otherwise, " "repeat the single multiplier value that was given in the text. " ), ) @@ -188,13 +184,9 @@ def setup_multiplier(**kwargs): "What kind of multiplier is stated in the text to compute the " "setback distance from {feature}? " "Remember to ignore any text related to {ignore_features}. " - "Focus only on setbacks specifically for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height, rotor diameter, or " - "rated capacity. Ignore any requirements that apply only to " - "smaller or clearly non-commercial systems or to meteorological " - "towers. Select a value from the following list: " + "Please consider only setbacks specifically for " + f"{WES_SYSTEM_SIZE_REMINDER}" + "Select a value from the following list: " "['tip-height-multiplier', 'hub-height-multiplier', " "'rotor-diameter-multiplier]. " "Default to 'tip-height-multiplier' unless the text explicitly " @@ -211,12 +203,8 @@ def setup_multiplier(**kwargs): "Does the ordinance for the setback from {feature} include a " "static distance value that should be added to the result of " "the multiplication? " - "Focus only on setbacks specifically for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height, rotor diameter, or " - "rated capacity. Ignore any requirements that apply only to " - "smaller or clearly non-commercial systems. " + "Please consider only setbacks specifically for " + f"{WES_SYSTEM_SIZE_REMINDER}" "Do not confuse this value with static setback requirements. " "Ignore text with clauses such as " "'no lesser than', 'no greater than', 'the lesser of', or 'the " @@ -318,15 +306,10 @@ def setup_conditional_min(**kwargs): G.add_node( "init", prompt=( - "Focus on setbacks from {feature}. Exclude any setbacks that " - "relate to {ignore_features}. " - "Consider only setbacks that apply to systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height, rotor diameter, " - "or rated capacity. Do not consider any requirements that apply " - "only to smaller or clearly non-commercial systems or to " - "meteorological towers.\n" + "Please consider only setbacks from {feature}; do not base your " + "response off of any setbacks that relate to {ignore_features}. " + "Please also consider only setbacks that apply to " + f"{WES_SYSTEM_SIZE_REMINDER}\n" "Does the setback from {feature} for {tech} define a **minimum** " "setback distance that must be met in all cases, even " "when a multiplier is used for the calculation? This value acts " @@ -403,15 +386,10 @@ def setup_conditional_max(**kwargs): G.add_node( "init", prompt=( - "Focus on setbacks from {feature}. Exclude any setbacks that " - "relate to {ignore_features}. " - "Consider only setbacks that apply to systems that " - "would typically be defined as {tech} based on the text itself " - "— for example, systems intended for electricity generation or " - "sale, or those above thresholds such as height, rotor diameter, " - "or rated capacity. Do not consider any requirements that apply " - "only to smaller or clearly non-commercial systems or to " - "meteorological towers.\n" + "Please consider only setbacks from {feature}; do not base your " + "response on any setbacks that relate to {ignore_features}. " + "Please also consider only setbacks that apply to" + f"{WES_SYSTEM_SIZE_REMINDER}\n" "Does the setback from {feature} for {tech} define a **maximum** " "setback distance that must be observed in all cases, even when " "a multiplier is used for the calculation? This value acts like " From 84cb0f4334a403eb6a4f00a9030602b0e071a544 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 13:37:09 -0600 Subject: [PATCH 14/42] Minor bug fix --- compass/utilities/parsing.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/compass/utilities/parsing.py b/compass/utilities/parsing.py index 6881c471..fd4a512a 100644 --- a/compass/utilities/parsing.py +++ b/compass/utilities/parsing.py @@ -141,10 +141,7 @@ def num_ordinances_in_doc(doc, exclude_features=None): int Number of unique ordinance values extracted from this document. """ - if doc is None: - return 0 - - if "ordinance_values" not in doc.attrs: + if doc is None or doc.attrs.get("ordinance_values") is None: return 0 return num_ordinances_dataframe( From 44f87c74493fb1611092f6cb200a2546793bc307 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 14:17:37 -0600 Subject: [PATCH 15/42] WES system reminder --- compass/extraction/wind/parse.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 0744aa1d..52a1ed79 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -22,6 +22,7 @@ setup_graph_permitted_use_districts, ) from compass.extraction.wind.graphs import ( + WES_SYSTEM_SIZE_REMINDER, setup_graph_wes_types, setup_multiplier, setup_conditional_min, @@ -42,28 +43,18 @@ "For the duration of this conversation, only focus on ordinances " "relating to setbacks from {feature}; do not respond based on any text " "related to {ignore_features}. " - "Please only consider ordinances for systems that would typically be " - "defined as {tech} based on the text itself — for example, systems " - "intended for electricity generation or sale, or those above thresholds " - "such as height, rotor diameter, or rated capacity. Ignore any " - "requirements that apply only to smaller or clearly non-commercial " - "systems. " + f"Please only consider ordinances for {WES_SYSTEM_SIZE_REMINDER}" ) RESTRICTIONS_SYSTEM_MESSAGE = ( f"{DEFAULT_SYSTEM_MESSAGE} " "For the duration of this conversation, only focus on " - "ordinances relating to {restriction} for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height, rotor diameter, or rated " - "capacity. Disregard any requirements that apply **only** to smaller " - "or clearly non-commercial systems. " + "ordinances relating to {restriction} for " + f"{WES_SYSTEM_SIZE_REMINDER}" ) PERMITTED_USE_SYSTEM_MESSAGE = ( f"{DEFAULT_SYSTEM_MESSAGE} " "For the duration of this conversation, only focus on permitted uses for " - "{tech} (or similar). Ignore all text that only pertains to private, " - "micro, small, or medium sized wind energy systems." + f"{WES_SYSTEM_SIZE_REMINDER}" ) EXTRA_NUMERICAL_RESTRICTIONS = { "other wecs": ( From 9f8ed440a1df61bc58c63a6d8992604b50428e90 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:08:50 -0600 Subject: [PATCH 16/42] Update system size extraction --- compass/extraction/solar/graphs.py | 95 +++++++++++++++++++++++++++--- compass/extraction/solar/parse.py | 14 ++++- compass/extraction/wind/graphs.py | 91 ++++++++++++++++++++++++---- compass/extraction/wind/parse.py | 12 +++- 4 files changed, 191 insertions(+), 21 deletions(-) diff --git a/compass/extraction/solar/graphs.py b/compass/extraction/solar/graphs.py index 9341ec05..ca655519 100644 --- a/compass/extraction/solar/graphs.py +++ b/compass/extraction/solar/graphs.py @@ -46,22 +46,101 @@ def setup_graph_sef_types(**kwargs): "What are the different solar energy farm sizes **regulated by " "this ordinance**? List them in order of increasing size. " "Include any relevant numerical qualifiers in the name, if " - "appropriate. Only include solar energy farm types; do not " - "include generic types or other energy system types." + "appropriate. Only include systems that resemble ground-mounted " + "solar energy farms; do not include other solar energy system " + "types lice CSP or roof-mounted systems or other technologies " + "like wind energy systems, geothermal energy systems, etc." ), ) - G.add_edge("get_text", "final") + G.add_edge("get_text", "get_regulated") G.add_node( - "final", + "get_regulated", + prompt=( + "Are any of these systems **not** regulated by this ordinance?" + ), + ) + + G.add_edge("get_regulated", "get_largest") + G.add_node( + "get_largest", + prompt=( + "What is the **largest** solar energy farm size that **is " + "regulated by this ordinance**?" + ), + ) + + G.add_edge("get_largest", "check_matches_definition") + G.add_node( + "check_matches_definition", + prompt=( + "Does the ordinance explicitly define this system as large, " + "commercial, utility-scale, or something akin to that? " + "Please start your response with either 'Yes' or 'No' and briefly " + "explain your answer." + ), + ) + + G.add_edge( + "check_matches_definition", + "final_large", + condition=llm_response_starts_with_yes, + ) + G.add_edge( + "check_matches_definition", + "check_scale_reason", + condition=llm_response_starts_with_no, + ) + G.add_node( + "check_scale_reason", + prompt=( + "Would a reasonable person classify this kind of system as a " + "**large**, commercial, or even utility-scale** solar energy farm " + "(e.g. with the primary purpose of generating electricity for " + "sale, as opposed to small, residential, roof-mounted, private, " + "or other kinds of 'small' systems)? " + "Please start your response with either 'Yes' or 'No' and briefly " + "explain your answer." + ), + ) + + G.add_edge( + "check_scale_reason", + "final_large", + condition=llm_response_starts_with_yes, + ) + G.add_edge( + "check_scale_reason", + "final_small", + condition=llm_response_starts_with_no, + ) + G.add_node( + "final_large", + prompt=( + "Respond based on our entire conversation so far. Return your " + "answer as a dictionary in JSON format (not markdown). Your " + "JSON file must include exactly two keys. The keys are " + "'largest_sef_type' and 'explanation', and 'is_large'. The value " + "of the 'largest_sef_type' key should be a string that labels the " + "largest solar energy system size **regulated by this " + "ordinance**. The value of the 'explanation' key should be a " + "string containing a short explanation for your choice. The value " + "of the 'is_large' key should be the boolean value `true`, since " + "we determined this is a large-scale system." + ), + ) + G.add_node( + "final_small", prompt=( "Respond based on our entire conversation so far. Return your " "answer as a dictionary in JSON format (not markdown). Your " "JSON file must include exactly two keys. The keys are " - "'largest_sef_type' and 'explanation'. The value of the " - "'largest_sef_type' key should be a string that labels the " + "'largest_sef_type' and 'explanation', and 'is_large'. The value " + "of the 'largest_sef_type' key should be a string that labels the " "largest solar energy system size **regulated by this " "ordinance**. The value of the 'explanation' key should be a " - "string containing a short explanation for your choice." + "string containing a short explanation for your choice. The value " + "of the 'is_large' key should be the boolean value `false`, since " + "we determined this is not a large-scale system." ), ) return G @@ -91,7 +170,7 @@ def setup_multiplier(**kwargs): "Does the text mention a multiplier that should be applied to the " "structure height to compute the setback distance from {feature} " "for {tech}? " - "Focus only on {feature}; do not respond based on any text " + "Please consider only {feature}; do not respond based on any text " "related to {ignore_features}. " "Please also only consider setbacks specifically for " f"{SYSTEM_SIZE_REMINDER}" diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index f216119c..c9942ad4 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -146,12 +146,22 @@ async def _check_solar_farm_type(self, text): chat_llm_caller=self._init_chat_llm_caller(DEFAULT_SYSTEM_MESSAGE), ) decision_tree_sef_types_out = await run_async_tree(tree) - - return ( + largest_system = ( decision_tree_sef_types_out.get("largest_sef_type") or "utility-scale solar energy systems" ) + if not decision_tree_sef_types_out.get("is_large", True): + logger.info( + "Did not find utility-scale systems in text. Largest " + "system found: %r", + largest_system, + ) + return None + + logger.info("Largest SEF type found in text: %r", largest_system) + return largest_system + class StructuredSolarOrdinanceParser(StructuredSolarParser): """LLM ordinance document structured data scraping utility diff --git a/compass/extraction/wind/graphs.py b/compass/extraction/wind/graphs.py index 2dd4aaa3..234cd73b 100644 --- a/compass/extraction/wind/graphs.py +++ b/compass/extraction/wind/graphs.py @@ -57,18 +57,89 @@ def setup_graph_wes_types(**kwargs): "include generic types or other energy system types." ), ) - G.add_edge("get_text", "final") + G.add_edge("get_text", "get_largest") G.add_node( - "final", + "get_largest", + prompt=( + "Based on your list, what is the **largest** wind energy system " + "size **regulated by this ordinance**?" + ), + ) + + G.add_edge("get_largest", "check_matches_definition") + G.add_node( + "check_matches_definition", + prompt=( + "Does the ordinance explicitly define this system as large, " + "commercial, utility-scale, or something akin to that? " + "Please start your response with either 'Yes' or 'No' and briefly " + "explain your answer." + ), + ) + + G.add_edge( + "check_matches_definition", + "final_large", + condition=llm_response_starts_with_yes, + ) + + G.add_edge( + "check_matches_definition", + "check_scale_reason", + condition=llm_response_starts_with_no, + ) + + G.add_node( + "check_scale_reason", + prompt=( + "Would a reasonable person classify this kind of system as a " + "**large, commercial, or even utility-scale** wind energy system " + "(e.g. with the primary purpose of generating electricity for " + "sale, as opposed to small, micro, private, onsite, or other " + "kinds of 'small' systems)? " + "Please start your response with either 'Yes' or 'No' and briefly " + "explain your answer." + ), + ) + + G.add_edge( + "check_scale_reason", + "final_large", + condition=llm_response_starts_with_yes, + ) + G.add_edge( + "check_scale_reason", + "final_small", + condition=llm_response_starts_with_no, + ) + G.add_node( + "final_large", + prompt=( + "Respond based on our entire conversation so far. Return your " + "answer as a dictionary in JSON format (not markdown). Your JSON " + "file must include exactly three keys. The keys are " + "'largest_wes_type', 'explanation', and 'is_large'. The value of " + "the 'largest_wes_type' key should be a string that labels the " + "largest wind energy conversion system size **regulated by this " + "ordinance**. The value of the 'explanation' key should be a " + "string containing a short explanation for your choice. The value " + "of the 'is_large' key should be the boolean value `true`, since " + "we determined this is a large-scale system." + ), + ) + G.add_node( + "final_small", prompt=( "Respond based on our entire conversation so far. Return your " "answer as a dictionary in JSON format (not markdown). Your JSON " - "file must include exactly two keys. The keys are " - "'largest_wes_type' and 'explanation'. The value of the " - "'largest_wes_type' key should be a string that labels the " + "file must include exactly three keys. The keys are " + "'largest_wes_type', 'explanation', and 'is_large'. The value of " + "the 'largest_wes_type' key should be a string that labels the " "largest wind energy conversion system size **regulated by this " "ordinance**. The value of the 'explanation' key should be a " - "string containing a short explanation for your choice." + "string containing a short explanation for your choice. The value " + "of the 'is_large' key should be the boolean value `false`, since " + "we determined this is not a large-scale system." ), ) return G @@ -98,7 +169,7 @@ def setup_multiplier(**kwargs): "Does the text mention a multiplier that should be applied to a " "turbine dimension (e.g. height, rotor diameter, etc) to compute " "the setback distance from {feature} for {tech}? " - "Focus only on {feature}; do not respond based on any text " + "Please consider only {feature}; do not respond based on any text " "related to {ignore_features}. " "Please also only consider setbacks specifically for " f"{WES_SYSTEM_SIZE_REMINDER}" @@ -114,7 +185,7 @@ def setup_multiplier(**kwargs): prompt=( "Does the ordinance give the setback from {feature} as a fixed " "distance value? " - "Focus only on {feature}; do not respond based on any text " + "Please consider only {feature}; do not respond based on any text " "related to {ignore_features}. " "Please also only consider setbacks specifically for " f"{WES_SYSTEM_SIZE_REMINDER}" @@ -181,8 +252,8 @@ def setup_multiplier(**kwargs): G.add_node( "m_type", prompt=( - "What kind of multiplier is stated in the text to compute the " - "setback distance from {feature}? " + "What kind of multiplier is stated in the text to " # noqa: S608 + "compute the setback distance from {feature}? " "Remember to ignore any text related to {ignore_features}. " "Please consider only setbacks specifically for " f"{WES_SYSTEM_SIZE_REMINDER}" diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 52a1ed79..b093c597 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -144,10 +144,20 @@ async def _check_wind_turbine_type(self, text): ) decision_tree_wes_types_out = await run_async_tree(tree) - return ( + largest_system = ( decision_tree_wes_types_out.get("largest_wes_type") or "**large** wind energy systems" ) + if not decision_tree_wes_types_out.get("is_large", True): + logger.info( + "Did not find utility-scale systems in text. Largest " + "system found: %r", + largest_system, + ) + return None + + logger.info("Largest WES type found in text: %r", largest_system) + return largest_system class StructuredWindOrdinanceParser(StructuredWindParser): From c004ffe79de9fc159756a1cd9fc0b440797606a8 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:09:40 -0600 Subject: [PATCH 17/42] MInor prompt update --- compass/extraction/solar/ordinance.py | 6 ++++-- compass/extraction/wind/ordinance.py | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/compass/extraction/solar/ordinance.py b/compass/extraction/solar/ordinance.py index 391ed9cc..c5f1c770 100644 --- a/compass/extraction/solar/ordinance.py +++ b/compass/extraction/solar/ordinance.py @@ -427,7 +427,8 @@ class SolarPermittedUseDistrictsTextExtractor(BaseTextExtractor): "\n1. ## Scope of Extraction ##:\n" "- Retain all text defining permitted use(s) for a district, " "including:\n" - "\t- **Primary, Special, Accessory, and other permitted use types.**\n" + "\t- **Primary, Special, Conditional, Accessory, Prohibited, and " + "any other use types.**\n" "\t- **District names and zoning classifications.**\n" "- Pay extra attention to any references to **solar energy " "facilities** or related terms.\n" @@ -472,7 +473,8 @@ class SolarPermittedUseDistrictsTextExtractor(BaseTextExtractor): "\n1. ## Scope of Extraction ##:\n" "- Retain all text defining permitted use(s) for a district, " "including:\n" - "\t- **Primary, Special, Accessory, and other permitted use types.**\n" + "\t- **Primary, Special, Conditional, Accessory, Prohibited, and " + "any other use types.**\n" "\t- **District names and zoning classifications.**\n" "- Ensure that **tables, lists, and structured elements** are " "preserved as they may contain relevant details.\n" diff --git a/compass/extraction/wind/ordinance.py b/compass/extraction/wind/ordinance.py index 47fa70ca..b1330454 100644 --- a/compass/extraction/wind/ordinance.py +++ b/compass/extraction/wind/ordinance.py @@ -520,8 +520,8 @@ class WindPermittedUseDistrictsTextExtractor(BaseTextExtractor): "\n1. ## Scope of Extraction ##:\n" "- Retain all text defining permitted use(s) for a district, " "including:\n" - "\t- **Primary, Special, Conditional, Accessory, and other permitted " - "use types.**\n" + "\t- **Primary, Special, Conditional, Accessory, Prohibited, and " + "any other use types.**\n" "\t- **District names and zoning classifications.**\n" "- Pay extra attention to any references to **wind energy " "facilities** or related terms.\n" @@ -566,8 +566,8 @@ class WindPermittedUseDistrictsTextExtractor(BaseTextExtractor): "\n1. ## Scope of Extraction ##:\n" "- Retain all text defining permitted use(s) for a district, " "including:\n" - "\t- **Primary, Special, Conditional, Accessory, and other permitted " - "use types.**\n" + "\t- **Primary, Special, Conditional, Accessory, Prohibited, and " + "any other use types.**\n" "\t- **District names and zoning classifications.**\n" "- Ensure that **tables, lists, and structured elements** are " "preserved as they may contain relevant details.\n" From 18fca84b3f5701c13b6c7b3f23013d438a625d7a Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:11:48 -0600 Subject: [PATCH 18/42] UPdate district prompt --- compass/extraction/solar/ordinance.py | 9 ++++++--- compass/extraction/wind/ordinance.py | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/compass/extraction/solar/ordinance.py b/compass/extraction/solar/ordinance.py index c5f1c770..e94561a6 100644 --- a/compass/extraction/solar/ordinance.py +++ b/compass/extraction/solar/ordinance.py @@ -213,9 +213,12 @@ class SolarPermittedUseDistrictsTextCollector(StructuredLLMCaller): DISTRICT_PROMPT = ( "You are a legal scholar that reads ordinance text and determines " - "whether the text explicitly details the districts where large " - "solar energy farms are a permitted use. Large solar energy systems " - f"(SES) may also be referred to as {_LARGE_SEF_SYNONYMS}. " + "whether it explicitly contains relevant information to determine the " + "districts (and especially the district names) where large solar " + "energy farms are a permitted use (primary, special, accessory, or " + "otherwise), as well as the districts where large solar energy farms " + "are prohibited entirely. Large solar energy systems (SES) may also " + f"be referred to as {_LARGE_SEF_SYNONYMS}. " "Do not make any inferences; only answer based on information that " "is explicitly stated in the text. " "Note that relevant information may sometimes be found in tables. " diff --git a/compass/extraction/wind/ordinance.py b/compass/extraction/wind/ordinance.py index b1330454..5f4124e7 100644 --- a/compass/extraction/wind/ordinance.py +++ b/compass/extraction/wind/ordinance.py @@ -230,8 +230,11 @@ class WindPermittedUseDistrictsTextCollector(StructuredLLMCaller): DISTRICT_PROMPT = ( "You are a legal scholar that reads ordinance text and determines " - "whether the text explicitly details the districts where large " - "wind energy systems are a permitted use. Large wind energy systems " + "whether the text explicitly contains relevant information to " + "determine the districts (and especially the district names) where " + "large wind energy systems are a permitted use (primary, special, " + "accessory, or otherwise), as well as the districts where large wind " + "energy systems are prohibited entirely. Large wind energy systems " f"(WES) may also be referred to as {_LARGE_WES_SYNONYMS}. " "Do not make any inferences; only answer based on information that " "is explicitly stated in the text. " From 2def2515cbece7f32b015b48087f4beb4d079d22 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:16:27 -0600 Subject: [PATCH 19/42] Update how clarification works for districts --- compass/extraction/solar/parse.py | 38 ++++++++++++++++++++++++------- compass/extraction/wind/parse.py | 38 ++++++++++++++++++++++++------- 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index c9942ad4..479071f7 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -462,19 +462,39 @@ class StructuredSolarPermittedUseDistrictsParser(StructuredSolarParser): _USE_TYPES = [ { "feature_id": "primary use districts", - "use_type": "primary use or similar (e.g., without special " - "conditions or approval)", + "use_type": ( + "permitted as primary use or similar (e.g., without special " + "conditions or approval)" + ), + "clarifications": ( + "Consider any solar overlay districts as " + "primary use districts. {sef_clarification}" + ), }, { "feature_id": "special use districts", - "use_type": "special use or similar (e.g., requires approval " - "by the zoning appeals board or meeting certain conditions like " - "completing a permitting process)", + "use_type": ( + "permitted as special use or similar (e.g., requires approval " + "by the zoning appeals board or meeting certain conditions " + "like completing a permitting process)" + ), + "clarifications": ( + "Consider any solar overlay districts as " + "primary use and **do not include** them in the output. " + "{sef_clarification}" + ), }, { "feature_id": "accessory use districts", - "use_type": "accessory use or similar (e.g., when integrated " - "with an existing structure or secondary to another use)", + "use_type": ( + "permitted as accessory use or similar (e.g., when integrated " + "with an existing structure or secondary to another use)" + ), + "clarifications": ( + "Consider any solar overlay districts as " + "primary use and **do not include** them in the output. " + "{sef_clarification}" + ), }, ] @@ -534,7 +554,9 @@ async def _parse_permitted_use_districts( setup_graph_permitted_use_districts, usage_sub_label=LLMUsageCategory.PERMITTED_USE_VALUE_EXTRACTION, tech=largest_sef_type, - clarifications=self._LARGE_SEF_CLARIFICATION, + clarifications=clarifications.format( + sef_clarification=self._LARGE_SEF_CLARIFICATION + ), text=text, use_type=use_type, chat_llm_caller=self._init_chat_llm_caller(system_message), diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index b093c597..2f887917 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -473,19 +473,39 @@ class StructuredWindPermittedUseDistrictsParser(StructuredWindParser): _USE_TYPES = [ { "feature_id": "primary use districts", - "use_type": "primary use or similar (e.g., without special " - "conditions or approval)", + "use_type": ( + "permitted as primary use or similar (e.g., without special " + "conditions or approval)" + ), + "clarifications": ( + "Consider any solar overlay districts as " + "primary use districts. {wes_clarification}" + ), }, { "feature_id": "special use districts", - "use_type": "special use or similar (e.g., requires approval " - "by the zoning appeals board or meeting certain conditions like " - "completing a permitting process)", + "use_type": ( + "permitted as special use or similar (e.g., requires approval " + "by the zoning appeals board or meeting certain conditions " + "like completing a permitting process)" + ), + "clarifications": ( + "Consider any solar overlay districts as " + "primary use and **do not include** them in the output. " + "{wes_clarification}" + ), }, { "feature_id": "accessory use districts", - "use_type": "accessory use or similar (e.g., when integrated " - "with an existing structure or secondary to another use)", + "use_type": ( + "permitted as accessory use or similar (e.g., when integrated " + "with an existing structure or secondary to another use)" + ), + "clarifications": ( + "Consider any solar overlay districts as " + "primary use and **do not include** them in the output. " + "{wes_clarification}" + ), }, ] @@ -545,7 +565,9 @@ async def _parse_permitted_use_districts( setup_graph_permitted_use_districts, usage_sub_label=LLMUsageCategory.PERMITTED_USE_VALUE_EXTRACTION, tech=largest_wes_type, - clarifications=self._LARGE_WES_CLARIFICATION, + clarifications=clarifications.format( + wes_clarification=self._LARGE_WES_CLARIFICATION + ), text=text, use_type=use_type, chat_llm_caller=self._init_chat_llm_caller(system_message), From 9f68084f3b42313d9b1afaa246d2cc77f2566f0a Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:16:43 -0600 Subject: [PATCH 20/42] Add `prohibited use districts` --- compass/extraction/solar/parse.py | 12 ++++++++++++ compass/extraction/wind/parse.py | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index 479071f7..fb3e9d6d 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -496,6 +496,18 @@ class StructuredSolarPermittedUseDistrictsParser(StructuredSolarParser): "{sef_clarification}" ), }, + { + "feature_id": "prohibited use districts", + "use_type": ( + "prohibited or similar (e.g., where solar energy " + "systems are not allowed or banned)" + ), + "clarifications": ( + "Only output specific districts where solar energy systems " + "are prohibited **unconditionally**. " + "{sef_clarification}" + ), + }, ] async def parse(self, text): diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 2f887917..98b72993 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -507,6 +507,18 @@ class StructuredWindPermittedUseDistrictsParser(StructuredWindParser): "{wes_clarification}" ), }, + { + "feature_id": "prohibited use districts", + "use_type": ( + "prohibited or similar (e.g., where wind energy " + "systems are not allowed or banned)" + ), + "clarifications": ( + "Only output specific districts where wind energy systems " + "are prohibited **unconditionally**. " + "{wes_clarification}" + ), + }, ] async def parse(self, text): From d388ce227168575253528265e408c51fc02c514d Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:17:20 -0600 Subject: [PATCH 21/42] Pass down feature id --- compass/extraction/solar/parse.py | 10 +++++++++- compass/extraction/wind/parse.py | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index fb3e9d6d..1fc9a830 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -555,7 +555,14 @@ async def parse(self, text): return pd.DataFrame(chain.from_iterable(outputs)) async def _parse_permitted_use_districts( - self, sub_pb, task_id, text, largest_sef_type, feature_id, use_type + self, + sub_pb, + task_id, + text, + largest_sef_type, + feature_id, + use_type, + clarifications, ): """Parse a non-setback restriction from the text""" logger.debug("Parsing use type: %r", feature_id) @@ -565,6 +572,7 @@ async def _parse_permitted_use_districts( tree = setup_async_decision_tree( setup_graph_permitted_use_districts, usage_sub_label=LLMUsageCategory.PERMITTED_USE_VALUE_EXTRACTION, + feature_id=feature_id, tech=largest_sef_type, clarifications=clarifications.format( sef_clarification=self._LARGE_SEF_CLARIFICATION diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 98b72993..1a6fb110 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -564,9 +564,17 @@ async def parse(self, text): sub_pb.remove_task(task_id) return pd.DataFrame(chain.from_iterable(outputs)) + feature_id=feature_id, async def _parse_permitted_use_districts( - self, sub_pb, task_id, text, largest_wes_type, feature_id, use_type + self, + sub_pb, + task_id, + text, + largest_wes_type, + feature_id, + use_type, + clarifications, ): """Parse a non-setback restriction from the text""" logger.debug("Parsing use type: %r", feature_id) @@ -576,6 +584,7 @@ async def _parse_permitted_use_districts( tree = setup_async_decision_tree( setup_graph_permitted_use_districts, usage_sub_label=LLMUsageCategory.PERMITTED_USE_VALUE_EXTRACTION, + feature_id=feature_id, tech=largest_wes_type, clarifications=clarifications.format( wes_clarification=self._LARGE_WES_CLARIFICATION From 0f8813f6ce5cd67095cf750bc1586b678a167c27 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:17:38 -0600 Subject: [PATCH 22/42] Fix typo --- compass/extraction/wind/parse.py | 1 - 1 file changed, 1 deletion(-) diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 1a6fb110..4ed72ef6 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -564,7 +564,6 @@ async def parse(self, text): sub_pb.remove_task(task_id) return pd.DataFrame(chain.from_iterable(outputs)) - feature_id=feature_id, async def _parse_permitted_use_districts( self, From 7780a97ac16f750acbe79e434e7149c2edbeb22b Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:18:55 -0600 Subject: [PATCH 23/42] Parse can return None --- compass/extraction/solar/parse.py | 16 +++++++++++----- compass/extraction/wind/parse.py | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index 1fc9a830..fc82640e 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -192,11 +192,14 @@ async def parse(self, text): Returns ------- - pd.DataFrame - DataFrame containing parsed-out ordinance values. + pd.DataFrame | None + DataFrame containing parsed-out ordinance values. Can also + be ``None`` if a large solar energy system is not found in + the text. """ largest_sef_type = await self._check_solar_farm_type(text) - logger.info("Largest SEF type found in text: %r", largest_sef_type) + if not largest_sef_type: + return None outer_task_name = asyncio.current_task().get_name() num_to_process = ( @@ -521,11 +524,14 @@ async def parse(self, text): Returns ------- - pd.DataFrame + pd.DataFrame | None DataFrame containing parsed-out allowed-use district names. + Can also be ``None`` if a large solar energy system is not + found in the text. """ largest_sef_type = await self._check_solar_farm_type(text) - logger.info("Largest SEF type found in text: %r", largest_sef_type) + if not largest_sef_type: + return None loc = asyncio.current_task().get_name() with COMPASS_PB.jurisdiction_sub_prog_bar(loc) as sub_pb: diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 4ed72ef6..92351b7d 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -189,11 +189,14 @@ async def parse(self, text): Returns ------- - pd.DataFrame - DataFrame containing parsed-out ordinance values. + pd.DataFrame | None + DataFrame containing parsed-out ordinance values. Can also + be ``None`` if a large wind energy system is not found in + the text. """ largest_wes_type = await self._check_wind_turbine_type(text) - logger.info("Largest WES type found in text: %r", largest_wes_type) + if not largest_wes_type: + return None outer_task_name = asyncio.current_task().get_name() num_to_process = ( @@ -532,11 +535,14 @@ async def parse(self, text): Returns ------- - pd.DataFrame + pd.DataFrame | None DataFrame containing parsed-out allowed-use district names. + Can also be ``None`` if a large wind energy system is not + found in the text. """ largest_wes_type = await self._check_wind_turbine_type(text) - logger.info("Largest WES type found in text: %r", largest_wes_type) + if not largest_wes_type: + return None outer_task_name = asyncio.current_task().get_name() with COMPASS_PB.jurisdiction_sub_prog_bar(outer_task_name) as sub_pb: From b592ca04c4bbb4bd448996f0da0152c7f4637a0b Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:19:21 -0600 Subject: [PATCH 24/42] Update system size --- compass/extraction/solar/parse.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index fc82640e..d5de83c8 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -12,6 +12,7 @@ from compass.extraction.features import SetbackFeatures from compass.common import ( EXTRACT_ORIGINAL_TEXT_PROMPT, + SYSTEM_SIZE_REMINDER, run_async_tree, run_async_tree_with_bm, empty_output, @@ -40,27 +41,18 @@ "For the duration of this conversation, only focus on ordinances" "relating to setbacks from {feature}; do not respond based on any text " "related to {ignore_features}. " - "Please only consider ordinances for systems that would typically be " - "defined as {tech} based on the text itself — for example, systems " - "intended for electricity generation or sale, or those above thresholds " - "such as height or rated capacity. Disregard any requirements that apply " - "**only** to smaller or clearly non-commercial systems. " + f"Please only consider ordinances for {SYSTEM_SIZE_REMINDER}" ) RESTRICTIONS_SYSTEM_MESSAGE = ( f"{DEFAULT_SYSTEM_MESSAGE} " "For the duration of this conversation, only focus on " - "ordinances relating to {restriction} for systems that would " - "typically be defined as {tech} based on the text itself — for " - "example, systems intended for electricity generation or sale, " - "or those above thresholds such as height or rated capacity. Ignore " - "any requirements that apply only to smaller or clearly " - "non-commercial systems. " + "ordinances relating to {restriction} for " + f"{SYSTEM_SIZE_REMINDER}" ) PERMITTED_USE_SYSTEM_MESSAGE = ( f"{DEFAULT_SYSTEM_MESSAGE} " "For the duration of this conversation, only focus on permitted uses for " - "{tech} (or similar). Ignore all text that only pertains to private, " - "micro, small, or medium sized wind energy systems." + f"{SYSTEM_SIZE_REMINDER}" ) EXTRA_NUMERICAL_RESTRICTIONS = { "other secs": ( From 929fc6e7c4e96a516e5bca2054c49ecb09b93e27 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:19:40 -0600 Subject: [PATCH 25/42] Clarify lot size units --- compass/extraction/solar/parse.py | 6 ++++++ compass/extraction/wind/parse.py | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index d5de83c8..eaa690d6 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -90,6 +90,12 @@ "Maximum land coverage should be specified as a fraction or " "percentage of the total land." ), + "minimum lot size": ( + "Minimum lot size should **always** be specified as an area value." + ), + "maximum lot size": ( + "Maximum lot size should **always** be specified as an area value." + ), } ER_CLARIFICATIONS = { "maximum project size": ( diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 92351b7d..0eb5cf9a 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -100,6 +100,12 @@ "'tip-height-multiplier', 'hub-height-multiplier', " "'rotor-diameter-multiplier', 'feet', or 'meters'." ), + "minimum lot size": ( + "Minimum lot size should **always** be specified as an area value." + ), + "maximum lot size": ( + "Maximum lot size should **always** be specified as an area value." + ), } ER_CLARIFICATIONS = { "maximum project size": ( From 48c8c6b14248283efd4b6ca214ede0d0f80c3db3 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:19:59 -0600 Subject: [PATCH 26/42] Add parse feature --- compass/extraction/solar/parse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index eaa690d6..02a9aa32 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -79,6 +79,7 @@ ), "fencing": "fencing requirements", "signage": "signage requirements", + "screening": "vegetative buffer and/or other screening requirements", "soil": "soil, erosion, and/or sediment control requirements", } UNIT_CLARIFICATIONS = { From aba3e81eaf439f2034250bc292b278c66aff1345 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:20:25 -0600 Subject: [PATCH 27/42] Break out density feature --- compass/extraction/solar/parse.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index 02a9aa32..f307f105 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -66,7 +66,10 @@ ), "minimum lot size": "**minimum** lot, parcel, or tract size allowed", "maximum lot size": "**maximum** lot, parcel, or tract size allowed", - "density": "**minimum** allowed spacing between individual solar panels", + "panel spacing": ( + "**minimum** allowed spacing between individual solar panels" + ), + "land density": "**maximum** allowed system size **per unit area**", "coverage": "**maximum** land coverage allowed", } EXTRA_QUALITATIVE_RESTRICTIONS = { @@ -87,6 +90,17 @@ "For the purposes of this extraction, assume the standard units " "for noise are 'dBA'." ), + "panel spacing": ( + "For the purposes of this extraction, assume the standard units for" + "spacing between individual solar panels are one of the following: " + "'height-multiplier', 'feet', or 'meters'." + ), + "land density": ( + "This value should be specified as a maximum system " + "size value (in MW) per area (square meters, acres, etc.). " + "Do not confuse this with lot coverage or min/max lot size " + "requirements." + ), "coverage": ( "Maximum land coverage should be specified as a fraction or " "percentage of the total land." @@ -105,8 +119,8 @@ "some geographical area. Do not confuse this with lot coverage or " "min/max lot size." ), - "density": ( - "Do **not** try to infer the spacing requirement based on other " + "land density": ( + "Do **not** try to infer the density requirement based on other " "restrictions such as setbacks from facility perimeters, property " "lines, etc." ), @@ -114,6 +128,11 @@ "Do **not** consider glare restrictions as part of visual impact - " "these are collected separately." ), + "panel spacing": ( + "Do **not** try to infer the spacing requirement based on other " + "restrictions such as setbacks from facility perimeters, property " + "lines, etc." + ), "coverage": ( "Do not confuse this with density or min/max lot size requirements." ), From 116869fff2a722e1f2fac1b190fc8e41ce82ad94 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:20:41 -0600 Subject: [PATCH 28/42] Update clarification --- compass/extraction/solar/parse.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index f307f105..54f793c0 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -115,9 +115,10 @@ ER_CLARIFICATIONS = { "maximum project size": ( "Maximum project size should be specified as a maximum system " - "size value (in MW) or as a maximum number of solar panels within " - "some geographical area. Do not confuse this with lot coverage or " - "min/max lot size." + "size value (in MW) or as a limit on installation size (e.g. maximum " + "number of systems or maximum number of solar panels). " + "Do not confuse this with lot coverage or min/max lot size " + "requirements." ), "land density": ( "Do **not** try to infer the density requirement based on other " From 44f425bdb0487c1ab6144ea7462f4eb4516bf7f7 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:21:06 -0600 Subject: [PATCH 29/42] `feature` -> `feature_id` --- compass/extraction/solar/parse.py | 45 +++++++++++++++++-------------- compass/extraction/wind/parse.py | 45 +++++++++++++++++-------------- 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/compass/extraction/solar/parse.py b/compass/extraction/solar/parse.py index 54f793c0..d65364b6 100644 --- a/compass/extraction/solar/parse.py +++ b/compass/extraction/solar/parse.py @@ -260,16 +260,18 @@ async def _parse_all_restrictions_with_pb( sub_pb, task_id, text, - feature, + feature_id, r_text, largest_sef_type, is_numerical=True, - unit_clarification=UNIT_CLARIFICATIONS.get(feature, ""), - feature_clarifications=ER_CLARIFICATIONS.get(feature, ""), + unit_clarification=UNIT_CLARIFICATIONS.get(feature_id, ""), + feature_clarifications=ER_CLARIFICATIONS.get( + feature_id, "" + ), ), name=outer_task_name, ) - for feature, r_text in EXTRA_NUMERICAL_RESTRICTIONS.items() + for feature_id, r_text in EXTRA_NUMERICAL_RESTRICTIONS.items() ] extras_parsers += [ asyncio.create_task( @@ -277,15 +279,17 @@ async def _parse_all_restrictions_with_pb( sub_pb, task_id, text, - feature, + feature_id, r_text, largest_sef_type, is_numerical=False, - feature_clarifications=ER_CLARIFICATIONS.get(feature, ""), + feature_clarifications=ER_CLARIFICATIONS.get( + feature_id, "" + ), ), name=outer_task_name, ) - for feature, r_text in EXTRA_QUALITATIVE_RESTRICTIONS.items() + for feature_id, r_text in EXTRA_QUALITATIVE_RESTRICTIONS.items() ] return await asyncio.gather(*(feature_parsers + extras_parsers)) @@ -294,7 +298,7 @@ async def _parse_extra_restriction( sub_pb, task_id, text, - feature, + feature_id, restriction_text, largest_sef_type, is_numerical, @@ -302,7 +306,7 @@ async def _parse_extra_restriction( feature_clarifications="", ): """Parse a non-setback restriction from the text""" - logger.debug("Parsing extra feature %r", feature) + logger.debug("Parsing extra feature %r", feature_id) system_message = RESTRICTIONS_SYSTEM_MESSAGE.format( restriction=restriction_text, tech=largest_sef_type ) @@ -311,6 +315,7 @@ async def _parse_extra_restriction( usage_sub_label=LLMUsageCategory.ORDINANCE_VALUE_EXTRACTION, is_numerical=is_numerical, tech=largest_sef_type, + feature_id=feature_id, restriction=restriction_text, text=text, chat_llm_caller=self._init_chat_llm_caller(system_message), @@ -318,28 +323,28 @@ async def _parse_extra_restriction( feature_clarifications=feature_clarifications, ) info = await run_async_tree(tree) - info.update({"feature": feature, "quantitative": is_numerical}) + info.update({"feature": feature_id, "quantitative": is_numerical}) if is_numerical: info = _sanitize_output(info) - sub_pb.update(task_id, advance=1, just_parsed=feature) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) return [info] async def _parse_setback_feature( self, sub_pb, task_id, text, feature_kwargs, largest_sef_type ): """Parse values for a setback feature""" - feature = feature_kwargs["feature_id"] + feature_id = feature_kwargs["feature_id"] feature_kwargs["tech"] = largest_sef_type - logger.debug("Parsing feature %r", feature) + logger.debug("Parsing feature %r", feature_id) out, base_messages = await self._base_messages(text, **feature_kwargs) if not out: - logger.debug("Did not find ordinance for feature %r", feature) - sub_pb.update(task_id, advance=1, just_parsed=feature) - return empty_output(feature) + logger.debug("Did not find ordinance for feature %r", feature_id) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) + return empty_output(feature_id) - if feature not in {"structures", "property line"}: - output = {"feature": feature} + if feature_id not in {"structures", "property line"}: + output = {"feature": feature_id} output.update( await self._extract_setback_values( text=text, @@ -347,13 +352,13 @@ async def _parse_setback_feature( **feature_kwargs, ) ) - sub_pb.update(task_id, advance=1, just_parsed=feature) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) return [output] output = await self._extract_setback_values_for_p_or_np( text, base_messages, **feature_kwargs ) - sub_pb.update(task_id, advance=1, just_parsed=feature) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) return output async def _base_messages(self, text, **feature_kwargs): diff --git a/compass/extraction/wind/parse.py b/compass/extraction/wind/parse.py index 0eb5cf9a..c6347227 100644 --- a/compass/extraction/wind/parse.py +++ b/compass/extraction/wind/parse.py @@ -244,16 +244,18 @@ async def _parse_all_restrictions_with_pb( sub_pb, task_id, text, - feature, + feature_id, r_text, largest_wes_type, is_numerical=True, - unit_clarification=UNIT_CLARIFICATIONS.get(feature, ""), - feature_clarifications=ER_CLARIFICATIONS.get(feature, ""), + unit_clarification=UNIT_CLARIFICATIONS.get(feature_id, ""), + feature_clarifications=ER_CLARIFICATIONS.get( + feature_id, "" + ), ), name=outer_task_name, ) - for feature, r_text in EXTRA_NUMERICAL_RESTRICTIONS.items() + for feature_id, r_text in EXTRA_NUMERICAL_RESTRICTIONS.items() ] extras_parsers += [ asyncio.create_task( @@ -261,15 +263,17 @@ async def _parse_all_restrictions_with_pb( sub_pb, task_id, text, - feature, + feature_id, r_text, largest_wes_type, is_numerical=False, - feature_clarifications=ER_CLARIFICATIONS.get(feature, ""), + feature_clarifications=ER_CLARIFICATIONS.get( + feature_id, "" + ), ), name=outer_task_name, ) - for feature, r_text in EXTRA_QUALITATIVE_RESTRICTIONS.items() + for feature_id, r_text in EXTRA_QUALITATIVE_RESTRICTIONS.items() ] return await asyncio.gather(*(feature_parsers + extras_parsers)) @@ -278,7 +282,7 @@ async def _parse_extra_restriction( sub_pb, task_id, text, - feature, + feature_id, restriction_text, largest_wes_type, is_numerical, @@ -286,7 +290,7 @@ async def _parse_extra_restriction( feature_clarifications="", ): """Parse a non-setback restriction from the text""" - logger.debug("Parsing extra feature %r", feature) + logger.debug("Parsing extra feature %r", feature_id) system_message = RESTRICTIONS_SYSTEM_MESSAGE.format( restriction=restriction_text, tech=largest_wes_type ) @@ -295,6 +299,7 @@ async def _parse_extra_restriction( usage_sub_label=LLMUsageCategory.ORDINANCE_VALUE_EXTRACTION, is_numerical=is_numerical, tech=largest_wes_type, + feature_id=feature_id, restriction=restriction_text, text=text, chat_llm_caller=self._init_chat_llm_caller(system_message), @@ -302,28 +307,28 @@ async def _parse_extra_restriction( feature_clarifications=feature_clarifications, ) info = await run_async_tree(tree) - info.update({"feature": feature, "quantitative": is_numerical}) + info.update({"feature": feature_id, "quantitative": is_numerical}) if is_numerical: info = _sanitize_output(info) - sub_pb.update(task_id, advance=1, just_parsed=feature) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) return [info] async def _parse_setback_feature( self, sub_pb, task_id, text, feature_kwargs, largest_wes_type ): """Parse values for a setback feature""" - feature = feature_kwargs["feature_id"] + feature_id = feature_kwargs["feature_id"] feature_kwargs["tech"] = largest_wes_type - logger.debug("Parsing feature %r", feature) + logger.debug("Parsing feature %r", feature_id) out, base_messages = await self._base_messages(text, **feature_kwargs) if not out: - logger.debug("Did not find ordinance for feature %r", feature) - sub_pb.update(task_id, advance=1, just_parsed=feature) - return empty_output(feature) + logger.debug("Did not find ordinance for feature %r", feature_id) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) + return empty_output(feature_id) - if feature not in {"structures", "property line"}: - output = {"feature": feature} + if feature_id not in {"structures", "property line"}: + output = {"feature": feature_id} output.update( await self._extract_setback_values( text, @@ -331,13 +336,13 @@ async def _parse_setback_feature( **feature_kwargs, ) ) - sub_pb.update(task_id, advance=1, just_parsed=feature) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) return [output] output = await self._extract_setback_values_for_p_or_np( text, base_messages, **feature_kwargs ) - sub_pb.update(task_id, advance=1, just_parsed=feature) + sub_pb.update(task_id, advance=1, just_parsed=feature_id) return output async def _base_messages(self, text, **feature_kwargs): From 8a00d3fa18482baafb5cdad714c98d5c57e608f1 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:21:48 -0600 Subject: [PATCH 30/42] Add date instructions --- compass/extraction/solar/ordinance.py | 2 ++ compass/extraction/wind/ordinance.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/compass/extraction/solar/ordinance.py b/compass/extraction/solar/ordinance.py index e94561a6..18965444 100644 --- a/compass/extraction/solar/ordinance.py +++ b/compass/extraction/solar/ordinance.py @@ -337,6 +337,8 @@ class SolarOrdinanceTextExtractor(BaseTextExtractor): f"\t{_LARGE_SEF_SYNONYMS.capitalize()}.\n" "- Explicitly include any text related to **bans or prohibitions** " "on solar energy systems.\n" + "- Explicitly include any text related to the adoption or enactment " + "date of the ordinance (if any).\n" "\n2. ## Exclusions ##:\n" "- Do **not** include text that does not pertain to solar energy " "systems.\n" diff --git a/compass/extraction/wind/ordinance.py b/compass/extraction/wind/ordinance.py index 5f4124e7..3bfb12ac 100644 --- a/compass/extraction/wind/ordinance.py +++ b/compass/extraction/wind/ordinance.py @@ -353,6 +353,8 @@ class WindOrdinanceTextExtractor(BaseTextExtractor): "- Include all text that pertains to **wind energy systems**.\n" "- Explicitly include any text related to **bans or prohibitions** " "on wind energy systems.\n" + "- Explicitly include any text related to the adoption or enactment " + "date of the ordinance (if any).\n" "\n2. ## Exclusions ##:\n" "- Do **not** include text that does not pertain to wind energy " "systems.\n" @@ -393,6 +395,8 @@ class WindOrdinanceTextExtractor(BaseTextExtractor): f"\t{_LARGE_WES_SYNONYMS.capitalize()}.\n" "- Explicitly include any text related to **bans or prohibitions** " "on large wind energy systems.\n" + "- Explicitly include any text related to the adoption or enactment " + "date of the ordinance (if any).\n" "- **Retain all relevant technical, design, operational, safety, " "environmental, and infrastructure-related provisions** that apply " "to the topic, such as (but not limited to):\n" From 75fc052bcf6fd3ec32c6e76640980a5a05837f43 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:23:00 -0600 Subject: [PATCH 31/42] Clarify logger statements --- compass/extraction/solar/ordinance.py | 6 ++++-- compass/extraction/wind/ordinance.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compass/extraction/solar/ordinance.py b/compass/extraction/solar/ordinance.py index 18965444..6a9f6de8 100644 --- a/compass/extraction/solar/ordinance.py +++ b/compass/extraction/solar/ordinance.py @@ -176,7 +176,8 @@ def contains_ord_info(self): def ordinance_text(self): """str: Combined ordinance text from the individual chunks""" logger.debug( - "Grabbing %d chunk(s) from original text at these indices: %s", + "Grabbing %d ordinance chunk(s) from original text at these " + "indices: %s", len(self._ordinance_chunks), list(self._ordinance_chunks), ) @@ -291,7 +292,8 @@ def contains_district_info(self): def permitted_use_district_text(self): """str: Combined permitted use districts text from the chunks""" logger.debug( - "Grabbing %d chunk(s) from original text at these indices: %s", + "Grabbing %d permitted use chunk(s) from original text at these " + "indices: %s", len(self._district_chunks), list(self._district_chunks), ) diff --git a/compass/extraction/wind/ordinance.py b/compass/extraction/wind/ordinance.py index 3bfb12ac..90cc0123 100644 --- a/compass/extraction/wind/ordinance.py +++ b/compass/extraction/wind/ordinance.py @@ -193,7 +193,8 @@ def contains_ord_info(self): def ordinance_text(self): """str: Combined ordinance text from the individual chunks""" logger.debug( - "Grabbing %d chunk(s) from original text at these indices: %s", + "Grabbing %d ordinance chunk(s) from original text at these " + "indices: %s", len(self._ordinance_chunks), list(self._ordinance_chunks), ) @@ -309,7 +310,8 @@ def contains_district_info(self): def permitted_use_district_text(self): """str: Combined permitted use districts text from the chunks""" logger.debug( - "Grabbing %d chunk(s) from original text at these indices: %s", + "Grabbing %d permitted use chunk(s) from original text at " + "these indices: %s", len(self._district_chunks), list(self._district_chunks), ) From c73988a9504e1e9be6e6ed8ca9dbca70cab81981 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:24:03 -0600 Subject: [PATCH 32/42] Soften prompt --- compass/common/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compass/common/base.py b/compass/common/base.py index d5cd3a31..535f271c 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -41,8 +41,8 @@ "Extract all portions of the text (with original formatting) " "that state how close I can site {tech} to {feature}. " "{feature_clarifications}" - "Focus on ordinances relating to setbacks from {feature}; do not " - "respond based on any text related to {ignore_features}. " + "Please consider only ordinances relating to setbacks from {feature}; " + "do not respond based on any text related to {ignore_features}. " "The extracted text will be used for structured data extraction, so it " "must be both **comprehensive** (retaining all relevant details) and " "**focused** (excluding unrelated content). Ensure that all retained " From c9fc542446fa71425af95c846f3299ef493f7488 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:24:22 -0600 Subject: [PATCH 33/42] Update for prohibited use type --- compass/common/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compass/common/base.py b/compass/common/base.py index 535f271c..99f40938 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -707,7 +707,7 @@ def setup_graph_permitted_use_districts(**kwargs): "and 'section'. The value of the 'value' key " "should be a list of all district names (and abbreviations if " "given) where {tech} (or similar) " - "are permitted as {use_type}, or `null` if the text does not " + "are {use_type}, or `null` if the text does not " "mention this use type for {tech} (or similar). Use our " "conversation to fill out this value. {SUMMARY_PROMPT} " "{SECTION_PROMPT}" From 5b2b38b94aa9b97dee0f0d55889e5cd965474129 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:25:01 -0600 Subject: [PATCH 34/42] update prompts for permitted use district extractions --- compass/common/base.py | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/compass/common/base.py b/compass/common/base.py index 99f40938..80ba0841 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -669,6 +669,7 @@ def setup_graph_permitted_use_districts(**kwargs): Graph instance that can be used to initialize an `elm.tree.DecisionTree`. """ + feature_id = kwargs.get("feature_id", "") G = setup_graph_no_nodes( # noqa: N806 d_tree_name="Permitted use districts", **kwargs ) @@ -677,7 +678,7 @@ def setup_graph_permitted_use_districts(**kwargs): "init", prompt=( "Does the following legal text explicitly define districts where " - "{tech} (or similar) are permitted as {use_type}? {clarifications}" + "{tech} (or similar) are {use_type}? {clarifications}" "Pay extra attention to titles and clarifying text found in " "parentheses and footnotes. Please start your response with " "either 'Yes' or 'No' and briefly explain your answer." @@ -692,10 +693,43 @@ def setup_graph_permitted_use_districts(**kwargs): "district_names", prompt=( "What are all of the district names (and abbreviations if given) " - "where {tech} (or similar) are permitted as {use_type}?" + "where {tech} (or similar) are {use_type}?" ), ) - G.add_edge("district_names", "final") + + if "primary" in feature_id: + G.add_edge("district_names", "check_primary") + G.add_node( + "check_primary", + prompt=( + "Are these districts representative of locations where " + "developers can site {tech} (or similar) as the primary " + "use of the land/parcel/lot? Remember that this is true " + "by assumption for all overlay districts. " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "check_primary", "final", condition=llm_response_starts_with_yes + ) + elif "accessory" in feature_id: + G.add_edge("district_names", "check_accessory") + G.add_node( + "check_accessory", + prompt=( + "Are these districts representative of locations where " + "developers can site {tech} (or similar) as an accessory " + "structure and/or as a secondary use of the land/parcel/lot? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "check_accessory", "final", condition=llm_response_starts_with_yes + ) + else: + G.add_edge("district_names", "final") G.add_node( "final", From df7938de304c98e5c3f3c263d1a2c6af8183ce5a Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:26:22 -0600 Subject: [PATCH 35/42] Minor prompt update to match definition --- compass/common/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compass/common/base.py b/compass/common/base.py index 80ba0841..cab638c8 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -458,7 +458,9 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "is_mps_area", prompt=( "Does the project size requirement specifically provide " - "a system size in MW or number of solar panels? " + "a system size in MW or an installation size (e.g. " + "maximum number of systems or maximum number of solar " + "panels)? " "Please start your response with either 'Yes' or 'No' and " "briefly explain your answer." ), From 4c83c2a5a44e07de009f0e327c3e93c239d064ed Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:34:01 -0600 Subject: [PATCH 36/42] Minor prompt update --- compass/common/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compass/common/base.py b/compass/common/base.py index cab638c8..40626f58 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -387,8 +387,8 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "init", prompt=( "Does the following legal text explicitly enact {restriction} for " - "{tech} for a particular jurisdiction that an energy system " - "developer would have to abide to? {feature_clarifications}\n" + "{tech} that an energy system developer would have to abide to? " + "{feature_clarifications}\n" "Make sure your answer adheres to these guidelines:\n" "1) Respond based only on the explicit text provided for " "{restriction}. Do not infer or assume relevance based on general " From 7d56c21292638f042cdd35912de084ad304b0e4f Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:38:00 -0600 Subject: [PATCH 37/42] Update extra value extraction graphs --- compass/common/base.py | 503 ++++++++++++++++++++++++----------------- 1 file changed, 299 insertions(+), 204 deletions(-) diff --git a/compass/common/base.py b/compass/common/base.py index 40626f58..45fe9103 100644 --- a/compass/common/base.py +++ b/compass/common/base.py @@ -379,6 +379,7 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): """ kwargs.setdefault("unit_clarification", "") kwargs.setdefault("feature_clarifications", "") + feature_id = kwargs.get("feature_id", "") G = setup_graph_no_nodes( # noqa: N806 d_tree_name="Extra restriction", **kwargs ) @@ -410,148 +411,22 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): ) if is_numerical: - if "other" in kwargs.get("restriction", ""): - G.add_edge( - "init", - "is_intra_farm", - condition=llm_response_starts_with_yes, - ) - G.add_node( - "is_intra_farm", - prompt=( - "Does the separation requirement apply to full farms " - "and/or utility-size installations? If so, please start " - "your answer with 'Yes'. If the separation requirement " - "only applies to individual farm components (i.e. " - "individual energy generation system units), please start " - "your response with 'No'. In either case, briefly explain " - "your answer." - ), - ) - G.add_edge( - "is_intra_farm", - "value", - condition=llm_response_starts_with_yes, - ) - elif "coverage" in kwargs.get("restriction", ""): - G.add_edge( - "init", "is_area", condition=llm_response_starts_with_yes - ) - G.add_node( - "is_area", - prompt=( - "Is the coverage reported as an area value? " - "Please start your response with either 'Yes' or 'No' and " - "briefly explain your answer." - ), - ) - G.add_edge( - "is_area", "value", condition=llm_response_starts_with_no - ) - elif "maximum project size" in kwargs.get("restriction", ""): - G.add_edge( - "init", - "is_mps_area", - condition=llm_response_starts_with_yes, - ) - G.add_node( - "is_mps_area", - prompt=( - "Does the project size requirement specifically provide " - "a system size in MW or an installation size (e.g. " - "maximum number of systems or maximum number of solar " - "panels)? " - "Please start your response with either 'Yes' or 'No' and " - "briefly explain your answer." - ), - ) - G.add_edge( - "is_mps_area", - "is_mps_conditional", - condition=llm_response_starts_with_yes, - ) - G.add_node( - "is_mps_conditional", - prompt=( - "Can the project size requirement be bypassed by applying " - "for a permit? " - "Please start your response with either 'Yes' or 'No' and " - "briefly explain your answer." - ), - ) - - G.add_edge( - "is_mps_conditional", - "value", - condition=llm_response_starts_with_no, - ) + if "other" in feature_id: + _add_other_system_setback_clarification_nodes(G) + elif "coverage" in feature_id: + _add_coverage_clarification_nodes(G) + elif "land density" in feature_id: + _add_land_density_clarification_nodes(G) + elif "minimum lot size" in feature_id: + _add_minimum_lot_size_clarification_nodes(G) + elif "maximum lot size" in feature_id: + _add_maximum_lot_size_clarification_nodes(G) + elif "maximum project size" in feature_id: + _add_maximum_project_size_clarification_nodes(G) else: G.add_edge("init", "value", condition=llm_response_starts_with_yes) - G.add_node( - "value", - prompt=( - "What is the **numerical** value given for the {restriction} " - "for {tech}? Follow these guidelines:\n" - "1) Extract only the explicit numerical value provided for " - "the restriction. Do not infer values from related " - "restrictions.\n" - "2) If multiple values are given, select the most restrictive " - "one (i.e., the smallest allowable limit, the lowest maximum, " - "etc.).\n" - "3) Please focus only on {restriction} that would apply for " - f"{SYSTEM_SIZE_REMINDER}\n" - "4) Pay close attention to clarifying details in parentheses, " - "footnotes, or additional explanatory text.\n\n" - "Example Inputs and Outputs:\n" - "Text: 'For all WES there is a limitation of overall height " - "of 200 feet (including blades).'\n" - "Output: 200\n" - "Text: 'The noise level of all SES shall be no greater than " - "thirty-two (32) decibels measured from the nearest property " - "line. This level may only be exceeded during short-term " - "events such as utility outages and/or severe wind storms.'\n" - "Output: 32\n" - "Text: 'At no time shall a wind turbine tower, nacelle, or " - "blade create shadow flicker on any non-participating " - "landowner property'\n" - "Output: 0\n" - "Text: Solar Panels shall not exceed 22'6\" in height. The " - "height is determined from the ground to the top of the panel " - "at any angle.\n" - "Output: 22.5\n" - ), - ) - - G.add_edge("value", "units") - G.add_node( - "units", - prompt=( - "What are the units for the {restriction} for {tech}? Ensure " - "that:\n" - "1) You accurately identify the unit value associated with " - "the restriction.\n" - "2) The unit is expressed using standard, conventional unit " - "names (e.g., 'feet', 'meters', 'acres', 'dBA', etc.). " - "{unit_clarification}\n" - "3) If multiple values are mentioned, return only the units " - "for the most restrictive value that directly pertains to the " - "restriction.\n" - "\nExample Inputs and Outputs:\n" - "Text: 'For all WES there is a limitation of overall height " - "of 200 feet (including blades).'\n" - "Output: 'feet'\n" - "Text: 'The noise level of all SES shall be no greater than " - "thirty-two (32) decibels measured from the nearest property " - "line. This level may only be exceeded during short-term " - "events such as utility outages and/or severe wind storms.'\n" - "Output: 'dBA'\n" - "Text: 'At no time shall a wind turbine tower, nacelle, or " - "blade create shadow flicker on any non-participating " - "landowner property'\n" - "Output: 'hr/year'\n" - ), - ) + _add_value_and_units_clarification_nodes(G) G.add_edge("units", "final") G.add_node( @@ -575,71 +450,9 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): "{SUMMARY_PROMPT} {UNITS_IN_SUMMARY_PROMPT} {SECTION_PROMPT}" ), ) - elif "prohibitions" in kwargs.get("restriction", ""): - G.add_edge( - "init", - "is_conditional", - condition=llm_response_starts_with_yes, - ) - G.add_node( - "is_conditional", - prompt=( - "Does the prohibition, moratorium, or ban only apply " - "conditionally? For example, does it only apply to those " - "who have not complied with the provisions in this text? " - "Please start your response with either 'Yes' or 'No' " - "and briefly explain your answer." - ), - ) - G.add_edge( - "is_conditional", - "has_end_date", - condition=llm_response_starts_with_no, - ) - G.add_node( - "has_end_date", - prompt=( - "Does the legal text given an expiration date for the " - "prohibition, moratorium, or ban? " - "Please start your response with either 'Yes' or 'No' " - "and briefly explain your answer." - ), - ) - G.add_edge( - "has_end_date", "final", condition=llm_response_starts_with_no - ) - G.add_edge( - "has_end_date", - "check_end_date", - condition=llm_response_starts_with_yes, - ) - todays_date = datetime.now().strftime("%B %d, %Y") - G.add_node( - "check_end_date", - prompt=( - f"Today is {todays_date}. Has the prohibition, " - "moratorium, or ban expired? " - "Please start your response with either 'Yes' or 'No' " - "and briefly explain your answer." - ), - ) - G.add_edge( - "check_end_date", - "final", - condition=llm_response_starts_with_no, - ) - G.add_node( - "final", - prompt=( - "Please respond based on our entire conversation so far. " - "Return your answer as a dictionary in " - "JSON format (not markdown). Your JSON file must include " - "exactly two keys. The keys are 'summary' and 'section'. " - "{SUMMARY_PROMPT} If the prohibition is a moratorium, be " - "sure to include that distinction in your summary and " - "provide any relevant expiration dates. {SECTION_PROMPT}" - ), - ) + + elif "prohibitions" in feature_id: + _add_prohibitions_extraction_nodes(G) else: G.add_edge("init", "final", condition=llm_response_starts_with_yes) @@ -657,6 +470,288 @@ def setup_graph_extra_restriction(is_numerical=True, **kwargs): return G +def _add_other_system_setback_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify "other system" setbacks""" + G.add_edge("init", "is_intra_farm", condition=llm_response_starts_with_yes) + G.add_node( + "is_intra_farm", + prompt=( + "Does the separation requirement apply to full farms " + "and/or utility-size installations? If so, please start " + "your answer with 'Yes'. If the separation requirement " + "only applies to individual farm components (i.e. " + "individual energy generation system units), please start " + "your response with 'No'. In either case, briefly explain " + "your answer." + ), + ) + G.add_edge( + "is_intra_farm", "value", condition=llm_response_starts_with_yes + ) + return G + + +def _add_coverage_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify "coverage" extraction""" + G.add_edge("init", "is_area", condition=llm_response_starts_with_yes) + G.add_node( + "is_area", + prompt=( + "Is the coverage reported as an area value? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge("is_area", "value", condition=llm_response_starts_with_no) + return G + + +def _add_land_density_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify "land density" extraction""" + G.add_edge( + "init", "correct_density_units", condition=llm_response_starts_with_yes + ) + G.add_node( + "correct_density_units", + prompt=( + "Is the density reported as a system size **per area** " + "value? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "correct_density_units", + "value", + condition=llm_response_starts_with_yes, + ) + return G + + +def _add_minimum_lot_size_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify "minimum lot size" extraction""" + G.add_edge( + "init", "correct_min_ls_units", condition=llm_response_starts_with_yes + ) + G.add_node( + "correct_min_ls_units", + prompt=( + "Is the minimum lot size reported as an **area** value? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "correct_min_ls_units", "value", condition=llm_response_starts_with_yes + ) + return G + + +def _add_maximum_lot_size_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify "maximum lot size" extraction""" + G.add_edge( + "init", "correct_max_ls_units", condition=llm_response_starts_with_yes + ) + G.add_node( + "correct_max_ls_units", + prompt=( + "Is the maximum lot size reported as an **area** value? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "correct_max_ls_units", "value", condition=llm_response_starts_with_yes + ) + return G + + +def _add_maximum_project_size_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify "max project size" extraction""" + G.add_edge("init", "is_mps_area", condition=llm_response_starts_with_yes) + G.add_node( + "is_mps_area", + prompt=( + "Does the project size requirement specifically provide " + "a system size in MW or an installation size (e.g. " + "maximum number of systems or maximum number of solar " + "panels)? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + G.add_edge( + "is_mps_area", + "is_mps_conditional", + condition=llm_response_starts_with_yes, + ) + G.add_node( + "is_mps_conditional", + prompt=( + "Can the project size requirement be bypassed by applying " + "for a permit? " + "Please start your response with either 'Yes' or 'No' and " + "briefly explain your answer." + ), + ) + + G.add_edge( + "is_mps_conditional", "value", condition=llm_response_starts_with_no + ) + return G + + +def _add_value_and_units_clarification_nodes(G): # noqa: N803 + """Add nodes and edges to clarify value and units extraction""" + + G.add_node( + "value", + prompt=( + "What is the **numerical** value given for the " # noqa: S608 + "{restriction} for {tech}? Follow these guidelines:\n" + "1) Extract only the explicit numerical value provided for " + "the restriction. Do not infer values from related " + "restrictions.\n" + "2) If multiple values are given, select the most restrictive " + "one (i.e., the smallest allowable limit, the lowest maximum, " + "etc.).\n" + "3) Please focus only on {restriction} that would apply for " + f"{SYSTEM_SIZE_REMINDER}\n" + "4) Pay close attention to clarifying details in parentheses, " + "footnotes, or additional explanatory text.\n\n" + "Example Inputs and Outputs:\n" + "Text: 'For all WES there is a limitation of overall height " + "of 200 feet (including blades).'\n" + "Output: 200\n" + "Text: 'The noise level of all SES shall be no greater than " + "thirty-two (32) decibels measured from the nearest property " + "line. This level may only be exceeded during short-term " + "events such as utility outages and/or severe wind storms.'\n" + "Output: 32\n" + "Text: 'At no time shall a wind turbine tower, nacelle, or " + "blade create shadow flicker on any non-participating " + "landowner property'\n" + "Output: 0\n" + "Text: Solar Panels shall not exceed 22'6\" in height. The " + "height is determined from the ground to the top of the panel " + "at any angle.\n" + "Output: 22.5\n" + ), + ) + + G.add_edge("value", "units") + G.add_node( + "units", + prompt=( + "What are the units for the {restriction} for {tech}? Ensure " + "that:\n" + "1) You accurately identify the unit value associated with " + "the restriction.\n" + "2) The unit is expressed using standard, conventional unit " + "names (e.g., 'feet', 'meters', 'acres', 'dBA', etc.). " + "{unit_clarification}\n" + "3) If multiple values are mentioned, return only the units " + "for the most restrictive value that directly pertains to the " + "restriction.\n" + "\nExample Inputs and Outputs:\n" + "Text: 'For all WES there is a limitation of overall height " + "of 200 feet (including blades).'\n" + "Output: 'feet'\n" + "Text: 'The noise level of all SES shall be no greater than " + "thirty-two (32) decibels measured from the nearest property " + "line. This level may only be exceeded during short-term " + "events such as utility outages and/or severe wind storms.'\n" + "Output: 'dBA'\n" + "Text: 'At no time shall a wind turbine tower, nacelle, or " + "blade create shadow flicker on any non-participating " + "landowner property'\n" + "Output: 'hr/year'\n" + ), + ) + return G + + +def _add_prohibitions_extraction_nodes(G): # noqa: N803 + """Add nodes and edges to extract 'prohibitions'""" + + G.add_edge("init", "is_proposed", condition=llm_response_starts_with_yes) + G.add_node( + "is_proposed", + prompt=( + "Is there reason to believe that this prohibition is only " + "being proposed and not yet in effect? " + "Please start your response with either 'Yes' or 'No' " + "and briefly explain your answer." + ), + ) + G.add_edge( + "is_proposed", "is_conditional", condition=llm_response_starts_with_no + ) + G.add_node( + "is_conditional", + prompt=( + "Does the prohibition, moratorium, or ban only apply " + "conditionally? For example:\n" + " - Does it only apply to those who have not complied " + "with the provisions in this text?\n" + " - Does it only apply within some distance of an area, " + "landmark, or feature?\n" + " - Does it only apply to a subset of districts/areas " + "within the jurisdiction?\n" + " - Does it only apply if a permit application has **not** " + "been previously approved?\n" + " - Does it only apply if some other condition is met?\n" + " - etc.\n" + "Please start your response with either 'Yes' or 'No' " + "and briefly explain your answer." + ), + ) + G.add_edge( + "is_conditional", "has_end_date", condition=llm_response_starts_with_no + ) + G.add_node( + "has_end_date", + prompt=( + "Does the legal text given an expiration date for the " + "prohibition, moratorium, or ban? " + "Please start your response with either 'Yes' or 'No' " + "and briefly explain your answer." + ), + ) + G.add_edge("has_end_date", "final", condition=llm_response_starts_with_no) + G.add_edge( + "has_end_date", + "check_end_date", + condition=llm_response_starts_with_yes, + ) + todays_date = datetime.now().strftime("%B %d, %Y") + G.add_node( + "check_end_date", + prompt=( + f"Today is {todays_date}. Has the prohibition, " + "moratorium, or ban expired? " + "Please start your response with either 'Yes' or 'No' " + "and briefly explain your answer." + ), + ) + G.add_edge( + "check_end_date", "final", condition=llm_response_starts_with_no + ) + G.add_node( + "final", + prompt=( + "Please respond based on our entire conversation so far. " + "Return your answer as a dictionary in " + "JSON format (not markdown). Your JSON file must include " + "exactly two keys. The keys are 'summary' and 'section'. " + "{SUMMARY_PROMPT} If the prohibition is a moratorium, be " + "sure to include that distinction in your summary and " + "provide any relevant expiration dates. {SECTION_PROMPT}" + ), + ) + return G + + def setup_graph_permitted_use_districts(**kwargs): """Setup graph to extract permitted use districts for technology From 983c26964f8f983edc8e16ce1bbc51168475a928 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:39:11 -0600 Subject: [PATCH 38/42] Minor formatting --- compass/validation/graphs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compass/validation/graphs.py b/compass/validation/graphs.py index d4310b26..913c1b2e 100644 --- a/compass/validation/graphs.py +++ b/compass/validation/graphs.py @@ -60,7 +60,7 @@ def setup_graph_correct_document_type(**kwargs): "init", prompt=( "Does the following text resemble an excerpt from a legal " - "statute, such as an ordinance or code?" + "statute, such as an ordinance or code? " "Please start your response with either 'Yes' or 'No' and " "briefly explain your answer." '\n\n"""\n{text}\n"""' From 71b7595ad474dfaccc1e765692929999e769dee6 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:39:19 -0600 Subject: [PATCH 39/42] minor prompt update --- compass/validation/graphs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compass/validation/graphs.py b/compass/validation/graphs.py index 913c1b2e..c9839084 100644 --- a/compass/validation/graphs.py +++ b/compass/validation/graphs.py @@ -71,7 +71,7 @@ def setup_graph_correct_document_type(**kwargs): G.add_node( "check_for_laws", prompt=( - "Does the text excerpt detail in-effect legal statutes? " + "Does the text excerpt detail legal statutes/regulations? " "Please start your response with either 'Yes' or 'No' and " "briefly explain your answer." ), From b51ca38e28e6078f3bb88344044513d8ebe769af Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:39:41 -0600 Subject: [PATCH 40/42] Add node to check for in-effect ordinances --- compass/validation/graphs.py | 37 +++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/compass/validation/graphs.py b/compass/validation/graphs.py index c9839084..b22d9f31 100644 --- a/compass/validation/graphs.py +++ b/compass/validation/graphs.py @@ -91,7 +91,42 @@ def setup_graph_correct_document_type(**kwargs): ), ) - G.add_edge("is_model", "is_meeting", condition=llm_response_starts_with_no) + G.add_edge("is_model", "in_effect", condition=llm_response_starts_with_no) + G.add_node( + "in_effect", + prompt=( + "Is this regulation in effect? Use only the **document's " + "content** to determine your answer (ignore editing/version " + "labels, track changes, and metadata).\n\n" + "Decision rules:\n\n" + "* If {tech} regulations are present, rely **only on the status " + "of those regulations in particular**.\n" + "* If the text explicitly states adoption/approval/enactment " + "status, rely only on that.\n" + "* If the text contains proposal-stage indicators (e.g., " + '"proposed ordinance," "notice of proposed rulemaking," "for ' + 'public comment," "draft for review," "public hearing scheduled," ' + '"introduced," "pending adoption," etc.), treat it as **not** in ' + "effect.\n" + '* If the text contains adoption indicators (e.g., "adopted," ' + '"enacted," "approved," "codified," "final rule," "effective ' + '[date]"), treat it as in effect.\n' + "* If the text contains other final-stage indicators (e.g., " + '"rejected," "not approved," etc.), treat it as **not** in ' + "effect.\n\n" + "**IMPORTANT**\n" + "If evidence is mixed, or the text does not explicitly give the " + "adoption status, or there is not enough information to " + "**confidently** conclude one way or another, default to " + '"Yes".\n\n' + "Please start your response with either 'Yes' or 'No' and briefly " + "explain why you chose your answer." + ), + ) + + G.add_edge( + "in_effect", "is_meeting", condition=llm_response_starts_with_yes + ) G.add_node( "is_meeting", prompt=( From 9105f99ee48fe61f8acb5b58d2fa81e9e83aab62 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:40:21 -0600 Subject: [PATCH 41/42] Add public notice check --- compass/validation/graphs.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compass/validation/graphs.py b/compass/validation/graphs.py index b22d9f31..0309d1cb 100644 --- a/compass/validation/graphs.py +++ b/compass/validation/graphs.py @@ -137,7 +137,19 @@ def setup_graph_correct_document_type(**kwargs): ) G.add_edge( - "is_meeting", + "is_meeting", "is_public_notice", condition=llm_response_starts_with_no + ) + G.add_node( + "is_public_notice", + prompt=( + "Does this text appear to be from a public notice or letter? " + "Please start your response with either 'Yes' or 'No' and briefly " + "explain why you chose your answer." + ), + ) + + G.add_edge( + "is_public_notice", "is_single_project", condition=llm_response_starts_with_no, ) From 489e5f119fa83e70d17d83dc1fa9ce03e1c19844 Mon Sep 17 00:00:00 2001 From: ppinchuk Date: Sun, 19 Oct 2025 15:42:28 -0600 Subject: [PATCH 42/42] Update `is_draft` prompt --- compass/validation/graphs.py | 106 ++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 52 deletions(-) diff --git a/compass/validation/graphs.py b/compass/validation/graphs.py index 0309d1cb..5f3d74a4 100644 --- a/compass/validation/graphs.py +++ b/compass/validation/graphs.py @@ -23,36 +23,6 @@ def setup_graph_correct_document_type(**kwargs): """ doc_is_from_ocr = kwargs.pop("doc_is_from_ocr", False) - is_draft_prompt = [ - "Does this text appear to be from a document that is currently " - "being edited or formatted, such as a draft or work in progress?\n" - "\n**Important**:\n" - ] - if doc_is_from_ocr: - is_draft_prompt.append( - "* Disregard formatting inconsistencies, typographical errors, or " - "visual artifacts (such as OCR noise, broken lines, or unusual " - "spacing). These do **not** indicate draft status unless " - "supported by actual content-based cues." - ) - is_draft_prompt.append( - "* Do **not** assume that a document is a draft simply because it " - "refers to amendments, revisions of law, or changing legal " - "standards. Many finalized legal documents contain such " - "references as part of their normal content.\n" - "\nFocus instead on signs of incompleteness or active " - "editing, such as (but not limited to):\n" - "* Placeholder content (e.g., 'TBD', 'insert text here', etc.)\n" - "* Comments or revision marks\n" - "* Incomplete sentences or headings\n" - "* Unfinished sections or abrupt endings\n" - "* Explicit labels like 'draft', 'working version', or 'not " - "final'\n\n" - "Please begin your answer with **Yes** or **No**, and briefly " - "explain your reasoning based only on these content-based signals." - ) - is_draft_prompt = "\n".join(is_draft_prompt) - G = setup_graph_no_nodes( # noqa: N806 d_tree_name="Correct document type", **kwargs ) @@ -189,32 +159,64 @@ def setup_graph_correct_document_type(**kwargs): ) G.add_edge("is_pres", "is_draft", condition=llm_response_starts_with_no) - G.add_node( - "is_draft", - prompt=( - "Does this text appear to be from a document that is currently " - "being edited or formatted, such as a draft or work in progress?\n" - "\n**Important**:\n\n" + + is_draft_prompt = [ + "Does this text appear to be from a document that is currently " + "being edited or formatted, such as a draft or work in progress?\n" + "\n**Important**:\n" + ] + if doc_is_from_ocr: + is_draft_prompt.append( "* Disregard formatting inconsistencies, typographical errors, or " "visual artifacts (such as OCR noise, broken lines, or unusual " "spacing). These do **not** indicate draft status unless " - "supported by actual content-based cues.\n" - "* Do **not** assume that a document is a draft simply because it " - "refers to amendments, revisions of law, or changing legal " - "standards. Many finalized legal documents contain such " - "references as part of their normal content.\n" - "\nFocus instead on signs of incompleteness or active " - "editing, such as (but not limited to):\n" - "* Placeholder content (e.g., 'TBD', 'insert text here', etc.)\n" - "* Comments or revision marks\n" - "* Incomplete sentences or headings\n" - "* Unfinished sections or abrupt endings\n" - "* Explicit labels like 'draft', 'working version', or 'not " - "final'\n\n" - "Please begin your answer with **Yes** or **No**, and briefly " - "explain your reasoning based only on these content-based signals." - ), + "supported by actual content-based cues." + ) + is_draft_prompt.append( + "* Do **not** assume that a document is a draft simply because it " + "refers to amendments, revisions of law, or changing legal " + "standards. Many finalized legal documents contain such " + "references as part of their normal content.\n" + "* Do **not** assume the document is a draft for these common " + 'non-indicative phrases: references to amendments, "shall", "may", ' + '"as amended", "upon adoption", "effective date", "adopted", or the ' + 'presence of dates (including "Adopted Date", "Effective Date", ' + '"Final Adopted"). These appear in both final and draft legal texts ' + 'and should **not** by themselves trigger a "Yes".\n' + "* Do **not** assume that a document is a draft if it contains " + 'ambiguous phrases like "Section for Revision" but **no** ' + "placeholders, comments, TODOs, or other explicit editing markers.\n" + "* Do **not** treat blank fields, bracketed fill-in areas, or form " + "templates appearing in **appendices, attachments, or exhibits** " + "(e.g., 'Appendix,' 'Form,' or 'Application Template') as indicators " + "of an unfinished draft. Many finalized ordinances and regulations " + "include such templates for public or administrative use.\n" + "\nFocus instead on signs of incompleteness or active " + "editing, such as (but not limited to):\n" + '* explicit labels: "DRAFT", "DRAFT VERSION", "NOT FINAL", "FOR ' + 'REVIEW", "WORKING VERSION", "DO NOT PUBLISH".\n' + '* placeholders: "TBD", "TBA", "INSERT TEXT", "INSERT [SECTION]", ' + '"INSERT HERE", "___", "xxx", "[insert...]", "[?]", "[TO BE ' + 'DETERMINED]".\n' + "* editorial comments or markup: bracketed comments like " + '"[Comment: ...]", "/* ... */", HTML/XML comments ``, ' + 'tracked changes markers "Track Changes", "redline", "stet", change ' + "bars, or visible revision marks.\n" + '* explicit TODOs or instructions to editors: "TODO", "REPLACE", ' + '"REVISE SECTION", "CHECK CITATION".' + '* clear formatting markers left for future editing: "## HEADLINE ##, ' + "repeated underscores, sequences of asterisks used as placeholders, " + 'or visible template text such as "Section for Revision" immediately ' + "adjacent to other placeholders or TODOs.\n\n" + "When both finalized indicators (e.g., enactment dates, official " + "signatures, or filing statements) and bracketed placeholders " + "appear, prioritize the **finalization evidence** unless there are " + "explicit editing markers.\n" + "Please begin your answer with **Yes** or **No**, and briefly " + "explain your reasoning based only on these content-based signals." ) + is_draft_prompt = "\n".join(is_draft_prompt) + G.add_node("is_draft", prompt=is_draft_prompt) G.add_edge("is_draft", "is_report", condition=llm_response_starts_with_no) G.add_node(