← eval3_submission_v2t

fastapi_14609

failed WRONG_FIX UNSUBMITTED wrong_fix_unsubmitted(budget) · 23 tool calls · 308 s · fastapi/fastapi

Task input

➖ Drop support for `pydantic.v1`

➖ Drop support for `pydantic.v1`

When trying to use a `pydantic.v1` model with FastAPI, an error is raised.

Tool calls (23)

#ToolArgumentsResult
1run_command
{
 "command": "ls -R fastapi/_compat"
}
{"status": "ok", "stdout": "fastapi/_compat:\n__init__.py\nmain.py\nmay_v1.py\nmodel_field.py\nshared.py\nv1.py\nv2.py\n", "exit_code": 0}
full
{"status": "ok", "stdout": "fastapi/_compat:\n__init__.py\nmain.py\nmay_v1.py\nmodel_field.py\nshared.py\nv1.py\nv2.py\n", "exit_code": 0}
2read_file
{
 "filepath": "fastapi/_compat/main.py"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "import sys\nfrom collections.abc import Sequence\nfrom functools import lru_cache\nfrom typi
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "import sys\nfrom collections.abc import Sequence\nfrom functools import lru_cache\nfrom typing import (\n    Any,\n)\n\nfrom fastapi._compat import may_v1\nfrom fastapi._compat.shared import lenient_issubclass\nfrom fastapi.types import ModelNameMap\nfrom pydantic import BaseModel\nfrom typing_extensions import Literal\n\nfrom . import v2\nfrom .model_field import ModelField\nfrom .v2 import BaseConfig as BaseConfig\nfrom .v2 import FieldInfo as FieldInfo\nfrom .v2 import PydanticSchemaGenerationError as PydanticSchemaGenerationError\nfrom .v2 import RequiredParam as RequiredParam\nfrom .v2 import Undefined as Undefined\nfrom .v2 import UndefinedType as UndefinedType\nfrom .v2 import Url as Url\nfrom .v2 import Validator as Validator\nfrom .v2 import evaluate_forwardref as evaluate_forwardref\nfrom .v2 import get_missing_field_error as get_missing_field_error\nfrom .v2 import (\n    with_info_plain_validator_function as with_info_plain_validator_function,\n)\n\n\n@lru_cache\ndef get_cached_model_fields(model: type[BaseModel]) -> list[ModelField]:\n    if lenient_issubclass(model, may_v1.BaseModel):\n        from fastapi._compat import v1\n\n        return v1.get_model_fields(model)  # type: ignore[arg-type,return-value]\n    else:\n        from . import v2\n\n        return v2.get_model_fields(model)  # type: ignore[return-value]\n\n\ndef _is_undefined(value: object) -> bool:\n    if isinstance(value, may_v1.UndefinedType):\n        return True\n\n    return isinstance(value, v2.UndefinedType)\n\n\ndef _get_model_config(model: BaseModel) -> Any:\n    if isinstance(model, may_v1.BaseModel):\n        from fastapi._compat import v1\n\n        return v1._get_model_config(model)\n\n    return v2._get_model_config(model)\n\n\ndef _model_dump(\n    model: BaseModel, mode: Literal[\"json\", \"python\"] = \"json\", **kwargs: Any\n) -> Any:\n    if isinstance(model, may_v1.BaseModel):\n        from fastapi._c
3read_file
{
 "filepath": "fastapi/_compat/main.py",
 "start_line": 151
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "\ndef serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:\n if isin
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "\ndef serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.serialize_sequence_value(field=field, value=value)\n\n    return v2.serialize_sequence_value(field=field, value=value)  # type: ignore[arg-type]\n\n\ndef get_compat_model_name_map(fields: list[ModelField]) -> ModelNameMap:\n    v1_model_fields = [\n        field for field in fields if isinstance(field, may_v1.ModelField)\n    ]\n    if v1_model_fields:\n        from fastapi._compat import v1\n\n        v1_flat_models = v1.get_flat_models_from_fields(\n            v1_model_fields,  # type: ignore[arg-type]\n            known_models=set(),\n        )\n        all_flat_models = v1_flat_models\n    else:\n        all_flat_models = set()\n\n    v2_model_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n    v2_flat_models = v2.get_flat_models_from_fields(v2_model_fields, known_models=set())\n    all_flat_models = all_flat_models.union(v2_flat_models)  # type: ignore[arg-type]\n\n    model_name_map = v2.get_model_name_map(all_flat_models)  # type: ignore[arg-type]\n    return model_name_map\n\n\ndef get_definitions(\n    *,\n    fields: list[ModelField],\n    model_name_map: ModelNameMap,\n    separate_input_output_schemas: bool = True,\n) -> tuple[\n    dict[\n        tuple[ModelField, Literal[\"validation\", \"serialization\"]],\n        may_v1.JsonSchemaValue,\n    ],\n    dict[str, dict[str, Any]],\n]:\n    if sys.version_info < (3, 14):\n        v1_fields = [field for field in fields if isinstance(field, may_v1.ModelField)]\n        v1_field_maps, v1_definitions = may_v1.get_definitions(\n            fields=v1_fields,  # type: ignore[arg-type]\n            model_name_map=model_name_map,\n            separate_input_output_schemas=separate_input_output_schemas,\n        )\n\n        v2_fields 
4run_command
{
 "command": "ls fastapi/_compat/v1.py fastapi/_compat/may_v1.py fastapi/_compat/shared.py"
}
{"status": "ok", "stdout": "fastapi/_compat/may_v1.py\nfastapi/_compat/shared.py\nfastapi/_compat/v1.py\n", "exit_code": 0}
full
{"status": "ok", "stdout": "fastapi/_compat/may_v1.py\nfastapi/_compat/shared.py\nfastapi/_compat/v1.py\n", "exit_code": 0}
5read_file
{
 "filepath": "fastapi/_compat/may_v1.py"
}
{"status": "ok", "filepath": "fastapi/_compat/may_v1.py", "content": "import sys\nfrom collections.abc import Sequence\nfrom typing import Any, Literal, Union\n
full
{"status": "ok", "filepath": "fastapi/_compat/may_v1.py", "content": "import sys\nfrom collections.abc import Sequence\nfrom typing import Any, Literal, Union\n\nfrom fastapi.types import ModelNameMap\n\nif sys.version_info >= (3, 14):\n\n    class AnyUrl:\n        pass\n\n    class BaseConfig:\n        pass\n\n    class BaseModel:\n        pass\n\n    class Color:\n        pass\n\n    class CoreSchema:\n        pass\n\n    class ErrorWrapper:\n        pass\n\n    class FieldInfo:\n        pass\n\n    class GetJsonSchemaHandler:\n        pass\n\n    class JsonSchemaValue:\n        pass\n\n    class ModelField:\n        pass\n\n    class NameEmail:\n        pass\n\n    class RequiredParam:\n        pass\n\n    class SecretBytes:\n        pass\n\n    class SecretStr:\n        pass\n\n    class Undefined:\n        pass\n\n    class UndefinedType:\n        pass\n\n    class Url:\n        pass\n\n    from .v2 import ValidationError, create_model\n\n    def get_definitions(\n        *,\n        fields: list[ModelField],\n        model_name_map: ModelNameMap,\n        separate_input_output_schemas: bool = True,\n    ) -> tuple[\n        dict[\n            tuple[ModelField, Literal[\"validation\", \"serialization\"]], JsonSchemaValue\n        ],\n        dict[str, dict[str, Any]],\n    ]:\n        return {}, {}  # pragma: no cover\n\n\nelse:\n    from .v1 import AnyUrl as AnyUrl\n    from .v1 import BaseConfig as BaseConfig\n    from .v1 import BaseModel as BaseModel\n    from .v1 import Color as Color\n    from .v1 import CoreSchema as CoreSchema\n    from .v1 import ErrorWrapper as ErrorWrapper\n    from .v1 import FieldInfo as FieldInfo\n    from .v1 import GetJsonSchemaHandler as GetJsonSchemaHandler\n    from .v1 import JsonSchemaValue as JsonSchemaValue\n    from .v1 import ModelField as ModelField\n    from .v1 import NameEmail as NameEmail\n    from .v1 import RequiredParam as RequiredParam\n    from .v1 import SecretBytes as SecretBytes\n    from .v1 import SecretS
6run_command
{
 "command": "grep -rn \"pydantic.v1\" ."
}
{"status": "ok", "stdout": "./fastapi/dependencies/utils.py:47:from fastapi._compat.shared import annotation_is_pydantic_v1\n./fastapi/dependencies/utils.py:75:
full
{"status": "ok", "stdout": "./fastapi/dependencies/utils.py:47:from fastapi._compat.shared import annotation_is_pydantic_v1\n./fastapi/dependencies/utils.py:75:from .. import temp_pydantic_v1_params\n./fastapi/dependencies/utils.py:328:                \"pydantic.v1 is deprecated and will soon stop being supported by FastAPI.\"\n./fastapi/dependencies/utils.py:334:            param_details.field.field_info, (params.Body, temp_pydantic_v1_params.Body)\n./fastapi/dependencies/utils.py:403:                    temp_pydantic_v1_params.Param,\n./fastapi/dependencies/utils.py:405:                    temp_pydantic_v1_params.Body,\n./fastapi/dependencies/utils.py:494:            if annotation_is_pydantic_v1(use_annotation):\n./fastapi/dependencies/utils.py:495:                field_info = temp_pydantic_v1_params.Body(  # type: ignore[assignment]\n./fastapi/dependencies/utils.py:511:                field_info, (params.Path, temp_pydantic_v1_params.Path)\n./fastapi/dependencies/utils.py:517:            isinstance(field_info, (params.Param, temp_pydantic_v1_params.Param))\n./fastapi/dependencies/utils.py:526:        if isinstance(field_info, (params.Form, temp_pydantic_v1_params.Form)):\n./fastapi/dependencies/utils.py:546:        elif isinstance(field_info, (params.Query, temp_pydantic_v1_params.Query)):\n./fastapi/dependencies/utils.py:765:            isinstance(field.field_info, (params.Form, temp_pydantic_v1_params.Form))\n./fastapi/dependencies/utils.py:835:        assert isinstance(field_info, (params.Param, temp_pydantic_v1_params.Param)), (\n./fastapi/dependencies/utils.py:847:        assert isinstance(field_info, (params.Param, temp_pydantic_v1_params.Param)), (\n./fastapi/dependencies/utils.py:896:        isinstance(first_field.field_info, (params.Form, temp_pydantic_v1_params.Form))\n./fastapi/dependencies/utils.py:914:            isinstance(field_info, (params.File, temp_pydantic_v1_params.File))\n./fastapi/dependencies/utils.py:921:            and isinstance(field_i
7read_file
{
 "filepath": "fastapi/_compat/shared.py",
 "start_line": 182
}
{"status": "ok", "filepath": "fastapi/_compat/shared.py", "content": "def annotation_is_pydantic_v1(annotation: Any) -> bool:\n if lenient_issubclass(annotation
full
{"status": "ok", "filepath": "fastapi/_compat/shared.py", "content": "def annotation_is_pydantic_v1(annotation: Any) -> bool:\n    if lenient_issubclass(annotation, may_v1.BaseModel):\n        return True\n    origin = get_origin(annotation)\n    if origin is Union or origin is UnionType:\n        for arg in get_args(annotation):\n            if lenient_issubclass(arg, may_v1.BaseModel):\n                return True\n    if field_annotation_is_sequence(annotation):\n        for sub_annotation in get_args(annotation):\n            if annotation_is_pydantic_v1(sub_annotation):\n                return True\n    return False\n", "start_line": 182, "end_line": 194, "total_lines": 194, "is_truncated": false}
8read_file
{
 "filepath": "fastapi/_compat/shared.py",
 "start_line": 1
}
{"status": "ok", "filepath": "fastapi/_compat/shared.py", "content": "import sys\nimport types\nimport typing\nfrom collections import deque\nfrom collections.a
full
{"status": "ok", "filepath": "fastapi/_compat/shared.py", "content": "import sys\nimport types\nimport typing\nfrom collections import deque\nfrom collections.abc import Mapping, Sequence\nfrom dataclasses import is_dataclass\nfrom typing import (\n    Annotated,\n    Any,\n    Union,\n)\n\nfrom fastapi._compat import may_v1\nfrom fastapi.types import UnionType\nfrom pydantic import BaseModel\nfrom pydantic.version import VERSION as PYDANTIC_VERSION\nfrom starlette.datastructures import UploadFile\nfrom typing_extensions import get_args, get_origin\n\n# Copy from Pydantic v2, compatible with v1\nif sys.version_info < (3, 10):\n    WithArgsTypes: tuple[Any, ...] = (typing._GenericAlias, types.GenericAlias)  # type: ignore[attr-defined]\nelse:\n    WithArgsTypes: tuple[Any, ...] = (\n        typing._GenericAlias,  # type: ignore[attr-defined]\n        types.GenericAlias,\n        types.UnionType,\n    )  # pyright: ignore[reportAttributeAccessIssue]\n\nPYDANTIC_VERSION_MINOR_TUPLE = tuple(int(x) for x in PYDANTIC_VERSION.split(\".\")[:2])\nPYDANTIC_V2 = PYDANTIC_VERSION_MINOR_TUPLE[0] == 2\n\n\nsequence_annotation_to_type = {\n    Sequence: list,\n    list: list,\n    tuple: tuple,\n    set: set,\n    frozenset: frozenset,\n    deque: deque,\n}\n\nsequence_types = tuple(sequence_annotation_to_type.keys())\n\nUrl: type[Any]\n\n\n# Copy of Pydantic v2, compatible with v1\ndef lenient_issubclass(\n    cls: Any, class_or_tuple: Union[type[Any], tuple[type[Any], ...], None]\n) -> bool:\n    try:\n        return isinstance(cls, type) and issubclass(cls, class_or_tuple)  # type: ignore[arg-type]\n    except TypeError:  # pragma: no cover\n        if isinstance(cls, WithArgsTypes):\n            return False\n        raise  # pragma: no cover\n\n\ndef _annotation_is_sequence(annotation: Union[type[Any], None]) -> bool:\n    if lenient_issubclass(annotation, (str, bytes)):\n        return False\n    return lenient_issubclass(annotation, sequence_types)\n\n\ndef field_annotation
9read_file
{
 "filepath": "fastapi/_compat/shared.py",
 "start_line": 151
}
{"status": "ok", "filepath": "fastapi/_compat/shared.py", "content": "\ndef is_bytes_sequence_annotation(annotation: Any) -> bool:\n origin = get_origin(annotat
full
{"status": "ok", "filepath": "fastapi/_compat/shared.py", "content": "\ndef is_bytes_sequence_annotation(annotation: Any) -> bool:\n    origin = get_origin(annotation)\n    if origin is Union or origin is UnionType:\n        at_least_one = False\n        for arg in get_args(annotation):\n            if is_bytes_sequence_annotation(arg):\n                at_least_one = True\n                continue\n        return at_least_one\n    return field_annotation_is_sequence(annotation) and all(\n        is_bytes_or_nonable_bytes_annotation(sub_annotation)\n        for sub_annotation in get_args(annotation)\n    )\n\n\ndef is_uploadfile_sequence_annotation(annotation: Any) -> bool:\n    origin = get_origin(annotation)\n    if origin is Union or origin is UnionType:\n        at_least_one = False\n        for arg in get_args(annotation):\n            if is_uploadfile_sequence_annotation(arg):\n                at_least_one = True\n                continue\n        return at_least_one\n    return field_annotation_is_sequence(annotation) and all(\n        is_uploadfile_or_nonable_uploadfile_annotation(sub_annotation)\n        for sub_annotation in get_args(annotation)\n    )\n\n\ndef annotation_is_pydantic_v1(annotation: Any) -> bool:\n    if lenient_issubclass(annotation, may_v1.BaseModel):\n        return True\n    origin = get_origin(annotation)\n    if origin is Union or origin is UnionType:\n        for arg in get_args(annotation):\n            if lenient_issubclass(arg, may_v1.BaseModel):\n                return True\n    if field_annotation_is_sequence(annotation):\n        for sub_annotation in get_args(annotation):\n            if annotation_is_pydantic_v1(sub_annotation):\n                return True\n    return False\n", "start_line": 151, "end_line": 194, "total_lines": 194, "is_truncated": false}
10read_file
{
 "filepath": "fastapi/_compat/may_v1.py"
}
{"status": "ok", "filepath": "fastapi/_compat/may_v1.py", "content": "import sys\nfrom collections.abc import Sequence\nfrom typing import Any, Literal, Union\n
full
{"status": "ok", "filepath": "fastapi/_compat/may_v1.py", "content": "import sys\nfrom collections.abc import Sequence\nfrom typing import Any, Literal, Union\n\nfrom fastapi.types import ModelNameMap\n\nif sys.version_info >= (3, 14):\n\n    class AnyUrl:\n        pass\n\n    class BaseConfig:\n        pass\n\n    class BaseModel:\n        pass\n\n    class Color:\n        pass\n\n    class CoreSchema:\n        pass\n\n    class ErrorWrapper:\n        pass\n\n    class FieldInfo:\n        pass\n\n    class GetJsonSchemaHandler:\n        pass\n\n    class JsonSchemaValue:\n        pass\n\n    class ModelField:\n        pass\n\n    class NameEmail:\n        pass\n\n    class RequiredParam:\n        pass\n\n    class SecretBytes:\n        pass\n\n    class SecretStr:\n        pass\n\n    class Undefined:\n        pass\n\n    class UndefinedType:\n        pass\n\n    class Url:\n        pass\n\n    from .v2 import ValidationError, create_model\n\n    def get_definitions(\n        *,\n        fields: list[ModelField],\n        model_name_map: ModelNameMap,\n        separate_input_output_schemas: bool = True,\n    ) -> tuple[\n        dict[\n            tuple[ModelField, Literal[\"validation\", \"serialization\"]], JsonSchemaValue\n        ],\n        dict[str, dict[str, Any]],\n    ]:\n        return {}, {}  # pragma: no cover\n\n\nelse:\n    from .v1 import AnyUrl as AnyUrl\n    from .v1 import BaseConfig as BaseConfig\n    from .v1 import BaseModel as BaseModel\n    from .v1 import Color as Color\n    from .v1 import CoreSchema as CoreSchema\n    from .v1 import ErrorWrapper as ErrorWrapper\n    from .v1 import FieldInfo as FieldInfo\n    from .v1 import GetJsonSchemaHandler as GetJsonSchemaHandler\n    from .v1 import JsonSchemaValue as JsonSchemaValue\n    from .v1 import ModelField as ModelField\n    from .v1 import NameEmail as NameEmail\n    from .v1 import RequiredParam as RequiredParam\n    from .v1 import SecretBytes as SecretBytes\n    from .v1 import SecretS
11edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "old_string": "@lru_cache\ndef get_cached_model_fields(model: type[BaseModel]) -> list[ModelField]:\n    if lenient_issubclass(model, may_v1.BaseModel):\n        from fastapi._compat import v1\n\n        return v1.get_model_fields(model)  # type: ignore[arg-type,return-value]\n    else:\n        from . import v2\n\n        return v2.get_model_fields(model)  # type: ignore[return-value]",
 "new_string": "@lru_cache\ndef get_cached_model_fields(model: type[BaseModel]) -> list[ModelField]:\n    from . import v2\n\n    return v2.get_model_fields(model)  # type: ignore[return-value]"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -30,14 +30,9 @@\n \n @lru_cache\n def get_cached_model_fields(model: type[BaseModel]) -> list[ModelField]:\n-    if lenient_issubclass(model, may_v1.BaseModel):\n-        from fastapi._compat import v1\n-\n-        return v1.get_model_fields(model)  # type: ignore[arg-type,return-value]\n-    else:\n-        from . import v2\n-\n-        return v2.get_model_fields(model)  # type: ignore[return-value]\n+    from . import v2\n+\n+    return v2.get_model_fields(model)  # type: ignore[return-value]\n \n \n def _is_undefined(value: object) -> bool:\n", "is_truncated": false}
12edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def _get_model_config(model: BaseModel) -> Any:\n    return v2._get_model_config(model)",
 "old_string": "def _get_model_config(model: BaseModel) -> Any:\n    if isinstance(model, may_v1.BaseModel):\n        from fastapi._compat import v1\n\n        return v1._get_model_config(model)\n\n    return v2._get_model_config(model)"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -43,11 +43,6 @@\n \n \n def _get_model_config(model: BaseModel) -> Any:\n-    if isinstance(model, may_v1.BaseModel):\n-        from fastapi._compat import v1\n-\n-        return v1._get_model_config(model)\n-\n     return v2._get_model_config(model)\n \n \n", "is_truncated": false}
13edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def _model_dump(\n    model: BaseModel, mode: Literal[\"json\", \"python\"] = \"json\", **kwargs: Any\n) -> Any:\n    return v2._model_dump(model, mode=mode, **kwargs)",
 "old_string": "def _model_dump(\n    model: BaseModel, mode: Literal[\"json\", \"python\"] = \"json\", **kwargs: Any\n) -> Any:\n    if isinstance(model, may_v1.BaseModel):\n        from fastapi._compat import v1\n\n        return v1._model_dump(model, mode=mode, **kwargs)\n\n    return v2._model_dump(model, mode=mode, **kwargs)"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -49,11 +49,6 @@\n def _model_dump(\n     model: BaseModel, mode: Literal[\"json\", \"python\"] = \"json\", **kwargs: Any\n ) -> Any:\n-    if isinstance(model, may_v1.BaseModel):\n-        from fastapi._compat import v1\n-\n-        return v1._model_dump(model, mode=mode, **kwargs)\n-\n     return v2._model_dump(model, mode=mode, **kwargs)\n \n \n", "is_truncated": false}
14edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def _is_error_wrapper(exc: Exception) -> bool:\n    return isinstance(exc, v2.ErrorWrapper)",
 "old_string": "def _is_error_wrapper(exc: Exception) -> bool:\n    if isinstance(exc, may_v1.ErrorWrapper):\n        return True\n\n    return isinstance(exc, v2.ErrorWrapper)"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -53,9 +53,6 @@\n \n \n def _is_error_wrapper(exc: Exception) -> bool:\n-    if isinstance(exc, may_v1.ErrorWrapper):\n-        return True\n-\n     return isinstance(exc, v2.ErrorWrapper)\n \n \n", "is_truncated": false}
15edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def copy_field_info(*, field_info: FieldInfo, annotation: Any) -> FieldInfo:\n    return v2.copy_field_info(field_info=field_info, annotation=annotation)",
 "old_string": "def copy_field_info(*, field_info: FieldInfo, annotation: Any) -> FieldInfo:\n    if isinstance(field_info, may_v1.FieldInfo):\n        from fastapi._compat import v1\n\n        return v1.copy_field_info(field_info=field_info, annotation=annotation)\n\n    return v2.copy_field_info(field_info=field_info, annotation=annotation)"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -57,11 +57,6 @@\n \n \n def copy_field_info(*, field_info: FieldInfo, annotation: Any) -> FieldInfo:\n-    if isinstance(field_info, may_v1.FieldInfo):\n-        from fastapi._compat import v1\n-\n-        return v1.copy_field_info(field_info=field_info, annotation=annotation)\n-\n     return v2.copy_field_info(field_info=field_info, annotation=annotation)\n \n \n", "is_truncated": false}
16edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def create_body_model(\n    *, fields: Sequence[ModelField], model_name: str\n) -> type[BaseModel]:\n    return v2.create_body_model(fields=fields, model_name=model_name)  # type: ignore[arg-type]",
 "old_string": "def create_body_model(\n    *, fields: Sequence[ModelField], model_name: str\n) -> type[BaseModel]:\n    if fields and isinstance(fields[0], may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.create_body_model(fields=fields, model_name=model_name)\n\n    return v2.create_body_model(fields=fields, model_name=model_name)  # type: ignore[arg-type]"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -63,11 +63,6 @@\n def create_body_model(\n     *, fields: Sequence[ModelField], model_name: str\n ) -> type[BaseModel]:\n-    if fields and isinstance(fields[0], may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.create_body_model(fields=fields, model_name=model_name)\n-\n     return v2.create_body_model(fields=fields, model_name=model_name)  # type: ignore[arg-type]\n \n \n", "is_truncated": false}
17edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def get_annotation_from_field_info(\n    annotation: Any, field_info: FieldInfo, field_name: str\n) -> Any:\n    return v2.get_annotation_from_field_info(\n        annotation=annotation, field_info=field_info, field_name=field_name\n    )",
 "old_string": "def get_annotation_from_field_info(\n    annotation: Any, field_info: FieldInfo, field_name: str\n) -> Any:\n    if isinstance(field_info, may_v1.FieldInfo):\n        from fastapi._compat import v1\n\n        return v1.get_annotation_from_field_info(\n            annotation=annotation, field_info=field_info, field_name=field_name\n        )\n\n    return v2.get_annotation_from_field_info(\n        annotation=annotation, field_info=field_info, field_name=field_name\n    )"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -69,13 +69,6 @@\n def get_annotation_from_field_info(\n     annotation: Any, field_info: FieldInfo, field_name: str\n ) -> Any:\n-    if isinstance(field_info, may_v1.FieldInfo):\n-        from fastapi._compat import v1\n-\n-        return v1.get_annotation_from_field_info(\n-            annotation=annotation, field_info=field_info, field_name=field_name\n-        )\n-\n     return v2.get_annotation_from_field_info(\n         annotation=annotation, field_info=field_info, field_name=field_name\n     )\n", "is_truncated": false}
18edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def is_bytes_field(field: ModelField) -> bool:\n    return v2.is_bytes_field(field)  # type: ignore[arg-type]\n\ndef is_bytes_sequence_field(field: ModelField) -> bool:\n    return v2.is_bytes_sequence_field(field)  # type: ignore[arg-type]\n\ndef is_scalar_field(field: ModelField) -> bool:\n    return v2.is_scalar_field(field)  # type: ignore[arg-type]",
 "old_string": "def is_bytes_field(field: ModelField) -> bool:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.is_bytes_field(field)\n\n    return v2.is_bytes_field(field)  # type: ignore[arg-type]\n\ndef is_bytes_sequence_field(field: ModelField) -> bool:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.is_bytes_sequence_field(field)\n\n    return v2.is_bytes_sequence_field(field)  # type: ignore[arg-type]\n\ndef is_scalar_field(field: ModelField) -> bool:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.is_scalar_field(field)\n\n    return v2.is_scalar_field(field)  # type: ignore[arg-type]"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "regex", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "regex", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -75,29 +75,12 @@\n \n \n def is_bytes_field(field: ModelField) -> bool:\n-    if isinstance(field, may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.is_bytes_field(field)\n-\n     return v2.is_bytes_field(field)  # type: ignore[arg-type]\n \n-\n def is_bytes_sequence_field(field: ModelField) -> bool:\n-    if isinstance(field, may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.is_bytes_sequence_field(field)\n-\n     return v2.is_bytes_sequence_field(field)  # type: ignore[arg-type]\n \n-\n def is_scalar_field(field: ModelField) -> bool:\n-    if isinstance(field, may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.is_scalar_field(field)\n-\n     return v2.is_scalar_field(field)  # type: ignore[arg-type]\n \n \n", "is_truncated": false}
19edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def is_sequence_field(field: ModelField) -> bool:\n    return v2.is_sequence_field(field)  # type: ignore[arg-type]",
 "old_string": "def is_sequence_field(field: ModelField) -> bool:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.is_sequence_field(field)\n\n    return v2.is_sequence_field(field)  # type: ignore[arg-type]"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -89,11 +89,6 @@\n \n \n def is_sequence_field(field: ModelField) -> bool:\n-    if isinstance(field, may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.is_sequence_field(field)\n-\n     return v2.is_sequence_field(field)  # type: ignore[arg-type]\n \n \n", "is_truncated": false}
20edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:\n    return v2.serialize_sequence_value(field=field, value=value)  # type: ignore[arg-type]",
 "old_string": "def serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.serialize_sequence_value(field=field, value=value)\n\n    return v2.serialize_sequence_value(field=field, value=value)  # type: ignore[arg-type]"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -93,11 +93,6 @@\n \n \n def serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:\n-    if isinstance(field, may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.serialize_sequence_value(field=field, value=value)\n-\n     return v2.serialize_sequence_value(field=field, value=value)  # type: ignore[arg-type]\n \n \n", "is_truncated": false}
21edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def get_compat_model_name_map(fields: list[ModelField]) -> ModelNameMap:\n    v2_model_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n    v2_flat_models = v2.get_flat_models_from_fields(v2_model_fields, known_models=set())\n    all_flat_models = v2_flat_models\n\n    model_name_map = v2.get_model_name_map(all_flat_models)  # type: ignore[arg-type]\n    return model_name_map",
 "old_string": "def get_compat_model_name_map(fields: list[ModelField]) -> ModelNameMap:\n    v1_model_fields = [\n        field for field in fields if isinstance(field, may_v1.ModelField)\n    ]\n    if v1_model_fields:\n        from fastapi._compat import v1\n\n        v1_flat_models = v1.get_flat_models_from_fields(\n            v1_model_fields,  # type: ignore[arg-type]\n            known_models=set(),\n        )\n        all_flat_models = v1_flat_models\n    else:\n        all_flat_models = set()\n\n    v2_model_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n    v2_flat_models = v2.get_flat_models_from_fields(v2_model_fields, known_models=set())\n    all_flat_models = all_flat_models.union(v2_flat_models)  # type: ignore[arg-type]\n\n    model_name_map = v2.get_model_name_map(all_flat_models)  # type: ignore[arg-type]\n    return model_name_map"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -97,23 +97,9 @@\n \n \n def get_compat_model_name_map(fields: list[ModelField]) -> ModelNameMap:\n-    v1_model_fields = [\n-        field for field in fields if isinstance(field, may_v1.ModelField)\n-    ]\n-    if v1_model_fields:\n-        from fastapi._compat import v1\n-\n-        v1_flat_models = v1.get_flat_models_from_fields(\n-            v1_model_fields,  # type: ignore[arg-type]\n-            known_models=set(),\n-        )\n-        all_flat_models = v1_flat_models\n-    else:\n-        all_flat_models = set()\n-\n     v2_model_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n     v2_flat_models = v2.get_flat_models_from_fields(v2_model_fields, known_models=set())\n-    all_flat_models = all_flat_models.union(v2_flat_models)  # type: ignore[arg-type]\n+    all_flat_models = v2_flat_models\n \n     model_name_map = v2.get_model_name_map(all_flat_models)  # type: ignore[arg-type]\n     return model_name_map\n", "is_truncated": false}
22edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def get_definitions(\n    *,\n    fields: list[ModelField],\n    model_name_map: ModelNameMap,\n    separate_input_output_schemas: bool = True,\n) -> tuple[\n    dict[\n        tuple[ModelField, Literal[\"validation\", \"serialization\"]],\n        may_v1.JsonSchemaValue,\n    ],\n    dict[str, dict[str, Any]],\n]:\n    v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n    v2_field_maps, v2_definitions = v2.get_definitions(\n        fields=v2_fields,\n        model_name_map=model_name_map,\n        separate_input_output_schemas=separate_input_output_schemas,\n    )\n    return v2_field_maps, v2_definitions",
 "old_string": "def get_definitions(\n    *,\n    fields: list[ModelField],\n    model_name_map: ModelNameMap,\n    separate_input_output_schemas: bool = True,\n) -> tuple[\n    dict[\n        tuple[ModelField, Literal[\"validation\", \"serialization\"]],\n        may_v1.JsonSchemaValue,\n    ],\n    dict[str, dict[str, Any]],\n]:\n    if sys.version_info < (3, 14):\n        v1_fields = [field for field in fields if isinstance(field, may_v1.ModelField)]\n        v1_field_maps, v1_definitions = may_v1.get_definitions(\n            fields=v1_fields,  # type: ignore[arg-type]\n            model_name_map=model_name_map,\n            separate_input_output_schemas=separate_input_output_schemas,\n        )\n\n        v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n        v2_field_maps, v2_definitions = v2.get_definitions(\n            fields=v2_fields,\n            model_name_map=model_name_map,\n            separate_input_output_schemas=separate_input_output_schemas,\n        )\n        all_definitions = {**v1_definitions, **v2_definitions}\n        all_field_maps = {**v1_field_maps, **v2_field_maps}  # type: ignore[misc]\n        return all_field_maps, all_definitions\n\n    # Pydantic v1 is not supported since Python 3.14\n    else:\n        v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n        v2_field_maps, v2_definitions = v2.get_definitions(\n            fields=v2_fields,\n            model_name_map=model_name_map,\n            separate_input_output_schemas=separate_input_output_schemas,\n        )\n        return v2_field_maps, v2_definitions"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -117,33 +117,13 @@\n     ],\n     dict[str, dict[str, Any]],\n ]:\n-    if sys.version_info < (3, 14):\n-        v1_fields = [field for field in fields if isinstance(field, may_v1.ModelField)]\n-        v1_field_maps, v1_definitions = may_v1.get_definitions(\n-            fields=v1_fields,  # type: ignore[arg-type]\n-            model_name_map=model_name_map,\n-            separate_input_output_schemas=separate_input_output_schemas,\n-        )\n-\n-        v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n-        v2_field_maps, v2_definitions = v2.get_definitions(\n-            fields=v2_fields,\n-            model_name_map=model_name_map,\n-            separate_input_output_schemas=separate_input_output_schemas,\n-        )\n-        all_definitions = {**v1_definitions, **v2_definitions}\n-        all_field_maps = {**v1_field_maps, **v2_field_maps}  # type: ignore[misc]\n-        return all_field_maps, all_definitions\n-\n-    # Pydantic v1 is not supported since Python 3.14\n-    else:\n-        v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n-        v2_field_maps, v2_definitions = v2.get_definitions(\n-            fields=v2_fields,\n-            model_name_map=model_name_map,\n-            separate_input_output_schemas=separate_input_output_schemas,\n-        )\n-        return v2_field_maps, v2_definitions\n+    v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n+    v2_field_maps, v2_definitions = v2.get_definitions(\n+        fields=v2_fields,\n+        model_name_map=model_name_map,\n+        separate_input_output_schemas=separate_input_output_schemas,\n+    )\n+    return v2_field_maps, v2_definitions\n \n \n def get_schema_from_model_field(\n", "is_truncated": false}
23edit_file
{
 "filepath": "fastapi/_compat/main.py",
 "new_string": "def get_schema_from_model_field(\n    *,\n    field: ModelField,\n    model_name_map: ModelNameMap,\n    field_mapping: dict[\n        tuple[ModelField, Literal[\"validation\", \"serialization\"]],\n        may_v1.JsonSchemaValue,\n    ],\n    separate_input_output_schemas: bool = True,\n) -> dict[str, Any]:\n    return v2.get_schema_from_model_field(\n        field=field,  # type: ignore[arg-type]\n        model_name_map=model_name_map,\n        field_mapping=field_mapping,  # type: ignore[arg-type]\n        separate_input_output_schemas=separate_input_output_schemas,\n    )",
 "old_string": "def get_schema_from_model_field(\n    *,\n    field: ModelField,\n    model_name_map: ModelNameMap,\n    field_mapping: dict[\n        tuple[ModelField, Literal[\"validation\", \"serialization\"]],\n        may_v1.JsonSchemaValue,\n    ],\n    separate_input_output_schemas: bool = True,\n) -> dict[str, Any]:\n    if isinstance(field, may_v1.ModelField):\n        from fastapi._compat import v1\n\n        return v1.get_schema_from_model_field(\n            field=field,\n            model_name_map=model_name_map,\n            field_mapping=field_mapping,\n            separate_input_output_schemas=separate_input_output_schemas,\n        )\n\n    return v2.get_schema_from_model_field(\n        field=field,  # type: ignore[arg-type]\n        model_name_map=model_name_map,\n        field_mapping=field_mapping,  # type: ignore[arg-type]\n        separate_input_output_schemas=separate_input_output_schemas,\n    )"
}
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/mai
full
{"status": "ok", "filepath": "fastapi/_compat/main.py", "occurrences": 1, "strategy": "exact", "diff": "--- a/fastapi/_compat/main.py\n+++ b/fastapi/_compat/main.py\n@@ -136,16 +136,6 @@\n     ],\n     separate_input_output_schemas: bool = True,\n ) -> dict[str, Any]:\n-    if isinstance(field, may_v1.ModelField):\n-        from fastapi._compat import v1\n-\n-        return v1.get_schema_from_model_field(\n-            field=field,\n-            model_name_map=model_name_map,\n-            field_mapping=field_mapping,\n-            separate_input_output_schemas=separate_input_output_schemas,\n-        )\n-\n     return v2.get_schema_from_model_field(\n         field=field,  # type: ignore[arg-type]\n         model_name_map=model_name_map,\n", "is_truncated": false}

Patch

diff --git a/fastapi/_compat/main.py b/fastapi/_compat/main.py
index 95053a23..d0c026bf 100644
--- a/fastapi/_compat/main.py
+++ b/fastapi/_compat/main.py
@@ -30,14 +30,9 @@ from .v2 import (
 
 @lru_cache
 def get_cached_model_fields(model: type[BaseModel]) -> list[ModelField]:
-    if lenient_issubclass(model, may_v1.BaseModel):
-        from fastapi._compat import v1
+    from . import v2
 
-        return v1.get_model_fields(model)  # type: ignore[arg-type,return-value]
-    else:
-        from . import v2
-
-        return v2.get_model_fields(model)  # type: ignore[return-value]
+    return v2.get_model_fields(model)  # type: ignore[return-value]
 
 
 def _is_undefined(value: object) -> bool:
@@ -48,91 +43,44 @@ def _is_undefined(value: object) -> bool:
 
 
 def _get_model_config(model: BaseModel) -> Any:
-    if isinstance(model, may_v1.BaseModel):
-        from fastapi._compat import v1
-
-        return v1._get_model_config(model)
-
     return v2._get_model_config(model)
 
 
 def _model_dump(
     model: BaseModel, mode: Literal["json", "python"] = "json", **kwargs: Any
 ) -> Any:
-    if isinstance(model, may_v1.BaseModel):
-        from fastapi._compat import v1
-
-        return v1._model_dump(model, mode=mode, **kwargs)
-
     return v2._model_dump(model, mode=mode, **kwargs)
 
 
 def _is_error_wrapper(exc: Exception) -> bool:
-    if isinstance(exc, may_v1.ErrorWrapper):
-        return True
-
     return isinstance(exc, v2.ErrorWrapper)
 
 
 def copy_field_info(*, field_info: FieldInfo, annotation: Any) -> FieldInfo:
-    if isinstance(field_info, may_v1.FieldInfo):
-        from fastapi._compat import v1
-
-        return v1.copy_field_info(field_info=field_info, annotation=annotation)
-
     return v2.copy_field_info(field_info=field_info, annotation=annotation)
 
 
 def create_body_model(
     *, fields: Sequence[ModelField], model_name: str
 ) -> type[BaseModel]:
-    if fields and isinstance(fields[0], may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.create_body_model(fields=fields, model_name=model_name)
-
     return v2.create_body_model(fields=fields, model_name=model_name)  # type: ignore[arg-type]
 
 
 def get_annotation_from_field_info(
     annotation: Any, field_info: FieldInfo, field_name: str
 ) -> Any:
-    if isinstance(field_info, may_v1.FieldInfo):
-        from fastapi._compat import v1
-
-        return v1.get_annotation_from_field_info(
-            annotation=annotation, field_info=field_info, field_name=field_name
-        )
-
     return v2.get_annotation_from_field_info(
         annotation=annotation, field_info=field_info, field_name=field_name
     )
 
 
 def is_bytes_field(field: ModelField) -> bool:
-    if isinstance(field, may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.is_bytes_field(field)
-
     return v2.is_bytes_field(field)  # type: ignore[arg-type]
 
-
 def is_bytes_sequence_field(field: ModelField) -> bool:
-    if isinstance(field, may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.is_bytes_sequence_field(field)
-
     return v2.is_bytes_sequence_field(field)  # type: ignore[arg-type]
 
-
 def is_scalar_field(field: ModelField) -> bool:
-    if isinstance(field, may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.is_scalar_field(field)
-
     return v2.is_scalar_field(field)  # type: ignore[arg-type]
 
 
@@ -141,41 +89,17 @@ def is_scalar_sequence_field(field: ModelField) -> bool:
 
 
 def is_sequence_field(field: ModelField) -> bool:
-    if isinstance(field, may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.is_sequence_field(field)
-
     return v2.is_sequence_field(field)  # type: ignore[arg-type]
 
 
 def serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:
-    if isinstance(field, may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.serialize_sequence_value(field=field, value=value)
-
     return v2.serialize_sequence_value(field=field, value=value)  # type: ignore[arg-type]
 
 
 def get_compat_model_name_map(fields: list[ModelField]) -> ModelNameMap:
-    v1_model_fields = [
-        field for field in fields if isinstance(field, may_v1.ModelField)
-    ]
-    if v1_model_fields:
-        from fastapi._compat import v1
-
-        v1_flat_models = v1.get_flat_models_from_fields(
-            v1_model_fields,  # type: ignore[arg-type]
-            known_models=set(),
-        )
-        all_flat_models = v1_flat_models
-    else:
-        all_flat_models = set()
-
     v2_model_fields = [field for field in fields if isinstance(field, v2.ModelField)]
     v2_flat_models = v2.get_flat_models_from_fields(v2_model_fields, known_models=set())
-    all_flat_models = all_flat_models.union(v2_flat_models)  # type: ignore[arg-type]
+    all_flat_models = v2_flat_models
 
     model_name_map = v2.get_model_name_map(all_flat_models)  # type: ignore[arg-type]
     return model_name_map
@@ -193,33 +117,13 @@ def get_definitions(
     ],
     dict[str, dict[str, Any]],
 ]:
-    if sys.version_info < (3, 14):
-        v1_fields = [field for field in fields if isinstance(field, may_v1.ModelField)]
-        v1_field_maps, v1_definitions = may_v1.get_definitions(
-            fields=v1_fields,  # type: ignore[arg-type]
-            model_name_map=model_name_map,
-            separate_input_output_schemas=separate_input_output_schemas,
-        )
-
-        v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]
-        v2_field_maps, v2_definitions = v2.get_definitions(
-            fields=v2_fields,
-            model_name_map=model_name_map,
-            separate_input_output_schemas=separate_input_output_schemas,
-        )
-        all_definitions = {**v1_definitions, **v2_definitions}
-        all_field_maps = {**v1_field_maps, **v2_field_maps}  # type: ignore[misc]
-        return all_field_maps, all_definitions
-
-    # Pydantic v1 is not supported since Python 3.14
-    else:
-        v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]
-        v2_field_maps, v2_definitions = v2.get_definitions(
-            fields=v2_fields,
-            model_name_map=model_name_map,
-            separate_input_output_schemas=separate_input_output_schemas,
-        )
-        return v2_field_maps, v2_definitions
+    v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]
+    v2_field_maps, v2_definitions = v2.get_definitions(
+        fields=v2_fields,
+        model_name_map=model_name_map,
+        separate_input_output_schemas=separate_input_output_schemas,
+    )
+    return v2_field_maps, v2_definitions
 
 
 def get_schema_from_model_field(
@@ -232,16 +136,6 @@ def get_schema_from_model_field(
     ],
     separate_input_output_schemas: bool = True,
 ) -> dict[str, Any]:
-    if isinstance(field, may_v1.ModelField):
-        from fastapi._compat import v1
-
-        return v1.get_schema_from_model_field(
-            field=field,
-            model_name_map=model_name_map,
-            field_mapping=field_mapping,
-            separate_input_output_schemas=separate_input_output_schemas,
-        )
-
     return v2.get_schema_from_model_field(
         field=field,  # type: ignore[arg-type]
         model_name_map=model_name_map,

Test output

show
==================================== ERRORS ====================================
_______________ ERROR collecting tests/test_jsonable_encoder.py ________________
ImportError while importing test module '/tmp/swe_work/eval3_submission_v2t/fastapi_14609/b/workspace/tests/test_jsonable_encoder.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/root/.local/share/uv/python/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_jsonable_encoder.py:14: in <module>
    from fastapi.exceptions import PydanticV1NotSupportedError
E   ImportError: cannot import name 'PydanticV1NotSupportedError' from 'fastapi.exceptions' (/tmp/swe_work/eval3_submission_v2t/fastapi_14609/b/workspace/fastapi/exceptions.py)
=============================== warnings summary ===============================
../../../../../../kaggle/tmp/envs/overlays/starlette-0.50.0-py3-none-any/starlette/testclient.py:45
  /kaggle/tmp/envs/overlays/starlette-0.50.0-py3-none-any/starlette/testclient.py:45: DeprecationWarning: The anyio.abc.BlockingPortal alias is deprecated, use anyio.from_thread.BlockingPortal instead.
    _PortalFactoryType = Callable[[], AbstractContextManager[anyio.abc.BlockingPortal]]

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
1 warning, 1 error in 0.88s