pythonpydanticlangchainlangsmith

langchain_community & langchain packages giving error: Missing 1 required keyword-only argument: 'recursive_guard'


All of sudden langchain_community & langchain packages started throwing error: TypeError: ForwardRef._evaluate() missing 1 required keyword-only argument: 'recursive_guard'

The error getting generated somewhere in pydantic

I strongly suspect it is version mismatch. So I tried upgrading packages langchain, langchain_community, pydantic, langsmith etc. But no luck.

My current installed versions shows as under:

Python 3.12.4

langchain: 0.2.3
langchain_community: 0.2.4
langsmith: 0.1.75
pydantic: 2.7.3
typing_extensions: 4.11.0

Pip check also not showing any conflict.

Here is complete trace of error. Any help would be really appreciated.

TypeError: ForwardRef._evaluate() missing 1 required keyword-only argument: 'recursive_guard'

File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 600, in _run_script
    exec(code, module.__dict__)
File "C:\MyProject\MyScript.py", line 20, in <module>
    from langchain_community.vectorstores import Chroma
File "<frozen importlib._bootstrap>", line 1412, in _handle_fromlist
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langchain_community\vectorstores\__init__.py", line 509, in __getattr__
    module = importlib.import_module(_module_lookup[name])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0\Lib\importlib\__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langchain_community\vectorstores\chroma.py", line 20, in <module>
    from langchain_core.documents import Document
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langchain_core\documents\__init__.py", line 6, in <module>
    from langchain_core.documents.compressor import BaseDocumentCompressor
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langchain_core\documents\compressor.py", line 6, in <module>
    from langchain_core.callbacks import Callbacks
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langchain_core\callbacks\__init__.py", line 22, in <module>
    from langchain_core.callbacks.manager import (
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langchain_core\callbacks\manager.py", line 29, in <module>
    from langsmith.run_helpers import get_run_tree_context
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langsmith\run_helpers.py", line 40, in <module>
    from langsmith import client as ls_client
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langsmith\client.py", line 52, in <module>
    from langsmith import env as ls_env
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langsmith\env\__init__.py", line 3, in <module>
    from langsmith.env._runtime_env import (
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langsmith\env\_runtime_env.py", line 10, in <module>
    from langsmith.utils import get_docker_compose_command
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langsmith\utils.py", line 31, in <module>
    from langsmith import schemas as ls_schemas
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\langsmith\schemas.py", line 69, in <module>
    class Example(ExampleBase):
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pydantic\v1\main.py", line 286, in __new__
    cls.__try_update_forward_refs__()
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pydantic\v1\main.py", line 807, in __try_update_forward_refs__
    update_model_forward_refs(cls, cls.__fields__.values(), cls.__config__.json_encoders, localns, (NameError,))
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pydantic\v1\typing.py", line 554, in update_model_forward_refs
    update_field_forward_refs(f, globalns=globalns, localns=localns)
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pydantic\v1\typing.py", line 520, in update_field_forward_refs
    field.type_ = evaluate_forwardref(field.type_, globalns, localns or None)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pydantic\v1\typing.py", line 66, in evaluate_forwardref
    return cast(Any, type_)._evaluate(globalns, localns, set())
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Solution

  • I am having the same issue. The stack is different, but the error comes from the same line pydantic\v1\typing.py", line 66

    This is referring to the python typing module (v3.12.4) that has an additional mandatory parameter 'recursive_guard'. There are other areas of the code in pydantic where this has been fixed (recursive_gurard=set()).

    Check this out --> https://github.com/pydantic/pydantic-core/issues/1292

    Within this thread, they mention that using python v3.12.3 could temporarily solve the issue in 1292, probably because this additional attribute in v3.12.4 (I am guessing here). This is not an option for me as my google alpha functions local deploy is not recognizing the --runtime=python311 and always take the latest runtime (v3.12.4).

    I hope that they fix this too