1

I am encountering an error when trying to import OpenAIEmbeddings from langchain_openai. Here is the exact import statement I am using:

from langchain_openai import OpenAIEmbeddings

When I run this code, I get the following error:

PydanticUserError: The `__modify_schema__` method is not supported in Pydantic v2. Use `__get_pydantic_json_schema__` instead in class `SecretStr`.

Here is the full stack trace of the error:

---------------------------------------------------------------------------
PydanticUserError                         Traceback (most recent call last)
Cell In[1], line 1
----> 1 from langchain_openai import OpenAIEmbeddings

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\langchain_openai\__init__.py:1
----> 1 from langchain_openai.chat_models import (
      2     AzureChatOpenAI,
      3     ChatOpenAI,
      4 )
      5 from langchain_openai.embeddings import (
      6     AzureOpenAIEmbeddings,
      7     OpenAIEmbeddings,
      8 )
      9 from langchain_openai.llms import AzureOpenAI, OpenAI

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\langchain_openai\chat_models\__init__.py:1
----> 1 from langchain_openai.chat_models.azure import AzureChatOpenAI
      2 from langchain_openai.chat_models.base import ChatOpenAI
      4 __all__ = [
      5     "ChatOpenAI",
      6     "AzureChatOpenAI",
      7 ]

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\langchain_openai\chat_models\azure.py:14
     11 from langchain_core.pydantic_v1 import Field, SecretStr, root_validator
     12 from langchain_core.utils import convert_to_secret_str, get_from_dict_or_env
---> 14 from langchain_openai.chat_models.base import BaseChatOpenAI
     16 logger = logging.getLogger(__name__)
     19 class AzureChatOpenAI(BaseChatOpenAI):

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\langchain_openai\chat_models\base.py:296
    292     parsed: Optional[_DictOrPydantic]
    293     parsing_error: Optional[BaseException]
--> 296 class BaseChatOpenAI(BaseChatModel):
    297     client: Any = Field(default=None, exclude=True)  #: :meta private:
    298     async_client: Any = Field(default=None, exclude=True)  #: :meta private:

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_model_construction.py:224, in ModelMetaclass.__new__(mcs, cls_name, bases, namespace, __pydantic_generic_metadata__, __pydantic_reset_parent_namespace__, _create_model_module, **kwargs)
    221 if config_wrapper.frozen and '__hash__' not in namespace:
    222     set_default_hash_func(cls, bases)
--> 224 complete_model_class(
    225     cls,
    226     cls_name,
    227     config_wrapper,
    228     raise_errors=False,
    229     types_namespace=types_namespace,
    230     create_model_module=_create_model_module,
    231 )
    233 # If this is placed before the complete_model_class call above,
    234 # the generic computed fields return type is set to PydanticUndefined
    235 cls.model_computed_fields = {k: v.info for k, v in cls.__pydantic_decorators__.computed_fields.items()}

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_model_construction.py:577, in complete_model_class(cls, cls_name, config_wrapper, raise_errors, types_namespace, create_model_module)
    574     return False
    576 try:
--> 577     schema = cls.__get_pydantic_core_schema__(cls, handler)
    578 except PydanticUndefinedAnnotation as e:
    579     if raise_errors:

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\main.py:671, in BaseModel.__get_pydantic_core_schema__(cls, source, handler)
    668     if not cls.__pydantic_generic_metadata__['origin']:
    669         return cls.__pydantic_core_schema__
--> 671 return handler(source)

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_schema_generation_shared.py:83, in CallbackGetCoreSchemaHandler.__call__(self, source_type)
     82 def __call__(self, source_type: Any, /) -> core_schema.CoreSchema:
---> 83     schema = self._handler(source_type)
     84     ref = schema.get('ref')
     85     if self._ref_mode == 'to-def':

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:655, in GenerateSchema.generate_schema(self, obj, from_dunder_get_core_schema)
    652         schema = from_property
    654 if schema is None:
--> 655     schema = self._generate_schema_inner(obj)
    657 metadata_js_function = _extract_get_pydantic_json_schema(obj, schema)
    658 if metadata_js_function is not None:

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:924, in GenerateSchema._generate_schema_inner(self, obj)
    922 if lenient_issubclass(obj, BaseModel):
    923     with self.model_type_stack.push(obj):
--> 924         return self._model_schema(obj)
    926 if isinstance(obj, PydanticRecursiveRef):
    927     return core_schema.definition_reference_schema(schema_ref=obj.type_ref)

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:739, in GenerateSchema._model_schema(self, cls)
    727     model_schema = core_schema.model_schema(
    728         cls,
    729         inner_schema,
   (...)
    735         metadata=metadata,
    736     )
    737 else:
    738     fields_schema: core_schema.CoreSchema = core_schema.model_fields_schema(
--> 739         {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()},
    740         computed_fields=[
    741             self._computed_field_schema(d, decorators.field_serializers)
    742             for d in computed_fields.values()
    743         ],
    744         extras_schema=extras_schema,
    745         model_name=cls.__name__,
    746     )
    747     inner_schema = apply_validators(fields_schema, decorators.root_validators.values(), None)
    748     new_inner_schema = define_expected_missing_refs(inner_schema, recursively_defined_type_refs())

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:739, in <dictcomp>(.0)
    727     model_schema = core_schema.model_schema(
    728         cls,
    729         inner_schema,
   (...)
    735         metadata=metadata,
    736     )
    737 else:
    738     fields_schema: core_schema.CoreSchema = core_schema.model_fields_schema(
--> 739         {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()},
    740         computed_fields=[
    741             self._computed_field_schema(d, decorators.field_serializers)
    742             for d in computed_fields.values()
    743         ],
    744         extras_schema=extras_schema,
    745         model_name=cls.__name__,
    746     )
    747     inner_schema = apply_validators(fields_schema, decorators.root_validators.values(), None)
    748     new_inner_schema = define_expected_missing_refs(inner_schema, recursively_defined_type_refs())

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:1115, in GenerateSchema._generate_md_field_schema(self, name, field_info, decorators)
   1108 def _generate_md_field_schema(
   1109     self,
   1110     name: str,
   1111     field_info: FieldInfo,
   1112     decorators: DecoratorInfos,
   1113 ) -> core_schema.ModelField:
   1114     """Prepare a ModelField to represent a model field."""
-> 1115     common_field = self._common_field_schema(name, field_info, decorators)
   1116     return core_schema.model_field(
   1117         common_field['schema'],
   1118         serialization_exclude=common_field['serialization_exclude'],
   (...)
   1122         metadata=common_field['metadata'],
   1123     )

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:1308, in GenerateSchema._common_field_schema(self, name, field_info, decorators)
   1304         schema = self._apply_annotations(
   1305             source_type, annotations + validators_from_decorators, transform_inner_schema=set_discriminator
   1306         )
   1307     else:
-> 1308         schema = self._apply_annotations(
   1309             source_type,
   1310             annotations + validators_from_decorators,
   1311         )
   1313 # This V1 compatibility shim should eventually be removed
   1314 # push down any `each_item=True` validators
   1315 # note that this won't work for any Annotated types that get wrapped by a function validator
   1316 # but that's okay because that didn't exist in V1
   1317 this_field_validators = filter_field_decorator_info_by_field(decorators.validators.values(), name)

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:2107, in GenerateSchema._apply_annotations(self, source_type, annotations, transform_inner_schema)
   2102         continue
   2103     get_inner_schema = self._get_wrapped_inner_schema(
   2104         get_inner_schema, annotation, pydantic_js_annotation_functions
   2105     )
-> 2107 schema = get_inner_schema(source_type)
   2108 if pydantic_js_annotation_functions:
   2109     metadata = CoreMetadataHandler(schema).metadata

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_schema_generation_shared.py:83, in CallbackGetCoreSchemaHandler.__call__(self, source_type)
     82 def __call__(self, source_type: Any, /) -> core_schema.CoreSchema:
---> 83     schema = self._handler(source_type)
     84     ref = schema.get('ref')
     85     if self._ref_mode == 'to-def':

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:2088, in GenerateSchema._apply_annotations.<locals>.inner_handler(obj)
   2086 from_property = self._generate_schema_from_property(obj, source_type)
   2087 if from_property is None:
-> 2088     schema = self._generate_schema_inner(obj)
   2089 else:
   2090     schema = from_property

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:929, in GenerateSchema._generate_schema_inner(self, obj)
    926 if isinstance(obj, PydanticRecursiveRef):
    927     return core_schema.definition_reference_schema(schema_ref=obj.type_ref)
--> 929 return self.match_type(obj)

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:1029, in GenerateSchema.match_type(self, obj)
   1027 origin = get_origin(obj)
   1028 if origin is not None:
-> 1029     return self._match_generic_type(obj, origin)
   1031 res = self._get_prepare_pydantic_annotations_for_known_type(obj, ())
   1032 if res is not None:

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:1058, in GenerateSchema._match_generic_type(self, obj, origin)
   1055     return from_property
   1057 if _typing_extra.origin_is_union(origin):
-> 1058     return self._union_schema(obj)
   1059 elif origin in TUPLE_TYPES:
   1060     return self._tuple_schema(obj)

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:1378, in GenerateSchema._union_schema(self, union_type)
   1376         nullable = True
   1377     else:
-> 1378         choices.append(self.generate_schema(arg))
   1380 if len(choices) == 1:
   1381     s = choices[0]

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:657, in GenerateSchema.generate_schema(self, obj, from_dunder_get_core_schema)
    654 if schema is None:
    655     schema = self._generate_schema_inner(obj)
--> 657 metadata_js_function = _extract_get_pydantic_json_schema(obj, schema)
    658 if metadata_js_function is not None:
    659     metadata_schema = resolve_original_schema(schema, self.defs.definitions)

File d:\Work_Local\Tailored_Alloys\DRIVE_YT\advance-manufacturing\.venv\Lib\site-packages\pydantic\_internal\_generate_schema.py:2447, in _extract_get_pydantic_json_schema(tp, schema)
   2445     if not has_custom_v2_modify_js_func:
   2446         cls_name = getattr(tp, '__name__', None)
-> 2447         raise PydanticUserError(
   2448             f'The `__modify_schema__` method is not supported in Pydantic v2. '
   2449             f'Use `__get_pydantic_json_schema__` instead{f" in class `{cls_name}`" if cls_name else ""}.',
   2450             code='custom-json-schema',
   2451         )
   2453 # handle GenericAlias' but ignore Annotated which "lies" about its origin (in this case it would be `int`)
   2454 if hasattr(tp, '__origin__') and not is_annotated(tp):

PydanticUserError: The `__modify_schema__` method is not supported in Pydantic v2. Use `__get_pydantic_json_schema__` instead in class `SecretStr`.

For further information visit https://errors.pydantic.dev/2.9/u/custom-json-schema

My Environment

  • Operating System: Windows 11
  • Python version: 3.12.2

Dependencies

Here are the versions of the relevant packages installed in my environment:

langchain                  0.2.5
langchain-anthropic        0.3.0
langchain-community        0.2.50
langchain-core             0.3.26
langchain-openai           0.2.12
langchain-text-splitters   0.2.1
langdetect                 1.0.9
langgraph                  0.2.53
langgraph-checkpoint       2.0.8
langgraph-sdk              0.1.40
langsmith                  0.1.147

pydantic                   2.9.2
pydantic_core              2.23.4

What I Have Tried

  1. Version Changes: I attempted to downgrade pydantic to the following versions:

    • 1.10.17
    • 2.0
    • 2.9.2 (current version)

    None of these attempts resolved the issue.

  2. Dependency Conflicts: I checked for potential version mismatches between pydantic and langchain packages but could not identify any clear issues.

  3. Research: I have read the Pydantic documentation on schema methods and noted that __modify_schema__ is no longer supported in Pydantic v2. The suggested approach is to use __get_pydantic_json_schema__, but I am unsure how to update this in the context of langchain_openai.

Questions

  1. Is this a known compatibility issue between langchain_openai and pydantic v2.x?
  2. Should I downgrade Pydantic further or change the version of langchain_openai?
  3. Are there any specific patches or workarounds I should apply to make this work?

If you need any additional information, such as my Python version, OS, or full traceback, I’d be happy to provide it. Thank you for your help!

1
  • Is there a fix for this issue? Commented Sep 11 at 18:38

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.