From 3c831775e6630528bf1bb36d09cf23db4ec4c1c3 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 00:25:38 +0900 Subject: [PATCH 01/19] Add release benchmark docs --- .github/workflows/generated-docs-sync.yaml | 5 + .github/workflows/llms-txt.yaml | 5 + .github/workflows/release-benchmarks.yaml | 196 + README.md | 3 + .../release-benchmarks-large-jsonschema.svg | 104 + .../release-benchmarks-large-openapi.svg | 104 + .../release-benchmarks-small-openapi.svg | 104 + docs/assets/benchmarks/release-benchmarks.svg | 104 + docs/data/release-benchmarks.json | 7708 +++++++++++++++++ docs/index.md | 3 + docs/llms-full.txt | 266 + docs/llms.txt | 1 + docs/performance-benchmarks.md | 258 + scripts/build_preset_docs.py | 8 +- scripts/build_release_benchmark_docs.py | 848 ++ scripts/collect_release_benchmarks.py | 444 + scripts/merge_release_benchmarks.py | 167 + scripts/release_benchmark_errors.py | 52 + scripts/select_release_benchmark_versions.py | 479 + .../build_release_benchmark_docs_check.txt | 4 + .../collect_release_benchmarks_failures.txt | 3 + ...ollect_release_benchmarks_invalid_args.txt | 7 + .../merge_release_benchmarks_cli_outputs.txt | 49 + .../release_benchmark_cli_outputs.txt | 127 + .../release_benchmark_error_helpers.txt | 4 + .../release_benchmark_rendered.txt | 126 + ...release_benchmark_versions_cli_outputs.txt | 63 + .../release_benchmarks/clickpy_versions.json | 47 + .../data/release_benchmarks/pypi_project.json | 40 + .../release_benchmarks/pypistats_overall.json | 16 + .../release_benchmarks/pypistats_recent.json | 9 + .../release_fragment_0641.json | 31 + tests/data/release_benchmarks/sample.json | 106 + ...est_build_release_benchmark_docs_script.py | 266 + tox.ini | 8 + zensical.toml | 1 + 36 files changed, 11765 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release-benchmarks.yaml create mode 100644 docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg create mode 100644 docs/assets/benchmarks/release-benchmarks-large-openapi.svg create mode 100644 docs/assets/benchmarks/release-benchmarks-small-openapi.svg create mode 100644 docs/assets/benchmarks/release-benchmarks.svg create mode 100644 docs/data/release-benchmarks.json create mode 100644 docs/performance-benchmarks.md create mode 100644 scripts/build_release_benchmark_docs.py create mode 100644 scripts/collect_release_benchmarks.py create mode 100644 scripts/merge_release_benchmarks.py create mode 100644 scripts/release_benchmark_errors.py create mode 100644 scripts/select_release_benchmark_versions.py create mode 100644 tests/data/expected/release_benchmark_docs/build_release_benchmark_docs_check.txt create mode 100644 tests/data/expected/release_benchmark_docs/collect_release_benchmarks_failures.txt create mode 100644 tests/data/expected/release_benchmark_docs/collect_release_benchmarks_invalid_args.txt create mode 100644 tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt create mode 100644 tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt create mode 100644 tests/data/expected/release_benchmark_docs/release_benchmark_error_helpers.txt create mode 100644 tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt create mode 100644 tests/data/expected/release_benchmark_docs/select_release_benchmark_versions_cli_outputs.txt create mode 100644 tests/data/release_benchmarks/clickpy_versions.json create mode 100644 tests/data/release_benchmarks/pypi_project.json create mode 100644 tests/data/release_benchmarks/pypistats_overall.json create mode 100644 tests/data/release_benchmarks/pypistats_recent.json create mode 100644 tests/data/release_benchmarks/release_fragment_0641.json create mode 100644 tests/data/release_benchmarks/sample.json create mode 100644 tests/test_build_release_benchmark_docs_script.py diff --git a/.github/workflows/generated-docs-sync.yaml b/.github/workflows/generated-docs-sync.yaml index 96051fc8a..c3cf3730e 100644 --- a/.github/workflows/generated-docs-sync.yaml +++ b/.github/workflows/generated-docs-sync.yaml @@ -15,9 +15,12 @@ on: - 'scripts/build_schema_docs.py' - 'scripts/build_conformance_docs.py' - 'scripts/build_architecture_docs.py' + - 'scripts/build_release_benchmark_docs.py' - 'scripts/build_llms_txt.py' - 'scripts/update_generate_prompt_snapshots.py' - 'scripts/update_docs_version.py' + - 'docs/data/release-benchmarks.json' + - 'docs/assets/benchmarks/release-benchmarks.svg' - 'tox.ini' - '.github/workflows/generated-docs-sync.yaml' - 'docs/**/*.md' @@ -66,6 +69,8 @@ jobs: docs/presets.md docs/conformance.md docs/architecture.md + docs/performance-benchmarks.md + docs/assets/benchmarks/release-benchmarks.svg docs/cli-reference/ docs/llms.txt docs/llms-full.txt diff --git a/.github/workflows/llms-txt.yaml b/.github/workflows/llms-txt.yaml index a9b00c52d..64a8f195f 100644 --- a/.github/workflows/llms-txt.yaml +++ b/.github/workflows/llms-txt.yaml @@ -13,6 +13,9 @@ on: - 'scripts/build_preset_docs.py' - 'src/datamodel_code_generator/parser/schema_version.py' - 'scripts/build_schema_docs.py' + - 'scripts/build_release_benchmark_docs.py' + - 'docs/data/release-benchmarks.json' + - 'docs/assets/benchmarks/release-benchmarks.svg' - 'docs/**/*.md' - 'README.md' - 'zensical.toml' @@ -67,5 +70,7 @@ jobs: run: .tox/schema-docs/bin/python scripts/build_schema_docs.py - name: Build preset docs run: .tox/preset-docs/bin/python scripts/build_preset_docs.py + - name: Build release benchmark docs + run: .tox/llms-txt/bin/python scripts/build_release_benchmark_docs.py - name: Build llms.txt run: .tox/llms-txt/bin/python scripts/build_llms_txt.py diff --git a/.github/workflows/release-benchmarks.yaml b/.github/workflows/release-benchmarks.yaml new file mode 100644 index 000000000..32de62190 --- /dev/null +++ b/.github/workflows/release-benchmarks.yaml @@ -0,0 +1,196 @@ +name: Release Benchmarks + +on: + pull_request: + types: [labeled] + workflow_run: + workflows: ["Publish"] + types: [completed] + workflow_dispatch: + inputs: + versions: + description: "Release tags or versions to benchmark. Leave empty to select by PyPI download usage." + required: false + default: "" + history_days: + description: "PyPI download lookback window used for version selection." + required: false + default: "365" + limit: + description: "Maximum release versions to benchmark." + required: false + default: "40" + runs: + description: "Measured runs per release/input/formatter case." + required: false + default: "7" + python_version: + description: "Python version used to install and run released packages." + required: false + default: "3.14.2" + +concurrency: + group: release-benchmarks-${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.ref }} + cancel-in-progress: false + +permissions: + contents: read + +jobs: + resolve: + name: Resolve release benchmark versions + runs-on: ubuntu-24.04 + if: >- + ${{ + github.event_name == 'workflow_dispatch' || + ( + github.event_name == 'pull_request' && + contains(github.event.pull_request.labels.*.name, 'run-release-benchmarks') && + github.event.pull_request.head.repo.full_name == github.repository + ) || + ( + github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event == 'push' && + github.event.workflow_run.head_repository.full_name == github.repository + ) + }} + outputs: + versions_json: ${{ steps.versions.outputs.versions_json }} + versions: ${{ steps.versions.outputs.versions }} + env: + BENCHMARK_PYTHON_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.python_version || '3.14.2' }} + BENCHMARK_HISTORY_DAYS: ${{ github.event_name == 'workflow_dispatch' && inputs.history_days || '365' }} + BENCHMARK_LIMIT: ${{ github.event_name == 'workflow_dispatch' && inputs.limit || '40' }} + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + with: + python-version: ${{ env.BENCHMARK_PYTHON_VERSION }} + - name: Resolve release versions + id: versions + env: + EVENT_NAME: ${{ github.event_name }} + WORKFLOW_TAG: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_branch || '' }} + WORKFLOW_SHA: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || '' }} + INPUT_VERSIONS: ${{ github.event_name == 'workflow_dispatch' && inputs.versions || '' }} + run: | + set -euo pipefail + versions="$INPUT_VERSIONS" + if [ "$EVENT_NAME" = "workflow_run" ]; then + versions="$WORKFLOW_TAG" + case "$versions" in + refs/tags/*) versions="${versions#refs/tags/}" ;; + v[0-9]* | [0-9]*) ;; + *) versions="" ;; + esac + if [ -z "$versions" ] && [ -n "$WORKFLOW_SHA" ]; then + git fetch --tags --force --depth=1 origin '+refs/tags/*:refs/tags/*' + versions="$(git tag --points-at "$WORKFLOW_SHA" | sort -V | tail -n 1)" + fi + if [ -z "$versions" ]; then + echo "Could not determine release tag for Publish workflow run $WORKFLOW_SHA" >&2 + exit 1 + fi + fi + python scripts/select_release_benchmark_versions.py \ + --versions "$versions" \ + --history-days "$BENCHMARK_HISTORY_DAYS" \ + --limit "$BENCHMARK_LIMIT" \ + --output .benchmarks/release-benchmark-selection.json + - name: Upload benchmark selection + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: dcg-release-benchmark-selection + path: .benchmarks/release-benchmark-selection.json + if-no-files-found: error + + collect: + name: Collect release benchmarks (${{ matrix.version }}) + needs: resolve + if: needs.resolve.result == 'success' + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + max-parallel: 40 + matrix: + version: ${{ fromJson(needs.resolve.outputs.versions_json) }} + env: + BENCHMARK_PYTHON_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.python_version || '3.14.2' }} + BENCHMARK_RUNS: ${{ github.event_name == 'workflow_dispatch' && inputs.runs || (github.event_name == 'pull_request' && '3' || '7') }} + OS: ubuntu-24.04 + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + with: + python-version: ${{ env.BENCHMARK_PYTHON_VERSION }} + - name: Install the latest version of uv + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 + - name: Collect benchmarks + env: + BENCHMARK_VERSION: ${{ matrix.version }} + run: >- + python scripts/collect_release_benchmarks.py + --versions "$BENCHMARK_VERSION" + --runs "$BENCHMARK_RUNS" + --output ".benchmarks/fragments/release-benchmark-${BENCHMARK_VERSION}.json" + - name: Upload benchmark fragment + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: dcg-release-benchmark-fragment-${{ matrix.version }} + path: .benchmarks/fragments/release-benchmark-${{ matrix.version }}.json + if-no-files-found: error + + build: + name: Build release benchmark docs artifact + needs: [resolve, collect] + if: needs.collect.result == 'success' + runs-on: ubuntu-24.04 + env: + BENCHMARK_PYTHON_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.python_version || '3.14.2' }} + OS: ubuntu-24.04 + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + with: + python-version: ${{ env.BENCHMARK_PYTHON_VERSION }} + - name: Download benchmark selection + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + name: dcg-release-benchmark-selection + path: .benchmarks + - name: Download benchmark fragments + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + pattern: dcg-release-benchmark-fragment-* + path: .benchmarks/fragments + merge-multiple: true + - name: Merge benchmark data + run: >- + python scripts/merge_release_benchmarks.py + .benchmarks/fragments/*.json + --selection .benchmarks/release-benchmark-selection.json + --output .benchmarks/release-benchmarks.json + - name: Build benchmark docs artifact + run: >- + python scripts/build_release_benchmark_docs.py + --data .benchmarks/release-benchmarks.json + --docs .benchmarks/docs/performance-benchmarks.md + --svg .benchmarks/docs/assets/benchmarks/release-benchmarks.svg + - name: Upload benchmark data + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: dcg-release-benchmarks-json + path: .benchmarks/release-benchmarks.json + if-no-files-found: error + - name: Upload benchmark docs + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: dcg-release-benchmark-docs + path: .benchmarks/docs + if-no-files-found: error diff --git a/README.md b/README.md index 035b566a7..3398ef142 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,8 @@ Custom templates can emit Python outside the standard generated model patterns c custom-template output is not exhaustively validated. If `--formatters builtin` produces invalid or poorly formatted output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior](https://datamodel-code-generator.koxudaxi.dev/formatter-behavior/) for details. + +See [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/) for release benchmark data and SVG charts. --- @@ -213,6 +215,7 @@ output with a custom template, please open an issue with a small reproducer. See - ⚙️ [pyproject.toml](https://datamodel-code-generator.koxudaxi.dev/pyproject_toml/) - Configuration file - 🔄 [CI/CD Integration](https://datamodel-code-generator.koxudaxi.dev/ci-cd/) - GitHub Actions, pre-commit hooks - ✅ [Conformance Dashboard](https://datamodel-code-generator.koxudaxi.dev/conformance/) - External corpus coverage signals +- 📈 [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/) - Release benchmark tables and SVG charts - 🧭 [Architecture](https://datamodel-code-generator.koxudaxi.dev/architecture/) - Generation pipeline and synchronized component inventory - 🚀 [One-liner Usage](https://datamodel-code-generator.koxudaxi.dev/oneliner/) - uvx, pipx, clipboard integration - ❓ [FAQ](https://datamodel-code-generator.koxudaxi.dev/faq/) - Common questions diff --git a/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg b/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg new file mode 100644 index 000000000..b2f94ffda --- /dev/null +++ b/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg @@ -0,0 +1,104 @@ + + datamodel-code-generator release benchmarks + Historical median generation time by release version for Large / JSON Schema. + + + +datamodel-code-generator release trend: Large / JSON Schema +Median generation time by release version. Lower is faster. + +0.00ms + +1.45s + +2.91s + +4.36s + +5.82s + + + +0.17.2 + +0.25.6 + +0.26.3 + +0.28.2 + +0.30.2 + +0.34.0 + +0.42.0 + +0.52.2 + +0.55.0 + +0.58.0 + +0.64.1 + + +Default + + +Built-in + + +Ruff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Release version +Median + diff --git a/docs/assets/benchmarks/release-benchmarks-large-openapi.svg b/docs/assets/benchmarks/release-benchmarks-large-openapi.svg new file mode 100644 index 000000000..56318533f --- /dev/null +++ b/docs/assets/benchmarks/release-benchmarks-large-openapi.svg @@ -0,0 +1,104 @@ + + datamodel-code-generator release benchmarks + Historical median generation time by release version for Large / OpenAPI. + + + +datamodel-code-generator release trend: Large / OpenAPI +Median generation time by release version. Lower is faster. + +0.00ms + +1.32s + +2.64s + +3.97s + +5.29s + + + +0.17.2 + +0.25.6 + +0.26.3 + +0.28.2 + +0.30.2 + +0.34.0 + +0.42.0 + +0.52.2 + +0.55.0 + +0.58.0 + +0.64.1 + + +Default + + +Built-in + + +Ruff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Release version +Median + diff --git a/docs/assets/benchmarks/release-benchmarks-small-openapi.svg b/docs/assets/benchmarks/release-benchmarks-small-openapi.svg new file mode 100644 index 000000000..b06695d7b --- /dev/null +++ b/docs/assets/benchmarks/release-benchmarks-small-openapi.svg @@ -0,0 +1,104 @@ + + datamodel-code-generator release benchmarks + Historical median generation time by release version for Small / OpenAPI. + + + +datamodel-code-generator release trend: Small / OpenAPI +Median generation time by release version. Lower is faster. + +0.00ms + +746ms + +1.49s + +2.24s + +2.98s + + + +0.17.2 + +0.25.6 + +0.26.3 + +0.28.2 + +0.30.2 + +0.34.0 + +0.42.0 + +0.52.2 + +0.55.0 + +0.58.0 + +0.64.1 + + +Default + + +Built-in + + +Ruff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Release version +Median + diff --git a/docs/assets/benchmarks/release-benchmarks.svg b/docs/assets/benchmarks/release-benchmarks.svg new file mode 100644 index 000000000..55ca73419 --- /dev/null +++ b/docs/assets/benchmarks/release-benchmarks.svg @@ -0,0 +1,104 @@ + + datamodel-code-generator release benchmarks + Historical median generation time by release version for Small / JSON Schema. + + + +datamodel-code-generator release trend: Small / JSON Schema +Median generation time by release version. Lower is faster. + +0.00ms + +604ms + +1.21s + +1.81s + +2.42s + + + +0.17.2 + +0.25.6 + +0.26.3 + +0.28.2 + +0.30.2 + +0.34.0 + +0.42.0 + +0.52.2 + +0.55.0 + +0.58.0 + +0.64.1 + + +Default + + +Built-in + + +Ruff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Release version +Median + diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json new file mode 100644 index 000000000..eba456da5 --- /dev/null +++ b/docs/data/release-benchmarks.json @@ -0,0 +1,7708 @@ +{ + "schema_version": 1, + "metadata": { + "generated_at": "2026-06-21T16:10:37Z", + "workflow": "Release Benchmarks", + "workflow_run_id": "27909913146", + "collector_sha": "85e13401db79e0058d53e2b20864bbe76917177d", + "os": "ubuntu-24.04", + "python_version": "3.14.2", + "runs_per_case": "3", + "warmups_per_case": "1", + "selection_strategy": "clickpy_downloads", + "selection_window_days": "365", + "selected_versions": "0.64.1,0.64.0,0.59.0,0.56.1,0.53.0,0.33.0,0.26.1,0.31.2,0.36.0,0.32.0,0.28.2,0.35.0,0.25.9,0.28.5,0.30.1,0.26.5,0.55.0,0.34.0,0.54.0,0.25.6,0.39.0,0.26.3,0.25.2,0.57.0,0.56.0,0.52.2,0.25.4,0.54.1,0.26.4,0.28.4,0.42.0,0.27.3,0.30.2,0.17.2,0.42.2,0.43.1,0.25.7,0.25.0,0.58.0,0.45.0", + "download_source": "clickpy", + "download_window_days": "365", + "download_versions": "160", + "download_window_total": "117300797", + "pypistats_source": "pypistats.org", + "pypistats_last_day": "267992", + "pypistats_last_week": "3536677", + "pypistats_last_month": "14094143", + "pypistats_timeseries_days": "", + "pypistats_timeseries_downloads": "" + }, + "entries": [ + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.17.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 386.88, + "min_ms": 386.71, + "max_ms": 392.235, + "stdev_ms": 3.142, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3437.675, + "min_ms": 3434.473, + "max_ms": 3450.745, + "stdev_ms": 8.62, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 425.207, + "min_ms": 420.633, + "max_ms": 428.595, + "stdev_ms": 3.995, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3199.408, + "min_ms": 3125.231, + "max_ms": 3199.943, + "stdev_ms": 42.982, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 417.8, + "min_ms": 414.03, + "max_ms": 417.939, + "stdev_ms": 2.218, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3671.06, + "min_ms": 3618.839, + "max_ms": 3845.001, + "stdev_ms": 118.414, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 459.88, + "min_ms": 455.168, + "max_ms": 474.289, + "stdev_ms": 9.962, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3282.125, + "min_ms": 3276.224, + "max_ms": 3318.271, + "stdev_ms": 22.764, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 396.39, + "min_ms": 394.673, + "max_ms": 402.313, + "stdev_ms": 4.008, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3488.498, + "min_ms": 3452.695, + "max_ms": 3490.267, + "stdev_ms": 21.2, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 436.513, + "min_ms": 434.687, + "max_ms": 437.654, + "stdev_ms": 1.497, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3188.523, + "min_ms": 3181.403, + "max_ms": 3224.649, + "stdev_ms": 23.187, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 412.531, + "min_ms": 411.051, + "max_ms": 421.034, + "stdev_ms": 5.388, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3415.537, + "min_ms": 3310.082, + "max_ms": 3670.968, + "stdev_ms": 185.564, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 446.511, + "min_ms": 444.555, + "max_ms": 478.991, + "stdev_ms": 19.342, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3099.583, + "min_ms": 3029.932, + "max_ms": 3155.15, + "stdev_ms": 62.741, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.6", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 396.383, + "min_ms": 394.289, + "max_ms": 399.772, + "stdev_ms": 2.767, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3171.086, + "min_ms": 3138.074, + "max_ms": 3207.573, + "stdev_ms": 34.764, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 428.434, + "min_ms": 426.27, + "max_ms": 429.974, + "stdev_ms": 1.861, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 2924.996, + "min_ms": 2907.288, + "max_ms": 2938.075, + "stdev_ms": 15.451, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.7", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 404.428, + "min_ms": 401.902, + "max_ms": 410.079, + "stdev_ms": 4.187, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3756.553, + "min_ms": 3634.098, + "max_ms": 3810.308, + "stdev_ms": 90.309, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 439.777, + "min_ms": 437.918, + "max_ms": 440.855, + "stdev_ms": 1.486, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3313.878, + "min_ms": 3279.241, + "max_ms": 3371.686, + "stdev_ms": 46.704, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.25.9", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 422.829, + "min_ms": 405.517, + "max_ms": 424.729, + "stdev_ms": 10.586, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3871.338, + "min_ms": 3799.202, + "max_ms": 3944.924, + "stdev_ms": 72.862, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 495.077, + "min_ms": 478.385, + "max_ms": 496.589, + "stdev_ms": 10.102, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3525.146, + "min_ms": 3477.849, + "max_ms": 3597.998, + "stdev_ms": 60.526, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 400.75, + "min_ms": 398.115, + "max_ms": 407.988, + "stdev_ms": 5.112, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3287.358, + "min_ms": 3283.44, + "max_ms": 3304.462, + "stdev_ms": 11.179, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 433.565, + "min_ms": 433.389, + "max_ms": 434.195, + "stdev_ms": 0.424, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3041.395, + "min_ms": 3022.556, + "max_ms": 3062.794, + "stdev_ms": 20.133, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.26.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.27.3", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.4", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.28.5", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.30.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.31.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.32.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.33.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.34.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2102.286, + "min_ms": 2094.595, + "max_ms": 2104.489, + "stdev_ms": 5.194, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 5057.687, + "min_ms": 5024.423, + "max_ms": 5087.201, + "stdev_ms": 31.408, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2167.111, + "min_ms": 2141.276, + "max_ms": 2179.344, + "stdev_ms": 19.435, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 4599.551, + "min_ms": 4590.086, + "max_ms": 4616.515, + "stdev_ms": 13.391, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.35.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 1655.315, + "min_ms": 1652.224, + "max_ms": 1677.834, + "stdev_ms": 13.979, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 4190.714, + "min_ms": 4002.786, + "max_ms": 4247.155, + "stdev_ms": 127.944, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 1692.332, + "min_ms": 1676.497, + "max_ms": 1720.336, + "stdev_ms": 22.199, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3683.702, + "min_ms": 3676.664, + "max_ms": 3740.218, + "stdev_ms": 34.839, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.36.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 412.941, + "min_ms": 408.223, + "max_ms": 417.734, + "stdev_ms": 4.756, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3416.843, + "min_ms": 3344.29, + "max_ms": 3437.514, + "stdev_ms": 48.959, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2187.376, + "min_ms": 2158.372, + "max_ms": 2191.174, + "stdev_ms": 17.943, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3133.92, + "min_ms": 3098.57, + "max_ms": 3201.915, + "stdev_ms": 52.525, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.39.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 413.354, + "min_ms": 408.883, + "max_ms": 415.523, + "stdev_ms": 3.386, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3470.543, + "min_ms": 3434.077, + "max_ms": 3532.776, + "stdev_ms": 49.907, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2206.164, + "min_ms": 2190.886, + "max_ms": 2207.904, + "stdev_ms": 9.364, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3293.469, + "min_ms": 3238.776, + "max_ms": 3297.76, + "stdev_ms": 32.886, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 454.465, + "min_ms": 424.097, + "max_ms": 485.363, + "stdev_ms": 30.634, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3973.384, + "min_ms": 3919.498, + "max_ms": 4043.933, + "stdev_ms": 62.403, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2287.082, + "min_ms": 2279.68, + "max_ms": 2302.207, + "stdev_ms": 11.482, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3476.048, + "min_ms": 3453.033, + "max_ms": 3493.966, + "stdev_ms": 20.52, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.42.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 402.15, + "min_ms": 399.994, + "max_ms": 409.922, + "stdev_ms": 5.222, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3846.851, + "min_ms": 3843.71, + "max_ms": 3948.279, + "stdev_ms": 59.487, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2085.958, + "min_ms": 2085.198, + "max_ms": 2103.553, + "stdev_ms": 10.385, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3233.304, + "min_ms": 3225.069, + "max_ms": 3242.164, + "stdev_ms": 8.55, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.43.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 375.427, + "min_ms": 372.609, + "max_ms": 376.081, + "stdev_ms": 1.845, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3449.354, + "min_ms": 3408.469, + "max_ms": 3454.315, + "stdev_ms": 25.159, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 1889.412, + "min_ms": 1887.295, + "max_ms": 1914.801, + "stdev_ms": 15.306, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 2805.344, + "min_ms": 2787.715, + "max_ms": 2832.504, + "stdev_ms": 22.563, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.45.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 498.38, + "min_ms": 492.263, + "max_ms": 508.656, + "stdev_ms": 8.284, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 469.647, + "min_ms": 459.857, + "max_ms": 470.885, + "stdev_ms": 6.042, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3795.344, + "min_ms": 3774.053, + "max_ms": 3869.416, + "stdev_ms": 50.057, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1549.389, + "min_ms": 1519.641, + "max_ms": 1549.887, + "stdev_ms": 17.32, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2298.06, + "min_ms": 2294.694, + "max_ms": 2320.641, + "stdev_ms": 14.109, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2262.13, + "min_ms": 2261.425, + "max_ms": 2285.746, + "stdev_ms": 13.843, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3453.003, + "min_ms": 3440.451, + "max_ms": 3462.351, + "stdev_ms": 10.989, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1523.785, + "min_ms": 1520.951, + "max_ms": 1534.729, + "stdev_ms": 7.276, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 485.283, + "min_ms": 482.602, + "max_ms": 498.741, + "stdev_ms": 8.649, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 450.483, + "min_ms": 450.257, + "max_ms": 451.361, + "stdev_ms": 0.583, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3640.67, + "min_ms": 3638.204, + "max_ms": 3691.724, + "stdev_ms": 30.213, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1529.776, + "min_ms": 1516.02, + "max_ms": 1529.902, + "stdev_ms": 7.978, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2236.328, + "min_ms": 2234.177, + "max_ms": 2245.543, + "stdev_ms": 6.038, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2204.022, + "min_ms": 2192.708, + "max_ms": 2236.073, + "stdev_ms": 22.494, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3307.422, + "min_ms": 3288.791, + "max_ms": 3337.11, + "stdev_ms": 24.37, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.53.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1476.901, + "min_ms": 1459.658, + "max_ms": 1477.96, + "stdev_ms": 10.275, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 507.44, + "min_ms": 505.11, + "max_ms": 511.348, + "stdev_ms": 3.152, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 472.614, + "min_ms": 468.435, + "max_ms": 474.159, + "stdev_ms": 2.961, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3801.188, + "min_ms": 3778.392, + "max_ms": 3977.967, + "stdev_ms": 109.24, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1625.314, + "min_ms": 1608.422, + "max_ms": 1627.777, + "stdev_ms": 10.536, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2360.706, + "min_ms": 2317.857, + "max_ms": 2421.396, + "stdev_ms": 52.025, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2316.846, + "min_ms": 2299.591, + "max_ms": 2339.212, + "stdev_ms": 19.866, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3429.947, + "min_ms": 3422.445, + "max_ms": 3433.208, + "stdev_ms": 5.519, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1548.663, + "min_ms": 1540.537, + "max_ms": 1550.349, + "stdev_ms": 5.246, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 481.478, + "min_ms": 479.941, + "max_ms": 482.08, + "stdev_ms": 1.103, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 453.944, + "min_ms": 451.617, + "max_ms": 454.624, + "stdev_ms": 1.577, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3596.712, + "min_ms": 3592.196, + "max_ms": 3653.695, + "stdev_ms": 34.277, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1548.866, + "min_ms": 1544.718, + "max_ms": 1563.185, + "stdev_ms": 9.689, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2212.1, + "min_ms": 2201.47, + "max_ms": 2330.919, + "stdev_ms": 71.865, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2173.623, + "min_ms": 2163.278, + "max_ms": 2194.333, + "stdev_ms": 15.813, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3333.748, + "min_ms": 3289.419, + "max_ms": 3366.957, + "stdev_ms": 38.902, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.54.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1476.625, + "min_ms": 1467.272, + "max_ms": 1488.643, + "stdev_ms": 10.713, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 504.991, + "min_ms": 503.041, + "max_ms": 515.428, + "stdev_ms": 6.661, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 465.082, + "min_ms": 459.624, + "max_ms": 466.62, + "stdev_ms": 3.676, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3716.647, + "min_ms": 3661.777, + "max_ms": 3767.382, + "stdev_ms": 52.816, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1574.406, + "min_ms": 1567.321, + "max_ms": 1597.652, + "stdev_ms": 15.867, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2271.758, + "min_ms": 2237.353, + "max_ms": 2317.417, + "stdev_ms": 40.163, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2269.771, + "min_ms": 2204.506, + "max_ms": 2290.538, + "stdev_ms": 44.893, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3533.19, + "min_ms": 3491.826, + "max_ms": 3542.914, + "stdev_ms": 27.128, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1555.777, + "min_ms": 1548.551, + "max_ms": 1585.94, + "stdev_ms": 19.832, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 495.014, + "min_ms": 494.498, + "max_ms": 510.125, + "stdev_ms": 8.877, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 475.614, + "min_ms": 470.467, + "max_ms": 475.83, + "stdev_ms": 3.036, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3729.925, + "min_ms": 3657.59, + "max_ms": 3768.991, + "stdev_ms": 56.522, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1499.337, + "min_ms": 1492.749, + "max_ms": 1513.305, + "stdev_ms": 10.496, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2445.559, + "min_ms": 2432.701, + "max_ms": 2447.881, + "stdev_ms": 8.176, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2362.286, + "min_ms": 2315.898, + "max_ms": 2373.07, + "stdev_ms": 30.378, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3369.123, + "min_ms": 3353.365, + "max_ms": 3396.049, + "stdev_ms": 21.584, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1499.926, + "min_ms": 1479.329, + "max_ms": 1576.233, + "stdev_ms": 51.051, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 431.782, + "min_ms": 431.004, + "max_ms": 435.143, + "stdev_ms": 2.2, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 408.207, + "min_ms": 408.121, + "max_ms": 409.106, + "stdev_ms": 0.546, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3162.836, + "min_ms": 3154.2, + "max_ms": 3175.469, + "stdev_ms": 10.697, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1364.574, + "min_ms": 1349.311, + "max_ms": 1365.088, + "stdev_ms": 8.964, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2047.387, + "min_ms": 2014.453, + "max_ms": 2066.178, + "stdev_ms": 26.183, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2022.809, + "min_ms": 2012.845, + "max_ms": 2025.688, + "stdev_ms": 6.739, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 2925.199, + "min_ms": 2917.546, + "max_ms": 2929.919, + "stdev_ms": 6.244, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.56.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1352.016, + "min_ms": 1349.857, + "max_ms": 1355.24, + "stdev_ms": 2.709, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 491.685, + "min_ms": 490.581, + "max_ms": 497.419, + "stdev_ms": 3.671, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 463.262, + "min_ms": 460.825, + "max_ms": 464.622, + "stdev_ms": 1.923, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3719.665, + "min_ms": 3666.115, + "max_ms": 3821.424, + "stdev_ms": 78.892, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1584.597, + "min_ms": 1572.388, + "max_ms": 1585.905, + "stdev_ms": 7.455, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2244.073, + "min_ms": 2243.586, + "max_ms": 2260.281, + "stdev_ms": 9.502, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2217.098, + "min_ms": 2201.523, + "max_ms": 2234.326, + "stdev_ms": 16.409, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3396.911, + "min_ms": 3377.056, + "max_ms": 3410.732, + "stdev_ms": 16.928, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.57.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1544.961, + "min_ms": 1507.405, + "max_ms": 1572.928, + "stdev_ms": 32.879, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 539.265, + "min_ms": 533.258, + "max_ms": 591.168, + "stdev_ms": 31.842, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 496.759, + "min_ms": 491.127, + "max_ms": 501.547, + "stdev_ms": 5.216, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3816.663, + "min_ms": 3781.552, + "max_ms": 3825.723, + "stdev_ms": 23.331, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1591.397, + "min_ms": 1578.95, + "max_ms": 1591.713, + "stdev_ms": 7.279, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2594.137, + "min_ms": 2551.951, + "max_ms": 2601.514, + "stdev_ms": 26.741, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2568.76, + "min_ms": 2553.369, + "max_ms": 2579.201, + "stdev_ms": 12.995, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3579.385, + "min_ms": 3560.794, + "max_ms": 3651.081, + "stdev_ms": 47.676, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1601.685, + "min_ms": 1564.276, + "max_ms": 1617.412, + "stdev_ms": 27.295, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 540.951, + "min_ms": 537.313, + "max_ms": 543.014, + "stdev_ms": 2.887, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 508.905, + "min_ms": 503.508, + "max_ms": 510.535, + "stdev_ms": 3.678, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3669.701, + "min_ms": 3668.956, + "max_ms": 3701.104, + "stdev_ms": 18.35, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1712.083, + "min_ms": 1691.185, + "max_ms": 1785.808, + "stdev_ms": 49.708, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2377.751, + "min_ms": 2372.701, + "max_ms": 2386.349, + "stdev_ms": 6.9, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2331.886, + "min_ms": 2289.912, + "max_ms": 2351.414, + "stdev_ms": 31.426, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3552.607, + "min_ms": 3476.546, + "max_ms": 3572.782, + "stdev_ms": 50.751, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1702.796, + "min_ms": 1693.997, + "max_ms": 1713.175, + "stdev_ms": 9.6, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 588.213, + "min_ms": 544.24, + "max_ms": 602.394, + "stdev_ms": 30.322, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 3, + "median_ms": 414.914, + "min_ms": 407.075, + "max_ms": 415.995, + "stdev_ms": 4.868, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 415.974, + "min_ms": 411.3, + "max_ms": 425.634, + "stdev_ms": 7.31, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3771.166, + "min_ms": 3724.303, + "max_ms": 3876.105, + "stdev_ms": 77.731, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 3, + "median_ms": 1507.718, + "min_ms": 1507.426, + "max_ms": 1596.505, + "stdev_ms": 51.346, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1471.523, + "min_ms": 1457.528, + "max_ms": 1491.672, + "stdev_ms": 17.164, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2321.925, + "min_ms": 2308.752, + "max_ms": 2343.87, + "stdev_ms": 17.74, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 3, + "median_ms": 2197.79, + "min_ms": 2185.146, + "max_ms": 2218.413, + "stdev_ms": 16.792, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2208.321, + "min_ms": 2208.291, + "max_ms": 2239.296, + "stdev_ms": 17.892, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3421.95, + "min_ms": 3373.877, + "max_ms": 3441.289, + "stdev_ms": 34.711, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 3, + "median_ms": 1460.377, + "min_ms": 1455.4, + "max_ms": 1460.784, + "stdev_ms": 2.998, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1406.78, + "min_ms": 1400.299, + "max_ms": 1424.231, + "stdev_ms": 12.378, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 561.006, + "min_ms": 551.021, + "max_ms": 567.902, + "stdev_ms": 8.487, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 3, + "median_ms": 420.457, + "min_ms": 415.829, + "max_ms": 432.668, + "stdev_ms": 8.699, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 430.4, + "min_ms": 423.673, + "max_ms": 445.64, + "stdev_ms": 11.255, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3779.433, + "min_ms": 3753.134, + "max_ms": 3790.708, + "stdev_ms": 19.281, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 3, + "median_ms": 1512.578, + "min_ms": 1506.756, + "max_ms": 1517.678, + "stdev_ms": 5.465, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1526.421, + "min_ms": 1453.307, + "max_ms": 1533.602, + "stdev_ms": 44.43, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2299.819, + "min_ms": 2289.903, + "max_ms": 2310.074, + "stdev_ms": 10.086, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 3, + "median_ms": 2279.606, + "min_ms": 2198.267, + "max_ms": 2387.175, + "stdev_ms": 94.757, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 3, + "median_ms": 2169.0, + "min_ms": 2164.023, + "max_ms": 2182.98, + "stdev_ms": 9.828, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3298.572, + "min_ms": 3290.36, + "max_ms": 3321.878, + "stdev_ms": 16.351, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 3, + "median_ms": 1445.446, + "min_ms": 1428.905, + "max_ms": 1450.794, + "stdev_ms": 11.412, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1387.666, + "min_ms": 1367.768, + "max_ms": 1388.021, + "stdev_ms": 11.592, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + } + ] +} diff --git a/docs/index.md b/docs/index.md index 6db8dde35..d7dfbab36 100644 --- a/docs/index.md +++ b/docs/index.md @@ -200,6 +200,8 @@ Custom templates can emit Python outside the standard generated model patterns c custom-template output is not exhaustively validated. If `--formatters builtin` produces invalid or poorly formatted output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior](formatter-behavior.md) for details. + +See [Performance Benchmarks](performance-benchmarks.md) for release benchmark data and SVG charts. --- @@ -308,6 +310,7 @@ See [CI/CD Integration](ci-cd.md) for more options. - 🚀 **[One-liner Usage](oneliner.md)** - uvx, pipx, clipboard integration - 🔄 **[CI/CD Integration](ci-cd.md)** - GitHub Actions and CI validation - ✅ **[Conformance Dashboard](conformance.md)** - External corpus and CI coverage signals +- 📈 **[Performance Benchmarks](performance-benchmarks.md)** - Release benchmark tables and SVG charts - 🎨 **[Custom Templates](custom_template.md)** - Customize generated code with Jinja2 - 🖌️ **[Code Formatting](formatting.md)** - Configure black, isort, and ruff - ❓ **[FAQ](faq.md)** - Common questions and troubleshooting diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 8a124555c..8cd0db59a 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -202,6 +202,8 @@ Custom templates can emit Python outside the standard generated model patterns c custom-template output is not exhaustively validated. If `--formatters builtin` produces invalid or poorly formatted output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior](formatter-behavior.md) for details. + +See [Performance Benchmarks](performance-benchmarks.md) for release benchmark data and SVG charts. --- @@ -310,6 +312,7 @@ See [CI/CD Integration](ci-cd.md) for more options. - 🚀 **[One-liner Usage](oneliner.md)** - uvx, pipx, clipboard integration - 🔄 **[CI/CD Integration](ci-cd.md)** - GitHub Actions and CI validation - ✅ **[Conformance Dashboard](conformance.md)** - External corpus and CI coverage signals +- 📈 **[Performance Benchmarks](performance-benchmarks.md)** - Release benchmark tables and SVG charts - 🎨 **[Custom Templates](custom_template.md)** - Customize generated code with Jinja2 - 🖌️ **[Code Formatting](formatting.md)** - Configure black, isort, and ruff - ❓ **[FAQ](faq.md)** - Common questions and troubleshooting @@ -34905,6 +34908,269 @@ These suites are compatibility and coverage signals. They show that CI exercises --- +# Performance Benchmarks + +Source: https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/ + + + +This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. + +## Historical Trends + +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. + +=== "Small / JSON Schema" + + ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + +=== "Small / OpenAPI" + + ![Small / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-small-openapi.svg){ align=center } + +=== "Large / JSON Schema" + + ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + +=== "Large / OpenAPI" + + ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + +## Collection Policy + +- The benchmark workflow runs on `ubuntu-24.04`. +- The Python version is the workflow input, defaulting to the latest configured CI Python. +- Release packages are installed from PyPI in isolated virtual environments. +- Input coverage currently focuses on OpenAPI and JSON Schema. +- Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. + +## Latest Dataset + +- Schema version: `1` +- Generated at: `2026-06-21T16:10:37Z` +- Source workflow: `Release Benchmarks` +- Benchmark runs per case: `3` +- Version selection: `clickpy_downloads` +- Selected versions: `40` +- Download source: `clickpy` +- Download window: `365` days +- Downloads in window: `117,300,797` +- PyPIStats last month: `14,094,143` + +## Latest Release Summary + +Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. + +### 0.64.1 + +=== "Small" + + | Input | Formatter | Median | vs Default | Range | Status | + | --- | --- | --- | --- | --- | --- | + | JSON Schema | Default | 561ms | baseline | 551ms-568ms | OK | + | JSON Schema | Built-in | 420ms | 1.33x faster | 416ms-433ms | OK | + | JSON Schema | Ruff | 430ms | 1.30x faster | 424ms-446ms | OK | + | OpenAPI | Default | 2.30s | baseline | 2.29s-2.31s | OK | + | OpenAPI | Built-in | 2.28s | 1.01x faster | 2.20s-2.39s | OK | + | OpenAPI | Ruff | 2.17s | 1.06x faster | 2.16s-2.18s | OK | + +=== "Large" + + | Input | Formatter | Median | vs Default | Range | Status | + | --- | --- | --- | --- | --- | --- | + | JSON Schema | Default | 3.78s | baseline | 3.75s-3.79s | OK | + | JSON Schema | Built-in | 1.51s | 2.50x faster | 1.51s-1.52s | OK | + | JSON Schema | Ruff | 1.53s | 2.48x faster | 1.45s-1.53s | OK | + | OpenAPI | Default | 3.30s | baseline | 3.29s-3.32s | OK | + | OpenAPI | Built-in | 1.45s | 2.28x faster | 1.43s-1.45s | OK | + | OpenAPI | Ruff | 1.39s | 2.38x faster | 1.37s-1.39s | OK | + +## Historical Results + +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. + +=== "Small / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 387ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 418ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 413ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 404ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 423ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 401ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 2.10s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 1.66s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 413ms | Unsupported: unavailable | Failed: command | + | 0.42.0 | 413ms | Unsupported: unavailable | Failed: command | + | 0.42.2 | 454ms | Unsupported: unavailable | Failed: command | + | 0.43.1 | 402ms | Unsupported: unavailable | Failed: command | + | 0.45.0 | 375ms | Unsupported: unavailable | Failed: command | + | 0.52.2 | 498ms | Unsupported: unavailable | 470ms (1.06x faster) | + | 0.53.0 | 485ms | Unsupported: unavailable | 450ms (1.08x faster) | + | 0.54.0 | 507ms | Unsupported: unavailable | 473ms (1.07x faster) | + | 0.54.1 | 481ms | Unsupported: unavailable | 454ms (1.06x faster) | + | 0.55.0 | 505ms | Unsupported: unavailable | 465ms (1.09x faster) | + | 0.56.0 | 495ms | Unsupported: unavailable | 476ms (1.04x faster) | + | 0.56.1 | 432ms | Unsupported: unavailable | 408ms (1.06x faster) | + | 0.57.0 | 492ms | Unsupported: unavailable | 463ms (1.06x faster) | + | 0.58.0 | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | + | 0.59.0 | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | + | 0.64.0 | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | + | 0.64.1 | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + +=== "Small / OpenAPI" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 460ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 437ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 447ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 428ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 440ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 495ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 434ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 2.17s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 1.69s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2.19s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2.21s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2.29s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2.09s | Unsupported: unavailable | Failed: command | + | 0.45.0 | 1.89s | Unsupported: unavailable | Failed: command | + | 0.52.2 | 2.30s | Unsupported: unavailable | 2.26s (1.02x faster) | + | 0.53.0 | 2.24s | Unsupported: unavailable | 2.20s (1.01x faster) | + | 0.54.0 | 2.36s | Unsupported: unavailable | 2.32s (1.02x faster) | + | 0.54.1 | 2.21s | Unsupported: unavailable | 2.17s (1.02x faster) | + | 0.55.0 | 2.27s | Unsupported: unavailable | 2.27s (same speed) | + | 0.56.0 | 2.45s | Unsupported: unavailable | 2.36s (1.04x faster) | + | 0.56.1 | 2.05s | Unsupported: unavailable | 2.02s (1.01x faster) | + | 0.57.0 | 2.24s | Unsupported: unavailable | 2.22s (1.01x faster) | + | 0.58.0 | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | + | 0.59.0 | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | + | 0.64.0 | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | + | 0.64.1 | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + +=== "Large / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 3.44s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 3.49s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 3.42s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 3.17s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 3.76s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 3.87s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 5.06s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 4.19s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 3.42s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 3.47s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 3.97s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 3.85s | Unsupported: unavailable | Failed: command | + | 0.45.0 | 3.45s | Unsupported: unavailable | Failed: command | + | 0.52.2 | 3.80s | Unsupported: unavailable | 1.55s (2.45x faster) | + | 0.53.0 | 3.64s | Unsupported: unavailable | 1.53s (2.38x faster) | + | 0.54.0 | 3.80s | Unsupported: unavailable | 1.63s (2.34x faster) | + | 0.54.1 | 3.60s | Unsupported: unavailable | 1.55s (2.32x faster) | + | 0.55.0 | 3.72s | Unsupported: unavailable | 1.57s (2.36x faster) | + | 0.56.0 | 3.73s | Unsupported: unavailable | 1.50s (2.49x faster) | + | 0.56.1 | 3.16s | Unsupported: unavailable | 1.36s (2.32x faster) | + | 0.57.0 | 3.72s | Unsupported: unavailable | 1.58s (2.35x faster) | + | 0.58.0 | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | + | 0.59.0 | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | + | 0.64.0 | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | + | 0.64.1 | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + +=== "Large / OpenAPI" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 3.19s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 3.10s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2.92s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 3.31s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 3.53s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 3.04s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 4.60s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 3.68s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 3.13s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 3.29s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 3.48s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 3.23s | Unsupported: unavailable | Failed: command | + | 0.45.0 | 2.81s | Unsupported: unavailable | Failed: command | + | 0.52.2 | 3.45s | Unsupported: unavailable | 1.52s (2.27x faster) | + | 0.53.0 | 3.31s | Unsupported: unavailable | 1.48s (2.24x faster) | + | 0.54.0 | 3.43s | Unsupported: unavailable | 1.55s (2.21x faster) | + | 0.54.1 | 3.33s | Unsupported: unavailable | 1.48s (2.26x faster) | + | 0.55.0 | 3.53s | Unsupported: unavailable | 1.56s (2.27x faster) | + | 0.56.0 | 3.37s | Unsupported: unavailable | 1.50s (2.25x faster) | + | 0.56.1 | 2.93s | Unsupported: unavailable | 1.35s (2.16x faster) | + | 0.57.0 | 3.40s | Unsupported: unavailable | 1.54s (2.20x faster) | + | 0.58.0 | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | + | 0.59.0 | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | + | 0.64.0 | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | + | 0.64.1 | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + +--- + # Deprecations Source: https://datamodel-code-generator.koxudaxi.dev/deprecations/ diff --git a/docs/llms.txt b/docs/llms.txt index 85f4b1450..9e7e88f55 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -79,6 +79,7 @@ - [Conformance Dashboard](https://datamodel-code-generator.koxudaxi.dev/conformance/): This page summarizes the external conformance and end-to-end corpus checks that CI runs for datamodel-code-generator. The table is generated from `... +- [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/): This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator rele... - [Deprecations](https://datamodel-code-generator.koxudaxi.dev/deprecations/): This page lists deprecations and scheduled breaking changes. - [Experimental Features](https://datamodel-code-generator.koxudaxi.dev/experimental/): This page lists features that are available but still experimental. - [Architecture](https://datamodel-code-generator.koxudaxi.dev/architecture/): `datamodel-code-generator` is organized around one central idea: many input formats are normalized into a shared generation graph, then rendered th... diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md new file mode 100644 index 000000000..873fe2cbf --- /dev/null +++ b/docs/performance-benchmarks.md @@ -0,0 +1,258 @@ +# Performance Benchmarks + + + +This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. + +## Historical Trends + +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. + +=== "Small / JSON Schema" + + ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + +=== "Small / OpenAPI" + + ![Small / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-small-openapi.svg){ align=center } + +=== "Large / JSON Schema" + + ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + +=== "Large / OpenAPI" + + ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + +## Collection Policy + +- The benchmark workflow runs on `ubuntu-24.04`. +- The Python version is the workflow input, defaulting to the latest configured CI Python. +- Release packages are installed from PyPI in isolated virtual environments. +- Input coverage currently focuses on OpenAPI and JSON Schema. +- Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. + +## Latest Dataset + +- Schema version: `1` +- Generated at: `2026-06-21T16:10:37Z` +- Source workflow: `Release Benchmarks` +- Benchmark runs per case: `3` +- Version selection: `clickpy_downloads` +- Selected versions: `40` +- Download source: `clickpy` +- Download window: `365` days +- Downloads in window: `117,300,797` +- PyPIStats last month: `14,094,143` + +## Latest Release Summary + +Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. + +### 0.64.1 + +=== "Small" + + | Input | Formatter | Median | vs Default | Range | Status | + | --- | --- | --- | --- | --- | --- | + | JSON Schema | Default | 561ms | baseline | 551ms-568ms | OK | + | JSON Schema | Built-in | 420ms | 1.33x faster | 416ms-433ms | OK | + | JSON Schema | Ruff | 430ms | 1.30x faster | 424ms-446ms | OK | + | OpenAPI | Default | 2.30s | baseline | 2.29s-2.31s | OK | + | OpenAPI | Built-in | 2.28s | 1.01x faster | 2.20s-2.39s | OK | + | OpenAPI | Ruff | 2.17s | 1.06x faster | 2.16s-2.18s | OK | + +=== "Large" + + | Input | Formatter | Median | vs Default | Range | Status | + | --- | --- | --- | --- | --- | --- | + | JSON Schema | Default | 3.78s | baseline | 3.75s-3.79s | OK | + | JSON Schema | Built-in | 1.51s | 2.50x faster | 1.51s-1.52s | OK | + | JSON Schema | Ruff | 1.53s | 2.48x faster | 1.45s-1.53s | OK | + | OpenAPI | Default | 3.30s | baseline | 3.29s-3.32s | OK | + | OpenAPI | Built-in | 1.45s | 2.28x faster | 1.43s-1.45s | OK | + | OpenAPI | Ruff | 1.39s | 2.38x faster | 1.37s-1.39s | OK | + +## Historical Results + +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. + +=== "Small / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 387ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 418ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 413ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 404ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 423ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 401ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 2.10s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 1.66s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 413ms | Unsupported: unavailable | Failed: command | + | 0.42.0 | 413ms | Unsupported: unavailable | Failed: command | + | 0.42.2 | 454ms | Unsupported: unavailable | Failed: command | + | 0.43.1 | 402ms | Unsupported: unavailable | Failed: command | + | 0.45.0 | 375ms | Unsupported: unavailable | Failed: command | + | 0.52.2 | 498ms | Unsupported: unavailable | 470ms (1.06x faster) | + | 0.53.0 | 485ms | Unsupported: unavailable | 450ms (1.08x faster) | + | 0.54.0 | 507ms | Unsupported: unavailable | 473ms (1.07x faster) | + | 0.54.1 | 481ms | Unsupported: unavailable | 454ms (1.06x faster) | + | 0.55.0 | 505ms | Unsupported: unavailable | 465ms (1.09x faster) | + | 0.56.0 | 495ms | Unsupported: unavailable | 476ms (1.04x faster) | + | 0.56.1 | 432ms | Unsupported: unavailable | 408ms (1.06x faster) | + | 0.57.0 | 492ms | Unsupported: unavailable | 463ms (1.06x faster) | + | 0.58.0 | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | + | 0.59.0 | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | + | 0.64.0 | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | + | 0.64.1 | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + +=== "Small / OpenAPI" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 460ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 437ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 447ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 428ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 440ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 495ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 434ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 2.17s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 1.69s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2.19s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2.21s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2.29s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2.09s | Unsupported: unavailable | Failed: command | + | 0.45.0 | 1.89s | Unsupported: unavailable | Failed: command | + | 0.52.2 | 2.30s | Unsupported: unavailable | 2.26s (1.02x faster) | + | 0.53.0 | 2.24s | Unsupported: unavailable | 2.20s (1.01x faster) | + | 0.54.0 | 2.36s | Unsupported: unavailable | 2.32s (1.02x faster) | + | 0.54.1 | 2.21s | Unsupported: unavailable | 2.17s (1.02x faster) | + | 0.55.0 | 2.27s | Unsupported: unavailable | 2.27s (same speed) | + | 0.56.0 | 2.45s | Unsupported: unavailable | 2.36s (1.04x faster) | + | 0.56.1 | 2.05s | Unsupported: unavailable | 2.02s (1.01x faster) | + | 0.57.0 | 2.24s | Unsupported: unavailable | 2.22s (1.01x faster) | + | 0.58.0 | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | + | 0.59.0 | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | + | 0.64.0 | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | + | 0.64.1 | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + +=== "Large / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 3.44s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 3.49s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 3.42s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 3.17s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 3.76s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 3.87s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 5.06s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 4.19s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 3.42s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 3.47s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 3.97s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 3.85s | Unsupported: unavailable | Failed: command | + | 0.45.0 | 3.45s | Unsupported: unavailable | Failed: command | + | 0.52.2 | 3.80s | Unsupported: unavailable | 1.55s (2.45x faster) | + | 0.53.0 | 3.64s | Unsupported: unavailable | 1.53s (2.38x faster) | + | 0.54.0 | 3.80s | Unsupported: unavailable | 1.63s (2.34x faster) | + | 0.54.1 | 3.60s | Unsupported: unavailable | 1.55s (2.32x faster) | + | 0.55.0 | 3.72s | Unsupported: unavailable | 1.57s (2.36x faster) | + | 0.56.0 | 3.73s | Unsupported: unavailable | 1.50s (2.49x faster) | + | 0.56.1 | 3.16s | Unsupported: unavailable | 1.36s (2.32x faster) | + | 0.57.0 | 3.72s | Unsupported: unavailable | 1.58s (2.35x faster) | + | 0.58.0 | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | + | 0.59.0 | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | + | 0.64.0 | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | + | 0.64.1 | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + +=== "Large / OpenAPI" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.17.2 | Failed: install | Failed: install | Failed: install | + | 0.25.0 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 3.19s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 3.10s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2.92s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 3.31s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 3.53s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 3.04s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | Failed: command | Failed: command | Failed: command | + | 0.26.5 | Failed: command | Failed: command | Failed: command | + | 0.27.3 | Failed: command | Failed: command | Failed: command | + | 0.28.2 | Failed: command | Failed: command | Failed: command | + | 0.28.4 | Failed: command | Failed: command | Failed: command | + | 0.28.5 | Failed: command | Failed: command | Failed: command | + | 0.30.1 | Failed: command | Failed: command | Failed: command | + | 0.30.2 | Failed: command | Failed: command | Failed: command | + | 0.31.2 | Failed: command | Failed: command | Failed: command | + | 0.32.0 | Failed: command | Failed: command | Failed: command | + | 0.33.0 | Failed: command | Failed: command | Failed: command | + | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.35.0 | 4.60s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 3.68s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 3.13s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 3.29s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 3.48s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 3.23s | Unsupported: unavailable | Failed: command | + | 0.45.0 | 2.81s | Unsupported: unavailable | Failed: command | + | 0.52.2 | 3.45s | Unsupported: unavailable | 1.52s (2.27x faster) | + | 0.53.0 | 3.31s | Unsupported: unavailable | 1.48s (2.24x faster) | + | 0.54.0 | 3.43s | Unsupported: unavailable | 1.55s (2.21x faster) | + | 0.54.1 | 3.33s | Unsupported: unavailable | 1.48s (2.26x faster) | + | 0.55.0 | 3.53s | Unsupported: unavailable | 1.56s (2.27x faster) | + | 0.56.0 | 3.37s | Unsupported: unavailable | 1.50s (2.25x faster) | + | 0.56.1 | 2.93s | Unsupported: unavailable | 1.35s (2.16x faster) | + | 0.57.0 | 3.40s | Unsupported: unavailable | 1.54s (2.20x faster) | + | 0.58.0 | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | + | 0.59.0 | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | + | 0.64.0 | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | + | 0.64.1 | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | diff --git a/scripts/build_preset_docs.py b/scripts/build_preset_docs.py index da842c766..9081ec205 100644 --- a/scripts/build_preset_docs.py +++ b/scripts/build_preset_docs.py @@ -38,12 +38,14 @@ "https://datamodel-code-generator.koxudaxi.dev/cli-reference/model-customization/#output-model-type" ) README_FORMATTER_BEHAVIOR_LINK = "https://datamodel-code-generator.koxudaxi.dev/formatter-behavior/" +README_PERFORMANCE_BENCHMARKS_LINK = "https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/" DOCS_PRESETS_LINK = "presets.md" DOCS_CLI_REFERENCE_LINK = "cli-reference/index.md" DOCS_PRESET_OPTION_LINK = "cli-reference/base-options.md#preset" DOCS_INPUT_FILE_TYPE_OPTION_LINK = "cli-reference/base-options.md#input-file-type" DOCS_OUTPUT_MODEL_TYPE_OPTION_LINK = "cli-reference/model-customization.md#output-model-type" DOCS_FORMATTER_BEHAVIOR_LINK = "formatter-behavior.md" +DOCS_PERFORMANCE_BENCHMARKS_LINK = "performance-benchmarks.md" if str(SRC_PATH) not in sys.path: sys.path.insert(0, str(SRC_PATH)) @@ -325,6 +327,8 @@ def _render_readme_quick_start( custom-template output is not exhaustively validated. If `--formatters builtin` produces invalid or poorly formatted output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior]({README_FORMATTER_BEHAVIOR_LINK}) for details. + +See [Performance Benchmarks]({README_PERFORMANCE_BENCHMARKS_LINK}) for release benchmark data and SVG charts. """ @@ -381,7 +385,9 @@ def _render_docs_index_quick_start( Custom templates can emit Python outside the standard generated model patterns covered by `builtin`, so custom-template output is not exhaustively validated. If `--formatters builtin` produces invalid or poorly formatted output with a custom template, please open an issue with a small reproducer. See -[Formatter Behavior]({DOCS_FORMATTER_BEHAVIOR_LINK}) for details.""" +[Formatter Behavior]({DOCS_FORMATTER_BEHAVIOR_LINK}) for details. + +See [Performance Benchmarks]({DOCS_PERFORMANCE_BENCHMARKS_LINK}) for release benchmark data and SVG charts.""" def parse_args() -> argparse.Namespace: diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py new file mode 100644 index 000000000..20f0502d1 --- /dev/null +++ b/scripts/build_release_benchmark_docs.py @@ -0,0 +1,848 @@ +"""Build the release benchmark documentation page and SVG chart. + +Usage: + python scripts/build_release_benchmark_docs.py + python scripts/build_release_benchmark_docs.py --check +""" + +from __future__ import annotations + +import argparse +import html +import json +import re +import sys +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +try: + from scripts.release_benchmark_errors import summarize_benchmark_error +except ModuleNotFoundError: # pragma: no cover - direct script execution + from release_benchmark_errors import summarize_benchmark_error + +ROOT = Path(__file__).resolve().parents[1] +DATA_PATH = ROOT / "docs" / "data" / "release-benchmarks.json" +DOCS_PATH = ROOT / "docs" / "performance-benchmarks.md" +SVG_PATH = ROOT / "docs" / "assets" / "benchmarks" / "release-benchmarks.svg" + +SVG_WIDTH = 980 +SVG_HEIGHT = 640 +PLOT_LEFT = 86 +PLOT_TOP = 116 +PLOT_WIDTH = 760 +PLOT_HEIGHT = 360 +GRID_LINES = 4 +VERSION_TICK_COUNT = 10 +POINT_RADIUS = 3 +STATUS_OK = "ok" +EMPTY_CELL = "-" +MILLISECONDS_PER_SECOND = 1000 +WHOLE_MS_THRESHOLD = 100 +TENTH_MS_THRESHOLD = 10 +SAME_SPEED_TOLERANCE = 0.005 +FORMATTER_ORDER = ("default", "builtin", "ruff") +CASE_ORDER = ("small", "large") +SERIES_COLORS = ( + "#6b7280", + "#2563eb", + "#16a34a", + "#9333ea", + "#ea580c", + "#0891b2", + "#be123c", + "#4d7c0f", +) + + +@dataclass(frozen=True, slots=True) +class BenchmarkEntry: + """One release benchmark result row.""" + + version: str + python_version: str + os: str + input_type: str + case: str + formatter: str + runs: int + median_ms: float | None + min_ms: float | None + max_ms: float | None + stdev_ms: float | None + status: str + command: str + error: str + + +@dataclass(frozen=True, slots=True) +class BenchmarkData: + """Release benchmark dataset loaded from JSON.""" + + schema_version: int + metadata: dict[str, Any] + entries: tuple[BenchmarkEntry, ...] + + +@dataclass(frozen=True, slots=True) +class GeneratedDoc: + """Generated file content.""" + + path: Path + content: str + + +@dataclass(frozen=True, slots=True) +class SvgTextStyle: + """SVG text rendering attributes.""" + + size: int = 12 + anchor: str = "start" + weight: str = "400" + + +DEFAULT_TEXT_STYLE = SvgTextStyle() +TITLE_TEXT_STYLE = SvgTextStyle(size=22, weight="700") +EMPTY_TITLE_TEXT_STYLE = SvgTextStyle(size=22, anchor="middle") +EMPTY_NOTE_TEXT_STYLE = SvgTextStyle(size=14, anchor="middle") +MUTED_TEXT_STYLE = SvgTextStyle(size=13) +TICK_TEXT_STYLE = SvgTextStyle(size=11) +Y_AXIS_TICK_TEXT_STYLE = SvgTextStyle(size=11, anchor="end") +X_AXIS_TICK_TEXT_STYLE = SvgTextStyle(size=11, anchor="middle") + + +def _string(value: object) -> str: + return value if isinstance(value, str) else "" + + +def _integer(value: object, *, default: int = 0) -> int: + if isinstance(value, int): + return value + if isinstance(value, float): + return int(value) + if isinstance(value, str) and value.isdecimal(): + return int(value) + return default + + +def _float(value: object) -> float | None: + if isinstance(value, (float, int)): + return float(value) + if isinstance(value, str): + try: + return float(value) + except ValueError: + return None + return None + + +def _entry_from_raw(raw: object, *, index: int) -> BenchmarkEntry: + if not isinstance(raw, dict): + msg = f"Benchmark entry #{index} must be an object" + raise TypeError(msg) + if not (version := _string(raw.get("version")).strip()): + msg = f"Benchmark entry #{index} is missing version" + raise ValueError(msg) + if not (input_type := _string(raw.get("input_type")).strip()): + msg = f"Benchmark entry #{index} is missing input_type" + raise ValueError(msg) + if not (formatter := _string(raw.get("formatter")).strip()): + msg = f"Benchmark entry #{index} is missing formatter" + raise ValueError(msg) + + status = _string(raw.get("status")).strip() or STATUS_OK + return BenchmarkEntry( + version=version, + python_version=_string(raw.get("python_version")).strip(), + os=_string(raw.get("os")).strip(), + input_type=input_type, + case=_string(raw.get("case")).strip() or "default", + formatter=formatter, + runs=_integer(raw.get("runs")), + median_ms=_float(raw.get("median_ms")), + min_ms=_float(raw.get("min_ms")), + max_ms=_float(raw.get("max_ms")), + stdev_ms=_float(raw.get("stdev_ms")), + status=status, + command=_string(raw.get("command")).strip(), + error=_string(raw.get("error")).strip(), + ) + + +def load_benchmark_data(path: Path = DATA_PATH) -> BenchmarkData: + """Load release benchmark JSON data.""" + payload = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(payload, dict): + msg = f"Benchmark data in {path} must be a JSON object" + raise TypeError(msg) + raw_entries = payload.get("entries", []) + if not isinstance(raw_entries, list): + msg = f"Benchmark data in {path} must contain an entries list" + raise TypeError(msg) + metadata = payload.get("metadata", {}) + if not isinstance(metadata, dict): + metadata = {} + return BenchmarkData( + schema_version=_integer(payload.get("schema_version"), default=1), + metadata=metadata, + entries=tuple(_entry_from_raw(raw, index=index) for index, raw in enumerate(raw_entries, start=1)), + ) + + +def _version_sort_key(version: str) -> tuple[int, int, int, int, str]: + numbers: list[int] = [] + suffix_parts: list[str] = [] + for token in re.split(r"[.\-+_]", version.removeprefix("v")): + if token.isdecimal(): + numbers.append(int(token)) + elif token: + suffix_parts.append(token) + numbers.extend([0] * 4) + return numbers[0], numbers[1], numbers[2], numbers[3], ".".join(suffix_parts) + + +def _sorted_entries(entries: tuple[BenchmarkEntry, ...]) -> list[BenchmarkEntry]: + return sorted( + entries, + key=lambda entry: ( + _version_sort_key(entry.version), + entry.input_type, + entry.case, + entry.formatter, + ), + ) + + +def _formatter_sort_key(formatter: str) -> tuple[int, str]: + if formatter in FORMATTER_ORDER: + return FORMATTER_ORDER.index(formatter), formatter + return len(FORMATTER_ORDER), formatter + + +def _case_sort_key(case: str) -> tuple[int, str]: + if case in CASE_ORDER: + return CASE_ORDER.index(case), case + return len(CASE_ORDER), case + + +def _scenario_sort_key(entry: BenchmarkEntry) -> tuple[str, str]: + return entry.input_type, entry.case + + +def _scenario_label(input_type: str, case: str) -> str: + return f"{case.title()} / {_input_label(input_type)}" + + +def _input_label(input_type: str) -> str: + label = input_type + match input_type: + case "openapi": + label = "OpenAPI" + case "jsonschema": + label = "JSON Schema" + case _: + pass + return label + + +def _formatter_label(formatter: str) -> str: + label = formatter + match formatter: + case "default": + label = "Default" + case "builtin": + label = "Built-in" + case "ruff": + label = "Ruff" + case _: + pass + return label + + +def _status_label(entry: BenchmarkEntry) -> str: + prefix = entry.status or "Unknown" + match entry.status: + case "ok": + prefix = "OK" + case "unsupported": + prefix = "Unsupported" + case "failed": + prefix = "Failed" + case _: + pass + if entry.status == STATUS_OK: + return prefix + if not entry.error: + return prefix + note = summarize_benchmark_error(status=entry.status, formatter=entry.formatter, error=entry.error) + return f"{prefix}: {note}" + + +def _format_ms(value: float | None) -> str: + if value is None: + return EMPTY_CELL + formatted = f"{value:.2f}ms" + match value: + case value if value >= MILLISECONDS_PER_SECOND: + formatted = f"{value / MILLISECONDS_PER_SECOND:.2f}s" + case value if value >= WHOLE_MS_THRESHOLD: + formatted = f"{value:.0f}ms" + case value if value >= TENTH_MS_THRESHOLD: + formatted = f"{value:.1f}ms" + case _: + pass + return formatted + + +def _latest_version(entries: tuple[BenchmarkEntry, ...]) -> str: + versions = sorted({entry.version for entry in entries}, key=_version_sort_key) + return versions[-1] if versions else "" + + +def _entries_by_scenario_and_formatter( + entries: tuple[BenchmarkEntry, ...], +) -> dict[tuple[str, str], dict[str, BenchmarkEntry]]: + grouped: dict[tuple[str, str], dict[str, BenchmarkEntry]] = {} + for entry in _sorted_entries(entries): + grouped.setdefault((entry.input_type, entry.case), {})[entry.formatter] = entry + return grouped + + +def _cases(entries: tuple[BenchmarkEntry, ...]) -> list[str]: + return sorted({entry.case for entry in entries}, key=_case_sort_key) + + +def _ratio_label(ratio: float) -> str: + if abs(ratio - 1) <= SAME_SPEED_TOLERANCE: + return "same speed" + if ratio > 1: + return f"{ratio:.2f}x faster" + return f"{1 / ratio:.2f}x slower" + + +def _speed_label(entry: BenchmarkEntry, baseline: BenchmarkEntry | None) -> str: + if ( + baseline is None + or baseline.median_ms is None + or entry.median_ms is None + or baseline.median_ms <= 0 + or entry.median_ms <= 0 + ): + return "" + return _ratio_label(baseline.median_ms / entry.median_ms) + + +def _relative_speed_cell(entry: BenchmarkEntry, baseline: BenchmarkEntry | None) -> str: + if entry.status != STATUS_OK: + return EMPTY_CELL + if entry.formatter == "default": + return "baseline" + return _speed_label(entry, baseline) or EMPTY_CELL + + +def _range_cell(entry: BenchmarkEntry) -> str: + if entry.status != STATUS_OK: + return EMPTY_CELL + return f"{_format_ms(entry.min_ms)}-{_format_ms(entry.max_ms)}" + + +def _markdown_cell(value: object) -> str: + text = str(value).replace("\n", "
") + return text.replace("|", "\\|") + + +def _render_case_results_table(entries: tuple[BenchmarkEntry, ...], *, case: str, include_version: bool) -> str: + headers = ( + ("Version", "Input", "Formatter", "Median", "vs Default", "Status") + if include_version + else ("Input", "Formatter", "Median", "vs Default", "Range", "Status") + ) + lines = [ + "| " + " | ".join(headers) + " |", + "| " + " | ".join("---" for _header in headers) + " |", + ] + case_entries = tuple(entry for entry in entries if entry.case == case) + for version in sorted({entry.version for entry in case_entries}, key=_version_sort_key): + version_entries = tuple(entry for entry in case_entries if entry.version == version) + for (input_type, _case), formatter_entries in _entries_by_scenario_and_formatter(version_entries).items(): + baseline = formatter_entries.get("default") + for formatter in sorted(formatter_entries, key=_formatter_sort_key): + entry = formatter_entries[formatter] + values = [ + _input_label(input_type), + _formatter_label(entry.formatter), + _format_ms(entry.median_ms), + _relative_speed_cell(entry, baseline), + _status_label(entry), + ] + if include_version: + values.insert(0, version) + else: + values.insert(4, _range_cell(entry)) + lines.append("| " + " | ".join(_markdown_cell(value) for value in values) + " |") + return "\n".join(lines) + + +def _indent_block(text: str) -> str: + return "\n".join(f" {line}" if line else "" for line in text.splitlines()) + + +def _render_case_tabs(entries: tuple[BenchmarkEntry, ...], *, include_version: bool) -> str: + blocks: list[str] = [] + for case in _cases(entries): + blocks.extend(( + f'=== "{case.title()}"', + "", + _indent_block(_render_case_results_table(entries, case=case, include_version=include_version)), + "", + )) + return "\n".join(blocks).rstrip() + + +def _scenarios(entries: tuple[BenchmarkEntry, ...]) -> list[tuple[str, str]]: + return sorted( + {(entry.input_type, entry.case) for entry in entries}, + key=lambda scenario: (_case_sort_key(scenario[1]), scenario[0]), + ) + + +def _scenario_svg_filename(input_type: str, case: str, *, index: int) -> str: + if index == 0: + return "release-benchmarks.svg" + return f"release-benchmarks-{case}-{input_type}.svg" + + +def _scenario_svg_path(svg_path: Path, input_type: str, case: str, *, index: int) -> Path: + return svg_path.with_name(_scenario_svg_filename(input_type, case, index=index)) + + +def _scenario_svg_relative_path(input_type: str, case: str, *, index: int) -> str: + return f"assets/benchmarks/{_scenario_svg_filename(input_type, case, index=index)}" + + +def _render_chart_tabs(entries: tuple[BenchmarkEntry, ...]) -> str: + blocks: list[str] = [] + for index, (input_type, case) in enumerate(_scenarios(entries)): + label = _scenario_label(input_type, case) + blocks.extend(( + f'=== "{label}"', + "", + _indent_block( + f"![{label} release benchmark trend]({_scenario_svg_relative_path(input_type, case, index=index)})" + "{ align=center }" + ), + "", + )) + return "\n".join(blocks).rstrip() + + +def _formatter_history_cell(entry: BenchmarkEntry | None, baseline: BenchmarkEntry | None) -> str: + if entry is None: + return EMPTY_CELL + if entry.status != STATUS_OK: + return _status_label(entry) + if entry.formatter == "default": + return _format_ms(entry.median_ms) + if speed := _speed_label(entry, baseline): + return f"{_format_ms(entry.median_ms)} ({speed})" + return _format_ms(entry.median_ms) + + +def _render_scenario_history_table(entries: tuple[BenchmarkEntry, ...], *, input_type: str, case: str) -> str: + headers = ("Version", *(_formatter_label(formatter) for formatter in FORMATTER_ORDER)) + lines = [ + "| " + " | ".join(headers) + " |", + "| " + " | ".join("---" for _header in headers) + " |", + ] + scenario_entries = tuple(entry for entry in entries if entry.input_type == input_type and entry.case == case) + for version in sorted({entry.version for entry in scenario_entries}, key=_version_sort_key): + formatter_entries = {entry.formatter: entry for entry in scenario_entries if entry.version == version} + baseline = formatter_entries.get("default") + values = [ + version, + *(_formatter_history_cell(formatter_entries.get(formatter), baseline) for formatter in FORMATTER_ORDER), + ] + lines.append("| " + " | ".join(_markdown_cell(value) for value in values) + " |") + return "\n".join(lines) + + +def _render_scenario_history_tabs(entries: tuple[BenchmarkEntry, ...]) -> str: + blocks: list[str] = [] + for input_type, case in _scenarios(entries): + blocks.extend(( + f'=== "{_scenario_label(input_type, case)}"', + "", + _indent_block(_render_scenario_history_table(entries, input_type=input_type, case=case)), + "", + )) + return "\n".join(blocks).rstrip() + + +def _metadata_value(data: BenchmarkData, key: str) -> str: + return _string(data.metadata.get(key)).strip() or EMPTY_CELL + + +def _metadata_int(data: BenchmarkData, key: str) -> int | None: + value = _metadata_value(data, key) + return int(value) if value.isdecimal() else None + + +def _format_count(value: int | None) -> str: + if value is None: + return EMPTY_CELL + return f"{value:,}" + + +def _selected_version_count(data: BenchmarkData) -> int: + selected_versions = _metadata_value(data, "selected_versions") + if selected_versions == EMPTY_CELL: + return len({entry.version for entry in data.entries}) + return len([version for version in selected_versions.split(",") if version]) + + +def _collection_metadata_lines(data: BenchmarkData) -> list[str]: + return [ + "## Collection Policy", + "", + "- The benchmark workflow runs on `ubuntu-24.04`.", + "- The Python version is the workflow input, defaulting to the latest configured CI Python.", + "- Release packages are installed from PyPI in isolated virtual environments.", + "- Input coverage currently focuses on OpenAPI and JSON Schema.", + "- Historical backfills are produced by the `Release Benchmarks` workflow and committed after review.", + "", + "## Latest Dataset", + "", + f"- Schema version: `{data.schema_version}`", + f"- Generated at: `{_metadata_value(data, 'generated_at')}`", + f"- Source workflow: `{_metadata_value(data, 'workflow')}`", + f"- Benchmark runs per case: `{_metadata_value(data, 'runs_per_case')}`", + f"- Version selection: `{_metadata_value(data, 'selection_strategy')}`", + f"- Selected versions: `{_selected_version_count(data)}`", + f"- Download source: `{_metadata_value(data, 'download_source')}`", + f"- Download window: `{_metadata_value(data, 'download_window_days')}` days", + f"- Downloads in window: `{_format_count(_metadata_int(data, 'download_window_total'))}`", + f"- PyPIStats last month: `{_format_count(_metadata_int(data, 'pypistats_last_month'))}`", + "", + ] + + +def render_release_benchmark_markdown(data: BenchmarkData) -> str: + """Render the release benchmark documentation page.""" + lines = [ + "# Performance Benchmarks", + "", + "", + "", + ( + "This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. " + "The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release " + "changes can be compared without mixing in third-party generator results. Automatic backfills select " + "versions from PyPI download-by-version data when that public dataset is available." + ), + "", + ] + + if not data.entries: + lines.extend([ + "## Historical Trends", + "", + "No release benchmark data has been committed yet.", + "", + ( + "After this workflow is available on `main`, run it with `workflow_dispatch` and commit the generated " + "`docs/data/release-benchmarks.json`, Markdown, and SVG artifacts." + ), + "", + *_collection_metadata_lines(data), + ]) + return "\n".join(lines) + + latest_version = _latest_version(data.entries) + latest_entries = tuple(entry for entry in data.entries if entry.version == latest_version) + lines.extend([ + "## Historical Trends", + "", + ( + "Each chart plots median generation time by release version for one benchmark scenario. " + "Formatter lines are included for context; missing or unsupported formatter results are skipped." + ), + "", + _render_chart_tabs(data.entries), + "", + *_collection_metadata_lines(data), + "## Latest Release Summary", + "", + ( + "Results below are medians. Built-in and Ruff ratios are relative to the Default formatter " + "for the same scenario." + ), + "", + f"### {latest_version}", + "", + _render_case_tabs(latest_entries, include_version=False), + "", + "## Historical Results", + "", + ( + "Rows are release versions. Formatter cells show median generation time; non-default cells include " + "the speed relative to Default when both results are available." + ), + "", + _render_scenario_history_tabs(data.entries), + "", + ]) + return "\n".join(lines) + + +def _svg_text(x: float, y: float, text: str, style: SvgTextStyle = DEFAULT_TEXT_STYLE) -> str: + return ( + f'{html.escape(text)}' + ) + + +def _scale(value: float, *, source_min: float, source_max: float, target_min: float, target_max: float) -> float: + if source_max == source_min: + return (target_min + target_max) / 2 + ratio = (value - source_min) / (source_max - source_min) + return target_min + ratio * (target_max - target_min) + + +def _chart_entries(entries: tuple[BenchmarkEntry, ...], *, input_type: str, case: str) -> list[BenchmarkEntry]: + return [ + entry + for entry in _sorted_entries(entries) + if ( + entry.input_type == input_type + and entry.case == case + and entry.status == STATUS_OK + and entry.median_ms is not None + ) + ] + + +def _render_empty_svg() -> str: + body = "\n".join(( + _svg_text( + SVG_WIDTH / 2, + SVG_HEIGHT / 2 - 10, + "No release benchmark data committed yet", + EMPTY_TITLE_TEXT_STYLE, + ), + _svg_text( + SVG_WIDTH / 2, + SVG_HEIGHT / 2 + 20, + "Run the Release Benchmarks workflow to generate the initial historical dataset.", + EMPTY_NOTE_TEXT_STYLE, + ), + )) + return _wrap_svg( + body, + desc="No datamodel-code-generator release benchmark data has been committed yet.", + ) + + +def _wrap_svg(body: str, *, desc: str) -> str: + return f""" + datamodel-code-generator release benchmarks + {html.escape(desc)} + + + +{body} + +""" + + +def _line_points(entries: list[BenchmarkEntry], *, formatter: str, versions: list[str], y_max: float) -> list[str]: + by_version = {entry.version: entry for entry in entries if entry.formatter == formatter} + points: list[str] = [] + for index, version in enumerate(versions): + entry = by_version.get(version) + if entry is None or entry.median_ms is None: + continue + x = _scale( + index, + source_min=0, + source_max=max(len(versions) - 1, 1), + target_min=PLOT_LEFT, + target_max=PLOT_LEFT + PLOT_WIDTH, + ) + y = _scale( + entry.median_ms, + source_min=0, + source_max=y_max, + target_min=PLOT_TOP + PLOT_HEIGHT, + target_max=PLOT_TOP, + ) + points.append(f"{x:.1f},{y:.1f}") + return points + + +def _version_tick_indexes(version_count: int) -> list[int]: + if version_count <= 1: + return [0] + step = max(1, round(version_count / VERSION_TICK_COUNT)) + indexes = list(range(0, version_count, step)) + if indexes[-1] != version_count - 1: + indexes.append(version_count - 1) + return indexes + + +def render_release_benchmark_svg(data: BenchmarkData, *, input_type: str = "", case: str = "") -> str: + """Render a static SVG historical trend chart for one benchmark scenario.""" + if not input_type or not case: + scenarios = _scenarios(data.entries) + if not scenarios: + return _render_empty_svg() + input_type, case = scenarios[0] + + entries = _chart_entries(data.entries, input_type=input_type, case=case) + if not entries: + return _render_empty_svg() + + scenario_label = _scenario_label(input_type, case) + versions = sorted( + {entry.version for entry in data.entries if entry.input_type == input_type and entry.case == case}, + key=_version_sort_key, + ) + max_ms = max(entry.median_ms or 0 for entry in entries) + y_max = max_ms * 1.15 if max_ms else 1 + body: list[str] = [ + _svg_text(44, 48, f"datamodel-code-generator release trend: {scenario_label}", TITLE_TEXT_STYLE), + _svg_text(44, 74, "Median generation time by release version. Lower is faster.", MUTED_TEXT_STYLE), + ] + + for index in range(GRID_LINES + 1): + value = y_max * index / GRID_LINES + y = _scale(value, source_min=0, source_max=y_max, target_min=PLOT_TOP + PLOT_HEIGHT, target_max=PLOT_TOP) + body.extend(( + f'', + _svg_text(PLOT_LEFT - 12, y + 4, _format_ms(value), Y_AXIS_TICK_TEXT_STYLE), + )) + + body.extend(( + f'', + ( + f'' + ), + )) + + for index in _version_tick_indexes(len(versions)): + version = versions[index] + x = _scale( + index, + source_min=0, + source_max=max(len(versions) - 1, 1), + target_min=PLOT_LEFT, + target_max=PLOT_LEFT + PLOT_WIDTH, + ) + body.extend(( + f'', + _svg_text(x, PLOT_TOP + PLOT_HEIGHT + 24, version, X_AXIS_TICK_TEXT_STYLE), + )) + + legend_x = PLOT_LEFT + for index, formatter in enumerate(FORMATTER_ORDER): + color = SERIES_COLORS[index % len(SERIES_COLORS)] + x = legend_x + index * 132 + body.extend(( + f'', + f'', + _svg_text(x + 32, 96, _formatter_label(formatter), TICK_TEXT_STYLE), + )) + + for index, formatter in enumerate(FORMATTER_ORDER): + points = _line_points(entries, formatter=formatter, versions=versions, y_max=y_max) + if not points: + continue + color = SERIES_COLORS[index % len(SERIES_COLORS)] + body.append( + f'' + ) + for point in points: + x, y = point.split(",", maxsplit=1) + body.append(f'') + + body.extend(( + _svg_text(PLOT_LEFT + PLOT_WIDTH / 2, PLOT_TOP + PLOT_HEIGHT + 54, "Release version", X_AXIS_TICK_TEXT_STYLE), + _svg_text(44, PLOT_TOP - 16, "Median", TICK_TEXT_STYLE), + )) + + return _wrap_svg( + "\n".join(body), + desc=f"Historical median generation time by release version for {scenario_label}.", + ) + + +def _generated_docs(data_path: Path, docs_path: Path, svg_path: Path) -> tuple[GeneratedDoc, ...]: + data = load_benchmark_data(data_path) + docs = [GeneratedDoc(docs_path, render_release_benchmark_markdown(data).rstrip() + "\n")] + for index, (input_type, case) in enumerate(_scenarios(data.entries)): + docs.append( + GeneratedDoc( + _scenario_svg_path(svg_path, input_type, case, index=index), + render_release_benchmark_svg(data, input_type=input_type, case=case), + ) + ) + if len(docs) == 1: + docs.append(GeneratedDoc(svg_path, render_release_benchmark_svg(data))) + return tuple(docs) + + +def _doc_is_current(doc: GeneratedDoc) -> bool: + return doc.path.exists() and doc.path.read_text(encoding="utf-8") == doc.content + + +def build_docs( + *, + check: bool, + data_path: Path = DATA_PATH, + docs_path: Path = DOCS_PATH, + svg_path: Path = SVG_PATH, +) -> int: + """Generate or check release benchmark documentation outputs.""" + docs = _generated_docs(data_path, docs_path, svg_path) + if check: + if not (out_of_date := tuple(doc.path for doc in docs if not _doc_is_current(doc))): + print("Release benchmark docs are up to date.") + return 0 + for path in out_of_date: + print(f"Release benchmark docs are out of date: {path.relative_to(ROOT)}", file=sys.stderr) + print("Run 'python scripts/build_release_benchmark_docs.py' to update.", file=sys.stderr) + return 1 + + for doc in docs: + doc.path.parent.mkdir(parents=True, exist_ok=True) + doc.path.write_text(doc.content, encoding="utf-8") + return 0 + + +def parse_args() -> argparse.Namespace: + """Parse command-line arguments.""" + parser = argparse.ArgumentParser(description="Build release benchmark documentation and SVG chart") + parser.add_argument("--check", action="store_true", help="Check whether generated benchmark docs are up to date") + parser.add_argument("--data", type=Path, default=DATA_PATH, help="Benchmark JSON data path") + parser.add_argument("--docs", type=Path, default=DOCS_PATH, help="Markdown output path") + parser.add_argument("--svg", type=Path, default=SVG_PATH, help="SVG chart output path") + return parser.parse_args() + + +def main() -> int: + """Script entrypoint.""" + args = parse_args() + return build_docs(check=args.check, data_path=args.data, docs_path=args.docs, svg_path=args.svg) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/collect_release_benchmarks.py b/scripts/collect_release_benchmarks.py new file mode 100644 index 000000000..d5fc4627e --- /dev/null +++ b/scripts/collect_release_benchmarks.py @@ -0,0 +1,444 @@ +"""Collect datamodel-code-generator release benchmarks in isolated environments. + +This script is intended for GitHub Actions. It installs released PyPI packages in +temporary virtual environments, runs CLI generation commands, and writes a JSON +artifact consumed by scripts/build_release_benchmark_docs.py. +""" + +from __future__ import annotations + +import argparse +import json +import os +import platform +import re +import shlex +import shutil +import statistics +import subprocess +import sys +import tempfile +import time +import venv +from dataclasses import asdict, dataclass +from datetime import datetime, timezone +from pathlib import Path + +try: + from scripts.release_benchmark_errors import compact_benchmark_error +except ModuleNotFoundError: # pragma: no cover - direct script execution + from release_benchmark_errors import compact_benchmark_error + +ROOT = Path(__file__).resolve().parents[1] +DEFAULT_OUTPUT = ROOT / ".benchmarks" / "release-benchmarks.json" +DEFAULT_RUNS = 7 +DEFAULT_WARMUPS = 1 +DEFAULT_TIMEOUT_SECONDS = 300 +DEFAULT_INSTALL_RETRIES = 3 +INSTALL_RETRY_BASE_SECONDS = 12 +MAX_ERROR_LENGTH = 1800 +TIMEOUT_EXIT_CODE = 124 +STATUS_OK = "ok" +STATUS_FAILED = "failed" +STATUS_UNSUPPORTED = "unsupported" + + +@dataclass(frozen=True, slots=True) +class BenchmarkCase: + """A CLI benchmark input case.""" + + name: str + input_type: str + path: Path + + +@dataclass(frozen=True, slots=True) +class BenchmarkResult: + """A serializable benchmark result row.""" + + version: str + python_version: str + os: str + input_type: str + case: str + formatter: str + runs: int + median_ms: float | None + min_ms: float | None + max_ms: float | None + stdev_ms: float | None + status: str + command: str + error: str + + +@dataclass(frozen=True, slots=True) +class BenchmarkConfig: + """Benchmark execution settings.""" + + runs: int + warmups: int + timeout: int + install_retries: int + + +@dataclass(frozen=True, slots=True) +class BenchmarkContext: + """State shared by case benchmarks for one release.""" + + version: str + python_path: Path + work_dir: Path + config: BenchmarkConfig + + +BENCHMARK_CASES = ( + BenchmarkCase("small", "jsonschema", ROOT / "tests" / "data" / "jsonschema" / "person.json"), + BenchmarkCase("large", "jsonschema", ROOT / "tests" / "data" / "performance" / "large_models.json"), + BenchmarkCase("small", "openapi", ROOT / "tests" / "data" / "openapi" / "api.yaml"), + BenchmarkCase("large", "openapi", ROOT / "tests" / "data" / "performance" / "openapi_large.yaml"), +) +DEFAULT_FORMATTERS = ("default", "builtin", "ruff") + + +def _split_csv_words(raw: str) -> tuple[str, ...]: + return tuple(dict.fromkeys(token for part in raw.splitlines() for token in re.split(r"[\s,]+", part) if token)) + + +def _normalize_version(version: str) -> str: + return version.strip().removeprefix("v") + + +def _venv_python(venv_path: Path) -> Path: + if platform.system() == "Windows": + return venv_path / "Scripts" / "python.exe" + return venv_path / "bin" / "python" + + +def _run_subprocess(command: list[str], *, timeout: int, cwd: Path = ROOT) -> subprocess.CompletedProcess[str]: + try: + return subprocess.run( + command, + cwd=cwd, + check=False, + capture_output=True, + text=True, + timeout=timeout, + ) + except subprocess.TimeoutExpired as exc: + stderr = _process_output(exc.stderr) + message = f"Timed out after {timeout}s" + return subprocess.CompletedProcess( + command, + TIMEOUT_EXIT_CODE, + stdout=_process_output(exc.stdout), + stderr=f"{message}: {stderr}" if stderr else message, + ) + + +def _process_output(value: str | bytes | None) -> str: + if value is None: + return "" + if isinstance(value, bytes): + return value.decode(errors="replace") + return value + + +def _truncate_error(text: str) -> str: + compact = compact_benchmark_error(text) + if len(compact) <= MAX_ERROR_LENGTH: + return compact + return f"{compact[: MAX_ERROR_LENGTH - 3]}..." + + +def _install_command(python_path: Path, version: str) -> list[str]: + spec = f"datamodel-code-generator[ruff]=={_normalize_version(version)}" + if uv_path := shutil.which("uv"): + return [uv_path, "pip", "install", "--python", str(python_path), spec] + return [str(python_path), "-m", "pip", "install", spec] + + +def _runner_os() -> str: + return os.environ.get("OS") or os.environ.get("RUNNER_OS") or platform.platform() + + +def _create_venv(path: Path) -> Path: + venv.EnvBuilder(with_pip=True, clear=True).create(path) + return _venv_python(path) + + +def _install_release(python_path: Path, version: str, *, timeout: int, retries: int) -> str: + command = _install_command(python_path, version) + last_error = "" + for attempt in range(retries): + result = _run_subprocess(command, timeout=timeout) + if result.returncode == 0: + return "" + last_error = _truncate_error(result.stderr or result.stdout) + if attempt + 1 < retries: + time.sleep(INSTALL_RETRY_BASE_SECONDS * (attempt + 1)) + return last_error + + +def _formatter_args(formatter: str) -> tuple[str, ...]: + if formatter == "default": + return () + if formatter == "builtin": + return ("--formatters", "builtin") + if formatter == "ruff": + return ("--formatters", "ruff-check", "ruff-format") + msg = f"Unsupported formatter benchmark target: {formatter}" + raise ValueError(msg) + + +def _command_args(python_path: Path, case: BenchmarkCase, formatter: str, output_path: Path) -> list[str]: + return [ + str(python_path), + "-m", + "datamodel_code_generator", + "--input", + str(case.path), + "--input-file-type", + case.input_type, + "--output-model-type", + "pydantic_v2.BaseModel", + "--output", + str(output_path), + *_formatter_args(formatter), + ] + + +def _display_command(case: BenchmarkCase, formatter: str) -> str: + return shlex.join([ + "python", + "-m", + "datamodel_code_generator", + "--input", + str(case.path.relative_to(ROOT)), + "--input-file-type", + case.input_type, + "--output-model-type", + "pydantic_v2.BaseModel", + "--output", + "model.py", + *_formatter_args(formatter), + ]) + + +def _failure_status(formatter: str, output: str) -> str: + lower = output.lower() + if formatter == "builtin" and ("invalid choice" in lower or "unrecognized arguments" in lower): + return STATUS_UNSUPPORTED + if formatter == "ruff" and ( + "ruff" in lower and ("not found" in lower or "invalid choice" in lower or "unrecognized arguments" in lower) + ): + return STATUS_UNSUPPORTED + return STATUS_FAILED + + +def _failed_result(version: str, case: BenchmarkCase, formatter: str, *, status: str, error: str) -> BenchmarkResult: + return BenchmarkResult( + version=version, + python_version=platform.python_version(), + os=_runner_os(), + input_type=case.input_type, + case=case.name, + formatter=formatter, + runs=0, + median_ms=None, + min_ms=None, + max_ms=None, + stdev_ms=None, + status=status, + command=_display_command(case, formatter), + error=error, + ) + + +def _successful_result( + version: str, + case: BenchmarkCase, + formatter: str, + samples_ms: list[float], +) -> BenchmarkResult: + return BenchmarkResult( + version=version, + python_version=platform.python_version(), + os=_runner_os(), + input_type=case.input_type, + case=case.name, + formatter=formatter, + runs=len(samples_ms), + median_ms=round(statistics.median(samples_ms), 3), + min_ms=round(min(samples_ms), 3), + max_ms=round(max(samples_ms), 3), + stdev_ms=round(statistics.stdev(samples_ms), 3) if len(samples_ms) > 1 else 0.0, + status=STATUS_OK, + command=_display_command(case, formatter), + error="", + ) + + +def _benchmark_case(context: BenchmarkContext, case: BenchmarkCase, formatter: str) -> BenchmarkResult: + samples_ms: list[float] = [] + for index in range(context.config.runs + context.config.warmups): + output_path = context.work_dir / f"{case.input_type}-{case.name}-{formatter}-{index}.py" + command = _command_args(context.python_path, case, formatter, output_path) + started_at = time.perf_counter() + result = _run_subprocess(command, timeout=context.config.timeout) + elapsed_ms = (time.perf_counter() - started_at) * 1000 + if result.returncode != 0: + error = _truncate_error(result.stderr or result.stdout) + return _failed_result( + context.version, + case, + formatter, + status=_failure_status(formatter, error), + error=error, + ) + if index >= context.config.warmups: + samples_ms.append(elapsed_ms) + return _successful_result(context.version, case, formatter, samples_ms) + + +def _benchmark_install_failure(version: str, formatters: tuple[str, ...], error: str) -> list[BenchmarkResult]: + return [ + _failed_result(version, case, formatter, status=STATUS_FAILED, error=error) + for case in BENCHMARK_CASES + for formatter in formatters + ] + + +def benchmark_version( + version: str, + *, + formatters: tuple[str, ...], + config: BenchmarkConfig, +) -> list[BenchmarkResult]: + """Benchmark one released datamodel-code-generator version.""" + with tempfile.TemporaryDirectory(prefix="datamodel-code-generator-release-bench-") as tmp: + tmp_path = Path(tmp) + venv_python = _create_venv(tmp_path / "venv") + if error := _install_release( + venv_python, + version, + timeout=config.timeout, + retries=config.install_retries, + ): + return _benchmark_install_failure(version, formatters, error) + work_dir = tmp_path / "outputs" + work_dir.mkdir() + context = BenchmarkContext(version=version, python_path=venv_python, work_dir=work_dir, config=config) + return [_benchmark_case(context, case, formatter) for case in BENCHMARK_CASES for formatter in formatters] + + +def _result_payload(result: BenchmarkResult | dict[str, object]) -> dict[str, object]: + if isinstance(result, BenchmarkResult): + return asdict(result) + return result + + +def _payload(results: list[BenchmarkResult] | list[dict[str, object]], *, runs: int, warmups: int) -> dict[str, object]: + return { + "schema_version": 1, + "metadata": { + "generated_at": datetime.now(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z"), + "workflow": os.environ.get("GITHUB_WORKFLOW", "local"), + "workflow_run_id": os.environ.get("GITHUB_RUN_ID", ""), + "collector_sha": os.environ.get("GITHUB_SHA", ""), + "os": _runner_os(), + "python_version": platform.python_version(), + "runs_per_case": str(runs), + "warmups_per_case": str(warmups), + }, + "entries": [_result_payload(result) for result in results], + } + + +def parse_args() -> argparse.Namespace: + """Parse command-line arguments.""" + parser = argparse.ArgumentParser(description="Collect datamodel-code-generator release benchmarks") + parser.add_argument( + "--versions", + required=True, + help="Comma, whitespace, or newline separated release versions/tags", + ) + parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT, help="JSON artifact output path") + parser.add_argument("--runs", type=int, default=DEFAULT_RUNS, help="Measured runs per case") + parser.add_argument("--warmups", type=int, default=DEFAULT_WARMUPS, help="Warmup runs per case") + parser.add_argument("--timeout", type=int, default=DEFAULT_TIMEOUT_SECONDS, help="Subprocess timeout in seconds") + parser.add_argument("--install-retries", type=int, default=DEFAULT_INSTALL_RETRIES, help="PyPI install retry count") + parser.add_argument( + "--formatters", + default=",".join(DEFAULT_FORMATTERS), + help="Comma, whitespace, or newline separated formatter benchmark targets", + ) + return parser.parse_args() + + +def _positive_int_error(name: str, value: int) -> str: + if value > 0: + return "" + return f"{name} must be greater than 0, got {value}" + + +def _non_negative_int_error(name: str, value: int) -> str: + if value >= 0: + return "" + return f"{name} must be greater than or equal to 0, got {value}" + + +def _validate_args(args: argparse.Namespace) -> str: + errors = [ + error + for error in ( + _positive_int_error("--runs", args.runs), + _non_negative_int_error("--warmups", args.warmups), + _positive_int_error("--timeout", args.timeout), + _positive_int_error("--install-retries", args.install_retries), + ) + if error + ] + if not errors: + return "" + return "\n".join(errors) + + +def main() -> int: + """Script entrypoint.""" + args = parse_args() + if error := _validate_args(args): + print(error, file=sys.stderr) + return 2 + if not (versions := tuple(_normalize_version(version) for version in _split_csv_words(args.versions))): + print("No release versions provided", file=sys.stderr) + return 2 + if not (formatters := _split_csv_words(args.formatters)): + print("No formatter targets provided", file=sys.stderr) + return 2 + + results: list[BenchmarkResult] = [] + config = BenchmarkConfig( + runs=args.runs, + warmups=args.warmups, + timeout=args.timeout, + install_retries=args.install_retries, + ) + for version in versions: + print(f"Benchmarking datamodel-code-generator {version}", file=sys.stderr) + results.extend( + benchmark_version( + version, + formatters=formatters, + config=config, + ) + ) + + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(_payload(results, runs=args.runs, warmups=args.warmups), indent=2) + "\n") + print(f"Wrote {args.output}", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/merge_release_benchmarks.py b/scripts/merge_release_benchmarks.py new file mode 100644 index 000000000..fbb31f9db --- /dev/null +++ b/scripts/merge_release_benchmarks.py @@ -0,0 +1,167 @@ +"""Merge per-version release benchmark JSON files. + +Usage: + python scripts/merge_release_benchmarks.py .benchmarks/parts/*.json +""" + +from __future__ import annotations + +import argparse +import json +import os +import platform +import sys +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +try: + from scripts.release_benchmark_errors import compact_benchmark_error +except ModuleNotFoundError: # pragma: no cover - direct script execution + from release_benchmark_errors import compact_benchmark_error + +DEFAULT_OUTPUT = Path(".benchmarks") / "release-benchmarks.json" +DEFAULT_SELECTION = Path(".benchmarks") / "release-benchmark-selection.json" + + +def _load_json(path: Path) -> object: + return json.loads(path.read_text(encoding="utf-8")) + + +def _metadata(payload: object) -> dict[str, Any]: + if isinstance(payload, dict) and isinstance(metadata := payload.get("metadata"), dict): + return metadata + return {} + + +def _entries(payload: object, *, path: Path) -> list[dict[str, object]]: + if not isinstance(payload, dict) or not isinstance(entries := payload.get("entries"), list): + msg = f"Benchmark fragment {path} must contain an entries list" + raise TypeError(msg) + return [_entry_payload(entry) for entry in entries if isinstance(entry, dict)] + + +def _entry_payload(entry: dict[str, object]) -> dict[str, object]: + payload = dict(entry) + if not isinstance(error := payload.get("error"), str): + return payload + payload["error"] = compact_benchmark_error(error) + return payload + + +def _selection_metadata(selection: object) -> dict[str, object]: + if not isinstance(selection, dict): + return {} + download_stats = selection.get("download_stats") + if not isinstance(download_stats, dict): + download_stats = {} + pypistats = download_stats.get("pypistats") + if not isinstance(pypistats, dict): + pypistats = {} + selected_versions = selection.get("selected_versions") + if not isinstance(selected_versions, list): + selected_versions = [] + return { + "selection_strategy": selection.get("strategy", ""), + "selection_window_days": str(selection.get("history_days", "")), + "selected_versions": ",".join(str(version) for version in selected_versions), + "download_source": download_stats.get("source", ""), + "download_window_days": str(download_stats.get("window_days", "")), + "download_versions": str(download_stats.get("versions_with_downloads", "")), + "download_window_total": str(download_stats.get("window_downloads", "")), + "pypistats_source": pypistats.get("source", ""), + "pypistats_last_day": str(pypistats.get("last_day", "")), + "pypistats_last_week": str(pypistats.get("last_week", "")), + "pypistats_last_month": str(pypistats.get("last_month", "")), + "pypistats_timeseries_days": str(pypistats.get("timeseries_days", "")), + "pypistats_timeseries_downloads": str(pypistats.get("timeseries_downloads", "")), + } + + +def _runner_os() -> str: + return os.environ.get("OS") or os.environ.get("RUNNER_OS") or platform.platform() + + +def _python_version() -> str: + return os.environ.get("BENCHMARK_PYTHON_VERSION") or platform.python_version() + + +def _payload(entries: list[dict[str, object]], *, runs: int, warmups: int) -> dict[str, object]: + return { + "schema_version": 1, + "metadata": { + "generated_at": datetime.now(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z"), + "workflow": os.environ.get("GITHUB_WORKFLOW", "local"), + "workflow_run_id": os.environ.get("GITHUB_RUN_ID", ""), + "collector_sha": os.environ.get("GITHUB_SHA", ""), + "os": _runner_os(), + "python_version": _python_version(), + "runs_per_case": str(runs), + "warmups_per_case": str(warmups), + }, + "entries": entries, + } + + +def merge_benchmark_payloads( + fragment_paths: list[Path], + *, + selection_path: Path, + generated_at: str = "", +) -> dict[str, object]: + """Merge benchmark result fragments and selection metadata.""" + entries: list[dict[str, object]] = [] + fragment_metadata: list[dict[str, Any]] = [] + for path in fragment_paths: + payload = _load_json(path) + entries.extend(_entries(payload, path=path)) + fragment_metadata.append(_metadata(payload)) + + selection = _load_json(selection_path) if selection_path.exists() else {} + runs = next((metadata.get("runs_per_case") for metadata in fragment_metadata if metadata.get("runs_per_case")), "0") + warmups = next( + (metadata.get("warmups_per_case") for metadata in fragment_metadata if metadata.get("warmups_per_case")), + "0", + ) + payload = _payload(entries, runs=int(str(runs) or "0"), warmups=int(str(warmups) or "0")) + payload_metadata = payload["metadata"] + if isinstance(payload_metadata, dict): + payload_metadata.update(_selection_metadata(selection)) + if generated_at: + payload_metadata["generated_at"] = generated_at + payload_metadata["workflow"] = os.environ.get("GITHUB_WORKFLOW", payload_metadata.get("workflow", "local")) + payload_metadata["workflow_run_id"] = os.environ.get("GITHUB_RUN_ID", "") + payload_metadata["collector_sha"] = os.environ.get("GITHUB_SHA", "") + payload_metadata["os"] = _runner_os() + payload_metadata["python_version"] = _python_version() + return payload + + +def parse_args() -> argparse.Namespace: + """Parse command-line arguments.""" + parser = argparse.ArgumentParser(description="Merge datamodel-code-generator release benchmark fragments") + parser.add_argument("fragments", nargs="+", type=Path, help="Per-version benchmark JSON fragments") + parser.add_argument( + "--selection", type=Path, default=DEFAULT_SELECTION, help="Release selection metadata JSON path" + ) + parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT, help="Merged benchmark JSON output path") + parser.add_argument("--generated-at", default="", help="UTC generated_at override for deterministic tests") + return parser.parse_args() + + +def main() -> int: + """Script entrypoint.""" + args = parse_args() + fragments = sorted(args.fragments) + if not fragments: + print("No benchmark fragments provided", file=sys.stderr) + return 2 + payload = merge_benchmark_payloads(fragments, selection_path=args.selection, generated_at=args.generated_at) + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8") + print(f"Wrote {args.output}", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/release_benchmark_errors.py b/scripts/release_benchmark_errors.py new file mode 100644 index 000000000..eabbee26f --- /dev/null +++ b/scripts/release_benchmark_errors.py @@ -0,0 +1,52 @@ +"""Helpers for public release benchmark error text.""" + +from __future__ import annotations + +import re + +MAX_PUBLIC_ERROR_LENGTH = 96 + +_BENCHMARK_TEMP_PATH_PATTERN = re.compile( + r"(?:[A-Za-z]:)?[\\/][^\s'\",]*" + r"(?:dcg-release-bench|datamodel-code-generator-release-bench)-[^\s'\",]*" + r"|(?:dcg-release-bench|datamodel-code-generator-release-bench)-[^\s'\",]*", +) + + +def sanitize_benchmark_error(error: str) -> str: + """Remove volatile benchmark worker paths from captured error output.""" + if not error: + return "" + return _BENCHMARK_TEMP_PATH_PATTERN.sub("", error) + + +def compact_benchmark_error(error: str) -> str: + """Normalize captured benchmark error output for JSON and docs.""" + return " ".join(sanitize_benchmark_error(error).split()) + + +def summarize_benchmark_error(*, status: str, formatter: str, error: str) -> str: + """Return a short public-facing error explanation.""" + if not (note := compact_benchmark_error(error)): + return "" + + lower = note.lower() + formatter_name = formatter.lower() + summary = note + match status: + case "unsupported" if formatter_name and ( + "formatters" in lower or "unrecognized arguments" in lower or "invalid choice" in lower + ): + summary = "unavailable" + case "failed" if "timed out after" in lower: + summary = "timeout" + case "failed" if "failed to build" in lower or "no matching distribution" in lower: + summary = "install" + case "failed" if "traceback" in lower: + summary = "command" + case _: + pass + + if len(summary) <= MAX_PUBLIC_ERROR_LENGTH: + return summary + return f"{summary[: MAX_PUBLIC_ERROR_LENGTH - 3]}..." diff --git a/scripts/select_release_benchmark_versions.py b/scripts/select_release_benchmark_versions.py new file mode 100644 index 000000000..24760b6f4 --- /dev/null +++ b/scripts/select_release_benchmark_versions.py @@ -0,0 +1,479 @@ +"""Select release versions for datamodel-code-generator release benchmarks. + +Usage: + python scripts/select_release_benchmark_versions.py --output .benchmarks/release-benchmark-selection.json +""" + +from __future__ import annotations + +import argparse +import importlib.util +import json +import os +import re +import ssl +import sys +import urllib.error +import urllib.request +from dataclasses import asdict, dataclass +from datetime import datetime, timedelta, timezone +from pathlib import Path + +if importlib.util.find_spec("certifi"): + import certifi +else: + certifi = None + +PACKAGE_NAME = "datamodel-code-generator" +PYPI_JSON_URL = f"https://pypi.org/pypi/{PACKAGE_NAME}/json" +PYPISTATS_RECENT_URL = f"https://pypistats.org/api/packages/{PACKAGE_NAME}/recent" +PYPISTATS_OVERALL_URL = f"https://pypistats.org/api/packages/{PACKAGE_NAME}/overall?mirrors=false" +CLICKPY_SQL_URL = "https://sql-clickhouse.clickhouse.com/?user=demo&wait_end_of_query=1" +CLICKPY_VERSION_USAGE_QUERY = """ +SELECT + version, + sum(count) AS downloads, + min(date) AS first_seen, + max(date) AS last_seen +FROM pypi.pypi_downloads_per_day_by_version +WHERE project = '{package_name}' + AND date >= today() - INTERVAL {history_days} DAY +GROUP BY version +ORDER BY downloads DESC +LIMIT {limit} +FORMAT JSON +""" +DEFAULT_OUTPUT = Path(".benchmarks") / "release-benchmark-selection.json" +DEFAULT_HISTORY_DAYS = 365 +DEFAULT_LIMIT = 40 +REQUEST_TIMEOUT_SECONDS = 30 +PRE_RELEASE_PATTERN = re.compile(r"(a|b|rc|dev)", re.IGNORECASE) +AGE_BUCKETS = ( + (0, 30), + (31, 90), + (91, 180), + (181, 365), + (366, 10_000), +) + + +@dataclass(frozen=True, slots=True) +class ReleaseVersion: + """PyPI release version and upload timestamp.""" + + version: str + uploaded_at: str + downloads: int = 0 + first_seen: str = "" + last_seen: str = "" + + +@dataclass(frozen=True, slots=True) +class VersionUsage: + """Download usage for one release version.""" + + version: str + downloads: int + first_seen: str + last_seen: str + + +@dataclass(frozen=True, slots=True) +class VersionSelection: + """Resolved benchmark version selection metadata.""" + + schema_version: int + generated_at: str + package: str + strategy: str + history_days: int + limit: int + selected_versions: list[str] + releases: list[ReleaseVersion] + download_stats: dict[str, object] + + +@dataclass(frozen=True, slots=True) +class SelectionConfig: + """Version selection inputs.""" + + pypi_source: str | Path + clickpy_source: str | Path | None + recent_source: str | Path | None + overall_source: str | Path | None + explicit_versions: str + history_days: int + limit: int + now: datetime + + +def _utc_now() -> datetime: + return datetime.now(timezone.utc) + + +def _parse_datetime(value: str) -> datetime: + return datetime.fromisoformat(value.replace("Z", "+00:00")).astimezone(timezone.utc) + + +def _timestamp(value: datetime) -> str: + return value.astimezone(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z") + + +def _split_csv_words(raw: str) -> list[str]: + return list(dict.fromkeys(token for part in raw.splitlines() for token in re.split(r"[\s,]+", part) if token)) + + +def _normalize_version(version: str) -> str: + return version.strip().removeprefix("v") + + +def _is_stable_version(version: str) -> bool: + return PRE_RELEASE_PATTERN.search(version) is None + + +def _ssl_context() -> ssl.SSLContext | None: + if certifi is None: + return None + return ssl.create_default_context(cafile=certifi.where()) + + +def _read_json_url(url: str) -> object: + request = urllib.request.Request(url, headers={"User-Agent": f"{PACKAGE_NAME} release benchmark selector"}) + with urllib.request.urlopen(request, timeout=REQUEST_TIMEOUT_SECONDS, context=_ssl_context()) as response: + return json.loads(response.read().decode()) + + +def _read_clickpy_json(history_days: int, limit: int) -> object: + query = CLICKPY_VERSION_USAGE_QUERY.format( + package_name=PACKAGE_NAME, + history_days=history_days, + limit=max(limit * 4, 100), + ) + request = urllib.request.Request( + CLICKPY_SQL_URL, + data=query.encode(), + headers={ + "Content-Type": "text/plain; charset=utf-8", + "User-Agent": f"{PACKAGE_NAME} release benchmark selector", + }, + method="POST", + ) + with urllib.request.urlopen(request, timeout=REQUEST_TIMEOUT_SECONDS, context=_ssl_context()) as response: + return json.loads(response.read().decode()) + + +def _read_json(path_or_url: str | Path | None) -> object: + if path_or_url is None: + msg = "Missing JSON source" + raise ValueError(msg) + source = str(path_or_url) + if source.startswith(("https://", "http://")): + return _read_json_url(source) + return json.loads(Path(source).read_text(encoding="utf-8")) + + +def _release_versions(payload: object) -> list[ReleaseVersion]: + if not isinstance(payload, dict) or not isinstance(releases := payload.get("releases"), dict): + msg = "PyPI JSON must contain a releases object" + raise TypeError(msg) + + versions: list[ReleaseVersion] = [] + for version, files in releases.items(): + if not isinstance(version, str) or not isinstance(files, list) or not _is_stable_version(version): + continue + active_files = [file_info for file_info in files if isinstance(file_info, dict) and not file_info.get("yanked")] + if not active_files: + continue + upload_times = [ + _parse_datetime(uploaded_at) + for file_info in active_files + if isinstance(file_info, dict) and isinstance(uploaded_at := file_info.get("upload_time_iso_8601"), str) + ] + if not upload_times: + continue + versions.append(ReleaseVersion(version=_normalize_version(version), uploaded_at=_timestamp(max(upload_times)))) + return sorted(versions, key=lambda release: _parse_datetime(release.uploaded_at), reverse=True) + + +def _version_usage(payload: object) -> list[VersionUsage]: + if not isinstance(payload, dict) or not isinstance(rows := payload.get("data"), list): + msg = "ClickPy JSON must contain a data list" + raise TypeError(msg) + usage: list[VersionUsage] = [] + for row in rows: + if not isinstance(row, dict) or not isinstance(version := row.get("version"), str): + continue + usage.append( + VersionUsage( + version=_normalize_version(version), + downloads=int(row.get("downloads", 0)), + first_seen=str(row.get("first_seen", "")), + last_seen=str(row.get("last_seen", "")), + ) + ) + return sorted(usage, key=lambda item: item.downloads, reverse=True) + + +def _release_with_usage(release: ReleaseVersion, usage: VersionUsage | None) -> ReleaseVersion: + if usage is None: + return release + return ReleaseVersion( + version=release.version, + uploaded_at=release.uploaded_at, + downloads=usage.downloads, + first_seen=usage.first_seen, + last_seen=usage.last_seen, + ) + + +def _latest_releases(releases: list[ReleaseVersion], count: int = 2) -> list[ReleaseVersion]: + return releases[:count] + + +def _age_bucket_index(release: ReleaseVersion, *, now: datetime) -> int: + age_days = (now - _parse_datetime(release.uploaded_at)).days + for index, (start, end) in enumerate(AGE_BUCKETS): + if start <= age_days <= end: + return index + return len(AGE_BUCKETS) + + +def _append_unique(selected: list[ReleaseVersion], release: ReleaseVersion, *, limit: int) -> None: + if len(selected) >= limit or release.version in {item.version for item in selected}: + return + selected.append(release) + + +def _selected_explicit_releases( + releases_by_version: dict[str, ReleaseVersion], + usage_by_version: dict[str, VersionUsage], + explicit_versions: str, + *, + limit: int, +) -> list[ReleaseVersion]: + return [ + _release_with_usage( + releases_by_version.get(version) or ReleaseVersion(version=version, uploaded_at=""), + usage_by_version.get(version), + ) + for raw_version in _split_csv_words(explicit_versions) + if (version := _normalize_version(raw_version)) + ][:limit] + + +def _selected_usage_releases( + releases: list[ReleaseVersion], + usage: list[VersionUsage], + *, + limit: int, + now: datetime, +) -> list[ReleaseVersion]: + releases_by_version = {release.version: release for release in releases} + usage_by_version = {item.version: item for item in usage} + selected: list[ReleaseVersion] = [] + + for release in _latest_releases(releases): + _append_unique(selected, _release_with_usage(release, usage_by_version.get(release.version)), limit=limit) + + by_bucket: dict[int, list[ReleaseVersion]] = {} + for usage_item in usage: + if release := releases_by_version.get(usage_item.version): + by_bucket.setdefault(_age_bucket_index(release, now=now), []).append( + _release_with_usage(release, usage_item) + ) + for bucket in sorted(by_bucket): + if by_bucket[bucket]: + _append_unique(selected, by_bucket[bucket][0], limit=limit) + + for usage_item in usage: + if release := releases_by_version.get(usage_item.version): + _append_unique(selected, _release_with_usage(release, usage_item), limit=limit) + + for release in releases: + _append_unique(selected, _release_with_usage(release, usage_by_version.get(release.version)), limit=limit) + return selected + + +def _selected_recent_releases( + releases: list[ReleaseVersion], + *, + history_days: int, + limit: int, + now: datetime, +) -> list[ReleaseVersion]: + cutoff = now - timedelta(days=history_days) + selected = [release for release in releases if _parse_datetime(release.uploaded_at) >= cutoff] + return selected[:limit] + + +def _pypistats_recent(payload: object) -> dict[str, object]: + if not isinstance(payload, dict) or not isinstance(data := payload.get("data"), dict): + return {} + return { + "last_day": data.get("last_day", ""), + "last_week": data.get("last_week", ""), + "last_month": data.get("last_month", ""), + } + + +def _pypistats_overall(payload: object) -> dict[str, object]: + if not isinstance(payload, dict) or not isinstance(rows := payload.get("data"), list): + return {} + downloads = [row.get("downloads", 0) for row in rows if isinstance(row, dict)] + return { + "timeseries_days": len(downloads), + "timeseries_downloads": sum(value for value in downloads if isinstance(value, int)), + } + + +def _load_pypistats(recent_source: str | Path | None, overall_source: str | Path | None) -> dict[str, object]: + stats: dict[str, object] = {"source": "pypistats.org"} + try: + stats.update(_pypistats_recent(_read_json(recent_source or PYPISTATS_RECENT_URL))) + stats.update(_pypistats_overall(_read_json(overall_source or PYPISTATS_OVERALL_URL))) + except (OSError, ValueError, TypeError, urllib.error.URLError) as exc: + stats["error"] = str(exc) + return stats + + +def _load_clickpy_usage( + source: str | Path | None, *, history_days: int, limit: int +) -> tuple[list[VersionUsage], dict[str, object]]: + stats: dict[str, object] = {"source": "clickpy", "window_days": str(history_days)} + try: + payload = _read_json(source) if source else _read_clickpy_json(history_days, limit) + usage = _version_usage(payload) + stats.update({ + "versions_with_downloads": str(len(usage)), + "window_downloads": str(sum(item.downloads for item in usage)), + }) + except (OSError, ValueError, TypeError, urllib.error.URLError) as exc: + stats["error"] = str(exc) + return [], stats + else: + return usage, stats + + +def select_versions(config: SelectionConfig) -> VersionSelection: + """Resolve benchmark release versions and package download metadata.""" + releases = _release_versions(_read_json(config.pypi_source)) + usage, clickpy_stats = _load_clickpy_usage( + config.clickpy_source, + history_days=config.history_days, + limit=config.limit, + ) + usage_by_version = {item.version: item for item in usage} + releases_by_version = {release.version: release for release in releases} + if config.explicit_versions: + strategy = "explicit" + selected = _selected_explicit_releases( + releases_by_version, + usage_by_version, + config.explicit_versions, + limit=config.limit, + ) + elif usage: + strategy = "clickpy_downloads" + selected = _selected_usage_releases(releases, usage, limit=config.limit, now=config.now) + else: + strategy = "release_upload_time" + selected = _selected_recent_releases( + releases, + history_days=config.history_days, + limit=config.limit, + now=config.now, + ) + download_stats = { + **clickpy_stats, + "pypistats": _load_pypistats(config.recent_source, config.overall_source), + } + return VersionSelection( + schema_version=1, + generated_at=_timestamp(config.now), + package=PACKAGE_NAME, + strategy=strategy, + history_days=config.history_days, + limit=config.limit, + selected_versions=[release.version for release in selected], + releases=selected, + download_stats=download_stats, + ) + + +def _selection_payload(selection: VersionSelection) -> dict[str, object]: + return asdict(selection) + + +def _write_github_outputs(selection: VersionSelection) -> None: + if not (output_path := os.environ.get("GITHUB_OUTPUT")): + return + with Path(output_path).open("a", encoding="utf-8") as output: + output.write(f"versions_json={json.dumps(selection.selected_versions, separators=(',', ':'))}\n") + output.write(f"versions={','.join(selection.selected_versions)}\n") + + +def _positive_int_error(name: str, value: int) -> str: + if value > 0: + return "" + return f"{name} must be greater than 0, got {value}" + + +def _validate_args(args: argparse.Namespace) -> str: + errors = [ + error + for name, value in (("--history-days", args.history_days), ("--limit", args.limit)) + if (error := _positive_int_error(name, value)) + ] + if not errors: + return "" + return "\n".join(errors) + + +def parse_args() -> argparse.Namespace: + """Parse command-line arguments.""" + parser = argparse.ArgumentParser(description="Select datamodel-code-generator release benchmark versions") + parser.add_argument("--versions", default="", help="Comma, whitespace, or newline separated release versions/tags") + parser.add_argument("--history-days", type=int, default=DEFAULT_HISTORY_DAYS, help="Release upload lookback window") + parser.add_argument("--limit", type=int, default=DEFAULT_LIMIT, help="Maximum selected release versions") + parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT, help="Selection JSON output path") + parser.add_argument("--pypi-json", default=PYPI_JSON_URL, help="PyPI project JSON URL or fixture path") + parser.add_argument("--clickpy-json", default=None, help="ClickPy version-download JSON fixture path") + parser.add_argument("--pypistats-recent-json", default=None, help="PyPIStats recent JSON URL or fixture path") + parser.add_argument("--pypistats-overall-json", default=None, help="PyPIStats overall JSON URL or fixture path") + parser.add_argument("--now", default="", help="UTC timestamp override for deterministic tests") + return parser.parse_args() + + +def main() -> int: + """Script entrypoint.""" + args = parse_args() + if error := _validate_args(args): + print(error, file=sys.stderr) + return 2 + + now = _parse_datetime(args.now) if args.now else _utc_now() + selection = select_versions( + SelectionConfig( + pypi_source=args.pypi_json, + clickpy_source=args.clickpy_json, + recent_source=args.pypistats_recent_json, + overall_source=args.pypistats_overall_json, + explicit_versions=args.versions, + history_days=args.history_days, + limit=args.limit, + now=now, + ) + ) + if not selection.selected_versions: + print("No release versions selected", file=sys.stderr) + return 1 + + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(_selection_payload(selection), indent=2) + "\n", encoding="utf-8") + _write_github_outputs(selection) + print(",".join(selection.selected_versions)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/data/expected/release_benchmark_docs/build_release_benchmark_docs_check.txt b/tests/data/expected/release_benchmark_docs/build_release_benchmark_docs_check.txt new file mode 100644 index 000000000..fcebe1c8e --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/build_release_benchmark_docs_check.txt @@ -0,0 +1,4 @@ +returncode: 0 +stdout: +Release benchmark docs are up to date. +stderr: diff --git a/tests/data/expected/release_benchmark_docs/collect_release_benchmarks_failures.txt b/tests/data/expected/release_benchmark_docs/collect_release_benchmarks_failures.txt new file mode 100644 index 000000000..724671bf1 --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/collect_release_benchmarks_failures.txt @@ -0,0 +1,3 @@ +timeout_returncode: 124 +timeout_stderr: Timed out after 1s +ruff_unrecognized: unsupported diff --git a/tests/data/expected/release_benchmark_docs/collect_release_benchmarks_invalid_args.txt b/tests/data/expected/release_benchmark_docs/collect_release_benchmarks_invalid_args.txt new file mode 100644 index 000000000..c020c0943 --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/collect_release_benchmarks_invalid_args.txt @@ -0,0 +1,7 @@ +returncode: 2 +stdout: +stderr: +--runs must be greater than 0, got 0 +--warmups must be greater than or equal to 0, got -1 +--timeout must be greater than 0, got 0 +--install-retries must be greater than 0, got 0 diff --git a/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt new file mode 100644 index 000000000..ae6149785 --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt @@ -0,0 +1,49 @@ +returncode: 0 +stdout: +stderr: +Wrote /release-benchmarks.json +merged: +{ + "schema_version": 1, + "metadata": { + "generated_at": "2026-06-22T00:00:00Z", + "workflow": "local", + "workflow_run_id": "", + "collector_sha": "", + "os": "ubuntu-24.04", + "python_version": "3.14.2", + "runs_per_case": "3", + "warmups_per_case": "1", + "selection_strategy": "clickpy_downloads", + "selection_window_days": "365", + "selected_versions": "0.64.1,0.64.0,0.53.0,0.33.0", + "download_source": "clickpy", + "download_window_days": "365", + "download_versions": "4", + "download_window_total": "1975", + "pypistats_source": "pypistats.org", + "pypistats_last_day": "12", + "pypistats_last_week": "789", + "pypistats_last_month": "3456", + "pypistats_timeseries_days": "2", + "pypistats_timeseries_downloads": "300" + }, + "entries": [ + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 546.0, + "min_ms": 533.0, + "max_ms": 552.0, + "stdev_ms": 9.8, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + } + ] +} diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt new file mode 100644 index 000000000..86fefb7bd --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -0,0 +1,127 @@ +returncode: 0 +stdout: +stderr: +docs: +# Performance Benchmarks + + + +This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. + +## Historical Trends + +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. + +=== "Small / JSON Schema" + + ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + +=== "Large / JSON Schema" + + ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + +=== "Large / OpenAPI" + + ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + +## Collection Policy + +- The benchmark workflow runs on `ubuntu-24.04`. +- The Python version is the workflow input, defaulting to the latest configured CI Python. +- Release packages are installed from PyPI in isolated virtual environments. +- Input coverage currently focuses on OpenAPI and JSON Schema. +- Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. + +## Latest Dataset + +- Schema version: `1` +- Generated at: `2026-06-22T00:00:00Z` +- Source workflow: `Release Benchmarks` +- Benchmark runs per case: `7` +- Version selection: `-` +- Selected versions: `2` +- Download source: `-` +- Download window: `-` days +- Downloads in window: `-` +- PyPIStats last month: `-` + +## Latest Release Summary + +Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. + +### 0.59.0 + +=== "Large" + + | Input | Formatter | Median | vs Default | Range | Status | + | --- | --- | --- | --- | --- | --- | + | JSON Schema | Built-in | 360ms | - | 350ms-389ms | OK | + | OpenAPI | Built-in | 881ms | - | 850ms-901ms | OK | + | OpenAPI | Ruff | - | - | - | Unsupported: formatter target is unavailable in this release | + +## Historical Results + +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. + +=== "Small / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.58.0 | - | - | 72.3ms | + +=== "Large / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.58.0 | - | 420ms | - | + | 0.59.0 | - | 360ms | - | + +=== "Large / OpenAPI" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.58.0 | - | 980ms | - | + | 0.59.0 | - | 881ms | Unsupported: formatter target is unavailable in this release | +svg: + + datamodel-code-generator release benchmarks + Historical median generation time by release version for Small / JSON Schema. + + + +datamodel-code-generator release trend: Small / JSON Schema +Median generation time by release version. Lower is faster. + +0.00ms + +20.8ms + +41.6ms + +62.4ms + +83.2ms + + + +0.58.0 + + +Default + + +Built-in + + +Ruff + + +Release version +Median + diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_error_helpers.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_error_helpers.txt new file mode 100644 index 000000000..b0ef640aa --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_error_helpers.txt @@ -0,0 +1,4 @@ +sanitized: Traceback (most recent call last): File "", line 1, in +unsupported: unavailable +install: install +traceback: command diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt new file mode 100644 index 000000000..861bc72be --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -0,0 +1,126 @@ + +--- markdown --- +# Performance Benchmarks + + + +This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. + +## Historical Trends + +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. + +=== "Small / JSON Schema" + + ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + +=== "Large / JSON Schema" + + ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + +=== "Large / OpenAPI" + + ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + +## Collection Policy + +- The benchmark workflow runs on `ubuntu-24.04`. +- The Python version is the workflow input, defaulting to the latest configured CI Python. +- Release packages are installed from PyPI in isolated virtual environments. +- Input coverage currently focuses on OpenAPI and JSON Schema. +- Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. + +## Latest Dataset + +- Schema version: `1` +- Generated at: `2026-06-22T00:00:00Z` +- Source workflow: `Release Benchmarks` +- Benchmark runs per case: `7` +- Version selection: `-` +- Selected versions: `2` +- Download source: `-` +- Download window: `-` days +- Downloads in window: `-` +- PyPIStats last month: `-` + +## Latest Release Summary + +Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. + +### 0.59.0 + +=== "Large" + + | Input | Formatter | Median | vs Default | Range | Status | + | --- | --- | --- | --- | --- | --- | + | JSON Schema | Built-in | 360ms | - | 350ms-389ms | OK | + | OpenAPI | Built-in | 881ms | - | 850ms-901ms | OK | + | OpenAPI | Ruff | - | - | - | Unsupported: formatter target is unavailable in this release | + +## Historical Results + +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. + +=== "Small / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.58.0 | - | - | 72.3ms | + +=== "Large / JSON Schema" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.58.0 | - | 420ms | - | + | 0.59.0 | - | 360ms | - | + +=== "Large / OpenAPI" + + | Version | Default | Built-in | Ruff | + | --- | --- | --- | --- | + | 0.58.0 | - | 980ms | - | + | 0.59.0 | - | 881ms | Unsupported: formatter target is unavailable in this release | + +--- svg --- + + datamodel-code-generator release benchmarks + Historical median generation time by release version for Small / JSON Schema. + + + +datamodel-code-generator release trend: Small / JSON Schema +Median generation time by release version. Lower is faster. + +0.00ms + +20.8ms + +41.6ms + +62.4ms + +83.2ms + + + +0.58.0 + + +Default + + +Built-in + + +Ruff + + +Release version +Median + diff --git a/tests/data/expected/release_benchmark_docs/select_release_benchmark_versions_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/select_release_benchmark_versions_cli_outputs.txt new file mode 100644 index 000000000..8124521e2 --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/select_release_benchmark_versions_cli_outputs.txt @@ -0,0 +1,63 @@ +returncode: 0 +stdout: +0.64.1,0.64.0,0.53.0,0.33.0 +stderr: +selection: +{ + "schema_version": 1, + "generated_at": "2026-06-22T00:00:00Z", + "package": "datamodel-code-generator", + "strategy": "clickpy_downloads", + "history_days": 365, + "limit": 4, + "selected_versions": [ + "0.64.1", + "0.64.0", + "0.53.0", + "0.33.0" + ], + "releases": [ + { + "version": "0.64.1", + "uploaded_at": "2026-06-19T00:00:00Z", + "downloads": 25, + "first_seen": "2026-06-19", + "last_seen": "2026-06-20" + }, + { + "version": "0.64.0", + "uploaded_at": "2026-06-14T00:00:00Z", + "downloads": 50, + "first_seen": "2026-06-14", + "last_seen": "2026-06-20" + }, + { + "version": "0.53.0", + "uploaded_at": "2026-01-12T00:00:00Z", + "downloads": 900, + "first_seen": "2026-01-12", + "last_seen": "2026-06-20" + }, + { + "version": "0.33.0", + "uploaded_at": "2025-08-14T00:00:00Z", + "downloads": 1000, + "first_seen": "2026-01-01", + "last_seen": "2026-06-20" + } + ], + "download_stats": { + "source": "clickpy", + "window_days": "365", + "versions_with_downloads": "4", + "window_downloads": "1975", + "pypistats": { + "source": "pypistats.org", + "last_day": 12, + "last_week": 789, + "last_month": 3456, + "timeseries_days": 2, + "timeseries_downloads": 300 + } + } +} diff --git a/tests/data/release_benchmarks/clickpy_versions.json b/tests/data/release_benchmarks/clickpy_versions.json new file mode 100644 index 000000000..ff1038cfa --- /dev/null +++ b/tests/data/release_benchmarks/clickpy_versions.json @@ -0,0 +1,47 @@ +{ + "meta": [ + { + "name": "version", + "type": "String" + }, + { + "name": "downloads", + "type": "UInt64" + }, + { + "name": "first_seen", + "type": "Date" + }, + { + "name": "last_seen", + "type": "Date" + } + ], + "data": [ + { + "version": "0.33.0", + "downloads": 1000, + "first_seen": "2026-01-01", + "last_seen": "2026-06-20" + }, + { + "version": "0.53.0", + "downloads": 900, + "first_seen": "2026-01-12", + "last_seen": "2026-06-20" + }, + { + "version": "0.64.0", + "downloads": 50, + "first_seen": "2026-06-14", + "last_seen": "2026-06-20" + }, + { + "version": "0.64.1", + "downloads": 25, + "first_seen": "2026-06-19", + "last_seen": "2026-06-20" + } + ], + "rows": 4 +} diff --git a/tests/data/release_benchmarks/pypi_project.json b/tests/data/release_benchmarks/pypi_project.json new file mode 100644 index 000000000..664e7c889 --- /dev/null +++ b/tests/data/release_benchmarks/pypi_project.json @@ -0,0 +1,40 @@ +{ + "releases": { + "0.20.0": [ + { + "upload_time_iso_8601": "2024-01-10T00:00:00.000000Z", + "yanked": false + } + ], + "0.33.0": [ + { + "upload_time_iso_8601": "2025-08-14T00:00:00.000000Z", + "yanked": false + } + ], + "0.53.0": [ + { + "upload_time_iso_8601": "2026-01-12T00:00:00.000000Z", + "yanked": false + } + ], + "0.64.0": [ + { + "upload_time_iso_8601": "2026-06-14T00:00:00.000000Z", + "yanked": false + } + ], + "0.64.1": [ + { + "upload_time_iso_8601": "2026-06-19T00:00:00.000000Z", + "yanked": false + } + ], + "0.65.0rc1": [ + { + "upload_time_iso_8601": "2026-06-21T00:00:00.000000Z", + "yanked": false + } + ] + } +} diff --git a/tests/data/release_benchmarks/pypistats_overall.json b/tests/data/release_benchmarks/pypistats_overall.json new file mode 100644 index 000000000..bf9d56422 --- /dev/null +++ b/tests/data/release_benchmarks/pypistats_overall.json @@ -0,0 +1,16 @@ +{ + "data": [ + { + "category": "without_mirrors", + "date": "2026-06-19", + "downloads": 100 + }, + { + "category": "without_mirrors", + "date": "2026-06-20", + "downloads": 200 + } + ], + "package": "datamodel-code-generator", + "type": "overall_downloads" +} diff --git a/tests/data/release_benchmarks/pypistats_recent.json b/tests/data/release_benchmarks/pypistats_recent.json new file mode 100644 index 000000000..bcbe17599 --- /dev/null +++ b/tests/data/release_benchmarks/pypistats_recent.json @@ -0,0 +1,9 @@ +{ + "data": { + "last_day": 12, + "last_month": 3456, + "last_week": 789 + }, + "package": "datamodel-code-generator", + "type": "recent_downloads" +} diff --git a/tests/data/release_benchmarks/release_fragment_0641.json b/tests/data/release_benchmarks/release_fragment_0641.json new file mode 100644 index 000000000..666c39265 --- /dev/null +++ b/tests/data/release_benchmarks/release_fragment_0641.json @@ -0,0 +1,31 @@ +{ + "schema_version": 1, + "metadata": { + "generated_at": "2026-06-22T00:00:00Z", + "workflow": "Release Benchmarks", + "workflow_run_id": "fixture", + "collector_sha": "fixture", + "os": "ubuntu-24.04", + "python_version": "3.14.2", + "runs_per_case": "3", + "warmups_per_case": "1" + }, + "entries": [ + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 546.0, + "min_ms": 533.0, + "max_ms": 552.0, + "stdev_ms": 9.8, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + } + ] +} diff --git a/tests/data/release_benchmarks/sample.json b/tests/data/release_benchmarks/sample.json new file mode 100644 index 000000000..3a4a9b2e5 --- /dev/null +++ b/tests/data/release_benchmarks/sample.json @@ -0,0 +1,106 @@ +{ + "schema_version": 1, + "metadata": { + "generated_at": "2026-06-22T00:00:00Z", + "workflow": "Release Benchmarks", + "runs_per_case": "7" + }, + "entries": [ + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 420.4, + "min_ms": 410.1, + "max_ms": 445.9, + "stdev_ms": 11.8, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --formatters builtin --output model.py", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 980.2, + "min_ms": 950.5, + "max_ms": 1005.7, + "stdev_ms": 17.2, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --formatters builtin --output model.py", + "error": "" + }, + { + "version": "0.58.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 7, + "median_ms": 72.35, + "min_ms": 70.1, + "max_ms": 76.8, + "stdev_ms": 2.1, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --formatters ruff-check ruff-format --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 360.2, + "min_ms": 350.0, + "max_ms": 389.4, + "stdev_ms": 12.0, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --formatters builtin --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 880.8, + "min_ms": 850.2, + "max_ms": 901.3, + "stdev_ms": 18.4, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --formatters builtin --output model.py", + "error": "" + }, + { + "version": "0.59.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --formatters ruff-check ruff-format --output model.py", + "error": "formatter target is unavailable in this release" + } + ] +} diff --git a/tests/test_build_release_benchmark_docs_script.py b/tests/test_build_release_benchmark_docs_script.py new file mode 100644 index 000000000..f8f1ee6c9 --- /dev/null +++ b/tests/test_build_release_benchmark_docs_script.py @@ -0,0 +1,266 @@ +"""Tests for release benchmark documentation generation.""" + +from __future__ import annotations + +import os +import subprocess +import sys +from pathlib import Path + +from scripts import build_release_benchmark_docs +from scripts.collect_release_benchmarks import _failure_status, _run_subprocess +from scripts.release_benchmark_errors import sanitize_benchmark_error, summarize_benchmark_error +from tests.conftest import assert_output + +ROOT = Path(__file__).resolve().parents[1] +SCRIPT = ROOT / "scripts" / "build_release_benchmark_docs.py" +FIXTURE_DATA = ROOT / "tests" / "data" / "release_benchmarks" / "sample.json" +FIXTURE_DIR = ROOT / "tests" / "data" / "release_benchmarks" +EXPECTED_RELEASE_BENCHMARK_DOCS_PATH = ROOT / "tests" / "data" / "expected" / "release_benchmark_docs" + + +def _completed_process_output(result: subprocess.CompletedProcess[str]) -> str: + """Format a subprocess result for stable external-file comparison.""" + return f"returncode: {result.returncode}\nstdout:\n{result.stdout}stderr:\n{result.stderr}" + + +def _completed_process_output_with_tmp(result: subprocess.CompletedProcess[str], tmp_path: Path) -> str: + """Format subprocess output with a stable temporary path placeholder.""" + output = _completed_process_output(result).replace(str(tmp_path), "") + return output.replace("\\", "/") + + +def _raise_for_failed_process(result: subprocess.CompletedProcess[str]) -> None: + """Surface subprocess failures before tests read expected output files.""" + if result.returncode == 0: + return + raise AssertionError(_completed_process_output(result)) + + +def test_build_release_benchmark_docs_check_is_up_to_date() -> None: + """Check that committed release benchmark docs match the committed JSON dataset.""" + result = subprocess.run( + [sys.executable, str(SCRIPT), "--check"], + cwd=ROOT, + capture_output=True, + text=True, + check=False, + ) + + _raise_for_failed_process(result) + assert_output( + _completed_process_output(result), + EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "build_release_benchmark_docs_check.txt", + ) + + +def test_release_benchmark_renderers_use_fixture_data() -> None: + """Render Markdown and SVG from an external benchmark data fixture.""" + data = build_release_benchmark_docs.load_benchmark_data(FIXTURE_DATA) + + assert_output( + "\n--- markdown ---\n" + + build_release_benchmark_docs.render_release_benchmark_markdown(data) + + "\n--- svg ---\n" + + build_release_benchmark_docs.render_release_benchmark_svg(data), + EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "release_benchmark_rendered.txt", + ) + + +def test_release_benchmark_docs_cli_writes_expected_outputs(tmp_path: Path) -> None: + """The CLI can render fixture-backed Markdown and SVG to caller-selected paths.""" + docs_path = tmp_path / "performance-benchmarks.md" + svg_path = tmp_path / "release-benchmarks.svg" + result = subprocess.run( + [ + sys.executable, + str(SCRIPT), + "--data", + str(FIXTURE_DATA), + "--docs", + str(docs_path), + "--svg", + str(svg_path), + ], + cwd=ROOT, + capture_output=True, + text=True, + check=False, + ) + + _raise_for_failed_process(result) + assert_output( + _completed_process_output(result) + + "docs:\n" + + docs_path.read_text(encoding="utf-8") + + "svg:\n" + + svg_path.read_text(encoding="utf-8"), + EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "release_benchmark_cli_outputs.txt", + ) + + +def test_collect_release_benchmark_cli_validation() -> None: + """The collector rejects invalid numeric options before benchmarking.""" + result = subprocess.run( + [ + sys.executable, + str(ROOT / "scripts" / "collect_release_benchmarks.py"), + "--versions", + "0.64.1", + "--runs", + "0", + "--warmups", + "-1", + "--timeout", + "0", + "--install-retries", + "0", + ], + cwd=ROOT, + capture_output=True, + text=True, + check=False, + ) + + assert_output( + _completed_process_output(result), + EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "collect_release_benchmarks_invalid_args.txt", + ) + + +def test_collect_release_benchmark_failure_helpers() -> None: + """Timeouts and old formatter argument errors are classified predictably.""" + timeout_result = _run_subprocess( + [sys.executable, "-c", "import time; time.sleep(2)"], + timeout=1, + ) + output = "\n".join(( + f"timeout_returncode: {timeout_result.returncode}", + f"timeout_stderr: {timeout_result.stderr}", + f"ruff_unrecognized: {_failure_status('ruff', 'error: unrecognized arguments: ruff-format')}", + "", + )) + + assert_output(output, EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "collect_release_benchmarks_failures.txt") + + +def test_release_benchmark_error_helpers_redact_public_output() -> None: + """Benchmark errors redact volatile temp paths and summarize noisy failures.""" + path_error = ( + 'Traceback (most recent call last): File "/tmp/dcg-release-bench-abc123/venv/lib/python3.14/' + 'site-packages/datamodel_code_generator/__main__.py", line 1, in ' + ) + output = "\n".join(( + f"sanitized: {sanitize_benchmark_error(path_error)}", + "unsupported: " + + summarize_benchmark_error( + status="unsupported", + formatter="builtin", + error="error: argument --formatters: invalid choice: 'builtin'", + ), + "install: " + + summarize_benchmark_error( + status="failed", + formatter="default", + error="Using Python 3.14.2 environment at: /tmp/dcg-release-bench-abc123/venv Failed to build typed-ast", + ), + "traceback: " + summarize_benchmark_error(status="failed", formatter="ruff", error=path_error), + "", + )) + + assert_output(output, EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "release_benchmark_error_helpers.txt") + + +def test_select_release_benchmark_versions_cli_writes_usage_based_selection(tmp_path: Path) -> None: + """The selector uses version download data and writes a deterministic selection artifact.""" + output_path = tmp_path / "release-benchmark-selection.json" + result = subprocess.run( + [ + sys.executable, + str(ROOT / "scripts" / "select_release_benchmark_versions.py"), + "--pypi-json", + str(FIXTURE_DIR / "pypi_project.json"), + "--clickpy-json", + str(FIXTURE_DIR / "clickpy_versions.json"), + "--pypistats-recent-json", + str(FIXTURE_DIR / "pypistats_recent.json"), + "--pypistats-overall-json", + str(FIXTURE_DIR / "pypistats_overall.json"), + "--history-days", + "365", + "--limit", + "4", + "--now", + "2026-06-22T00:00:00Z", + "--output", + str(output_path), + ], + cwd=ROOT, + capture_output=True, + text=True, + check=False, + ) + + _raise_for_failed_process(result) + assert_output( + _completed_process_output(result) + "selection:\n" + output_path.read_text(encoding="utf-8"), + EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "select_release_benchmark_versions_cli_outputs.txt", + ) + + +def test_merge_release_benchmarks_cli_writes_expected_payload(tmp_path: Path) -> None: + """The merge CLI combines selection metadata and per-version fragments.""" + selection_path = tmp_path / "release-benchmark-selection.json" + selector_result = subprocess.run( + [ + sys.executable, + str(ROOT / "scripts" / "select_release_benchmark_versions.py"), + "--pypi-json", + str(FIXTURE_DIR / "pypi_project.json"), + "--clickpy-json", + str(FIXTURE_DIR / "clickpy_versions.json"), + "--pypistats-recent-json", + str(FIXTURE_DIR / "pypistats_recent.json"), + "--pypistats-overall-json", + str(FIXTURE_DIR / "pypistats_overall.json"), + "--history-days", + "365", + "--limit", + "4", + "--now", + "2026-06-22T00:00:00Z", + "--output", + str(selection_path), + ], + cwd=ROOT, + capture_output=True, + text=True, + check=False, + ) + _raise_for_failed_process(selector_result) + + output_path = tmp_path / "release-benchmarks.json" + result = subprocess.run( + [ + sys.executable, + str(ROOT / "scripts" / "merge_release_benchmarks.py"), + str(FIXTURE_DIR / "release_fragment_0641.json"), + "--selection", + str(selection_path), + "--generated-at", + "2026-06-22T00:00:00Z", + "--output", + str(output_path), + ], + cwd=ROOT, + env={**os.environ, "OS": "ubuntu-24.04", "BENCHMARK_PYTHON_VERSION": "3.14.2"}, + capture_output=True, + text=True, + check=False, + ) + + _raise_for_failed_process(result) + assert_output( + _completed_process_output_with_tmp(result, tmp_path) + "merged:\n" + output_path.read_text(encoding="utf-8"), + EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "merge_release_benchmarks_cli_outputs.txt", + ) diff --git a/tox.ini b/tox.ini index d9585c2c3..3068e63c1 100644 --- a/tox.ini +++ b/tox.ini @@ -182,6 +182,13 @@ commands = dependency_groups = no_default_groups = true +[testenv:release-benchmark-docs] +description = Build release benchmark documentation and SVG chart (use --check to validate only) +commands = + python scripts/build_release_benchmark_docs.py {posargs} +dependency_groups = +no_default_groups = true + [testenv:llms-txt] description = Generate llms.txt files (use --check to validate only, requires Python 3.11+) commands = @@ -213,6 +220,7 @@ commands = python scripts/build_experimental_docs.py python scripts/build_conformance_docs.py python scripts/build_architecture_docs.py + python scripts/build_release_benchmark_docs.py python scripts/build_llms_txt.py pytest \ tests/test_main_kr.py::test_generate_prompt_basic \ diff --git a/zensical.toml b/zensical.toml index 029be19cb..a6105cf17 100644 --- a/zensical.toml +++ b/zensical.toml @@ -77,6 +77,7 @@ nav = [ ]} ]}, { "Conformance Dashboard" = "conformance.md" }, + { "Performance Benchmarks" = "performance-benchmarks.md" }, { "Deprecations" = "deprecations.md" }, { "Experimental Features" = "experimental.md" }, { "FAQ" = "faq.md" }, From 54fb39b23501ec0146c77f7d7fff292e51ec9cc8 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 01:53:14 +0900 Subject: [PATCH 02/19] Backfill release benchmark data --- .../release-benchmarks-large-jsonschema.svg | 154 +- .../release-benchmarks-large-openapi.svg | 154 +- .../release-benchmarks-small-openapi.svg | 140 +- docs/assets/benchmarks/release-benchmarks.svg | 154 +- docs/data/release-benchmarks.json | 6969 +++++++++++------ docs/llms-full.txt | 146 +- docs/performance-benchmarks.md | 146 +- scripts/build_release_benchmark_docs.py | 31 + .../release_benchmark_cli_outputs.txt | 2 + .../release_benchmark_rendered.txt | 2 + tests/data/release_benchmarks/sample.json | 1 + 11 files changed, 5017 insertions(+), 2882 deletions(-) diff --git a/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg b/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg index b2f94ffda..52e4a7e23 100644 --- a/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg +++ b/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg @@ -15,35 +15,35 @@ 0.00ms -1.45s +1.73s -2.91s +3.46s -4.36s +5.20s -5.82s +6.93s 0.17.2 - -0.25.6 - -0.26.3 - -0.28.2 - -0.30.2 - -0.34.0 - -0.42.0 - -0.52.2 - -0.55.0 - -0.58.0 + +0.25.7 + +0.26.5 + +0.28.0 + +0.28.5 + +0.31.0 + +0.34.0 + +0.42.2 + +0.54.0 + +0.57.0 0.64.1 @@ -55,50 +55,72 @@ Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Release version Median diff --git a/docs/assets/benchmarks/release-benchmarks-large-openapi.svg b/docs/assets/benchmarks/release-benchmarks-large-openapi.svg index 56318533f..5b48eb651 100644 --- a/docs/assets/benchmarks/release-benchmarks-large-openapi.svg +++ b/docs/assets/benchmarks/release-benchmarks-large-openapi.svg @@ -15,35 +15,35 @@ 0.00ms -1.32s +1.58s -2.64s +3.16s -3.97s +4.74s -5.29s +6.32s 0.17.2 - -0.25.6 - -0.26.3 - -0.28.2 - -0.30.2 - -0.34.0 - -0.42.0 - -0.52.2 - -0.55.0 - -0.58.0 + +0.25.7 + +0.26.5 + +0.28.0 + +0.28.5 + +0.31.0 + +0.34.0 + +0.42.2 + +0.54.0 + +0.57.0 0.64.1 @@ -55,50 +55,72 @@ Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Release version Median diff --git a/docs/assets/benchmarks/release-benchmarks-small-openapi.svg b/docs/assets/benchmarks/release-benchmarks-small-openapi.svg index b06695d7b..4bfa41146 100644 --- a/docs/assets/benchmarks/release-benchmarks-small-openapi.svg +++ b/docs/assets/benchmarks/release-benchmarks-small-openapi.svg @@ -26,24 +26,24 @@ 0.17.2 - -0.25.6 - -0.26.3 - -0.28.2 - -0.30.2 - -0.34.0 - -0.42.0 - -0.52.2 - -0.55.0 - -0.58.0 + +0.25.7 + +0.26.5 + +0.28.0 + +0.28.5 + +0.31.0 + +0.34.0 + +0.42.2 + +0.54.0 + +0.57.0 0.64.1 @@ -55,49 +55,71 @@ Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + Release version Median diff --git a/docs/assets/benchmarks/release-benchmarks.svg b/docs/assets/benchmarks/release-benchmarks.svg index 55ca73419..9e1f3e1a2 100644 --- a/docs/assets/benchmarks/release-benchmarks.svg +++ b/docs/assets/benchmarks/release-benchmarks.svg @@ -15,35 +15,35 @@ 0.00ms -604ms +642ms -1.21s +1.28s -1.81s +1.93s -2.42s +2.57s 0.17.2 - -0.25.6 - -0.26.3 - -0.28.2 - -0.30.2 - -0.34.0 - -0.42.0 - -0.52.2 - -0.55.0 - -0.58.0 + +0.25.7 + +0.26.5 + +0.28.0 + +0.28.5 + +0.31.0 + +0.34.0 + +0.42.2 + +0.54.0 + +0.57.0 0.64.1 @@ -55,50 +55,72 @@ Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Release version Median diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json index eba456da5..30a24ae84 100644 --- a/docs/data/release-benchmarks.json +++ b/docs/data/release-benchmarks.json @@ -1,7 +1,7 @@ { "schema_version": 1, "metadata": { - "generated_at": "2026-06-21T16:10:37Z", + "generated_at": "2026-06-21T16:47:19Z", "workflow": "Release Benchmarks", "workflow_run_id": "27909913146", "collector_sha": "85e13401db79e0058d53e2b20864bbe76917177d", @@ -9,9 +9,9 @@ "python_version": "3.14.2", "runs_per_case": "3", "warmups_per_case": "1", - "selection_strategy": "clickpy_downloads", + "selection_strategy": "clickpy_downloads_with_compatibility_backfill", "selection_window_days": "365", - "selected_versions": "0.64.1,0.64.0,0.59.0,0.56.1,0.53.0,0.33.0,0.26.1,0.31.2,0.36.0,0.32.0,0.28.2,0.35.0,0.25.9,0.28.5,0.30.1,0.26.5,0.55.0,0.34.0,0.54.0,0.25.6,0.39.0,0.26.3,0.25.2,0.57.0,0.56.0,0.52.2,0.25.4,0.54.1,0.26.4,0.28.4,0.42.0,0.27.3,0.30.2,0.17.2,0.42.2,0.43.1,0.25.7,0.25.0,0.58.0,0.45.0", + "selected_versions": "0.17.2,0.25.0,0.25.2,0.25.4,0.25.6,0.25.7,0.25.9,0.26.1,0.26.3,0.26.4,0.26.5,0.27.0,0.27.1,0.27.2,0.27.3,0.28.0,0.28.1,0.28.2,0.28.3,0.28.4,0.28.5,0.29.0,0.30.0,0.30.1,0.30.2,0.31.0,0.31.1,0.31.2,0.32.0,0.33.0,0.34.0,0.35.0,0.36.0,0.39.0,0.42.0,0.42.2,0.43.1,0.45.0,0.52.2,0.53.0,0.54.0,0.54.1,0.55.0,0.56.0,0.56.1,0.57.0,0.58.0,0.59.0,0.64.0,0.64.1", "download_source": "clickpy", "download_window_days": "365", "download_versions": "160", @@ -21,7 +21,10 @@ "pypistats_last_week": "3536677", "pypistats_last_month": "14094143", "pypistats_timeseries_days": "", - "pypistats_timeseries_downloads": "" + "pypistats_timeseries_downloads": "", + "compatibility_backfill": "Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing.", + "compatibility_backfill_workflow_run_id": "27910916903", + "compatibility_backfill_python_version": "3.13.14" }, "entries": [ { @@ -29,15 +32,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "default", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -45,15 +48,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "builtin", + "case": "large", + "formatter": "default", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -61,7 +64,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "ruff", "runs": 0, "median_ms": null, @@ -69,7 +72,7 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -77,15 +80,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "default", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -93,15 +96,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "builtin", + "case": "small", + "formatter": "default", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -109,7 +112,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "ruff", "runs": 0, "median_ms": null, @@ -117,7 +120,7 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -125,15 +128,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "default", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -141,15 +144,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "builtin", + "case": "large", + "formatter": "default", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -157,7 +160,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "ruff", "runs": 0, "median_ms": null, @@ -165,7 +168,7 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -173,15 +176,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "default", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -189,15 +192,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "builtin", + "case": "small", + "formatter": "default", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -205,7 +208,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "ruff", "runs": 0, "median_ms": null, @@ -213,7 +216,7 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "Using Python 3.14.2 environment at: Resolved 42 packages in 10ms Building typed-ast==1.5.5 \u00d7 Failed to build `typed-ast==1.5.5` \u251c\u2500\u25b6 The build backend returned an error \u2570\u2500\u25b6 Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) [stdout] running bdist_wheel running build running build_py copying typed_ast/conversions.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/__init__.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast3.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying typed_ast/ast27.py -> build/lib.linux-x86_64-cpython-314/typed_ast copying ast3/tests/test_basics.py -> build/lib.linux-x86_64-cpython-314/typed_ast/tests running build_ext building '_ast27' extension gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -Iast27/Include -I/home/runner/work/_temp/setup-uv-cache/builds-v0/.tmpbaDYN8/include -I/opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14 -c ast27/Custom/typed_ast.c -o build/temp.linux-x86_64-cpython-314/ast27/Custom/typed_ast.o [stderr] In file included from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/pyport.h:388, from /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/Python.h:72, from ast27/Custom/typed_ast.c:1: ast27/Custom/../Include/compile.h:12:12: error: unknown type name \u2018PyFutureFeatures\u2019 12 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ^~~~~~~~~~~~~~~~ /opt/hostedtoolcache/Python/3.14.2/x64/include/python3.14/exports.h:91:53: note: in definition of macro \u2018PyAPI_FUNC\u2019 91 | # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE | ^~~~~ error: command '/usr/bin/gcc' failed with exit code 1 hint: `typed-ast` (v1.5.5) was included because `datamodel-code-ge..." }, { @@ -221,23 +224,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "default", - "runs": 3, - "median_ms": 386.88, - "min_ms": 386.71, - "max_ms": 392.235, - "stdev_ms": 3.142, - "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "" - }, - { - "version": "0.25.0", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -245,25 +232,9 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, - { - "version": "0.25.0", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" - }, { "version": "0.25.0", "python_version": "3.14.2", @@ -286,79 +257,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 425.207, - "min_ms": 420.633, - "max_ms": 428.595, - "stdev_ms": 3.995, + "median_ms": 386.88, + "min_ms": 386.71, + "max_ms": 392.235, + "stdev_ms": 3.142, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.0", @@ -382,79 +353,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.25.2", + "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 417.8, - "min_ms": 414.03, - "max_ms": 417.939, - "stdev_ms": 2.218, + "median_ms": 425.207, + "min_ms": 420.633, + "max_ms": 428.595, + "stdev_ms": 3.995, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.25.2", + "version": "0.25.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.2", @@ -478,79 +449,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 459.88, - "min_ms": 455.168, - "max_ms": 474.289, - "stdev_ms": 9.962, + "median_ms": 417.8, + "min_ms": 414.03, + "max_ms": 417.939, + "stdev_ms": 2.218, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.2", @@ -574,79 +545,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.25.4", + "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 396.39, - "min_ms": 394.673, - "max_ms": 402.313, - "stdev_ms": 4.008, + "median_ms": 459.88, + "min_ms": 455.168, + "max_ms": 474.289, + "stdev_ms": 9.962, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.25.4", + "version": "0.25.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.4", @@ -670,79 +641,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 436.513, - "min_ms": 434.687, - "max_ms": 437.654, - "stdev_ms": 1.497, + "median_ms": 396.39, + "min_ms": 394.673, + "max_ms": 402.313, + "stdev_ms": 4.008, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.4", @@ -766,79 +737,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.25.6", + "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 412.531, - "min_ms": 411.051, - "max_ms": 421.034, - "stdev_ms": 5.388, + "median_ms": 436.513, + "min_ms": 434.687, + "max_ms": 437.654, + "stdev_ms": 1.497, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.25.6", + "version": "0.25.4", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.6", @@ -862,79 +833,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 446.511, - "min_ms": 444.555, - "max_ms": 478.991, - "stdev_ms": 19.342, + "median_ms": 412.531, + "min_ms": 411.051, + "max_ms": 421.034, + "stdev_ms": 5.388, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.6", @@ -958,79 +929,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.25.7", + "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 396.383, - "min_ms": 394.289, - "max_ms": 399.772, - "stdev_ms": 2.767, + "median_ms": 446.511, + "min_ms": 444.555, + "max_ms": 478.991, + "stdev_ms": 19.342, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.25.7", + "version": "0.25.6", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.7", @@ -1054,79 +1025,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 428.434, - "min_ms": 426.27, - "max_ms": 429.974, - "stdev_ms": 1.861, + "median_ms": 396.383, + "min_ms": 394.289, + "max_ms": 399.772, + "stdev_ms": 2.767, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.7", @@ -1150,79 +1121,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.25.9", + "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 404.428, - "min_ms": 401.902, - "max_ms": 410.079, - "stdev_ms": 4.187, + "median_ms": 428.434, + "min_ms": 426.27, + "max_ms": 429.974, + "stdev_ms": 1.861, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.25.9", + "version": "0.25.7", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.9", @@ -1246,79 +1217,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 439.777, - "min_ms": 437.918, - "max_ms": 440.855, - "stdev_ms": 1.486, + "median_ms": 404.428, + "min_ms": 401.902, + "max_ms": 410.079, + "stdev_ms": 4.187, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.25.9", @@ -1342,79 +1313,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.26.1", + "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 422.829, - "min_ms": 405.517, - "max_ms": 424.729, - "stdev_ms": 10.586, + "median_ms": 439.777, + "min_ms": 437.918, + "max_ms": 440.855, + "stdev_ms": 1.486, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.26.1", + "version": "0.25.9", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.1", @@ -1438,79 +1409,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 495.077, - "min_ms": 478.385, - "max_ms": 496.589, - "stdev_ms": 10.102, + "median_ms": 422.829, + "min_ms": 405.517, + "max_ms": 424.729, + "stdev_ms": 10.586, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.1", @@ -1534,79 +1505,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.26.3", + "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 400.75, - "min_ms": 398.115, - "max_ms": 407.988, - "stdev_ms": 5.112, + "median_ms": 495.077, + "min_ms": 478.385, + "max_ms": 496.589, + "stdev_ms": 10.102, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.26.3", + "version": "0.26.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.3", @@ -1630,79 +1601,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 433.565, - "min_ms": 433.389, - "max_ms": 434.195, - "stdev_ms": 0.424, + "median_ms": 400.75, + "min_ms": 398.115, + "max_ms": 407.988, + "stdev_ms": 5.112, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.3", @@ -1726,69 +1697,53 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.26.4", + "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" - }, - { - "version": "0.26.4", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "runs": 3, + "median_ms": 433.565, + "min_ms": 433.389, + "max_ms": 434.195, + "stdev_ms": 0.424, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.26.4", + "version": "0.26.3", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -1796,45 +1751,45 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 3286.631, + "min_ms": 3229.569, + "max_ms": 3410.438, + "stdev_ms": 92.464, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -1844,47 +1799,47 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 404.676, + "min_ms": 401.05, + "max_ms": 408.213, + "stdev_ms": 3.581, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -1892,45 +1847,45 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 3013.208, + "min_ms": 2988.506, + "max_ms": 3078.063, + "stdev_ms": 46.254, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.26.4", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -1940,47 +1895,47 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { - "version": "0.26.5", - "python_version": "3.14.2", + "version": "0.26.4", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { - "version": "0.26.5", - "python_version": "3.14.2", + "version": "0.26.4", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 440.781, + "min_ms": 427.078, + "max_ms": 441.705, + "stdev_ms": 8.191, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.26.5", - "python_version": "3.14.2", + "version": "0.26.4", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -1988,45 +1943,45 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 3280.459, + "min_ms": 3222.48, + "max_ms": 3331.492, + "stdev_ms": 54.543, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2036,47 +1991,47 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 404.763, + "min_ms": 396.103, + "max_ms": 408.775, + "stdev_ms": 6.477, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -2084,45 +2039,45 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 3209.154, + "min_ms": 3167.391, + "max_ms": 3272.75, + "stdev_ms": 53.055, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.26.5", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -2132,77 +2087,1789 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 189, in _run_module_as_main File \"\", line 148, in _get_module_details File \"\", line 112, in _get_module_details File \"\", line 34, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 14, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion( f'{sys.version_info.major}.{sys.version_info.minor}' ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.26.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.26.5", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 439.177, + "min_ms": 426.517, + "max_ms": 443.282, + "stdev_ms": 8.739, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.26.5", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3653.789, + "min_ms": 3642.647, + "max_ms": 3762.304, + "stdev_ms": 66.102, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 488.155, + "min_ms": 478.874, + "max_ms": 490.98, + "stdev_ms": 6.334, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3470.973, + "min_ms": 3467.81, + "max_ms": 3476.308, + "stdev_ms": 4.295, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 490.599, + "min_ms": 489.287, + "max_ms": 493.566, + "stdev_ms": 2.192, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3512.595, + "min_ms": 3427.5, + "max_ms": 3521.687, + "stdev_ms": 51.953, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 391.846, + "min_ms": 390.896, + "max_ms": 393.149, + "stdev_ms": 1.131, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3292.006, + "min_ms": 3260.119, + "max_ms": 3296.701, + "stdev_ms": 19.905, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 442.265, + "min_ms": 435.808, + "max_ms": 444.821, + "stdev_ms": 4.645, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3388.32, + "min_ms": 3373.114, + "max_ms": 3425.898, + "stdev_ms": 27.171, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 389.316, + "min_ms": 387.859, + "max_ms": 392.298, + "stdev_ms": 2.263, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3201.181, + "min_ms": 3111.191, + "max_ms": 3211.277, + "stdev_ms": 55.102, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 433.085, + "min_ms": 430.577, + "max_ms": 437.777, + "stdev_ms": 3.655, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3786.975, + "min_ms": 3766.92, + "max_ms": 3877.917, + "stdev_ms": 59.151, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 431.843, + "min_ms": 420.194, + "max_ms": 440.458, + "stdev_ms": 10.17, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" }, { "version": "0.27.3", - "python_version": "3.14.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3593.947, + "min_ms": 3510.704, + "max_ms": 3648.179, + "stdev_ms": 69.246, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 475.272, + "min_ms": 471.156, + "max_ms": 483.654, + "stdev_ms": 6.369, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.27.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3235.039, + "min_ms": 3216.677, + "max_ms": 3367.515, + "stdev_ms": 82.3, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 400.21, + "min_ms": 399.608, + "max_ms": 401.497, + "stdev_ms": 0.965, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3003.728, + "min_ms": 2960.112, + "max_ms": 3066.676, + "stdev_ms": 53.573, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 441.993, + "min_ms": 427.833, + "max_ms": 442.05, + "stdev_ms": 8.192, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3651.107, + "min_ms": 3640.071, + "max_ms": 3760.14, + "stdev_ms": 66.366, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 424.931, + "min_ms": 420.644, + "max_ms": 430.506, + "stdev_ms": 4.945, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3475.362, + "min_ms": 3432.898, + "max_ms": 3556.984, + "stdev_ms": 63.065, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 455.764, + "min_ms": 452.522, + "max_ms": 458.746, + "stdev_ms": 3.112, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.1", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3359.982, + "min_ms": 3358.323, + "max_ms": 3363.709, + "stdev_ms": 2.758, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 405.122, + "min_ms": 404.119, + "max_ms": 418.012, + "stdev_ms": 7.748, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3196.865, + "min_ms": 3116.515, + "max_ms": 3206.943, + "stdev_ms": 49.556, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 448.979, + "min_ms": 437.862, + "max_ms": 450.449, + "stdev_ms": 6.882, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3668.266, + "min_ms": 3664.425, + "max_ms": 3713.838, + "stdev_ms": 27.487, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 419.125, + "min_ms": 413.232, + "max_ms": 427.506, + "stdev_ms": 7.173, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3399.66, + "min_ms": 3339.76, + "max_ms": 3437.605, + "stdev_ms": 49.332, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters builtin" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 455.028, + "min_ms": 454.411, + "max_ms": 465.89, + "stdev_ms": 6.457, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.3", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "usage: datamodel-codegen [options] __main__.py: error: unrecognized arguments: --formatters ruff-check ruff-format" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3156.777, + "min_ms": 3156.004, + "max_ms": 3160.832, + "stdev_ms": 2.593, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1320, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 399.335, + "min_ms": 399.074, + "max_ms": 403.887, + "stdev_ms": 2.707, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1320, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 2983.027, + "min_ms": 2971.983, + "max_ms": 3004.706, + "stdev_ms": 16.647, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "small", - "formatter": "builtin", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1320, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.4", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "ruff", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.4", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "large", + "input_type": "openapi", + "case": "small", "formatter": "default", + "runs": 3, + "median_ms": 425.938, + "min_ms": 421.465, + "max_ms": 426.002, + "stdev_ms": 2.601, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.4", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1320, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2212,13 +3879,29 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 3930.883, + "min_ms": 3892.901, + "max_ms": 3974.099, + "stdev_ms": 40.627, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2230,94 +3913,142 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1343, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "default", + "runs": 3, + "median_ms": 435.381, + "min_ms": 414.634, + "max_ms": 452.34, + "stdev_ms": 18.885, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.5", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1343, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", "formatter": "default", + "runs": 3, + "median_ms": 3565.167, + "min_ms": 3542.095, + "max_ms": 3591.607, + "stdev_ms": 24.775, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.5", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1343, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.27.3", - "python_version": "3.14.2", + "version": "0.28.5", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 479.098, + "min_ms": 469.15, + "max_ms": 485.181, + "stdev_ms": 8.092, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.28.5", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", "formatter": "ruff", "runs": 0, "median_ms": null, @@ -2325,28 +4056,60 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 46, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 15, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 455, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 489, in generate results = parser.parse() File \"\", line 1343, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.29.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", "formatter": "default", + "runs": 3, + "median_ms": 5147.73, + "min_ms": 5116.213, + "max_ms": 5246.25, + "stdev_ms": 67.834, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 457, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 490, in generate results = parser.parse() File \"\", line 1366, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.29.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "small", @@ -2356,13 +4119,29 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2065.711, + "min_ms": 2064.019, + "max_ms": 2124.749, + "stdev_ms": 34.585, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "small", @@ -2374,27 +4153,107 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 457, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 490, in generate results = parser.parse() File \"\", line 1366, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.29.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 4722.555, + "min_ms": 4689.351, + "max_ms": 4784.136, + "stdev_ms": 48.095, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", "case": "large", + "formatter": "ruff", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 457, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 490, in generate results = parser.parse() File \"\", line 1366, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", "formatter": "default", + "runs": 3, + "median_ms": 2108.44, + "min_ms": 2093.183, + "max_ms": 2146.638, + "stdev_ms": 27.535, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.29.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 457, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<68 lines>... formatters=config.formatters, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 490, in generate results = parser.parse() File \"\", line 1366, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2404,13 +4263,29 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 5809.72, + "min_ms": 5788.385, + "max_ms": 5823.052, + "stdev_ms": 17.487, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2422,45 +4297,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1368, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2129.756, + "min_ms": 2103.936, + "max_ms": 2140.593, + "stdev_ms": 18.832, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -2469,44 +4344,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1368, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5362.737, + "min_ms": 5349.383, + "max_ms": 5476.511, + "stdev_ms": 69.863, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.2", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -2518,45 +4393,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1368, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2218.146, + "min_ms": 2191.267, + "max_ms": 2231.676, + "stdev_ms": 20.569, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -2565,44 +4440,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1368, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 4062.183, + "min_ms": 4032.969, + "max_ms": 4066.517, + "stdev_ms": 18.247, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2614,45 +4489,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1373, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 1586.035, + "min_ms": 1582.988, + "max_ms": 1614.744, + "stdev_ms": 17.521, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -2661,44 +4536,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1373, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 3688.09, + "min_ms": 3680.406, + "max_ms": 3697.99, + "stdev_ms": 8.815, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.4", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -2710,45 +4585,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1373, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 1628.877, + "min_ms": 1608.365, + "max_ms": 1641.599, + "stdev_ms": 16.768, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -2757,28 +4632,12 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" - }, - { - "version": "0.28.5", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "large", - "formatter": "default", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 458, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<69 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 492, in generate results = parser.parse() File \"\", line 1373, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( # noqa: S603 (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2788,13 +4647,29 @@ "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 6025.93, + "min_ms": 5944.212, + "max_ms": 6052.353, + "stdev_ms": 56.377, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2806,45 +4681,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 459, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<70 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 494, in generate results = parser.parse() File \"\", line 1390, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2234.031, + "min_ms": 2212.66, + "max_ms": 2239.301, + "stdev_ms": 14.108, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -2853,44 +4728,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 459, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<70 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 494, in generate results = parser.parse() File \"\", line 1390, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5496.347, + "min_ms": 5364.373, + "max_ms": 5625.828, + "stdev_ms": 130.73, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.28.5", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -2902,45 +4777,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 459, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<70 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 494, in generate results = parser.parse() File \"\", line 1390, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2330.796, + "min_ms": 2275.042, + "max_ms": 2362.544, + "stdev_ms": 44.297, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.30.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -2949,44 +4824,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 459, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<70 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 494, in generate results = parser.parse() File \"\", line 1390, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5404.599, + "min_ms": 5341.791, + "max_ms": 5497.798, + "stdev_ms": 78.496, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -2998,45 +4873,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2000.435, + "min_ms": 1997.643, + "max_ms": 2024.57, + "stdev_ms": 14.807, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -3045,44 +4920,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5072.321, + "min_ms": 4994.132, + "max_ms": 5211.624, + "stdev_ms": 110.167, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.1", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -3094,45 +4969,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2063.59, + "min_ms": 2045.961, + "max_ms": 2135.609, + "stdev_ms": 47.494, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -3141,44 +5016,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5362.653, + "min_ms": 5333.639, + "max_ms": 5397.088, + "stdev_ms": 31.763, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -3190,45 +5065,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2093.495, + "min_ms": 2092.656, + "max_ms": 2110.081, + "stdev_ms": 9.828, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -3237,44 +5112,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 4824.623, + "min_ms": 4810.365, + "max_ms": 4973.499, + "stdev_ms": 90.351, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.30.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -3286,45 +5161,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.31.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.31.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2122.654, + "min_ms": 2102.354, + "max_ms": 2124.249, + "stdev_ms": 12.207, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.31.2", - "python_version": "3.14.2", + "version": "0.31.1", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -3333,44 +5208,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5249.001, + "min_ms": 5246.64, + "max_ms": 5396.746, + "stdev_ms": 85.991, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -3382,45 +5257,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2048.488, + "min_ms": 2038.292, + "max_ms": 2075.439, + "stdev_ms": 19.193, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -3429,44 +5304,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 4812.433, + "min_ms": 4763.655, + "max_ms": 4837.09, + "stdev_ms": 37.372, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.31.2", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -3478,45 +5353,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.32.0", - "python_version": "3.14.2", + "version": "0.31.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.32.0", - "python_version": "3.14.2", + "version": "0.31.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2044.303, + "min_ms": 2021.208, + "max_ms": 2079.631, + "stdev_ms": 29.424, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.32.0", - "python_version": "3.14.2", + "version": "0.31.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -3525,44 +5400,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 460, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<71 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 496, in generate results = parser.parse() File \"\", line 1394, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5513.665, + "min_ms": 5444.611, + "max_ms": 5528.519, + "stdev_ms": 44.777, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -3574,45 +5449,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 461, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 498, in generate results = parser.parse() File \"\", line 1395, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2016.132, + "min_ms": 2009.482, + "max_ms": 2019.491, + "stdev_ms": 5.094, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -3621,44 +5496,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 461, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 498, in generate results = parser.parse() File \"\", line 1395, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 4897.764, + "min_ms": 4809.371, + "max_ms": 4938.623, + "stdev_ms": 66.067, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.32.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -3670,45 +5545,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 17, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 461, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 498, in generate results = parser.parse() File \"\", line 1395, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.33.0", - "python_version": "3.14.2", + "version": "0.32.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.33.0", - "python_version": "3.14.2", + "version": "0.32.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2054.993, + "min_ms": 2035.525, + "max_ms": 2061.732, + "stdev_ms": 13.609, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.33.0", - "python_version": "3.14.2", + "version": "0.32.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -3717,44 +5592,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 461, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 498, in generate results = parser.parse() File \"\", line 1395, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5914.815, + "min_ms": 5860.141, + "max_ms": 5915.148, + "stdev_ms": 31.663, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -3766,45 +5641,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 502, in generate results = parser.parse() File \"\", line 1401, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2234.182, + "min_ms": 2209.153, + "max_ms": 2236.55, + "stdev_ms": 15.18, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -3813,44 +5688,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 502, in generate results = parser.parse() File \"\", line 1401, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5419.433, + "min_ms": 5406.778, + "max_ms": 5483.414, + "stdev_ms": 41.083, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.33.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", @@ -3862,45 +5737,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 502, in generate results = parser.parse() File \"\", line 1401, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { - "version": "0.34.0", - "python_version": "3.14.2", + "version": "0.33.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.34.0", - "python_version": "3.14.2", + "version": "0.33.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2235.355, + "min_ms": 2210.142, + "max_ms": 2237.986, + "stdev_ms": 15.372, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { - "version": "0.34.0", - "python_version": "3.14.2", + "version": "0.33.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "ruff", "runs": 0, @@ -3909,44 +5784,44 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<72 lines>... parent_scoped_naming=config.parent_scoped_naming, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 502, in generate results = parser.parse() File \"\", line 1401, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 5170.062, + "min_ms": 5073.407, + "max_ms": 5262.702, + "stdev_ms": 94.655, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", @@ -3958,45 +5833,45 @@ "stdev_ms": null, "status": "failed", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "Traceback (most recent call last): File \"\", line 506, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", - "runs": 0, - "median_ms": null, - "min_ms": null, - "max_ms": null, - "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "formatter": "default", + "runs": 3, + "median_ms": 2055.526, + "min_ms": 2050.448, + "max_ms": 2075.777, + "stdev_ms": 13.401, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "ruff", "runs": 0, @@ -4005,104 +5880,120 @@ "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 506, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" + }, + { + "version": "0.34.0", + "python_version": "3.13.14", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 3, + "median_ms": 4741.343, + "min_ms": 4732.464, + "max_ms": 4746.42, + "stdev_ms": 7.064, + "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "error": "" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 506, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.34.0", - "python_version": "3.14.2", + "python_version": "3.13.14", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main File \"\", line 88, in _run_code File \"\", line 37, in from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace File \"\", line 10, in from datamodel_code_generator.model.pydantic_v2 import UnionMode File \"\", line 16, in DEFAULT_TARGET_PYTHON_VERSION = PythonVersion(f\"{sys.version_info.major}.{sys.version_info.minor}\") File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 707, in __call__ return cls.__new__(cls, value) ~~~~~~~~~~~^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/enum.py\", line 1192, in __new__ raise ve_exc ValueError: '3.14' is not a valid PythonVersion" + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] __main__.py: error: argument --formatters: invalid choice: 'builtin' (choose from 'black', 'isort', 'ruff-check', 'ruff-format')" }, { - "version": "0.35.0", - "python_version": "3.14.2", + "version": "0.34.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2102.286, - "min_ms": 2094.595, - "max_ms": 2104.489, - "stdev_ms": 5.194, + "median_ms": 2100.02, + "min_ms": 2078.454, + "max_ms": 2102.608, + "stdev_ms": 13.262, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.35.0", - "python_version": "3.14.2", + "version": "0.34.0", + "python_version": "3.13.14", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 506, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 208, in format_code code = self.apply_ruff_lint(code) File \"\", line 225, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1039, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.13.14/x64/lib/python3.13/subprocess.py\", line 1991, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'ruff'" }, { "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.35.0", @@ -4126,79 +6017,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2167.111, - "min_ms": 2141.276, - "max_ms": 2179.344, - "stdev_ms": 19.435, + "median_ms": 2102.286, + "min_ms": 2094.595, + "max_ms": 2104.489, + "stdev_ms": 5.194, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.35.0", @@ -4222,79 +6113,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.36.0", + "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 1655.315, - "min_ms": 1652.224, - "max_ms": 1677.834, - "stdev_ms": 13.979, + "median_ms": 2167.111, + "min_ms": 2141.276, + "max_ms": 2179.344, + "stdev_ms": 19.435, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.36.0", + "version": "0.35.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 512, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<73 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 503, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1402, in parse body = code_formatter.format_code(body) File \"\", line 209, in format_code code = self.apply_ruff_lint(code) File \"\", line 226, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.36.0", @@ -4318,79 +6209,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 1692.332, - "min_ms": 1676.497, - "max_ms": 1720.336, - "stdev_ms": 22.199, + "median_ms": 1655.315, + "min_ms": 1652.224, + "max_ms": 1677.834, + "stdev_ms": 13.979, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.36.0", @@ -4414,79 +6305,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.39.0", + "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 412.941, - "min_ms": 408.223, - "max_ms": 417.734, - "stdev_ms": 4.756, + "median_ms": 1692.332, + "min_ms": 1676.497, + "max_ms": 1720.336, + "stdev_ms": 22.199, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.39.0", + "version": "0.36.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 505, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<76 lines>... disable_future_imports=config.disable_future_imports, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 511, in generate results = parser.parse(disable_future_imports=disable_future_imports) File \"\", line 1408, in parse body = code_formatter.format_code(body) File \"\", line 214, in format_code code = self.apply_ruff_lint(code) File \"\", line 231, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/..." }, { "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.39.0", @@ -4510,79 +6401,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2187.376, - "min_ms": 2158.372, - "max_ms": 2191.174, - "stdev_ms": 17.943, + "median_ms": 412.941, + "min_ms": 408.223, + "max_ms": 417.734, + "stdev_ms": 4.756, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.39.0", @@ -4606,79 +6497,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.42.0", + "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 413.354, - "min_ms": 408.883, - "max_ms": 415.523, - "stdev_ms": 3.386, + "median_ms": 2187.376, + "min_ms": 2158.372, + "max_ms": 2191.174, + "stdev_ms": 17.943, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.42.0", + "version": "0.39.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 769, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<84 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 641, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 1876, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.42.0", @@ -4702,79 +6593,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2206.164, - "min_ms": 2190.886, - "max_ms": 2207.904, - "stdev_ms": 9.364, + "median_ms": 413.354, + "min_ms": 408.883, + "max_ms": 415.523, + "stdev_ms": 3.386, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.42.0", @@ -4798,79 +6689,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.42.2", + "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 454.465, - "min_ms": 424.097, - "max_ms": 485.363, - "stdev_ms": 30.634, + "median_ms": 2206.164, + "min_ms": 2190.886, + "max_ms": 2207.904, + "stdev_ms": 9.364, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.42.2", + "version": "0.42.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 772, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<86 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 692, in generate results = parser.parse( disable_future_imports=disable_future_imports, all_exports_scope=all_exports_scope, all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2312, in parse body = code_formatter.format_code(body) File \"\", line 261, in format_code code = self.apply_ruff_lint(code) File \"\", line 281, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<2 lines>... check=False, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^..." }, { "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.42.2", @@ -4894,79 +6785,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2287.082, - "min_ms": 2279.68, - "max_ms": 2302.207, - "stdev_ms": 11.482, + "median_ms": 454.465, + "min_ms": 424.097, + "max_ms": 485.363, + "stdev_ms": 30.634, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.42.2", @@ -4990,79 +6881,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.43.1", + "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 402.15, - "min_ms": 399.994, - "max_ms": 409.922, - "stdev_ms": 5.222, + "median_ms": 2287.082, + "min_ms": 2279.68, + "max_ms": 2302.207, + "stdev_ms": 11.482, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.43.1", + "version": "0.42.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 800, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<88 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 695, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2322, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.43.1", @@ -5086,79 +6977,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2085.958, - "min_ms": 2085.198, - "max_ms": 2103.553, - "stdev_ms": 10.385, + "median_ms": 402.15, + "min_ms": 399.994, + "max_ms": 409.922, + "stdev_ms": 5.222, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.43.1", @@ -5182,79 +7073,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.45.0", + "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 375.427, - "min_ms": 372.609, - "max_ms": 376.081, - "stdev_ms": 1.845, + "median_ms": 2085.958, + "min_ms": 2085.198, + "max_ms": 2103.553, + "stdev_ms": 10.385, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.45.0", + "version": "0.43.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 815, in main generate( ~~~~~~~~^ input_=config.url or config.input or sys.stdin.read(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<89 lines>... all_exports_collision_strategy=config.all_exports_collision_strategy, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 697, in generate results = parser.parse( settings_path=settings_path, ...<2 lines>... all_exports_collision_strategy=all_exports_collision_strategy, ) File \"\", line 2349, in parse body = code_formatter.format_code(body) File \"\", line 270, in format_code code = self.apply_ruff_lint(code) File \"\", line 290, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_..." }, { "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.45.0", @@ -5278,79 +7169,79 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." }, { "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 1889.412, - "min_ms": 1887.295, - "max_ms": 1914.801, - "stdev_ms": 15.306, + "median_ms": 375.427, + "min_ms": 372.609, + "max_ms": 376.081, + "stdev_ms": 1.845, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." }, { "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.45.0", @@ -5374,79 +7265,79 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." }, { "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "failed", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { - "version": "0.52.2", + "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 498.38, - "min_ms": 492.263, - "max_ms": 508.656, - "stdev_ms": 8.284, + "median_ms": 1889.412, + "min_ms": 1887.295, + "max_ms": 1914.801, + "stdev_ms": 15.306, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.52.2", + "version": "0.45.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 0, "median_ms": null, "min_ms": null, "max_ms": null, "stdev_ms": null, - "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", - "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" + "status": "failed", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "Traceback (most recent call last): File \"\", line 951, in main run_generate_from_config( ~~~~~~~~~~~~~~~~~~~~~~~~^ config=config, ^^^^^^^^^^^^^^ ...<6 lines>... settings_path=config.output if config.check else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 674, in run_generate_from_config generate( ~~~~~~~~^ input_=input_, ^^^^^^^^^^^^^^ ...<94 lines>... module_split_mode=config.module_split_mode, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File \"\", line 726, in generate results = parser.parse( settings_path=settings_path, ...<3 lines>... module_split_mode=module_split_mode, ) File \"\", line 2660, in parse body = code_formatter.format_code(body) File \"\", line 285, in format_code code = self.apply_ruff_lint(code) File \"\", line 305, in apply_ruff_lint result = subprocess.run( (\"ruff\", \"check\", \"--fix\", \"-\"), ...<3 lines>... cwd=self.settings_path, ) File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 554, in run with Popen(*popenargs, **kwargs) as process: ~~~~~^^^^^^^^^^^^^^^^^^^^^^ File \"/opt/hostedtoolcache/Python/3.14.2/x64/lib/python3.14/subprocess.py\", line 1038, in __init__ self._execute_child(args, e..." }, { "version": "0.52.2", "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", - "runs": 3, - "median_ms": 469.647, - "min_ms": 459.857, - "max_ms": 470.885, - "stdev_ms": 6.042, - "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "" + "case": "large", + "formatter": "builtin", + "runs": 0, + "median_ms": null, + "min_ms": null, + "max_ms": null, + "stdev_ms": null, + "status": "unsupported", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { "version": "0.52.2", @@ -5470,6 +7361,22 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1549.389, + "min_ms": 1519.641, + "max_ms": 1549.887, + "stdev_ms": 17.32, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.52.2", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5477,7 +7384,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5485,31 +7392,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1549.389, - "min_ms": 1519.641, - "max_ms": 1549.887, - "stdev_ms": 17.32, + "median_ms": 498.38, + "min_ms": 492.263, + "max_ms": 508.656, + "stdev_ms": 8.284, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.52.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2298.06, - "min_ms": 2294.694, - "max_ms": 2320.641, - "stdev_ms": 14.109, + "median_ms": 469.647, + "min_ms": 459.857, + "max_ms": 470.885, + "stdev_ms": 6.042, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5517,7 +7424,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5525,7 +7432,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5533,15 +7440,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2262.13, - "min_ms": 2261.425, - "max_ms": 2285.746, - "stdev_ms": 13.843, + "median_ms": 3453.003, + "min_ms": 3440.451, + "max_ms": 3462.351, + "stdev_ms": 10.989, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -5550,14 +7457,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3453.003, - "min_ms": 3440.451, - "max_ms": 3462.351, - "stdev_ms": 10.989, + "median_ms": 1523.785, + "min_ms": 1520.951, + "max_ms": 1534.729, + "stdev_ms": 7.276, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5565,7 +7472,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5573,7 +7480,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5581,31 +7488,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1523.785, - "min_ms": 1520.951, - "max_ms": 1534.729, - "stdev_ms": 7.276, + "median_ms": 2298.06, + "min_ms": 2294.694, + "max_ms": 2320.641, + "stdev_ms": 14.109, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.53.0", + "version": "0.52.2", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 485.283, - "min_ms": 482.602, - "max_ms": 498.741, - "stdev_ms": 8.649, + "median_ms": 2262.13, + "min_ms": 2261.425, + "max_ms": 2285.746, + "stdev_ms": 13.843, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5613,7 +7520,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5621,7 +7528,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5629,15 +7536,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 450.483, - "min_ms": 450.257, - "max_ms": 451.361, - "stdev_ms": 0.583, + "median_ms": 3640.67, + "min_ms": 3638.204, + "max_ms": 3691.724, + "stdev_ms": 30.213, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -5646,14 +7553,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3640.67, - "min_ms": 3638.204, - "max_ms": 3691.724, - "stdev_ms": 30.213, + "median_ms": 1529.776, + "min_ms": 1516.02, + "max_ms": 1529.902, + "stdev_ms": 7.978, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5661,7 +7568,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5669,7 +7576,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5677,31 +7584,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1529.776, - "min_ms": 1516.02, - "max_ms": 1529.902, - "stdev_ms": 7.978, + "median_ms": 485.283, + "min_ms": 482.602, + "max_ms": 498.741, + "stdev_ms": 8.649, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.53.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2236.328, - "min_ms": 2234.177, - "max_ms": 2245.543, - "stdev_ms": 6.038, + "median_ms": 450.483, + "min_ms": 450.257, + "max_ms": 451.361, + "stdev_ms": 0.583, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5709,7 +7616,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5717,7 +7624,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5725,15 +7632,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2204.022, - "min_ms": 2192.708, - "max_ms": 2236.073, - "stdev_ms": 22.494, + "median_ms": 3307.422, + "min_ms": 3288.791, + "max_ms": 3337.11, + "stdev_ms": 24.37, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -5742,14 +7649,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3307.422, - "min_ms": 3288.791, - "max_ms": 3337.11, - "stdev_ms": 24.37, + "median_ms": 1476.901, + "min_ms": 1459.658, + "max_ms": 1477.96, + "stdev_ms": 10.275, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5757,7 +7664,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5765,7 +7672,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5773,31 +7680,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1476.901, - "min_ms": 1459.658, - "max_ms": 1477.96, - "stdev_ms": 10.275, + "median_ms": 2236.328, + "min_ms": 2234.177, + "max_ms": 2245.543, + "stdev_ms": 6.038, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.54.0", + "version": "0.53.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 507.44, - "min_ms": 505.11, - "max_ms": 511.348, - "stdev_ms": 3.152, + "median_ms": 2204.022, + "min_ms": 2192.708, + "max_ms": 2236.073, + "stdev_ms": 22.494, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5805,7 +7712,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5813,25 +7720,9 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, - { - "version": "0.54.0", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", - "runs": 3, - "median_ms": 472.614, - "min_ms": 468.435, - "max_ms": 474.159, - "stdev_ms": 2.961, - "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "" - }, { "version": "0.54.0", "python_version": "3.14.2", @@ -5854,6 +7745,22 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1625.314, + "min_ms": 1608.422, + "max_ms": 1627.777, + "stdev_ms": 10.536, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.54.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5861,7 +7768,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5869,31 +7776,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1625.314, - "min_ms": 1608.422, - "max_ms": 1627.777, - "stdev_ms": 10.536, + "median_ms": 507.44, + "min_ms": 505.11, + "max_ms": 511.348, + "stdev_ms": 3.152, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.54.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2360.706, - "min_ms": 2317.857, - "max_ms": 2421.396, - "stdev_ms": 52.025, + "median_ms": 472.614, + "min_ms": 468.435, + "max_ms": 474.159, + "stdev_ms": 2.961, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5901,7 +7808,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5909,7 +7816,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5917,15 +7824,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2316.846, - "min_ms": 2299.591, - "max_ms": 2339.212, - "stdev_ms": 19.866, + "median_ms": 3429.947, + "min_ms": 3422.445, + "max_ms": 3433.208, + "stdev_ms": 5.519, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -5934,14 +7841,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3429.947, - "min_ms": 3422.445, - "max_ms": 3433.208, - "stdev_ms": 5.519, + "median_ms": 1548.663, + "min_ms": 1540.537, + "max_ms": 1550.349, + "stdev_ms": 5.246, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5949,7 +7856,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -5957,7 +7864,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -5965,31 +7872,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1548.663, - "min_ms": 1540.537, - "max_ms": 1550.349, - "stdev_ms": 5.246, + "median_ms": 2360.706, + "min_ms": 2317.857, + "max_ms": 2421.396, + "stdev_ms": 52.025, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.54.1", + "version": "0.54.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 481.478, - "min_ms": 479.941, - "max_ms": 482.08, - "stdev_ms": 1.103, + "median_ms": 2316.846, + "min_ms": 2299.591, + "max_ms": 2339.212, + "stdev_ms": 19.866, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -5997,7 +7904,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6005,7 +7912,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6013,15 +7920,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 453.944, - "min_ms": 451.617, - "max_ms": 454.624, - "stdev_ms": 1.577, + "median_ms": 3596.712, + "min_ms": 3592.196, + "max_ms": 3653.695, + "stdev_ms": 34.277, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6030,14 +7937,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3596.712, - "min_ms": 3592.196, - "max_ms": 3653.695, - "stdev_ms": 34.277, + "median_ms": 1548.866, + "min_ms": 1544.718, + "max_ms": 1563.185, + "stdev_ms": 9.689, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6045,7 +7952,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6053,7 +7960,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6061,31 +7968,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1548.866, - "min_ms": 1544.718, - "max_ms": 1563.185, - "stdev_ms": 9.689, + "median_ms": 481.478, + "min_ms": 479.941, + "max_ms": 482.08, + "stdev_ms": 1.103, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.54.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2212.1, - "min_ms": 2201.47, - "max_ms": 2330.919, - "stdev_ms": 71.865, + "median_ms": 453.944, + "min_ms": 451.617, + "max_ms": 454.624, + "stdev_ms": 1.577, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6093,7 +8000,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6101,7 +8008,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6109,15 +8016,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2173.623, - "min_ms": 2163.278, - "max_ms": 2194.333, - "stdev_ms": 15.813, + "median_ms": 3333.748, + "min_ms": 3289.419, + "max_ms": 3366.957, + "stdev_ms": 38.902, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6126,14 +8033,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3333.748, - "min_ms": 3289.419, - "max_ms": 3366.957, - "stdev_ms": 38.902, + "median_ms": 1476.625, + "min_ms": 1467.272, + "max_ms": 1488.643, + "stdev_ms": 10.713, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6141,7 +8048,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6149,7 +8056,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6157,31 +8064,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1476.625, - "min_ms": 1467.272, - "max_ms": 1488.643, - "stdev_ms": 10.713, + "median_ms": 2212.1, + "min_ms": 2201.47, + "max_ms": 2330.919, + "stdev_ms": 71.865, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.55.0", + "version": "0.54.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 504.991, - "min_ms": 503.041, - "max_ms": 515.428, - "stdev_ms": 6.661, + "median_ms": 2173.623, + "min_ms": 2163.278, + "max_ms": 2194.333, + "stdev_ms": 15.813, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6189,7 +8096,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6197,25 +8104,9 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, - { - "version": "0.55.0", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", - "runs": 3, - "median_ms": 465.082, - "min_ms": 459.624, - "max_ms": 466.62, - "stdev_ms": 3.676, - "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "" - }, { "version": "0.55.0", "python_version": "3.14.2", @@ -6238,6 +8129,22 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1574.406, + "min_ms": 1567.321, + "max_ms": 1597.652, + "stdev_ms": 15.867, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.55.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6245,7 +8152,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6253,31 +8160,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1574.406, - "min_ms": 1567.321, - "max_ms": 1597.652, - "stdev_ms": 15.867, + "median_ms": 504.991, + "min_ms": 503.041, + "max_ms": 515.428, + "stdev_ms": 6.661, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.55.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2271.758, - "min_ms": 2237.353, - "max_ms": 2317.417, - "stdev_ms": 40.163, + "median_ms": 465.082, + "min_ms": 459.624, + "max_ms": 466.62, + "stdev_ms": 3.676, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6285,7 +8192,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6293,7 +8200,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6301,15 +8208,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2269.771, - "min_ms": 2204.506, - "max_ms": 2290.538, - "stdev_ms": 44.893, + "median_ms": 3533.19, + "min_ms": 3491.826, + "max_ms": 3542.914, + "stdev_ms": 27.128, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6318,14 +8225,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3533.19, - "min_ms": 3491.826, - "max_ms": 3542.914, - "stdev_ms": 27.128, + "median_ms": 1555.777, + "min_ms": 1548.551, + "max_ms": 1585.94, + "stdev_ms": 19.832, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6333,7 +8240,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6341,7 +8248,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6349,31 +8256,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1555.777, - "min_ms": 1548.551, - "max_ms": 1585.94, - "stdev_ms": 19.832, + "median_ms": 2271.758, + "min_ms": 2237.353, + "max_ms": 2317.417, + "stdev_ms": 40.163, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.56.0", + "version": "0.55.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 495.014, - "min_ms": 494.498, - "max_ms": 510.125, - "stdev_ms": 8.877, + "median_ms": 2269.771, + "min_ms": 2204.506, + "max_ms": 2290.538, + "stdev_ms": 44.893, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6381,7 +8288,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6389,7 +8296,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6397,15 +8304,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 475.614, - "min_ms": 470.467, - "max_ms": 475.83, - "stdev_ms": 3.036, + "median_ms": 3729.925, + "min_ms": 3657.59, + "max_ms": 3768.991, + "stdev_ms": 56.522, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6414,14 +8321,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3729.925, - "min_ms": 3657.59, - "max_ms": 3768.991, - "stdev_ms": 56.522, + "median_ms": 1499.337, + "min_ms": 1492.749, + "max_ms": 1513.305, + "stdev_ms": 10.496, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6429,7 +8336,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6437,7 +8344,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6445,31 +8352,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1499.337, - "min_ms": 1492.749, - "max_ms": 1513.305, - "stdev_ms": 10.496, + "median_ms": 495.014, + "min_ms": 494.498, + "max_ms": 510.125, + "stdev_ms": 8.877, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.56.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2445.559, - "min_ms": 2432.701, - "max_ms": 2447.881, - "stdev_ms": 8.176, + "median_ms": 475.614, + "min_ms": 470.467, + "max_ms": 475.83, + "stdev_ms": 3.036, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6477,7 +8384,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6485,7 +8392,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6493,15 +8400,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2362.286, - "min_ms": 2315.898, - "max_ms": 2373.07, - "stdev_ms": 30.378, + "median_ms": 3369.123, + "min_ms": 3353.365, + "max_ms": 3396.049, + "stdev_ms": 21.584, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6510,14 +8417,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3369.123, - "min_ms": 3353.365, - "max_ms": 3396.049, - "stdev_ms": 21.584, + "median_ms": 1499.926, + "min_ms": 1479.329, + "max_ms": 1576.233, + "stdev_ms": 51.051, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6525,7 +8432,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6533,7 +8440,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6541,31 +8448,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1499.926, - "min_ms": 1479.329, - "max_ms": 1576.233, - "stdev_ms": 51.051, + "median_ms": 2445.559, + "min_ms": 2432.701, + "max_ms": 2447.881, + "stdev_ms": 8.176, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.56.1", + "version": "0.56.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 431.782, - "min_ms": 431.004, - "max_ms": 435.143, - "stdev_ms": 2.2, + "median_ms": 2362.286, + "min_ms": 2315.898, + "max_ms": 2373.07, + "stdev_ms": 30.378, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6573,7 +8480,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6581,7 +8488,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6589,15 +8496,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 408.207, - "min_ms": 408.121, - "max_ms": 409.106, - "stdev_ms": 0.546, + "median_ms": 3162.836, + "min_ms": 3154.2, + "max_ms": 3175.469, + "stdev_ms": 10.697, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6606,14 +8513,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3162.836, - "min_ms": 3154.2, - "max_ms": 3175.469, - "stdev_ms": 10.697, + "median_ms": 1364.574, + "min_ms": 1349.311, + "max_ms": 1365.088, + "stdev_ms": 8.964, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6621,7 +8528,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6629,7 +8536,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6637,31 +8544,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1364.574, - "min_ms": 1349.311, - "max_ms": 1365.088, - "stdev_ms": 8.964, + "median_ms": 431.782, + "min_ms": 431.004, + "max_ms": 435.143, + "stdev_ms": 2.2, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.56.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2047.387, - "min_ms": 2014.453, - "max_ms": 2066.178, - "stdev_ms": 26.183, + "median_ms": 408.207, + "min_ms": 408.121, + "max_ms": 409.106, + "stdev_ms": 0.546, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6669,7 +8576,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6677,7 +8584,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6685,15 +8592,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2022.809, - "min_ms": 2012.845, - "max_ms": 2025.688, - "stdev_ms": 6.739, + "median_ms": 2925.199, + "min_ms": 2917.546, + "max_ms": 2929.919, + "stdev_ms": 6.244, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6702,14 +8609,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2925.199, - "min_ms": 2917.546, - "max_ms": 2929.919, - "stdev_ms": 6.244, + "median_ms": 1352.016, + "min_ms": 1349.857, + "max_ms": 1355.24, + "stdev_ms": 2.709, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6717,7 +8624,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6725,7 +8632,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6733,31 +8640,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1352.016, - "min_ms": 1349.857, - "max_ms": 1355.24, - "stdev_ms": 2.709, + "median_ms": 2047.387, + "min_ms": 2014.453, + "max_ms": 2066.178, + "stdev_ms": 26.183, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.57.0", + "version": "0.56.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 491.685, - "min_ms": 490.581, - "max_ms": 497.419, - "stdev_ms": 3.671, + "median_ms": 2022.809, + "min_ms": 2012.845, + "max_ms": 2025.688, + "stdev_ms": 6.739, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6765,7 +8672,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6773,7 +8680,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6781,15 +8688,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 463.262, - "min_ms": 460.825, - "max_ms": 464.622, - "stdev_ms": 1.923, + "median_ms": 3719.665, + "min_ms": 3666.115, + "max_ms": 3821.424, + "stdev_ms": 78.892, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6798,14 +8705,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3719.665, - "min_ms": 3666.115, - "max_ms": 3821.424, - "stdev_ms": 78.892, + "median_ms": 1584.597, + "min_ms": 1572.388, + "max_ms": 1585.905, + "stdev_ms": 7.455, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6813,7 +8720,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6821,7 +8728,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6829,31 +8736,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1584.597, - "min_ms": 1572.388, - "max_ms": 1585.905, - "stdev_ms": 7.455, + "median_ms": 491.685, + "min_ms": 490.581, + "max_ms": 497.419, + "stdev_ms": 3.671, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.57.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2244.073, - "min_ms": 2243.586, - "max_ms": 2260.281, - "stdev_ms": 9.502, + "median_ms": 463.262, + "min_ms": 460.825, + "max_ms": 464.622, + "stdev_ms": 1.923, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6861,7 +8768,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6869,7 +8776,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6877,15 +8784,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2217.098, - "min_ms": 2201.523, - "max_ms": 2234.326, - "stdev_ms": 16.409, + "median_ms": 3396.911, + "min_ms": 3377.056, + "max_ms": 3410.732, + "stdev_ms": 16.928, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6894,14 +8801,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3396.911, - "min_ms": 3377.056, - "max_ms": 3410.732, - "stdev_ms": 16.928, + "median_ms": 1544.961, + "min_ms": 1507.405, + "max_ms": 1572.928, + "stdev_ms": 32.879, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6909,7 +8816,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6917,7 +8824,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6925,31 +8832,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1544.961, - "min_ms": 1507.405, - "max_ms": 1572.928, - "stdev_ms": 32.879, + "median_ms": 2244.073, + "min_ms": 2243.586, + "max_ms": 2260.281, + "stdev_ms": 9.502, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.58.0", + "version": "0.57.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 539.265, - "min_ms": 533.258, - "max_ms": 591.168, - "stdev_ms": 31.842, + "median_ms": 2217.098, + "min_ms": 2201.523, + "max_ms": 2234.326, + "stdev_ms": 16.409, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -6957,7 +8864,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -6965,7 +8872,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -6973,15 +8880,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 496.759, - "min_ms": 491.127, - "max_ms": 501.547, - "stdev_ms": 5.216, + "median_ms": 3816.663, + "min_ms": 3781.552, + "max_ms": 3825.723, + "stdev_ms": 23.331, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -6990,14 +8897,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", - "runs": 3, - "median_ms": 3816.663, - "min_ms": 3781.552, - "max_ms": 3825.723, - "stdev_ms": 23.331, + "formatter": "ruff", + "runs": 3, + "median_ms": 1591.397, + "min_ms": 1578.95, + "max_ms": 1591.713, + "stdev_ms": 7.279, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7005,7 +8912,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7013,7 +8920,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7021,31 +8928,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1591.397, - "min_ms": 1578.95, - "max_ms": 1591.713, - "stdev_ms": 7.279, + "median_ms": 539.265, + "min_ms": 533.258, + "max_ms": 591.168, + "stdev_ms": 31.842, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.58.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2594.137, - "min_ms": 2551.951, - "max_ms": 2601.514, - "stdev_ms": 26.741, + "median_ms": 496.759, + "min_ms": 491.127, + "max_ms": 501.547, + "stdev_ms": 5.216, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7053,7 +8960,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7061,7 +8968,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7069,15 +8976,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2568.76, - "min_ms": 2553.369, - "max_ms": 2579.201, - "stdev_ms": 12.995, + "median_ms": 3579.385, + "min_ms": 3560.794, + "max_ms": 3651.081, + "stdev_ms": 47.676, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -7086,14 +8993,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3579.385, - "min_ms": 3560.794, - "max_ms": 3651.081, - "stdev_ms": 47.676, + "median_ms": 1601.685, + "min_ms": 1564.276, + "max_ms": 1617.412, + "stdev_ms": 27.295, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7101,7 +9008,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7109,7 +9016,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7117,31 +9024,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1601.685, - "min_ms": 1564.276, - "max_ms": 1617.412, - "stdev_ms": 27.295, + "median_ms": 2594.137, + "min_ms": 2551.951, + "max_ms": 2601.514, + "stdev_ms": 26.741, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.59.0", + "version": "0.58.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 540.951, - "min_ms": 537.313, - "max_ms": 543.014, - "stdev_ms": 2.887, + "median_ms": 2568.76, + "min_ms": 2553.369, + "max_ms": 2579.201, + "stdev_ms": 12.995, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7149,7 +9056,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7157,7 +9064,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7165,15 +9072,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 508.905, - "min_ms": 503.508, - "max_ms": 510.535, - "stdev_ms": 3.678, + "median_ms": 3669.701, + "min_ms": 3668.956, + "max_ms": 3701.104, + "stdev_ms": 18.35, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -7182,14 +9089,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3669.701, - "min_ms": 3668.956, - "max_ms": 3701.104, - "stdev_ms": 18.35, + "median_ms": 1712.083, + "min_ms": 1691.185, + "max_ms": 1785.808, + "stdev_ms": 49.708, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7197,7 +9104,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7205,7 +9112,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7213,31 +9120,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "default", "runs": 3, - "median_ms": 1712.083, - "min_ms": 1691.185, - "max_ms": 1785.808, - "stdev_ms": 49.708, + "median_ms": 540.951, + "min_ms": 537.313, + "max_ms": 543.014, + "stdev_ms": 2.887, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.59.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 2377.751, - "min_ms": 2372.701, - "max_ms": 2386.349, - "stdev_ms": 6.9, + "median_ms": 508.905, + "min_ms": 503.508, + "max_ms": 510.535, + "stdev_ms": 3.678, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7245,7 +9152,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", + "case": "large", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7253,7 +9160,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7261,15 +9168,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "default", "runs": 3, - "median_ms": 2331.886, - "min_ms": 2289.912, - "max_ms": 2351.414, - "stdev_ms": 31.426, + "median_ms": 3552.607, + "min_ms": 3476.546, + "max_ms": 3572.782, + "stdev_ms": 50.751, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { @@ -7278,14 +9185,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "default", + "formatter": "ruff", "runs": 3, - "median_ms": 3552.607, - "min_ms": 3476.546, - "max_ms": 3572.782, - "stdev_ms": 50.751, + "median_ms": 1702.796, + "min_ms": 1693.997, + "max_ms": 1713.175, + "stdev_ms": 9.6, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7293,7 +9200,7 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", "formatter": "builtin", "runs": 0, "median_ms": null, @@ -7301,7 +9208,7 @@ "max_ms": null, "stdev_ms": null, "status": "unsupported", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "usage: datamodel-codegen [options] python -m datamodel_code_generator: error: argument --formatters: invalid choice: 'builtin' (choose from black, isort, ruff-check, ruff-format)" }, { @@ -7309,47 +9216,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", - "runs": 3, - "median_ms": 1702.796, - "min_ms": 1693.997, - "max_ms": 1713.175, - "stdev_ms": 9.6, - "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", - "error": "" - }, - { - "version": "0.64.0", - "python_version": "3.14.2", - "os": "ubuntu-24.04", - "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 588.213, - "min_ms": 544.24, - "max_ms": 602.394, - "stdev_ms": 30.322, + "median_ms": 2377.751, + "min_ms": 2372.701, + "max_ms": 2386.349, + "stdev_ms": 6.9, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.64.0", + "version": "0.59.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 414.914, - "min_ms": 407.075, - "max_ms": 415.995, - "stdev_ms": 4.868, + "median_ms": 2331.886, + "min_ms": 2289.912, + "max_ms": 2351.414, + "stdev_ms": 31.426, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7357,15 +9248,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 3, - "median_ms": 415.974, - "min_ms": 411.3, - "max_ms": 425.634, - "stdev_ms": 7.31, + "median_ms": 1507.718, + "min_ms": 1507.426, + "max_ms": 1596.505, + "stdev_ms": 51.346, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { @@ -7390,14 +9281,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 1507.718, - "min_ms": 1507.426, - "max_ms": 1596.505, - "stdev_ms": 51.346, + "median_ms": 1471.523, + "min_ms": 1457.528, + "max_ms": 1491.672, + "stdev_ms": 17.164, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7405,47 +9296,47 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 3, - "median_ms": 1471.523, - "min_ms": 1457.528, - "max_ms": 1491.672, - "stdev_ms": 17.164, + "median_ms": 414.914, + "min_ms": 407.075, + "max_ms": 415.995, + "stdev_ms": 4.868, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { "version": "0.64.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2321.925, - "min_ms": 2308.752, - "max_ms": 2343.87, - "stdev_ms": 17.74, + "median_ms": 588.213, + "min_ms": 544.24, + "max_ms": 602.394, + "stdev_ms": 30.322, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.64.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 2197.79, - "min_ms": 2185.146, - "max_ms": 2218.413, - "stdev_ms": 16.792, + "median_ms": 415.974, + "min_ms": 411.3, + "max_ms": 425.634, + "stdev_ms": 7.31, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7453,15 +9344,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 3, - "median_ms": 2208.321, - "min_ms": 2208.291, - "max_ms": 2239.296, - "stdev_ms": 17.892, + "median_ms": 1460.377, + "min_ms": 1455.4, + "max_ms": 1460.784, + "stdev_ms": 2.998, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { @@ -7486,14 +9377,14 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 1460.377, - "min_ms": 1455.4, - "max_ms": 1460.784, - "stdev_ms": 2.998, + "median_ms": 1406.78, + "min_ms": 1400.299, + "max_ms": 1424.231, + "stdev_ms": 12.378, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7501,47 +9392,47 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 3, - "median_ms": 1406.78, - "min_ms": 1400.299, - "max_ms": 1424.231, - "stdev_ms": 12.378, + "median_ms": 2197.79, + "min_ms": 2185.146, + "max_ms": 2218.413, + "stdev_ms": 16.792, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { - "version": "0.64.1", + "version": "0.64.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 561.006, - "min_ms": 551.021, - "max_ms": 567.902, - "stdev_ms": 8.487, + "median_ms": 2321.925, + "min_ms": 2308.752, + "max_ms": 2343.87, + "stdev_ms": 17.74, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { - "version": "0.64.1", + "version": "0.64.0", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "jsonschema", + "input_type": "openapi", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 420.457, - "min_ms": 415.829, - "max_ms": 432.668, - "stdev_ms": 8.699, + "median_ms": 2208.321, + "min_ms": 2208.291, + "max_ms": 2239.296, + "stdev_ms": 17.892, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7549,15 +9440,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 3, - "median_ms": 430.4, - "min_ms": 423.673, - "max_ms": 445.64, - "stdev_ms": 11.255, + "median_ms": 1512.578, + "min_ms": 1506.756, + "max_ms": 1517.678, + "stdev_ms": 5.465, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { @@ -7582,14 +9473,14 @@ "os": "ubuntu-24.04", "input_type": "jsonschema", "case": "large", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 1512.578, - "min_ms": 1506.756, - "max_ms": 1517.678, - "stdev_ms": 5.465, + "median_ms": 1526.421, + "min_ms": 1453.307, + "max_ms": 1533.602, + "stdev_ms": 44.43, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7597,47 +9488,47 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "jsonschema", - "case": "large", - "formatter": "ruff", + "case": "small", + "formatter": "builtin", "runs": 3, - "median_ms": 1526.421, - "min_ms": 1453.307, - "max_ms": 1533.602, - "stdev_ms": 44.43, + "median_ms": 420.457, + "min_ms": 415.829, + "max_ms": 432.668, + "stdev_ms": 8.699, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { "version": "0.64.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", "formatter": "default", "runs": 3, - "median_ms": 2299.819, - "min_ms": 2289.903, - "max_ms": 2310.074, - "stdev_ms": 10.086, + "median_ms": 561.006, + "min_ms": 551.021, + "max_ms": 567.902, + "stdev_ms": 8.487, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" }, { "version": "0.64.1", "python_version": "3.14.2", "os": "ubuntu-24.04", - "input_type": "openapi", + "input_type": "jsonschema", "case": "small", - "formatter": "builtin", + "formatter": "ruff", "runs": 3, - "median_ms": 2279.606, - "min_ms": 2198.267, - "max_ms": 2387.175, - "stdev_ms": 94.757, + "median_ms": 430.4, + "min_ms": 423.673, + "max_ms": 445.64, + "stdev_ms": 11.255, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" }, { @@ -7645,15 +9536,15 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "small", - "formatter": "ruff", + "case": "large", + "formatter": "builtin", "runs": 3, - "median_ms": 2169.0, - "min_ms": 2164.023, - "max_ms": 2182.98, - "stdev_ms": 9.828, + "median_ms": 1445.446, + "min_ms": 1428.905, + "max_ms": 1450.794, + "stdev_ms": 11.412, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { @@ -7678,14 +9569,30 @@ "os": "ubuntu-24.04", "input_type": "openapi", "case": "large", + "formatter": "ruff", + "runs": 3, + "median_ms": 1387.666, + "min_ms": 1367.768, + "max_ms": 1388.021, + "stdev_ms": 11.592, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", "formatter": "builtin", "runs": 3, - "median_ms": 1445.446, - "min_ms": 1428.905, - "max_ms": 1450.794, - "stdev_ms": 11.412, + "median_ms": 2279.606, + "min_ms": 2198.267, + "max_ms": 2387.175, + "stdev_ms": 94.757, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" }, { @@ -7693,15 +9600,31 @@ "python_version": "3.14.2", "os": "ubuntu-24.04", "input_type": "openapi", - "case": "large", + "case": "small", + "formatter": "default", + "runs": 3, + "median_ms": 2299.819, + "min_ms": 2289.903, + "max_ms": 2310.074, + "stdev_ms": 10.086, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.64.1", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", "formatter": "ruff", "runs": 3, - "median_ms": 1387.666, - "min_ms": 1367.768, - "max_ms": 1388.021, - "stdev_ms": 11.592, + "median_ms": 2169.0, + "min_ms": 2164.023, + "max_ms": 2182.98, + "stdev_ms": 9.828, "status": "ok", - "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" } ] diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 8cd0db59a..d4b658a2a 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34920,6 +34920,8 @@ This page tracks datamodel-code-generator release benchmark results collected on Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. +Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing. + === "Small / JSON Schema" ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } @@ -34947,11 +34949,13 @@ Each chart plots median generation time by release version for one benchmark sce ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-21T16:10:37Z` +- Generated at: `2026-06-21T16:47:19Z` - Source workflow: `Release Benchmarks` +- Primary Python version: `3.14.2` +- Entry Python versions: `3.13.14`, `3.14.2` - Benchmark runs per case: `3` -- Version selection: `clickpy_downloads` -- Selected versions: `40` +- Version selection: `clickpy_downloads_with_compatibility_backfill` +- Selected versions: `50` - Download source: `clickpy` - Download window: `365` days - Downloads in window: `117,300,797` @@ -35002,18 +35006,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 404ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 423ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 401ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 488ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 392ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 389ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 432ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 400ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 419ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 399ms | Unsupported: unavailable | Failed: command | + | 0.28.5 | 435ms | Unsupported: unavailable | Failed: command | + | 0.29.0 | 2.07s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2.13s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 1.59s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2.23s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2.00s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2.09s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2.05s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2.02s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2.23s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2.06s | Unsupported: unavailable | Failed: command | | 0.35.0 | 2.10s | Unsupported: unavailable | Failed: command | | 0.36.0 | 1.66s | Unsupported: unavailable | Failed: command | | 0.39.0 | 413ms | Unsupported: unavailable | Failed: command | @@ -35047,18 +35061,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 440ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 495ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 434ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 441ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 439ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 491ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 433ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 475ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 456ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 449ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 455ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 426ms | Unsupported: unavailable | Failed: command | + | 0.28.5 | 479ms | Unsupported: unavailable | Failed: command | + | 0.29.0 | 2.11s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2.22s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 1.63s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2.33s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2.06s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2.12s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2.04s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2.05s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2.24s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2.10s | Unsupported: unavailable | Failed: command | | 0.35.0 | 2.17s | Unsupported: unavailable | Failed: command | | 0.36.0 | 1.69s | Unsupported: unavailable | Failed: command | | 0.39.0 | 2.19s | Unsupported: unavailable | Failed: command | @@ -35092,18 +35116,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 3.76s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 3.87s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 3.51s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 3.39s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 3.79s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 3.24s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 3.36s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 3.16s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 3.93s | Unsupported: unavailable | Failed: command | + | 0.29.0 | 5.15s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 5.81s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 4.06s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 6.03s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 5.40s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 5.36s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 5.25s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 5.51s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 5.91s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 5.17s | Unsupported: unavailable | Failed: command | | 0.35.0 | 5.06s | Unsupported: unavailable | Failed: command | | 0.36.0 | 4.19s | Unsupported: unavailable | Failed: command | | 0.39.0 | 3.42s | Unsupported: unavailable | Failed: command | @@ -35137,18 +35171,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 3.31s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 3.53s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 3.04s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 3.01s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 3.21s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 3.47s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 3.59s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 3.00s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 3.48s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 3.40s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 2.98s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 3.57s | Unsupported: unavailable | Failed: command | + | 0.29.0 | 4.72s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 5.36s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 3.69s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 5.50s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 5.07s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 4.82s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 4.81s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 4.90s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 5.42s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 4.74s | Unsupported: unavailable | Failed: command | | 0.35.0 | 4.60s | Unsupported: unavailable | Failed: command | | 0.36.0 | 3.68s | Unsupported: unavailable | Failed: command | | 0.39.0 | 3.13s | Unsupported: unavailable | Failed: command | diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 873fe2cbf..d4b2d1e6f 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -8,6 +8,8 @@ This page tracks datamodel-code-generator release benchmark results collected on Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. +Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing. + === "Small / JSON Schema" ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } @@ -35,11 +37,13 @@ Each chart plots median generation time by release version for one benchmark sce ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-21T16:10:37Z` +- Generated at: `2026-06-21T16:47:19Z` - Source workflow: `Release Benchmarks` +- Primary Python version: `3.14.2` +- Entry Python versions: `3.13.14`, `3.14.2` - Benchmark runs per case: `3` -- Version selection: `clickpy_downloads` -- Selected versions: `40` +- Version selection: `clickpy_downloads_with_compatibility_backfill` +- Selected versions: `50` - Download source: `clickpy` - Download window: `365` days - Downloads in window: `117,300,797` @@ -90,18 +94,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 404ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 423ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 401ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 488ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 392ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 389ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 432ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 400ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 419ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 399ms | Unsupported: unavailable | Failed: command | + | 0.28.5 | 435ms | Unsupported: unavailable | Failed: command | + | 0.29.0 | 2.07s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2.13s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 1.59s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2.23s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2.00s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2.09s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2.05s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2.02s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2.23s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2.06s | Unsupported: unavailable | Failed: command | | 0.35.0 | 2.10s | Unsupported: unavailable | Failed: command | | 0.36.0 | 1.66s | Unsupported: unavailable | Failed: command | | 0.39.0 | 413ms | Unsupported: unavailable | Failed: command | @@ -135,18 +149,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 440ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 495ms | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 434ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 441ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 439ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 491ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 433ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 475ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 456ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 449ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 455ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 426ms | Unsupported: unavailable | Failed: command | + | 0.28.5 | 479ms | Unsupported: unavailable | Failed: command | + | 0.29.0 | 2.11s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2.22s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 1.63s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2.33s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2.06s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2.12s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2.04s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2.05s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2.24s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2.10s | Unsupported: unavailable | Failed: command | | 0.35.0 | 2.17s | Unsupported: unavailable | Failed: command | | 0.36.0 | 1.69s | Unsupported: unavailable | Failed: command | | 0.39.0 | 2.19s | Unsupported: unavailable | Failed: command | @@ -180,18 +204,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 3.76s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 3.87s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 3.51s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 3.39s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 3.79s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 3.24s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 3.36s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 3.16s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 3.93s | Unsupported: unavailable | Failed: command | + | 0.29.0 | 5.15s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 5.81s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 4.06s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 6.03s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 5.40s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 5.36s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 5.25s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 5.51s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 5.91s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 5.17s | Unsupported: unavailable | Failed: command | | 0.35.0 | 5.06s | Unsupported: unavailable | Failed: command | | 0.36.0 | 4.19s | Unsupported: unavailable | Failed: command | | 0.39.0 | 3.42s | Unsupported: unavailable | Failed: command | @@ -225,18 +259,28 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.25.9 | 3.31s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.1 | 3.53s | Unsupported: unavailable | Unsupported: unavailable | | 0.26.3 | 3.04s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | Failed: command | Failed: command | Failed: command | - | 0.26.5 | Failed: command | Failed: command | Failed: command | - | 0.27.3 | Failed: command | Failed: command | Failed: command | - | 0.28.2 | Failed: command | Failed: command | Failed: command | - | 0.28.4 | Failed: command | Failed: command | Failed: command | - | 0.28.5 | Failed: command | Failed: command | Failed: command | - | 0.30.1 | Failed: command | Failed: command | Failed: command | - | 0.30.2 | Failed: command | Failed: command | Failed: command | - | 0.31.2 | Failed: command | Failed: command | Failed: command | - | 0.32.0 | Failed: command | Failed: command | Failed: command | - | 0.33.0 | Failed: command | Failed: command | Failed: command | - | 0.34.0 | Failed: command | Failed: command | Failed: command | + | 0.26.4 | 3.01s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 3.21s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 3.47s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 3.59s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 3.00s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 3.48s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.3 | 3.40s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.4 | 2.98s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 3.57s | Unsupported: unavailable | Failed: command | + | 0.29.0 | 4.72s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 5.36s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 3.69s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 5.50s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 5.07s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 4.82s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 4.81s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 4.90s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 5.42s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 4.74s | Unsupported: unavailable | Failed: command | | 0.35.0 | 4.60s | Unsupported: unavailable | Failed: command | | 0.36.0 | 3.68s | Unsupported: unavailable | Failed: command | | 0.39.0 | 3.13s | Unsupported: unavailable | Failed: command | diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 20f0502d1..72a07a6d4 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -493,6 +493,28 @@ def _format_count(value: int | None) -> str: return f"{value:,}" +def _python_versions(data: BenchmarkData) -> list[str]: + versions = sorted({entry.python_version for entry in data.entries if entry.python_version}) + if versions: + return versions + if metadata_version := _metadata_value(data, "python_version"): + return [] if metadata_version == EMPTY_CELL else [metadata_version] + return [] + + +def _python_versions_label(data: BenchmarkData) -> str: + if versions := _python_versions(data): + return ", ".join(f"`{version}`" for version in versions) + return EMPTY_CELL + + +def _compatibility_backfill_note(data: BenchmarkData) -> str: + note = _metadata_value(data, "compatibility_backfill") + if note == EMPTY_CELL: + return "" + return note + + def _selected_version_count(data: BenchmarkData) -> int: selected_versions = _metadata_value(data, "selected_versions") if selected_versions == EMPTY_CELL: @@ -515,6 +537,8 @@ def _collection_metadata_lines(data: BenchmarkData) -> list[str]: f"- Schema version: `{data.schema_version}`", f"- Generated at: `{_metadata_value(data, 'generated_at')}`", f"- Source workflow: `{_metadata_value(data, 'workflow')}`", + f"- Primary Python version: `{_metadata_value(data, 'python_version')}`", + f"- Entry Python versions: {_python_versions_label(data)}", f"- Benchmark runs per case: `{_metadata_value(data, 'runs_per_case')}`", f"- Version selection: `{_metadata_value(data, 'selection_strategy')}`", f"- Selected versions: `{_selected_version_count(data)}`", @@ -567,6 +591,13 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "Formatter lines are included for context; missing or unsupported formatter results are skipped." ), "", + ]) + if backfill_note := _compatibility_backfill_note(data): + lines.extend([ + f"Compatibility backfill: {backfill_note}", + "", + ]) + lines.extend([ _render_chart_tabs(data.entries), "", *_collection_metadata_lines(data), diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index 86fefb7bd..0e3eb13d4 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -37,6 +37,8 @@ Each chart plots median generation time by release version for one benchmark sce - Schema version: `1` - Generated at: `2026-06-22T00:00:00Z` - Source workflow: `Release Benchmarks` +- Primary Python version: `3.14.2` +- Entry Python versions: `3.14.2` - Benchmark runs per case: `7` - Version selection: `-` - Selected versions: `2` diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index 861bc72be..9192d2ad3 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -35,6 +35,8 @@ Each chart plots median generation time by release version for one benchmark sce - Schema version: `1` - Generated at: `2026-06-22T00:00:00Z` - Source workflow: `Release Benchmarks` +- Primary Python version: `3.14.2` +- Entry Python versions: `3.14.2` - Benchmark runs per case: `7` - Version selection: `-` - Selected versions: `2` diff --git a/tests/data/release_benchmarks/sample.json b/tests/data/release_benchmarks/sample.json index 3a4a9b2e5..31dd79006 100644 --- a/tests/data/release_benchmarks/sample.json +++ b/tests/data/release_benchmarks/sample.json @@ -3,6 +3,7 @@ "metadata": { "generated_at": "2026-06-22T00:00:00Z", "workflow": "Release Benchmarks", + "python_version": "3.14.2", "runs_per_case": "7" }, "entries": [ From ca461ad7d6449a4fdfa785685e15a25f5f401f35 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 02:16:57 +0900 Subject: [PATCH 03/19] Render benchmark charts in browser --- .github/workflows/generated-docs-sync.yaml | 4 +- .github/workflows/llms-txt.yaml | 3 +- .github/workflows/release-benchmarks.yaml | 7 +- README.md | 4 +- .../release-benchmarks-large-jsonschema.svg | 126 -------- .../release-benchmarks-large-openapi.svg | 126 -------- .../release-benchmarks-small-openapi.svg | 126 -------- docs/assets/benchmarks/release-benchmarks.css | 60 ++++ docs/assets/benchmarks/release-benchmarks.js | 305 ++++++++++++++++++ docs/assets/benchmarks/release-benchmarks.svg | 126 -------- docs/index.md | 4 +- docs/llms-full.txt | 32 +- docs/performance-benchmarks.md | 28 +- scripts/build_preset_docs.py | 4 +- scripts/build_release_benchmark_docs.py | 289 ++--------------- .../release_benchmark_cli_outputs.txt | 64 ++-- .../release_benchmark_rendered.txt | 65 ++-- ...est_build_release_benchmark_docs_script.py | 18 +- zensical.toml | 8 + 19 files changed, 500 insertions(+), 899 deletions(-) delete mode 100644 docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg delete mode 100644 docs/assets/benchmarks/release-benchmarks-large-openapi.svg delete mode 100644 docs/assets/benchmarks/release-benchmarks-small-openapi.svg create mode 100644 docs/assets/benchmarks/release-benchmarks.css create mode 100644 docs/assets/benchmarks/release-benchmarks.js delete mode 100644 docs/assets/benchmarks/release-benchmarks.svg diff --git a/.github/workflows/generated-docs-sync.yaml b/.github/workflows/generated-docs-sync.yaml index c3cf3730e..ab1e1d29a 100644 --- a/.github/workflows/generated-docs-sync.yaml +++ b/.github/workflows/generated-docs-sync.yaml @@ -20,7 +20,8 @@ on: - 'scripts/update_generate_prompt_snapshots.py' - 'scripts/update_docs_version.py' - 'docs/data/release-benchmarks.json' - - 'docs/assets/benchmarks/release-benchmarks.svg' + - 'docs/assets/benchmarks/release-benchmarks.css' + - 'docs/assets/benchmarks/release-benchmarks.js' - 'tox.ini' - '.github/workflows/generated-docs-sync.yaml' - 'docs/**/*.md' @@ -70,7 +71,6 @@ jobs: docs/conformance.md docs/architecture.md docs/performance-benchmarks.md - docs/assets/benchmarks/release-benchmarks.svg docs/cli-reference/ docs/llms.txt docs/llms-full.txt diff --git a/.github/workflows/llms-txt.yaml b/.github/workflows/llms-txt.yaml index 64a8f195f..e399e089b 100644 --- a/.github/workflows/llms-txt.yaml +++ b/.github/workflows/llms-txt.yaml @@ -15,7 +15,8 @@ on: - 'scripts/build_schema_docs.py' - 'scripts/build_release_benchmark_docs.py' - 'docs/data/release-benchmarks.json' - - 'docs/assets/benchmarks/release-benchmarks.svg' + - 'docs/assets/benchmarks/release-benchmarks.css' + - 'docs/assets/benchmarks/release-benchmarks.js' - 'docs/**/*.md' - 'README.md' - 'zensical.toml' diff --git a/.github/workflows/release-benchmarks.yaml b/.github/workflows/release-benchmarks.yaml index 32de62190..09082fe0c 100644 --- a/.github/workflows/release-benchmarks.yaml +++ b/.github/workflows/release-benchmarks.yaml @@ -181,7 +181,12 @@ jobs: python scripts/build_release_benchmark_docs.py --data .benchmarks/release-benchmarks.json --docs .benchmarks/docs/performance-benchmarks.md - --svg .benchmarks/docs/assets/benchmarks/release-benchmarks.svg + - name: Copy benchmark chart assets + run: | + set -euo pipefail + mkdir -p .benchmarks/docs/assets/benchmarks + cp docs/assets/benchmarks/release-benchmarks.css .benchmarks/docs/assets/benchmarks/ + cp docs/assets/benchmarks/release-benchmarks.js .benchmarks/docs/assets/benchmarks/ - name: Upload benchmark data uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: diff --git a/README.md b/README.md index 3398ef142..30a308035 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ custom-template output is not exhaustively validated. If `--formatters builtin` output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior](https://datamodel-code-generator.koxudaxi.dev/formatter-behavior/) for details. -See [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/) for release benchmark data and SVG charts. +See [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/) for release benchmark data and interactive charts. --- @@ -215,7 +215,7 @@ See [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/perfo - ⚙️ [pyproject.toml](https://datamodel-code-generator.koxudaxi.dev/pyproject_toml/) - Configuration file - 🔄 [CI/CD Integration](https://datamodel-code-generator.koxudaxi.dev/ci-cd/) - GitHub Actions, pre-commit hooks - ✅ [Conformance Dashboard](https://datamodel-code-generator.koxudaxi.dev/conformance/) - External corpus coverage signals -- 📈 [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/) - Release benchmark tables and SVG charts +- 📈 [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/) - Release benchmark tables and interactive charts - 🧭 [Architecture](https://datamodel-code-generator.koxudaxi.dev/architecture/) - Generation pipeline and synchronized component inventory - 🚀 [One-liner Usage](https://datamodel-code-generator.koxudaxi.dev/oneliner/) - uvx, pipx, clipboard integration - ❓ [FAQ](https://datamodel-code-generator.koxudaxi.dev/faq/) - Common questions diff --git a/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg b/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg deleted file mode 100644 index 52e4a7e23..000000000 --- a/docs/assets/benchmarks/release-benchmarks-large-jsonschema.svg +++ /dev/null @@ -1,126 +0,0 @@ - - datamodel-code-generator release benchmarks - Historical median generation time by release version for Large / JSON Schema. - - - -datamodel-code-generator release trend: Large / JSON Schema -Median generation time by release version. Lower is faster. - -0.00ms - -1.73s - -3.46s - -5.20s - -6.93s - - - -0.17.2 - -0.25.7 - -0.26.5 - -0.28.0 - -0.28.5 - -0.31.0 - -0.34.0 - -0.42.2 - -0.54.0 - -0.57.0 - -0.64.1 - - -Default - - -Built-in - - -Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Release version -Median - diff --git a/docs/assets/benchmarks/release-benchmarks-large-openapi.svg b/docs/assets/benchmarks/release-benchmarks-large-openapi.svg deleted file mode 100644 index 5b48eb651..000000000 --- a/docs/assets/benchmarks/release-benchmarks-large-openapi.svg +++ /dev/null @@ -1,126 +0,0 @@ - - datamodel-code-generator release benchmarks - Historical median generation time by release version for Large / OpenAPI. - - - -datamodel-code-generator release trend: Large / OpenAPI -Median generation time by release version. Lower is faster. - -0.00ms - -1.58s - -3.16s - -4.74s - -6.32s - - - -0.17.2 - -0.25.7 - -0.26.5 - -0.28.0 - -0.28.5 - -0.31.0 - -0.34.0 - -0.42.2 - -0.54.0 - -0.57.0 - -0.64.1 - - -Default - - -Built-in - - -Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Release version -Median - diff --git a/docs/assets/benchmarks/release-benchmarks-small-openapi.svg b/docs/assets/benchmarks/release-benchmarks-small-openapi.svg deleted file mode 100644 index 4bfa41146..000000000 --- a/docs/assets/benchmarks/release-benchmarks-small-openapi.svg +++ /dev/null @@ -1,126 +0,0 @@ - - datamodel-code-generator release benchmarks - Historical median generation time by release version for Small / OpenAPI. - - - -datamodel-code-generator release trend: Small / OpenAPI -Median generation time by release version. Lower is faster. - -0.00ms - -746ms - -1.49s - -2.24s - -2.98s - - - -0.17.2 - -0.25.7 - -0.26.5 - -0.28.0 - -0.28.5 - -0.31.0 - -0.34.0 - -0.42.2 - -0.54.0 - -0.57.0 - -0.64.1 - - -Default - - -Built-in - - -Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Release version -Median - diff --git a/docs/assets/benchmarks/release-benchmarks.css b/docs/assets/benchmarks/release-benchmarks.css new file mode 100644 index 000000000..93822427a --- /dev/null +++ b/docs/assets/benchmarks/release-benchmarks.css @@ -0,0 +1,60 @@ +.release-benchmark-chart { + display: block; + position: relative; + margin: 1rem 0 1.5rem; + padding: 1rem; + border: 1px solid var(--md-default-fg-color--lightest, #e5e7eb); + border-radius: 0.5rem; + background: var(--md-code-bg-color, #ffffff); +} + +.release-benchmark-chart canvas { + display: block; + width: 100%; + height: 420px; +} + +.release-benchmark-chart__legend { + display: flex; + flex-wrap: wrap; + gap: 0.75rem 1rem; + margin-top: 0.75rem; + font-size: 0.72rem; +} + +.release-benchmark-chart__legend-item { + display: inline-flex; + align-items: center; + gap: 0.35rem; +} + +.release-benchmark-chart__swatch { + width: 0.75rem; + height: 0.75rem; + border-radius: 999px; +} + +.release-benchmark-chart__tooltip { + position: absolute; + z-index: 2; + max-width: min(18rem, calc(100% - 2rem)); + padding: 0.35rem 0.5rem; + border-radius: 0.3rem; + background: var(--md-default-bg-color, #ffffff); + box-shadow: 0 0.25rem 0.9rem rgb(15 23 42 / 18%); + color: var(--md-default-fg-color, #111827); + font-size: 0.72rem; + pointer-events: none; + transform: translate(-50%, calc(-100% - 0.6rem)); + white-space: nowrap; +} + +@media screen and (max-width: 42rem) { + .release-benchmark-chart { + padding: 0.75rem; + } + + .release-benchmark-chart canvas { + height: 320px; + } +} diff --git a/docs/assets/benchmarks/release-benchmarks.js b/docs/assets/benchmarks/release-benchmarks.js new file mode 100644 index 000000000..ceadfd5c1 --- /dev/null +++ b/docs/assets/benchmarks/release-benchmarks.js @@ -0,0 +1,305 @@ +(function () { + "use strict"; + + const STATUS_OK = "ok"; + const FORMATTERS = [ + { key: "default", label: "Default", color: "#6b7280" }, + { key: "builtin", label: "Built-in", color: "#2563eb" }, + { key: "ruff", label: "Ruff", color: "#16a34a" }, + ]; + + const charts = Array.from(document.querySelectorAll("[data-release-benchmark-chart]")); + if (charts.length === 0) { + return; + } + + const scriptUrl = document.currentScript ? document.currentScript.src : document.baseURI; + const dataUrl = new URL("../../data/release-benchmarks.json", scriptUrl); + + function versionKey(version) { + const parts = String(version) + .replace(/^v/, "") + .split(/[.\-+_]/) + .map((part) => (/^\d+$/.test(part) ? Number(part) : 0)); + while (parts.length < 4) { + parts.push(0); + } + return parts; + } + + function compareVersions(left, right) { + const leftKey = versionKey(left); + const rightKey = versionKey(right); + for (let index = 0; index < 4; index += 1) { + if (leftKey[index] !== rightKey[index]) { + return leftKey[index] - rightKey[index]; + } + } + return String(left).localeCompare(String(right)); + } + + function formatMs(value) { + if (value >= 1000) { + return `${(value / 1000).toFixed(2)}s`; + } + if (value >= 100) { + return `${value.toFixed(0)}ms`; + } + if (value >= 10) { + return `${value.toFixed(1)}ms`; + } + return `${value.toFixed(2)}ms`; + } + + function inputLabel(inputType) { + switch (inputType) { + case "openapi": + return "OpenAPI"; + case "jsonschema": + return "JSON Schema"; + default: + return inputType; + } + } + + function findEntry(entries, version, formatter) { + return entries.find( + (entry) => + entry.version === version && + entry.formatter === formatter && + entry.status === STATUS_OK && + typeof entry.median_ms === "number", + ); + } + + function scale(value, sourceMin, sourceMax, targetMin, targetMax) { + if (sourceMax === sourceMin) { + return (targetMin + targetMax) / 2; + } + return targetMin + ((value - sourceMin) / (sourceMax - sourceMin)) * (targetMax - targetMin); + } + + function cssColor(element, name, fallback) { + const value = getComputedStyle(element).getPropertyValue(name).trim(); + return value || fallback; + } + + function scenarioEntries(data, inputType, caseName) { + return data.entries.filter((entry) => entry.input_type === inputType && entry.case === caseName); + } + + function renderLegend(container) { + const legend = container.querySelector(".release-benchmark-chart__legend"); + if (!legend) { + return; + } + legend.innerHTML = FORMATTERS.map( + (formatter) => + `${formatter.label}`, + ).join(""); + } + + function chartSize(canvas) { + const rect = canvas.getBoundingClientRect(); + const style = getComputedStyle(canvas); + const width = Math.max(320, Math.floor(rect.width)); + const height = Math.max(260, Number.parseFloat(style.height) || 420); + return { width, height }; + } + + function isVisible(element) { + return Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + } + + function drawChart(container, data) { + const canvas = container.querySelector("canvas"); + if (!(canvas instanceof HTMLCanvasElement)) { + return; + } + if (!isVisible(container)) { + return; + } + + const inputType = container.dataset.inputType || ""; + const caseName = container.dataset.case || ""; + const entries = scenarioEntries(data, inputType, caseName); + const versions = Array.from(new Set(entries.map((entry) => entry.version))).sort(compareVersions); + const okEntries = entries.filter((entry) => entry.status === STATUS_OK && typeof entry.median_ms === "number"); + + if (versions.length === 0 || okEntries.length === 0) { + return; + } + + const { width, height } = chartSize(canvas); + const devicePixelRatio = window.devicePixelRatio || 1; + canvas.width = Math.floor(width * devicePixelRatio); + canvas.height = Math.floor(height * devicePixelRatio); + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; + + const context = canvas.getContext("2d"); + if (!context) { + return; + } + context.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 0); + context.clearRect(0, 0, width, height); + + const foreground = cssColor(container, "--md-default-fg-color", "#111827"); + const muted = cssColor(container, "--md-default-fg-color--light", "#6b7280"); + const grid = cssColor(container, "--md-default-fg-color--lightest", "#d1d5db"); + const plot = { + left: 58, + top: 38, + right: width - 18, + bottom: height - 58, + }; + const maxMs = Math.max(...okEntries.map((entry) => entry.median_ms || 0)); + const yMax = maxMs > 0 ? maxMs * 1.15 : 1; + const points = []; + + context.font = "12px system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"; + context.fillStyle = foreground; + context.fillText(`${caseName[0].toUpperCase()}${caseName.slice(1)} / ${inputLabel(inputType)}`, plot.left, 20); + + context.strokeStyle = grid; + context.fillStyle = muted; + context.lineWidth = 1; + for (let index = 0; index <= 4; index += 1) { + const value = (yMax * index) / 4; + const y = scale(value, 0, yMax, plot.bottom, plot.top); + context.beginPath(); + context.moveTo(plot.left, y); + context.lineTo(plot.right, y); + context.stroke(); + context.textAlign = "right"; + context.fillText(formatMs(value), plot.left - 10, y + 4); + } + + const tickStep = Math.max(1, Math.round(versions.length / 8)); + context.textAlign = "center"; + versions.forEach((version, index) => { + if (index % tickStep !== 0 && index !== versions.length - 1) { + return; + } + const x = scale(index, 0, Math.max(versions.length - 1, 1), plot.left, plot.right); + context.strokeStyle = grid; + context.beginPath(); + context.moveTo(x, plot.top); + context.lineTo(x, plot.bottom); + context.stroke(); + context.fillStyle = muted; + context.fillText(version, x, plot.bottom + 24); + }); + + context.strokeStyle = foreground; + context.beginPath(); + context.moveTo(plot.left, plot.top); + context.lineTo(plot.left, plot.bottom); + context.lineTo(plot.right, plot.bottom); + context.stroke(); + + FORMATTERS.forEach((formatter) => { + const formatterPoints = []; + versions.forEach((version, index) => { + const entry = findEntry(entries, version, formatter.key); + if (!entry) { + return; + } + const x = scale(index, 0, Math.max(versions.length - 1, 1), plot.left, plot.right); + const y = scale(entry.median_ms, 0, yMax, plot.bottom, plot.top); + formatterPoints.push({ x, y, entry, formatter }); + points.push({ x, y, entry, formatter }); + }); + if (formatterPoints.length === 0) { + return; + } + context.strokeStyle = formatter.color; + context.lineWidth = 2.4; + context.beginPath(); + formatterPoints.forEach((point, index) => { + if (index === 0) { + context.moveTo(point.x, point.y); + return; + } + context.lineTo(point.x, point.y); + }); + context.stroke(); + + context.fillStyle = formatter.color; + formatterPoints.forEach((point) => { + context.beginPath(); + context.arc(point.x, point.y, 3, 0, Math.PI * 2); + context.fill(); + }); + }); + + container.releaseBenchmarkPoints = points; + } + + function showTooltip(container, event) { + const tooltip = container.querySelector(".release-benchmark-chart__tooltip"); + const canvas = container.querySelector("canvas"); + if (!tooltip || !(canvas instanceof HTMLCanvasElement) || !container.releaseBenchmarkPoints) { + return; + } + const rect = canvas.getBoundingClientRect(); + const x = event.clientX - rect.left; + const y = event.clientY - rect.top; + let nearest = null; + let nearestDistance = 14; + container.releaseBenchmarkPoints.forEach((point) => { + const distance = Math.hypot(point.x - x, point.y - y); + if (distance < nearestDistance) { + nearest = point; + nearestDistance = distance; + } + }); + if (!nearest) { + tooltip.hidden = true; + return; + } + tooltip.textContent = `${nearest.entry.version} · ${nearest.formatter.label}: ${formatMs(nearest.entry.median_ms)}`; + tooltip.style.left = `${canvas.offsetLeft + nearest.x}px`; + tooltip.style.top = `${canvas.offsetTop + nearest.y}px`; + tooltip.hidden = false; + } + + function hideTooltip(container) { + const tooltip = container.querySelector(".release-benchmark-chart__tooltip"); + if (tooltip) { + tooltip.hidden = true; + } + } + + function renderAll(data) { + charts.forEach((container) => drawChart(container, data)); + } + + fetch(dataUrl) + .then((response) => { + if (!response.ok) { + throw new Error(`Could not load ${dataUrl.pathname}`); + } + return response.json(); + }) + .then((data) => { + charts.forEach((container) => { + renderLegend(container); + container.addEventListener("mousemove", (event) => showTooltip(container, event)); + container.addEventListener("mouseleave", () => hideTooltip(container)); + }); + renderAll(data); + const observer = new ResizeObserver(() => window.requestAnimationFrame(() => renderAll(data))); + charts.forEach((container) => observer.observe(container)); + document.addEventListener("click", () => window.setTimeout(() => renderAll(data), 50)); + }) + .catch((error) => { + charts.forEach((container) => { + const tooltip = container.querySelector(".release-benchmark-chart__tooltip"); + if (tooltip) { + tooltip.textContent = error.message; + tooltip.hidden = false; + } + }); + }); +})(); diff --git a/docs/assets/benchmarks/release-benchmarks.svg b/docs/assets/benchmarks/release-benchmarks.svg deleted file mode 100644 index 9e1f3e1a2..000000000 --- a/docs/assets/benchmarks/release-benchmarks.svg +++ /dev/null @@ -1,126 +0,0 @@ - - datamodel-code-generator release benchmarks - Historical median generation time by release version for Small / JSON Schema. - - - -datamodel-code-generator release trend: Small / JSON Schema -Median generation time by release version. Lower is faster. - -0.00ms - -642ms - -1.28s - -1.93s - -2.57s - - - -0.17.2 - -0.25.7 - -0.26.5 - -0.28.0 - -0.28.5 - -0.31.0 - -0.34.0 - -0.42.2 - -0.54.0 - -0.57.0 - -0.64.1 - - -Default - - -Built-in - - -Ruff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Release version -Median - diff --git a/docs/index.md b/docs/index.md index d7dfbab36..55866671c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -201,7 +201,7 @@ custom-template output is not exhaustively validated. If `--formatters builtin` output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior](formatter-behavior.md) for details. -See [Performance Benchmarks](performance-benchmarks.md) for release benchmark data and SVG charts. +See [Performance Benchmarks](performance-benchmarks.md) for release benchmark data and interactive charts. --- @@ -310,7 +310,7 @@ See [CI/CD Integration](ci-cd.md) for more options. - 🚀 **[One-liner Usage](oneliner.md)** - uvx, pipx, clipboard integration - 🔄 **[CI/CD Integration](ci-cd.md)** - GitHub Actions and CI validation - ✅ **[Conformance Dashboard](conformance.md)** - External corpus and CI coverage signals -- 📈 **[Performance Benchmarks](performance-benchmarks.md)** - Release benchmark tables and SVG charts +- 📈 **[Performance Benchmarks](performance-benchmarks.md)** - Release benchmark tables and interactive charts - 🎨 **[Custom Templates](custom_template.md)** - Customize generated code with Jinja2 - 🖌️ **[Code Formatting](formatting.md)** - Configure black, isort, and ruff - ❓ **[FAQ](faq.md)** - Common questions and troubleshooting diff --git a/docs/llms-full.txt b/docs/llms-full.txt index d4b658a2a..57dcb908a 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -203,7 +203,7 @@ custom-template output is not exhaustively validated. If `--formatters builtin` output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior](formatter-behavior.md) for details. -See [Performance Benchmarks](performance-benchmarks.md) for release benchmark data and SVG charts. +See [Performance Benchmarks](performance-benchmarks.md) for release benchmark data and interactive charts. --- @@ -312,7 +312,7 @@ See [CI/CD Integration](ci-cd.md) for more options. - 🚀 **[One-liner Usage](oneliner.md)** - uvx, pipx, clipboard integration - 🔄 **[CI/CD Integration](ci-cd.md)** - GitHub Actions and CI validation - ✅ **[Conformance Dashboard](conformance.md)** - External corpus and CI coverage signals -- 📈 **[Performance Benchmarks](performance-benchmarks.md)** - Release benchmark tables and SVG charts +- 📈 **[Performance Benchmarks](performance-benchmarks.md)** - Release benchmark tables and interactive charts - 🎨 **[Custom Templates](custom_template.md)** - Customize generated code with Jinja2 - 🖌️ **[Code Formatting](formatting.md)** - Configure black, isort, and ruff - ❓ **[FAQ](faq.md)** - Common questions and troubleshooting @@ -34924,19 +34924,39 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those === "Small / JSON Schema" - ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + + + + + + === "Small / OpenAPI" - ![Small / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-small-openapi.svg){ align=center } + + + + + + === "Large / JSON Schema" - ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + + + + + + === "Large / OpenAPI" - ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + + + + + + ## Collection Policy diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index d4b2d1e6f..91de2b227 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -12,19 +12,39 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those === "Small / JSON Schema" - ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + + + + + + === "Small / OpenAPI" - ![Small / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-small-openapi.svg){ align=center } + + + + + + === "Large / JSON Schema" - ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + + + + + + === "Large / OpenAPI" - ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + + + + + + ## Collection Policy diff --git a/scripts/build_preset_docs.py b/scripts/build_preset_docs.py index 9081ec205..1a1970bd7 100644 --- a/scripts/build_preset_docs.py +++ b/scripts/build_preset_docs.py @@ -328,7 +328,7 @@ def _render_readme_quick_start( output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior]({README_FORMATTER_BEHAVIOR_LINK}) for details. -See [Performance Benchmarks]({README_PERFORMANCE_BENCHMARKS_LINK}) for release benchmark data and SVG charts. +See [Performance Benchmarks]({README_PERFORMANCE_BENCHMARKS_LINK}) for release benchmark data and interactive charts. """ @@ -387,7 +387,7 @@ def _render_docs_index_quick_start( output with a custom template, please open an issue with a small reproducer. See [Formatter Behavior]({DOCS_FORMATTER_BEHAVIOR_LINK}) for details. -See [Performance Benchmarks]({DOCS_PERFORMANCE_BENCHMARKS_LINK}) for release benchmark data and SVG charts.""" +See [Performance Benchmarks]({DOCS_PERFORMANCE_BENCHMARKS_LINK}) for release benchmark data and interactive charts.""" def parse_args() -> argparse.Namespace: diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 72a07a6d4..bbb11f396 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -1,4 +1,4 @@ -"""Build the release benchmark documentation page and SVG chart. +"""Build the release benchmark documentation page. Usage: python scripts/build_release_benchmark_docs.py @@ -8,7 +8,6 @@ from __future__ import annotations import argparse -import html import json import re import sys @@ -24,17 +23,7 @@ ROOT = Path(__file__).resolve().parents[1] DATA_PATH = ROOT / "docs" / "data" / "release-benchmarks.json" DOCS_PATH = ROOT / "docs" / "performance-benchmarks.md" -SVG_PATH = ROOT / "docs" / "assets" / "benchmarks" / "release-benchmarks.svg" - -SVG_WIDTH = 980 -SVG_HEIGHT = 640 -PLOT_LEFT = 86 -PLOT_TOP = 116 -PLOT_WIDTH = 760 -PLOT_HEIGHT = 360 -GRID_LINES = 4 -VERSION_TICK_COUNT = 10 -POINT_RADIUS = 3 + STATUS_OK = "ok" EMPTY_CELL = "-" MILLISECONDS_PER_SECOND = 1000 @@ -43,16 +32,6 @@ SAME_SPEED_TOLERANCE = 0.005 FORMATTER_ORDER = ("default", "builtin", "ruff") CASE_ORDER = ("small", "large") -SERIES_COLORS = ( - "#6b7280", - "#2563eb", - "#16a34a", - "#9333ea", - "#ea580c", - "#0891b2", - "#be123c", - "#4d7c0f", -) @dataclass(frozen=True, slots=True) @@ -92,25 +71,6 @@ class GeneratedDoc: content: str -@dataclass(frozen=True, slots=True) -class SvgTextStyle: - """SVG text rendering attributes.""" - - size: int = 12 - anchor: str = "start" - weight: str = "400" - - -DEFAULT_TEXT_STYLE = SvgTextStyle() -TITLE_TEXT_STYLE = SvgTextStyle(size=22, weight="700") -EMPTY_TITLE_TEXT_STYLE = SvgTextStyle(size=22, anchor="middle") -EMPTY_NOTE_TEXT_STYLE = SvgTextStyle(size=14, anchor="middle") -MUTED_TEXT_STYLE = SvgTextStyle(size=13) -TICK_TEXT_STYLE = SvgTextStyle(size=11) -Y_AXIS_TICK_TEXT_STYLE = SvgTextStyle(size=11, anchor="end") -X_AXIS_TICK_TEXT_STYLE = SvgTextStyle(size=11, anchor="middle") - - def _string(value: object) -> str: return value if isinstance(value, str) else "" @@ -406,30 +366,26 @@ def _scenarios(entries: tuple[BenchmarkEntry, ...]) -> list[tuple[str, str]]: ) -def _scenario_svg_filename(input_type: str, case: str, *, index: int) -> str: - if index == 0: - return "release-benchmarks.svg" - return f"release-benchmarks-{case}-{input_type}.svg" - - -def _scenario_svg_path(svg_path: Path, input_type: str, case: str, *, index: int) -> Path: - return svg_path.with_name(_scenario_svg_filename(input_type, case, index=index)) - - -def _scenario_svg_relative_path(input_type: str, case: str, *, index: int) -> str: - return f"assets/benchmarks/{_scenario_svg_filename(input_type, case, index=index)}" - - def _render_chart_tabs(entries: tuple[BenchmarkEntry, ...]) -> str: blocks: list[str] = [] - for index, (input_type, case) in enumerate(_scenarios(entries)): + for input_type, case in _scenarios(entries): label = _scenario_label(input_type, case) blocks.extend(( f'=== "{label}"', "", _indent_block( - f"![{label} release benchmark trend]({_scenario_svg_relative_path(input_type, case, index=index)})" - "{ align=center }" + "\n".join(( + ( + f'' + ), + ' ', + ' ', + ' ', + " ", + "", + )) ), "", )) @@ -574,7 +530,7 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "", ( "After this workflow is available on `main`, run it with `workflow_dispatch` and commit the generated " - "`docs/data/release-benchmarks.json`, Markdown, and SVG artifacts." + "`docs/data/release-benchmarks.json` and Markdown artifact." ), "", *_collection_metadata_lines(data), @@ -625,210 +581,9 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: return "\n".join(lines) -def _svg_text(x: float, y: float, text: str, style: SvgTextStyle = DEFAULT_TEXT_STYLE) -> str: - return ( - f'{html.escape(text)}' - ) - - -def _scale(value: float, *, source_min: float, source_max: float, target_min: float, target_max: float) -> float: - if source_max == source_min: - return (target_min + target_max) / 2 - ratio = (value - source_min) / (source_max - source_min) - return target_min + ratio * (target_max - target_min) - - -def _chart_entries(entries: tuple[BenchmarkEntry, ...], *, input_type: str, case: str) -> list[BenchmarkEntry]: - return [ - entry - for entry in _sorted_entries(entries) - if ( - entry.input_type == input_type - and entry.case == case - and entry.status == STATUS_OK - and entry.median_ms is not None - ) - ] - - -def _render_empty_svg() -> str: - body = "\n".join(( - _svg_text( - SVG_WIDTH / 2, - SVG_HEIGHT / 2 - 10, - "No release benchmark data committed yet", - EMPTY_TITLE_TEXT_STYLE, - ), - _svg_text( - SVG_WIDTH / 2, - SVG_HEIGHT / 2 + 20, - "Run the Release Benchmarks workflow to generate the initial historical dataset.", - EMPTY_NOTE_TEXT_STYLE, - ), - )) - return _wrap_svg( - body, - desc="No datamodel-code-generator release benchmark data has been committed yet.", - ) - - -def _wrap_svg(body: str, *, desc: str) -> str: - return f""" - datamodel-code-generator release benchmarks - {html.escape(desc)} - - - -{body} - -""" - - -def _line_points(entries: list[BenchmarkEntry], *, formatter: str, versions: list[str], y_max: float) -> list[str]: - by_version = {entry.version: entry for entry in entries if entry.formatter == formatter} - points: list[str] = [] - for index, version in enumerate(versions): - entry = by_version.get(version) - if entry is None or entry.median_ms is None: - continue - x = _scale( - index, - source_min=0, - source_max=max(len(versions) - 1, 1), - target_min=PLOT_LEFT, - target_max=PLOT_LEFT + PLOT_WIDTH, - ) - y = _scale( - entry.median_ms, - source_min=0, - source_max=y_max, - target_min=PLOT_TOP + PLOT_HEIGHT, - target_max=PLOT_TOP, - ) - points.append(f"{x:.1f},{y:.1f}") - return points - - -def _version_tick_indexes(version_count: int) -> list[int]: - if version_count <= 1: - return [0] - step = max(1, round(version_count / VERSION_TICK_COUNT)) - indexes = list(range(0, version_count, step)) - if indexes[-1] != version_count - 1: - indexes.append(version_count - 1) - return indexes - - -def render_release_benchmark_svg(data: BenchmarkData, *, input_type: str = "", case: str = "") -> str: - """Render a static SVG historical trend chart for one benchmark scenario.""" - if not input_type or not case: - scenarios = _scenarios(data.entries) - if not scenarios: - return _render_empty_svg() - input_type, case = scenarios[0] - - entries = _chart_entries(data.entries, input_type=input_type, case=case) - if not entries: - return _render_empty_svg() - - scenario_label = _scenario_label(input_type, case) - versions = sorted( - {entry.version for entry in data.entries if entry.input_type == input_type and entry.case == case}, - key=_version_sort_key, - ) - max_ms = max(entry.median_ms or 0 for entry in entries) - y_max = max_ms * 1.15 if max_ms else 1 - body: list[str] = [ - _svg_text(44, 48, f"datamodel-code-generator release trend: {scenario_label}", TITLE_TEXT_STYLE), - _svg_text(44, 74, "Median generation time by release version. Lower is faster.", MUTED_TEXT_STYLE), - ] - - for index in range(GRID_LINES + 1): - value = y_max * index / GRID_LINES - y = _scale(value, source_min=0, source_max=y_max, target_min=PLOT_TOP + PLOT_HEIGHT, target_max=PLOT_TOP) - body.extend(( - f'', - _svg_text(PLOT_LEFT - 12, y + 4, _format_ms(value), Y_AXIS_TICK_TEXT_STYLE), - )) - - body.extend(( - f'', - ( - f'' - ), - )) - - for index in _version_tick_indexes(len(versions)): - version = versions[index] - x = _scale( - index, - source_min=0, - source_max=max(len(versions) - 1, 1), - target_min=PLOT_LEFT, - target_max=PLOT_LEFT + PLOT_WIDTH, - ) - body.extend(( - f'', - _svg_text(x, PLOT_TOP + PLOT_HEIGHT + 24, version, X_AXIS_TICK_TEXT_STYLE), - )) - - legend_x = PLOT_LEFT - for index, formatter in enumerate(FORMATTER_ORDER): - color = SERIES_COLORS[index % len(SERIES_COLORS)] - x = legend_x + index * 132 - body.extend(( - f'', - f'', - _svg_text(x + 32, 96, _formatter_label(formatter), TICK_TEXT_STYLE), - )) - - for index, formatter in enumerate(FORMATTER_ORDER): - points = _line_points(entries, formatter=formatter, versions=versions, y_max=y_max) - if not points: - continue - color = SERIES_COLORS[index % len(SERIES_COLORS)] - body.append( - f'' - ) - for point in points: - x, y = point.split(",", maxsplit=1) - body.append(f'') - - body.extend(( - _svg_text(PLOT_LEFT + PLOT_WIDTH / 2, PLOT_TOP + PLOT_HEIGHT + 54, "Release version", X_AXIS_TICK_TEXT_STYLE), - _svg_text(44, PLOT_TOP - 16, "Median", TICK_TEXT_STYLE), - )) - - return _wrap_svg( - "\n".join(body), - desc=f"Historical median generation time by release version for {scenario_label}.", - ) - - -def _generated_docs(data_path: Path, docs_path: Path, svg_path: Path) -> tuple[GeneratedDoc, ...]: +def _generated_docs(data_path: Path, docs_path: Path) -> tuple[GeneratedDoc, ...]: data = load_benchmark_data(data_path) - docs = [GeneratedDoc(docs_path, render_release_benchmark_markdown(data).rstrip() + "\n")] - for index, (input_type, case) in enumerate(_scenarios(data.entries)): - docs.append( - GeneratedDoc( - _scenario_svg_path(svg_path, input_type, case, index=index), - render_release_benchmark_svg(data, input_type=input_type, case=case), - ) - ) - if len(docs) == 1: - docs.append(GeneratedDoc(svg_path, render_release_benchmark_svg(data))) - return tuple(docs) + return (GeneratedDoc(docs_path, render_release_benchmark_markdown(data).rstrip() + "\n"),) def _doc_is_current(doc: GeneratedDoc) -> bool: @@ -840,10 +595,9 @@ def build_docs( check: bool, data_path: Path = DATA_PATH, docs_path: Path = DOCS_PATH, - svg_path: Path = SVG_PATH, ) -> int: """Generate or check release benchmark documentation outputs.""" - docs = _generated_docs(data_path, docs_path, svg_path) + docs = _generated_docs(data_path, docs_path) if check: if not (out_of_date := tuple(doc.path for doc in docs if not _doc_is_current(doc))): print("Release benchmark docs are up to date.") @@ -861,18 +615,17 @@ def build_docs( def parse_args() -> argparse.Namespace: """Parse command-line arguments.""" - parser = argparse.ArgumentParser(description="Build release benchmark documentation and SVG chart") + parser = argparse.ArgumentParser(description="Build release benchmark documentation") parser.add_argument("--check", action="store_true", help="Check whether generated benchmark docs are up to date") parser.add_argument("--data", type=Path, default=DATA_PATH, help="Benchmark JSON data path") parser.add_argument("--docs", type=Path, default=DOCS_PATH, help="Markdown output path") - parser.add_argument("--svg", type=Path, default=SVG_PATH, help="SVG chart output path") return parser.parse_args() def main() -> int: """Script entrypoint.""" args = parse_args() - return build_docs(check=args.check, data_path=args.data, docs_path=args.docs, svg_path=args.svg) + return build_docs(check=args.check, data_path=args.data, docs_path=args.docs) if __name__ == "__main__": diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index 0e3eb13d4..ba3c65202 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -14,15 +14,30 @@ Each chart plots median generation time by release version for one benchmark sce === "Small / JSON Schema" - ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + + + + + + === "Large / JSON Schema" - ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + + + + + + === "Large / OpenAPI" - ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + + + + + + ## Collection Policy @@ -84,46 +99,3 @@ Rows are release versions. Formatter cells show median generation time; non-defa | --- | --- | --- | --- | | 0.58.0 | - | 980ms | - | | 0.59.0 | - | 881ms | Unsupported: formatter target is unavailable in this release | -svg: - - datamodel-code-generator release benchmarks - Historical median generation time by release version for Small / JSON Schema. - - - -datamodel-code-generator release trend: Small / JSON Schema -Median generation time by release version. Lower is faster. - -0.00ms - -20.8ms - -41.6ms - -62.4ms - -83.2ms - - - -0.58.0 - - -Default - - -Built-in - - -Ruff - - -Release version -Median - diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index 9192d2ad3..e9f54bbe1 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -12,15 +12,30 @@ Each chart plots median generation time by release version for one benchmark sce === "Small / JSON Schema" - ![Small / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks.svg){ align=center } + + + + + + === "Large / JSON Schema" - ![Large / JSON Schema release benchmark trend](assets/benchmarks/release-benchmarks-large-jsonschema.svg){ align=center } + + + + + + === "Large / OpenAPI" - ![Large / OpenAPI release benchmark trend](assets/benchmarks/release-benchmarks-large-openapi.svg){ align=center } + + + + + + ## Collection Policy @@ -82,47 +97,3 @@ Rows are release versions. Formatter cells show median generation time; non-defa | --- | --- | --- | --- | | 0.58.0 | - | 980ms | - | | 0.59.0 | - | 881ms | Unsupported: formatter target is unavailable in this release | - ---- svg --- - - datamodel-code-generator release benchmarks - Historical median generation time by release version for Small / JSON Schema. - - - -datamodel-code-generator release trend: Small / JSON Schema -Median generation time by release version. Lower is faster. - -0.00ms - -20.8ms - -41.6ms - -62.4ms - -83.2ms - - - -0.58.0 - - -Default - - -Built-in - - -Ruff - - -Release version -Median - diff --git a/tests/test_build_release_benchmark_docs_script.py b/tests/test_build_release_benchmark_docs_script.py index f8f1ee6c9..1e8232cda 100644 --- a/tests/test_build_release_benchmark_docs_script.py +++ b/tests/test_build_release_benchmark_docs_script.py @@ -55,22 +55,18 @@ def test_build_release_benchmark_docs_check_is_up_to_date() -> None: def test_release_benchmark_renderers_use_fixture_data() -> None: - """Render Markdown and SVG from an external benchmark data fixture.""" + """Render Markdown from an external benchmark data fixture.""" data = build_release_benchmark_docs.load_benchmark_data(FIXTURE_DATA) assert_output( - "\n--- markdown ---\n" - + build_release_benchmark_docs.render_release_benchmark_markdown(data) - + "\n--- svg ---\n" - + build_release_benchmark_docs.render_release_benchmark_svg(data), + "\n--- markdown ---\n" + build_release_benchmark_docs.render_release_benchmark_markdown(data), EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "release_benchmark_rendered.txt", ) def test_release_benchmark_docs_cli_writes_expected_outputs(tmp_path: Path) -> None: - """The CLI can render fixture-backed Markdown and SVG to caller-selected paths.""" + """The CLI can render fixture-backed Markdown to a caller-selected path.""" docs_path = tmp_path / "performance-benchmarks.md" - svg_path = tmp_path / "release-benchmarks.svg" result = subprocess.run( [ sys.executable, @@ -79,8 +75,6 @@ def test_release_benchmark_docs_cli_writes_expected_outputs(tmp_path: Path) -> N str(FIXTURE_DATA), "--docs", str(docs_path), - "--svg", - str(svg_path), ], cwd=ROOT, capture_output=True, @@ -90,11 +84,7 @@ def test_release_benchmark_docs_cli_writes_expected_outputs(tmp_path: Path) -> N _raise_for_failed_process(result) assert_output( - _completed_process_output(result) - + "docs:\n" - + docs_path.read_text(encoding="utf-8") - + "svg:\n" - + svg_path.read_text(encoding="utf-8"), + _completed_process_output(result) + "docs:\n" + docs_path.read_text(encoding="utf-8"), EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "release_benchmark_cli_outputs.txt", ) diff --git a/zensical.toml b/zensical.toml index a6105cf17..45bc70bdd 100644 --- a/zensical.toml +++ b/zensical.toml @@ -85,6 +85,14 @@ nav = [ { "Development-Contributing" = "development-contributing.md" } ] +extra_css = [ + "assets/benchmarks/release-benchmarks.css" +] + +extra_javascript = [ + { path = "assets/benchmarks/release-benchmarks.js", defer = true } +] + [project.theme] custom_dir = "overrides" features = [ From 53dcf59d7f08710e82937598a57a2b97fdc727b5 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 03:03:01 +0900 Subject: [PATCH 04/19] Improve benchmark charts --- .github/workflows/generated-docs-sync.yaml | 1 + .github/workflows/llms-txt.yaml | 1 + .github/workflows/release-benchmarks.yaml | 4 +- docs/assets/benchmarks/release-benchmarks.css | 17 ++ docs/assets/benchmarks/release-benchmarks.js | 200 +++++++++++++++--- docs/data/release-benchmark-notes.json | 16 ++ docs/llms-full.txt | 25 ++- docs/performance-benchmarks.md | 25 ++- scripts/build_release_benchmark_docs.py | 169 +++++++++++++-- .../release_benchmark_cli_outputs.txt | 15 +- .../release_benchmark_rendered.txt | 15 +- tests/data/release_benchmarks/notes.json | 11 + ...est_build_release_benchmark_docs_script.py | 5 +- 13 files changed, 435 insertions(+), 69 deletions(-) create mode 100644 docs/data/release-benchmark-notes.json create mode 100644 tests/data/release_benchmarks/notes.json diff --git a/.github/workflows/generated-docs-sync.yaml b/.github/workflows/generated-docs-sync.yaml index ab1e1d29a..f8686ddf9 100644 --- a/.github/workflows/generated-docs-sync.yaml +++ b/.github/workflows/generated-docs-sync.yaml @@ -20,6 +20,7 @@ on: - 'scripts/update_generate_prompt_snapshots.py' - 'scripts/update_docs_version.py' - 'docs/data/release-benchmarks.json' + - 'docs/data/release-benchmark-notes.json' - 'docs/assets/benchmarks/release-benchmarks.css' - 'docs/assets/benchmarks/release-benchmarks.js' - 'tox.ini' diff --git a/.github/workflows/llms-txt.yaml b/.github/workflows/llms-txt.yaml index e399e089b..330aa67aa 100644 --- a/.github/workflows/llms-txt.yaml +++ b/.github/workflows/llms-txt.yaml @@ -15,6 +15,7 @@ on: - 'scripts/build_schema_docs.py' - 'scripts/build_release_benchmark_docs.py' - 'docs/data/release-benchmarks.json' + - 'docs/data/release-benchmark-notes.json' - 'docs/assets/benchmarks/release-benchmarks.css' - 'docs/assets/benchmarks/release-benchmarks.js' - 'docs/**/*.md' diff --git a/.github/workflows/release-benchmarks.yaml b/.github/workflows/release-benchmarks.yaml index 09082fe0c..8ec884c1f 100644 --- a/.github/workflows/release-benchmarks.yaml +++ b/.github/workflows/release-benchmarks.yaml @@ -184,9 +184,11 @@ jobs: - name: Copy benchmark chart assets run: | set -euo pipefail - mkdir -p .benchmarks/docs/assets/benchmarks + mkdir -p .benchmarks/docs/assets/benchmarks .benchmarks/docs/data cp docs/assets/benchmarks/release-benchmarks.css .benchmarks/docs/assets/benchmarks/ cp docs/assets/benchmarks/release-benchmarks.js .benchmarks/docs/assets/benchmarks/ + cp .benchmarks/release-benchmarks.json .benchmarks/docs/data/ + cp docs/data/release-benchmark-notes.json .benchmarks/docs/data/ - name: Upload benchmark data uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: diff --git a/docs/assets/benchmarks/release-benchmarks.css b/docs/assets/benchmarks/release-benchmarks.css index 93822427a..cb03afb1e 100644 --- a/docs/assets/benchmarks/release-benchmarks.css +++ b/docs/assets/benchmarks/release-benchmarks.css @@ -34,6 +34,17 @@ border-radius: 999px; } +.release-benchmark-chart__status { + display: block; + margin-top: 0.75rem; + color: var(--md-default-fg-color--light, #6b7280); + font-size: 0.72rem; +} + +.release-benchmark-chart__status[hidden] { + display: none; +} + .release-benchmark-chart__tooltip { position: absolute; z-index: 2; @@ -49,6 +60,12 @@ white-space: nowrap; } +.release-benchmark-version-note { + color: var(--md-accent-fg-color, #dc2626); + text-decoration: underline dotted; + text-underline-offset: 0.18em; +} + @media screen and (max-width: 42rem) { .release-benchmark-chart { padding: 0.75rem; diff --git a/docs/assets/benchmarks/release-benchmarks.js b/docs/assets/benchmarks/release-benchmarks.js index ceadfd5c1..34ddea538 100644 --- a/docs/assets/benchmarks/release-benchmarks.js +++ b/docs/assets/benchmarks/release-benchmarks.js @@ -3,18 +3,18 @@ const STATUS_OK = "ok"; const FORMATTERS = [ - { key: "default", label: "Default", color: "#6b7280" }, + { key: "default", label: "Default", color: "#f59e0b" }, { key: "builtin", label: "Built-in", color: "#2563eb" }, { key: "ruff", label: "Ruff", color: "#16a34a" }, ]; - const charts = Array.from(document.querySelectorAll("[data-release-benchmark-chart]")); - if (charts.length === 0) { - return; - } - - const scriptUrl = document.currentScript ? document.currentScript.src : document.baseURI; + const scriptUrl = document.currentScript && document.currentScript.src ? document.currentScript.src : document.baseURI; const dataUrl = new URL("../../data/release-benchmarks.json", scriptUrl); + const notesUrl = new URL("../../data/release-benchmark-notes.json", scriptUrl); + + function chartContainers() { + return Array.from(document.querySelectorAll("[data-release-benchmark-chart]")); + } function versionKey(version) { const parts = String(version) @@ -88,6 +88,51 @@ return data.entries.filter((entry) => entry.input_type === inputType && entry.case === caseName); } + function normalizeNotes(payload) { + if (!payload || !Array.isArray(payload.notes)) { + return []; + } + return payload.notes.reduce((notesByVersion, note) => { + if (note && typeof note.version === "string" && typeof note.summary === "string") { + notesByVersion.push({ + version: note.version, + summary: note.summary, + details: typeof note.details === "string" ? note.details : "", + inputType: typeof note.input_type === "string" ? note.input_type : "", + caseName: typeof note.case === "string" ? note.case : "", + }); + } + return notesByVersion; + }, []); + } + + function noteText(note) { + return note.details ? `${note.summary} ${note.details}` : note.summary; + } + + function noteApplies(note, inputType, caseName) { + if (note.inputType && note.inputType !== inputType) { + return false; + } + if (note.caseName && note.caseName !== caseName) { + return false; + } + return true; + } + + function scenarioNotesByVersion(notes, inputType, caseName) { + return notes.reduce((notesByVersion, note) => { + if (!noteApplies(note, inputType, caseName)) { + return notesByVersion; + } + if (!notesByVersion[note.version]) { + notesByVersion[note.version] = []; + } + notesByVersion[note.version].push(note); + return notesByVersion; + }, {}); + } + function renderLegend(container) { const legend = container.querySelector(".release-benchmark-chart__legend"); if (!legend) { @@ -99,6 +144,15 @@ ).join(""); } + function setStatus(container, message) { + const status = container.querySelector(".release-benchmark-chart__status"); + if (!status) { + return; + } + status.textContent = message; + status.hidden = message === ""; + } + function chartSize(canvas) { const rect = canvas.getBoundingClientRect(); const style = getComputedStyle(canvas); @@ -111,7 +165,7 @@ return Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length); } - function drawChart(container, data) { + function drawChart(container, data, notes) { const canvas = container.querySelector("canvas"); if (!(canvas instanceof HTMLCanvasElement)) { return; @@ -123,12 +177,15 @@ const inputType = container.dataset.inputType || ""; const caseName = container.dataset.case || ""; const entries = scenarioEntries(data, inputType, caseName); + const notesByVersion = scenarioNotesByVersion(notes, inputType, caseName); const versions = Array.from(new Set(entries.map((entry) => entry.version))).sort(compareVersions); const okEntries = entries.filter((entry) => entry.status === STATUS_OK && typeof entry.median_ms === "number"); if (versions.length === 0 || okEntries.length === 0) { + setStatus(container, "No benchmark data is available for this chart."); return; } + setStatus(container, ""); const { width, height } = chartSize(canvas); const devicePixelRatio = window.devicePixelRatio || 1; @@ -147,6 +204,7 @@ const foreground = cssColor(container, "--md-default-fg-color", "#111827"); const muted = cssColor(container, "--md-default-fg-color--light", "#6b7280"); const grid = cssColor(container, "--md-default-fg-color--lightest", "#d1d5db"); + const noteColor = cssColor(container, "--md-accent-fg-color", "#dc2626"); const plot = { left: 58, top: 38, @@ -198,6 +256,27 @@ context.lineTo(plot.right, plot.bottom); context.stroke(); + const noteMarkers = []; + context.save(); + context.strokeStyle = noteColor; + context.fillStyle = noteColor; + context.textAlign = "center"; + context.setLineDash([4, 4]); + versions.forEach((version, index) => { + const versionNotes = notesByVersion[version]; + if (!versionNotes || versionNotes.length === 0) { + return; + } + const x = scale(index, 0, Math.max(versions.length - 1, 1), plot.left, plot.right); + noteMarkers.push({ x, version, notes: versionNotes, plotTop: plot.top, plotBottom: plot.bottom }); + context.beginPath(); + context.moveTo(x, plot.top); + context.lineTo(x, plot.bottom); + context.stroke(); + context.fillText("*", x, plot.top - 10); + }); + context.restore(); + FORMATTERS.forEach((formatter) => { const formatterPoints = []; versions.forEach((version, index) => { @@ -234,6 +313,7 @@ }); container.releaseBenchmarkPoints = points; + container.releaseBenchmarkNotes = noteMarkers; } function showTooltip(container, event) { @@ -254,6 +334,25 @@ nearestDistance = distance; } }); + let nearestNote = null; + let nearestNoteDistance = 10; + if (container.releaseBenchmarkNotes) { + container.releaseBenchmarkNotes.forEach((marker) => { + const isInsidePlot = y >= marker.plotTop - 24 && y <= marker.plotBottom + 30; + const distance = Math.abs(marker.x - x); + if (isInsidePlot && distance < nearestNoteDistance) { + nearestNote = marker; + nearestNoteDistance = distance; + } + }); + } + if (nearestNote && (!nearest || nearestNoteDistance <= nearestDistance)) { + tooltip.textContent = `${nearestNote.version}: ${nearestNote.notes.map(noteText).join(" ")}`; + tooltip.style.left = `${canvas.offsetLeft + nearestNote.x}px`; + tooltip.style.top = `${canvas.offsetTop + nearestNote.plotTop}px`; + tooltip.hidden = false; + return; + } if (!nearest) { tooltip.hidden = true; return; @@ -271,35 +370,66 @@ } } - function renderAll(data) { - charts.forEach((container) => drawChart(container, data)); + function renderAll(data, notes, charts) { + charts.forEach((container) => drawChart(container, data, notes)); } - fetch(dataUrl) - .then((response) => { - if (!response.ok) { - throw new Error(`Could not load ${dataUrl.pathname}`); - } - return response.json(); - }) - .then((data) => { - charts.forEach((container) => { - renderLegend(container); - container.addEventListener("mousemove", (event) => showTooltip(container, event)); - container.addEventListener("mouseleave", () => hideTooltip(container)); - }); - renderAll(data); - const observer = new ResizeObserver(() => window.requestAnimationFrame(() => renderAll(data))); - charts.forEach((container) => observer.observe(container)); - document.addEventListener("click", () => window.setTimeout(() => renderAll(data), 50)); - }) - .catch((error) => { - charts.forEach((container) => { - const tooltip = container.querySelector(".release-benchmark-chart__tooltip"); - if (tooltip) { - tooltip.textContent = error.message; - tooltip.hidden = false; + function scheduleRender(data, notes, charts) { + window.requestAnimationFrame(() => renderAll(data, notes, charts)); + } + + function initializeCharts() { + const charts = chartContainers(); + if (charts.length === 0) { + return; + } + charts.forEach((container) => { + renderLegend(container); + setStatus(container, "Loading benchmark chart..."); + container.addEventListener("mousemove", (event) => showTooltip(container, event)); + container.addEventListener("mouseleave", () => hideTooltip(container)); + }); + + Promise.all([ + fetch(dataUrl).then((response) => { + if (!response.ok) { + throw new Error(`Could not load ${dataUrl.pathname}`); + } + return response.json(); + }), + fetch(notesUrl) + .then((response) => (response.ok ? response.json() : { notes: [] })) + .then(normalizeNotes) + .catch(() => []), + ]) + .then((response) => { + const [data, notes] = response; + scheduleRender(data, notes, charts); + if ("ResizeObserver" in window) { + const observer = new ResizeObserver(() => scheduleRender(data, notes, charts)); + charts.forEach((container) => observer.observe(container)); + } else { + window.addEventListener("resize", () => scheduleRender(data, notes, charts)); } + document.addEventListener("click", () => window.setTimeout(() => scheduleRender(data, notes, charts), 50)); + document.addEventListener("change", () => window.setTimeout(() => scheduleRender(data, notes, charts), 50)); + document.addEventListener("visibilitychange", () => scheduleRender(data, notes, charts)); + }) + .catch((error) => { + charts.forEach((container) => { + setStatus(container, error.message); + const tooltip = container.querySelector(".release-benchmark-chart__tooltip"); + if (tooltip) { + tooltip.textContent = error.message; + tooltip.hidden = false; + } + }); }); - }); + } + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", initializeCharts, { once: true }); + } else { + initializeCharts(); + } })(); diff --git a/docs/data/release-benchmark-notes.json b/docs/data/release-benchmark-notes.json new file mode 100644 index 000000000..8bdf44192 --- /dev/null +++ b/docs/data/release-benchmark-notes.json @@ -0,0 +1,16 @@ +{ + "notes": [ + { + "version": "0.29.0", + "summary": "The inflect dependency range was widened and cold imports became slower.", + "details": "Release 0.29.0 allowed inflect 7.x, which resolves typeguard 4.x in modern environments. That typeguard instrumentation increased fresh-process startup cost. Small OpenAPI is especially visible because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small." + }, + { + "version": "0.64.1", + "input_type": "openapi", + "case": "small", + "summary": "Small OpenAPI in this release predates the main-branch inflect import mitigation.", + "details": "The latest release result still includes the inflect/typeguard cold-import cost. On main after the mitigation, the same Small/OpenAPI built-in formatter case is back near the Small/JSON Schema result." + } + ] +} diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 57dcb908a..f7cff3194 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34918,7 +34918,7 @@ This page tracks datamodel-code-generator release benchmark results collected on ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing. @@ -34927,6 +34927,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... @@ -34936,6 +34937,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... @@ -34945,6 +34947,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... @@ -34954,10 +34957,18 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... +## Benchmark Notes + +Version markers in the charts and historical tables point to these benchmark interpretation notes. + +- `0.29.0`: The inflect dependency range was widened and cold imports became slower. Release 0.29.0 allowed inflect 7.x, which resolves typeguard 4.x in modern environments. That typeguard instrumentation increased fresh-process startup cost. Small OpenAPI is especially visible because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small. +- `0.64.1` (Small / OpenAPI): Small OpenAPI in this release predates the main-branch inflect import mitigation. The latest release result still includes the inflect/typeguard cold-import cost. On main after the mitigation, the same Small/OpenAPI built-in formatter case is back near the Small/JSON Schema result. + ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. @@ -35011,7 +35022,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" @@ -35038,7 +35049,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 419ms | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 399ms | Unsupported: unavailable | Failed: command | | 0.28.5 | 435ms | Unsupported: unavailable | Failed: command | - | 0.29.0 | 2.07s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2.07s | Unsupported: unavailable | Failed: command | | 0.30.0 | 2.13s | Unsupported: unavailable | Failed: command | | 0.30.1 | 1.59s | Unsupported: unavailable | Failed: command | | 0.30.2 | 2.23s | Unsupported: unavailable | Failed: command | @@ -35093,7 +35104,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 455ms | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 426ms | Unsupported: unavailable | Failed: command | | 0.28.5 | 479ms | Unsupported: unavailable | Failed: command | - | 0.29.0 | 2.11s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2.11s | Unsupported: unavailable | Failed: command | | 0.30.0 | 2.22s | Unsupported: unavailable | Failed: command | | 0.30.1 | 1.63s | Unsupported: unavailable | Failed: command | | 0.30.2 | 2.33s | Unsupported: unavailable | Failed: command | @@ -35121,7 +35132,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.58.0 | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | | 0.59.0 | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | | 0.64.0 | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | - | 0.64.1 | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | 0.64.1 * | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | === "Large / JSON Schema" @@ -35148,7 +35159,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 3.16s | Unsupported: unavailable | Failed: command | | 0.28.5 | 3.93s | Unsupported: unavailable | Failed: command | - | 0.29.0 | 5.15s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 5.15s | Unsupported: unavailable | Failed: command | | 0.30.0 | 5.81s | Unsupported: unavailable | Failed: command | | 0.30.1 | 4.06s | Unsupported: unavailable | Failed: command | | 0.30.2 | 6.03s | Unsupported: unavailable | Failed: command | @@ -35203,7 +35214,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 3.40s | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 2.98s | Unsupported: unavailable | Failed: command | | 0.28.5 | 3.57s | Unsupported: unavailable | Failed: command | - | 0.29.0 | 4.72s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 4.72s | Unsupported: unavailable | Failed: command | | 0.30.0 | 5.36s | Unsupported: unavailable | Failed: command | | 0.30.1 | 3.69s | Unsupported: unavailable | Failed: command | | 0.30.2 | 5.50s | Unsupported: unavailable | Failed: command | diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 91de2b227..1f50d6f65 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -6,7 +6,7 @@ This page tracks datamodel-code-generator release benchmark results collected on ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing. @@ -15,6 +15,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... @@ -24,6 +25,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... @@ -33,6 +35,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... @@ -42,10 +45,18 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those + Loading benchmark chart... +## Benchmark Notes + +Version markers in the charts and historical tables point to these benchmark interpretation notes. + +- `0.29.0`: The inflect dependency range was widened and cold imports became slower. Release 0.29.0 allowed inflect 7.x, which resolves typeguard 4.x in modern environments. That typeguard instrumentation increased fresh-process startup cost. Small OpenAPI is especially visible because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small. +- `0.64.1` (Small / OpenAPI): Small OpenAPI in this release predates the main-branch inflect import mitigation. The latest release result still includes the inflect/typeguard cold-import cost. On main after the mitigation, the same Small/OpenAPI built-in formatter case is back near the Small/JSON Schema result. + ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. @@ -99,7 +110,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" @@ -126,7 +137,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 419ms | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 399ms | Unsupported: unavailable | Failed: command | | 0.28.5 | 435ms | Unsupported: unavailable | Failed: command | - | 0.29.0 | 2.07s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2.07s | Unsupported: unavailable | Failed: command | | 0.30.0 | 2.13s | Unsupported: unavailable | Failed: command | | 0.30.1 | 1.59s | Unsupported: unavailable | Failed: command | | 0.30.2 | 2.23s | Unsupported: unavailable | Failed: command | @@ -181,7 +192,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 455ms | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 426ms | Unsupported: unavailable | Failed: command | | 0.28.5 | 479ms | Unsupported: unavailable | Failed: command | - | 0.29.0 | 2.11s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2.11s | Unsupported: unavailable | Failed: command | | 0.30.0 | 2.22s | Unsupported: unavailable | Failed: command | | 0.30.1 | 1.63s | Unsupported: unavailable | Failed: command | | 0.30.2 | 2.33s | Unsupported: unavailable | Failed: command | @@ -209,7 +220,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.58.0 | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | | 0.59.0 | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | | 0.64.0 | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | - | 0.64.1 | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | 0.64.1 * | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | === "Large / JSON Schema" @@ -236,7 +247,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 3.16s | Unsupported: unavailable | Failed: command | | 0.28.5 | 3.93s | Unsupported: unavailable | Failed: command | - | 0.29.0 | 5.15s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 5.15s | Unsupported: unavailable | Failed: command | | 0.30.0 | 5.81s | Unsupported: unavailable | Failed: command | | 0.30.1 | 4.06s | Unsupported: unavailable | Failed: command | | 0.30.2 | 6.03s | Unsupported: unavailable | Failed: command | @@ -291,7 +302,7 @@ Rows are release versions. Formatter cells show median generation time; non-defa | 0.28.3 | 3.40s | Unsupported: unavailable | Unsupported: unavailable | | 0.28.4 | 2.98s | Unsupported: unavailable | Failed: command | | 0.28.5 | 3.57s | Unsupported: unavailable | Failed: command | - | 0.29.0 | 4.72s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 4.72s | Unsupported: unavailable | Failed: command | | 0.30.0 | 5.36s | Unsupported: unavailable | Failed: command | | 0.30.1 | 3.69s | Unsupported: unavailable | Failed: command | | 0.30.2 | 5.50s | Unsupported: unavailable | Failed: command | diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index bbb11f396..3dc9cadaf 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -8,6 +8,7 @@ from __future__ import annotations import argparse +import html import json import re import sys @@ -22,6 +23,7 @@ ROOT = Path(__file__).resolve().parents[1] DATA_PATH = ROOT / "docs" / "data" / "release-benchmarks.json" +NOTES_PATH = ROOT / "docs" / "data" / "release-benchmark-notes.json" DOCS_PATH = ROOT / "docs" / "performance-benchmarks.md" STATUS_OK = "ok" @@ -54,6 +56,17 @@ class BenchmarkEntry: error: str +@dataclass(frozen=True, slots=True) +class BenchmarkNote: + """One human-authored release benchmark note.""" + + version: str + summary: str + details: str + input_type: str + case: str + + @dataclass(frozen=True, slots=True) class BenchmarkData: """Release benchmark dataset loaded from JSON.""" @@ -61,6 +74,7 @@ class BenchmarkData: schema_version: int metadata: dict[str, Any] entries: tuple[BenchmarkEntry, ...] + notes: tuple[BenchmarkNote, ...] @dataclass(frozen=True, slots=True) @@ -129,7 +143,41 @@ def _entry_from_raw(raw: object, *, index: int) -> BenchmarkEntry: ) -def load_benchmark_data(path: Path = DATA_PATH) -> BenchmarkData: +def _note_from_raw(raw: object, *, index: int) -> BenchmarkNote: + if not isinstance(raw, dict): + msg = f"Benchmark note #{index} must be an object" + raise TypeError(msg) + if not (version := _string(raw.get("version")).strip()): + msg = f"Benchmark note #{index} is missing version" + raise ValueError(msg) + if not (summary := _string(raw.get("summary")).strip()): + msg = f"Benchmark note #{index} is missing summary" + raise ValueError(msg) + return BenchmarkNote( + version=version, + summary=summary, + details=_string(raw.get("details")).strip(), + input_type=_string(raw.get("input_type")).strip(), + case=_string(raw.get("case")).strip(), + ) + + +def load_benchmark_notes(path: Path | None = NOTES_PATH) -> tuple[BenchmarkNote, ...]: + """Load optional human-authored release benchmark notes.""" + if path is None or not path.exists(): + return () + payload = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(payload, dict): + msg = f"Benchmark notes in {path} must be a JSON object" + raise TypeError(msg) + raw_notes = payload.get("notes", []) + if not isinstance(raw_notes, list): + msg = f"Benchmark notes in {path} must contain a notes list" + raise TypeError(msg) + return tuple(_note_from_raw(raw, index=index) for index, raw in enumerate(raw_notes, start=1)) + + +def load_benchmark_data(path: Path = DATA_PATH, *, notes_path: Path | None = NOTES_PATH) -> BenchmarkData: """Load release benchmark JSON data.""" payload = json.loads(path.read_text(encoding="utf-8")) if not isinstance(payload, dict): @@ -146,6 +194,7 @@ def load_benchmark_data(path: Path = DATA_PATH) -> BenchmarkData: schema_version=_integer(payload.get("schema_version"), default=1), metadata=metadata, entries=tuple(_entry_from_raw(raw, index=index) for index, raw in enumerate(raw_entries, start=1)), + notes=load_benchmark_notes(notes_path), ) @@ -311,6 +360,45 @@ def _markdown_cell(value: object) -> str: return text.replace("|", "\\|") +def _note_applies(note: BenchmarkNote, *, input_type: str, case: str) -> bool: + if note.input_type and note.input_type != input_type: + return False + return not note.case or note.case == case + + +def _notes_by_version( + notes: tuple[BenchmarkNote, ...], + *, + input_type: str, + case: str, +) -> dict[str, tuple[BenchmarkNote, ...]]: + notes_by_version: dict[str, list[BenchmarkNote]] = {} + for note in notes: + if _note_applies(note, input_type=input_type, case=case): + notes_by_version.setdefault(note.version, []).append(note) + return {version: tuple(version_notes) for version, version_notes in notes_by_version.items()} + + +def _visible_notes(data: BenchmarkData) -> tuple[BenchmarkNote, ...]: + notes = tuple( + note + for note in data.notes + if any( + entry.version == note.version and _note_applies(note, input_type=entry.input_type, case=entry.case) + for entry in data.entries + ) + ) + return tuple(sorted(notes, key=lambda note: (*_version_sort_key(note.version), note.input_type, note.case))) + + +def _version_cell(version: str, notes_by_version: dict[str, tuple[BenchmarkNote, ...]]) -> str: + if notes := notes_by_version.get(version): + title = html.escape(" ".join(note.summary for note in notes), quote=True) + label = html.escape(version) + return f'{label} *' + return version + + def _render_case_results_table(entries: tuple[BenchmarkEntry, ...], *, case: str, include_version: bool) -> str: headers = ( ("Version", "Input", "Formatter", "Median", "vs Default", "Status") @@ -382,6 +470,7 @@ def _render_chart_tabs(entries: tuple[BenchmarkEntry, ...]) -> str: ), ' ', ' ', + ' Loading benchmark chart...', ' ', " ", "", @@ -404,7 +493,14 @@ def _formatter_history_cell(entry: BenchmarkEntry | None, baseline: BenchmarkEnt return _format_ms(entry.median_ms) -def _render_scenario_history_table(entries: tuple[BenchmarkEntry, ...], *, input_type: str, case: str) -> str: +def _render_scenario_history_table( + entries: tuple[BenchmarkEntry, ...], + *, + input_type: str, + case: str, + notes_by_version: dict[str, tuple[BenchmarkNote, ...]] | None = None, +) -> str: + notes_by_version = notes_by_version or {} headers = ("Version", *(_formatter_label(formatter) for formatter in FORMATTER_ORDER)) lines = [ "| " + " | ".join(headers) + " |", @@ -415,25 +511,63 @@ def _render_scenario_history_table(entries: tuple[BenchmarkEntry, ...], *, input formatter_entries = {entry.formatter: entry for entry in scenario_entries if entry.version == version} baseline = formatter_entries.get("default") values = [ - version, + _version_cell(version, notes_by_version), *(_formatter_history_cell(formatter_entries.get(formatter), baseline) for formatter in FORMATTER_ORDER), ] lines.append("| " + " | ".join(_markdown_cell(value) for value in values) + " |") return "\n".join(lines) -def _render_scenario_history_tabs(entries: tuple[BenchmarkEntry, ...]) -> str: +def _render_scenario_history_tabs(entries: tuple[BenchmarkEntry, ...], notes: tuple[BenchmarkNote, ...] = ()) -> str: blocks: list[str] = [] for input_type, case in _scenarios(entries): blocks.extend(( f'=== "{_scenario_label(input_type, case)}"', "", - _indent_block(_render_scenario_history_table(entries, input_type=input_type, case=case)), + _indent_block( + _render_scenario_history_table( + entries, + input_type=input_type, + case=case, + notes_by_version=_notes_by_version(notes, input_type=input_type, case=case), + ) + ), "", )) return "\n".join(blocks).rstrip() +def _note_scope_label(note: BenchmarkNote) -> str: + match note.input_type, note.case: + case "", "": + return "" + case input_type, "": + return _input_label(input_type) + case "", case_name: + return case_name.title() + case input_type, case_name: + return _scenario_label(input_type, case_name) + + +def _render_benchmark_notes(data: BenchmarkData) -> str: + notes = _visible_notes(data) + if not notes: + return "" + lines = [ + "## Benchmark Notes", + "", + "Version markers in the charts and historical tables point to these benchmark interpretation notes.", + "", + ] + for note in notes: + body = note.summary + if note.details: + body = f"{body} {note.details}" + scope = f" ({scope_label})" if (scope_label := _note_scope_label(note)) else "" + lines.append(f"- `{note.version}`{scope}: {_markdown_cell(body)}") + return "\n".join(lines) + + def _metadata_value(data: BenchmarkData, key: str) -> str: return _string(data.metadata.get(key)).strip() or EMPTY_CELL @@ -544,7 +678,8 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "", ( "Each chart plots median generation time by release version for one benchmark scenario. " - "Formatter lines are included for context; missing or unsupported formatter results are skipped." + "Formatter lines are included for context; missing or unsupported formatter results are skipped. " + "Marked versions have benchmark notes below." ), "", ]) @@ -556,6 +691,13 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: lines.extend([ _render_chart_tabs(data.entries), "", + ]) + if notes_block := _render_benchmark_notes(data): + lines.extend([ + notes_block, + "", + ]) + lines.extend([ *_collection_metadata_lines(data), "## Latest Release Summary", "", @@ -572,17 +714,18 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "", ( "Rows are release versions. Formatter cells show median generation time; non-default cells include " - "the speed relative to Default when both results are available." + "the speed relative to Default when both results are available. Version cells marked with `*` have " + "benchmark notes above." ), "", - _render_scenario_history_tabs(data.entries), + _render_scenario_history_tabs(data.entries, _visible_notes(data)), "", ]) return "\n".join(lines) -def _generated_docs(data_path: Path, docs_path: Path) -> tuple[GeneratedDoc, ...]: - data = load_benchmark_data(data_path) +def _generated_docs(data_path: Path, docs_path: Path, notes_path: Path | None) -> tuple[GeneratedDoc, ...]: + data = load_benchmark_data(data_path, notes_path=notes_path) return (GeneratedDoc(docs_path, render_release_benchmark_markdown(data).rstrip() + "\n"),) @@ -594,10 +737,11 @@ def build_docs( *, check: bool, data_path: Path = DATA_PATH, + notes_path: Path | None = NOTES_PATH, docs_path: Path = DOCS_PATH, ) -> int: """Generate or check release benchmark documentation outputs.""" - docs = _generated_docs(data_path, docs_path) + docs = _generated_docs(data_path, docs_path, notes_path) if check: if not (out_of_date := tuple(doc.path for doc in docs if not _doc_is_current(doc))): print("Release benchmark docs are up to date.") @@ -618,6 +762,7 @@ def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Build release benchmark documentation") parser.add_argument("--check", action="store_true", help="Check whether generated benchmark docs are up to date") parser.add_argument("--data", type=Path, default=DATA_PATH, help="Benchmark JSON data path") + parser.add_argument("--notes", type=Path, default=NOTES_PATH, help="Benchmark notes JSON data path") parser.add_argument("--docs", type=Path, default=DOCS_PATH, help="Markdown output path") return parser.parse_args() @@ -625,7 +770,7 @@ def parse_args() -> argparse.Namespace: def main() -> int: """Script entrypoint.""" args = parse_args() - return build_docs(check=args.check, data_path=args.data, docs_path=args.docs) + return build_docs(check=args.check, data_path=args.data, notes_path=args.notes, docs_path=args.docs) if __name__ == "__main__": diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index ba3c65202..daba367c3 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -10,13 +10,14 @@ This page tracks datamodel-code-generator release benchmark results collected on ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. === "Small / JSON Schema" + Loading benchmark chart... @@ -26,6 +27,7 @@ Each chart plots median generation time by release version for one benchmark sce + Loading benchmark chart... @@ -35,10 +37,17 @@ Each chart plots median generation time by release version for one benchmark sce + Loading benchmark chart... +## Benchmark Notes + +Version markers in the charts and historical tables point to these benchmark interpretation notes. + +- `0.59.0` (Large / OpenAPI): Fixture note for a benchmark step change. This note verifies that chart and table markers render from external note data. + ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. @@ -78,7 +87,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" @@ -98,4 +107,4 @@ Rows are release versions. Formatter cells show median generation time; non-defa | Version | Default | Built-in | Ruff | | --- | --- | --- | --- | | 0.58.0 | - | 980ms | - | - | 0.59.0 | - | 881ms | Unsupported: formatter target is unavailable in this release | + | 0.59.0 * | - | 881ms | Unsupported: formatter target is unavailable in this release | diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index e9f54bbe1..d10f15ed9 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -8,13 +8,14 @@ This page tracks datamodel-code-generator release benchmark results collected on ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. +Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. === "Small / JSON Schema" + Loading benchmark chart... @@ -24,6 +25,7 @@ Each chart plots median generation time by release version for one benchmark sce + Loading benchmark chart... @@ -33,10 +35,17 @@ Each chart plots median generation time by release version for one benchmark sce + Loading benchmark chart... +## Benchmark Notes + +Version markers in the charts and historical tables point to these benchmark interpretation notes. + +- `0.59.0` (Large / OpenAPI): Fixture note for a benchmark step change. This note verifies that chart and table markers render from external note data. + ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. @@ -76,7 +85,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. +Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" @@ -96,4 +105,4 @@ Rows are release versions. Formatter cells show median generation time; non-defa | Version | Default | Built-in | Ruff | | --- | --- | --- | --- | | 0.58.0 | - | 980ms | - | - | 0.59.0 | - | 881ms | Unsupported: formatter target is unavailable in this release | + | 0.59.0 * | - | 881ms | Unsupported: formatter target is unavailable in this release | diff --git a/tests/data/release_benchmarks/notes.json b/tests/data/release_benchmarks/notes.json new file mode 100644 index 000000000..05f83139d --- /dev/null +++ b/tests/data/release_benchmarks/notes.json @@ -0,0 +1,11 @@ +{ + "notes": [ + { + "version": "0.59.0", + "input_type": "openapi", + "case": "large", + "summary": "Fixture note for a benchmark step change.", + "details": "This note verifies that chart and table markers render from external note data." + } + ] +} diff --git a/tests/test_build_release_benchmark_docs_script.py b/tests/test_build_release_benchmark_docs_script.py index 1e8232cda..fefe61fe3 100644 --- a/tests/test_build_release_benchmark_docs_script.py +++ b/tests/test_build_release_benchmark_docs_script.py @@ -16,6 +16,7 @@ SCRIPT = ROOT / "scripts" / "build_release_benchmark_docs.py" FIXTURE_DATA = ROOT / "tests" / "data" / "release_benchmarks" / "sample.json" FIXTURE_DIR = ROOT / "tests" / "data" / "release_benchmarks" +FIXTURE_NOTES = FIXTURE_DIR / "notes.json" EXPECTED_RELEASE_BENCHMARK_DOCS_PATH = ROOT / "tests" / "data" / "expected" / "release_benchmark_docs" @@ -56,7 +57,7 @@ def test_build_release_benchmark_docs_check_is_up_to_date() -> None: def test_release_benchmark_renderers_use_fixture_data() -> None: """Render Markdown from an external benchmark data fixture.""" - data = build_release_benchmark_docs.load_benchmark_data(FIXTURE_DATA) + data = build_release_benchmark_docs.load_benchmark_data(FIXTURE_DATA, notes_path=FIXTURE_NOTES) assert_output( "\n--- markdown ---\n" + build_release_benchmark_docs.render_release_benchmark_markdown(data), @@ -73,6 +74,8 @@ def test_release_benchmark_docs_cli_writes_expected_outputs(tmp_path: Path) -> N str(SCRIPT), "--data", str(FIXTURE_DATA), + "--notes", + str(FIXTURE_NOTES), "--docs", str(docs_path), ], From 25a869e8ece073e0afed7931808205377c434f1b Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 03:27:11 +0900 Subject: [PATCH 05/19] Fix benchmark note scope fallback --- scripts/build_release_benchmark_docs.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 3dc9cadaf..423f30ee2 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -547,6 +547,8 @@ def _note_scope_label(note: BenchmarkNote) -> str: return case_name.title() case input_type, case_name: return _scenario_label(input_type, case_name) + case _: + return "" def _render_benchmark_notes(data: BenchmarkData) -> str: From 0460d41a899726fd72a1a27c3186bf06efbe001d Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 03:47:12 +0900 Subject: [PATCH 06/19] Update release benchmark docs --- docs/assets/benchmarks/release-benchmarks.js | 47 +- docs/data/release-benchmarks.json | 257 +++++++++- docs/llms-full.txt | 454 +++++++++--------- docs/performance-benchmarks.md | 454 +++++++++--------- scripts/build_release_benchmark_docs.py | 48 +- scripts/merge_release_benchmarks.py | 15 + .../merge_release_benchmarks_cli_outputs.txt | 8 +- .../release_benchmark_cli_outputs.txt | 24 +- .../release_benchmark_rendered.txt | 24 +- tests/data/release_benchmarks/sample.json | 6 +- 10 files changed, 840 insertions(+), 497 deletions(-) diff --git a/docs/assets/benchmarks/release-benchmarks.js b/docs/assets/benchmarks/release-benchmarks.js index 34ddea538..838761829 100644 --- a/docs/assets/benchmarks/release-benchmarks.js +++ b/docs/assets/benchmarks/release-benchmarks.js @@ -79,6 +79,39 @@ return targetMin + ((value - sourceMin) / (sourceMax - sourceMin)) * (targetMax - targetMin); } + function maxVersionLabelWidth(context, versions) { + if (versions.length === 0) { + return 0; + } + return Math.max(...versions.map((version) => context.measureText(version).width)); + } + + function versionTickIndexes(context, versions, plotWidth) { + if (versions.length <= 1) { + return versions.length === 1 ? [0] : []; + } + const labelWidth = maxVersionLabelWidth(context, versions); + const minimumSpacing = Math.max(44, Math.ceil(labelWidth) + 16); + const minimumIndexGap = Math.max( + 1, + Math.ceil((minimumSpacing / Math.max(plotWidth, 1)) * (versions.length - 1)), + ); + const indexes = []; + for (let index = 0; index < versions.length; index += minimumIndexGap) { + indexes.push(index); + } + + const lastIndex = versions.length - 1; + if (indexes[indexes.length - 1] === lastIndex) { + return indexes; + } + if (lastIndex - indexes[indexes.length - 1] < minimumIndexGap && indexes.length > 1) { + indexes.pop(); + } + indexes.push(lastIndex); + return indexes; + } + function cssColor(element, name, fallback) { const value = getComputedStyle(element).getPropertyValue(name).trim(); return value || fallback; @@ -205,17 +238,18 @@ const muted = cssColor(container, "--md-default-fg-color--light", "#6b7280"); const grid = cssColor(container, "--md-default-fg-color--lightest", "#d1d5db"); const noteColor = cssColor(container, "--md-accent-fg-color", "#dc2626"); + context.font = "12px system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"; + const horizontalLabelPadding = Math.ceil(maxVersionLabelWidth(context, versions) / 2) + 8; const plot = { - left: 58, + left: Math.max(58, horizontalLabelPadding), top: 38, - right: width - 18, + right: width - Math.max(18, horizontalLabelPadding), bottom: height - 58, }; const maxMs = Math.max(...okEntries.map((entry) => entry.median_ms || 0)); const yMax = maxMs > 0 ? maxMs * 1.15 : 1; const points = []; - context.font = "12px system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"; context.fillStyle = foreground; context.fillText(`${caseName[0].toUpperCase()}${caseName.slice(1)} / ${inputLabel(inputType)}`, plot.left, 20); @@ -233,12 +267,9 @@ context.fillText(formatMs(value), plot.left - 10, y + 4); } - const tickStep = Math.max(1, Math.round(versions.length / 8)); context.textAlign = "center"; - versions.forEach((version, index) => { - if (index % tickStep !== 0 && index !== versions.length - 1) { - return; - } + versionTickIndexes(context, versions, plot.right - plot.left).forEach((index) => { + const version = versions[index]; const x = scale(index, 0, Math.max(versions.length - 1, 1), plot.left, plot.right); context.strokeStyle = grid; context.beginPath(); diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json index 30a24ae84..74974b52f 100644 --- a/docs/data/release-benchmarks.json +++ b/docs/data/release-benchmarks.json @@ -1,17 +1,17 @@ { "schema_version": 1, "metadata": { - "generated_at": "2026-06-21T16:47:19Z", + "generated_at": "2026-06-21T18:25:22Z", "workflow": "Release Benchmarks", - "workflow_run_id": "27909913146", - "collector_sha": "85e13401db79e0058d53e2b20864bbe76917177d", + "workflow_run_id": "27913380074", + "collector_sha": "8c910c915d9c9ed5799d79fd904d44fc6c589501", "os": "ubuntu-24.04", "python_version": "3.14.2", - "runs_per_case": "3", + "runs_per_case": "mixed", "warmups_per_case": "1", "selection_strategy": "clickpy_downloads_with_compatibility_backfill", "selection_window_days": "365", - "selected_versions": "0.17.2,0.25.0,0.25.2,0.25.4,0.25.6,0.25.7,0.25.9,0.26.1,0.26.3,0.26.4,0.26.5,0.27.0,0.27.1,0.27.2,0.27.3,0.28.0,0.28.1,0.28.2,0.28.3,0.28.4,0.28.5,0.29.0,0.30.0,0.30.1,0.30.2,0.31.0,0.31.1,0.31.2,0.32.0,0.33.0,0.34.0,0.35.0,0.36.0,0.39.0,0.42.0,0.42.2,0.43.1,0.45.0,0.52.2,0.53.0,0.54.0,0.54.1,0.55.0,0.56.0,0.56.1,0.57.0,0.58.0,0.59.0,0.64.0,0.64.1", + "selected_versions": "0.17.2,0.25.0,0.25.2,0.25.4,0.25.6,0.25.7,0.25.9,0.26.1,0.26.3,0.26.4,0.26.5,0.27.0,0.27.1,0.27.2,0.27.3,0.28.0,0.28.1,0.28.2,0.28.3,0.28.4,0.28.5,0.29.0,0.30.0,0.30.1,0.30.2,0.31.0,0.31.1,0.31.2,0.32.0,0.33.0,0.34.0,0.35.0,0.36.0,0.39.0,0.42.0,0.42.2,0.43.1,0.45.0,0.52.2,0.53.0,0.54.0,0.54.1,0.55.0,0.56.0,0.56.1,0.57.0,0.58.0,0.59.0,0.64.0,0.64.1,0.65.0", "download_source": "clickpy", "download_window_days": "365", "download_versions": "160", @@ -24,7 +24,60 @@ "pypistats_timeseries_downloads": "", "compatibility_backfill": "Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing.", "compatibility_backfill_workflow_run_id": "27910916903", - "compatibility_backfill_python_version": "3.13.14" + "compatibility_backfill_python_version": "3.13.14", + "release_dates": { + "0.17.2": "2023-03-31T15:26:07Z", + "0.25.0": "2023-11-25T07:17:56Z", + "0.25.2": "2023-12-21T18:12:08Z", + "0.25.4": "2024-02-13T18:10:14Z", + "0.25.6": "2024-04-25T17:06:23Z", + "0.25.7": "2024-06-11T17:16:13Z", + "0.25.9": "2024-08-07T03:11:05Z", + "0.26.1": "2024-09-27T09:04:18Z", + "0.26.3": "2024-11-10T16:42:42Z", + "0.26.4": "2024-12-15T17:26:28Z", + "0.26.5": "2025-01-14T12:02:07Z", + "0.27.0": "2025-02-06T16:13:41Z", + "0.27.1": "2025-02-06T17:11:40Z", + "0.27.2": "2025-02-07T13:08:39Z", + "0.27.3": "2025-02-11T18:12:25Z", + "0.28.0": "2025-02-14T16:17:44Z", + "0.28.1": "2025-02-15T02:52:53Z", + "0.28.2": "2025-02-27T18:00:52Z", + "0.28.3": "2025-03-10T18:31:14Z", + "0.28.4": "2025-03-11T17:23:02Z", + "0.28.5": "2025-03-24T17:36:33Z", + "0.29.0": "2025-04-17T15:06:27Z", + "0.30.0": "2025-04-17T15:24:55Z", + "0.30.1": "2025-04-28T13:58:36Z", + "0.30.2": "2025-06-07T02:42:12Z", + "0.31.0": "2025-06-12T16:20:58Z", + "0.31.1": "2025-06-17T15:24:13Z", + "0.31.2": "2025-06-22T17:40:56Z", + "0.32.0": "2025-07-25T14:12:06Z", + "0.33.0": "2025-08-14T13:50:36Z", + "0.34.0": "2025-09-28T06:36:41Z", + "0.35.0": "2025-10-09T19:26:49Z", + "0.36.0": "2025-11-26T17:14:08Z", + "0.39.0": "2025-12-02T19:29:58Z", + "0.42.0": "2025-12-08T02:57:49Z", + "0.42.2": "2025-12-08T21:04:54Z", + "0.43.1": "2025-12-12T07:03:28Z", + "0.45.0": "2025-12-19T00:13:13Z", + "0.52.2": "2026-01-05T17:25:50Z", + "0.53.0": "2026-01-12T18:14:05Z", + "0.54.0": "2026-02-14T16:19:05Z", + "0.54.1": "2026-03-04T04:15:02Z", + "0.55.0": "2026-03-10T20:41:15Z", + "0.56.0": "2026-04-04T09:46:19Z", + "0.56.1": "2026-04-16T17:09:53Z", + "0.57.0": "2026-05-07T16:21:55Z", + "0.58.0": "2026-05-25T03:23:53Z", + "0.59.0": "2026-05-29T15:47:55Z", + "0.64.0": "2026-06-14T17:24:50Z", + "0.64.1": "2026-06-19T17:19:50Z", + "0.65.0": "2026-06-21T18:21:06Z" + } }, "entries": [ { @@ -9626,6 +9679,198 @@ "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 1192.667, + "min_ms": 1148.824, + "max_ms": 1254.876, + "stdev_ms": 41.449, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 7, + "median_ms": 3203.607, + "min_ms": 2994.876, + "max_ms": 3407.473, + "stdev_ms": 145.379, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 7, + "median_ms": 1144.282, + "min_ms": 1114.974, + "max_ms": 1179.412, + "stdev_ms": 19.959, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 7, + "median_ms": 396.616, + "min_ms": 381.756, + "max_ms": 406.122, + "stdev_ms": 9.829, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 7, + "median_ms": 514.99, + "min_ms": 502.523, + "max_ms": 566.425, + "stdev_ms": 21.33, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 7, + "median_ms": 415.708, + "min_ms": 396.458, + "max_ms": 432.789, + "stdev_ms": 11.615, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 1229.533, + "min_ms": 1204.848, + "max_ms": 1254.55, + "stdev_ms": 17.548, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 7, + "median_ms": 2969.411, + "min_ms": 2768.702, + "max_ms": 3056.179, + "stdev_ms": 102.039, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 7, + "median_ms": 1215.464, + "min_ms": 1158.982, + "max_ms": 1229.668, + "stdev_ms": 23.321, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 7, + "median_ms": 439.356, + "min_ms": 432.132, + "max_ms": 443.916, + "stdev_ms": 4.673, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 7, + "median_ms": 580.627, + "min_ms": 560.498, + "max_ms": 615.963, + "stdev_ms": 20.151, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "0.65.0", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 7, + "median_ms": 480.955, + "min_ms": 447.455, + "max_ms": 504.082, + "stdev_ms": 17.282, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" } ] } diff --git a/docs/llms-full.txt b/docs/llms-full.txt index f7cff3194..04e5fe187 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34980,13 +34980,13 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-21T16:47:19Z` +- Generated at: `2026-06-21T18:25:22Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` -- Benchmark runs per case: `3` +- Benchmark runs per case: `mixed` - Version selection: `clickpy_downloads_with_compatibility_backfill` -- Selected versions: `50` +- Selected versions: `51` - Download source: `clickpy` - Download window: `365` days - Downloads in window: `117,300,797` @@ -34996,253 +34996,257 @@ Version markers in the charts and historical tables point to these benchmark int Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. -### 0.64.1 +### 0.65.0 === "Small" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 561ms | baseline | 551ms-568ms | OK | - | JSON Schema | Built-in | 420ms | 1.33x faster | 416ms-433ms | OK | - | JSON Schema | Ruff | 430ms | 1.30x faster | 424ms-446ms | OK | - | OpenAPI | Default | 2.30s | baseline | 2.29s-2.31s | OK | - | OpenAPI | Built-in | 2.28s | 1.01x faster | 2.20s-2.39s | OK | - | OpenAPI | Ruff | 2.17s | 1.06x faster | 2.16s-2.18s | OK | + | JSON Schema | Default | 515ms | baseline | 503ms-566ms | OK | + | JSON Schema | Built-in | 397ms | 1.30x faster | 382ms-406ms | OK | + | JSON Schema | Ruff | 416ms | 1.24x faster | 396ms-433ms | OK | + | OpenAPI | Default | 581ms | baseline | 560ms-616ms | OK | + | OpenAPI | Built-in | 439ms | 1.32x faster | 432ms-444ms | OK | + | OpenAPI | Ruff | 481ms | 1.21x faster | 447ms-504ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.78s | baseline | 3.75s-3.79s | OK | - | JSON Schema | Built-in | 1.51s | 2.50x faster | 1.51s-1.52s | OK | - | JSON Schema | Ruff | 1.53s | 2.48x faster | 1.45s-1.53s | OK | - | OpenAPI | Default | 3.30s | baseline | 3.29s-3.32s | OK | - | OpenAPI | Built-in | 1.45s | 2.28x faster | 1.43s-1.45s | OK | - | OpenAPI | Ruff | 1.39s | 2.38x faster | 1.37s-1.39s | OK | + | JSON Schema | Default | 3.20s | baseline | 2.99s-3.41s | OK | + | JSON Schema | Built-in | 1.19s | 2.69x faster | 1.15s-1.25s | OK | + | JSON Schema | Ruff | 1.14s | 2.80x faster | 1.11s-1.18s | OK | + | OpenAPI | Default | 2.97s | baseline | 2.77s-3.06s | OK | + | OpenAPI | Built-in | 1.23s | 2.42x faster | 1.20s-1.25s | OK | + | OpenAPI | Ruff | 1.22s | 2.44x faster | 1.16s-1.23s | OK | ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 387ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 418ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 396ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 413ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 396ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 404ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 423ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 401ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 405ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 405ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 488ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 392ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 389ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 432ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 400ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 425ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 405ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 419ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 399ms | Unsupported: unavailable | Failed: command | - | 0.28.5 | 435ms | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 2.07s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 2.13s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 1.59s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 2.23s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 2.00s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 2.09s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 2.05s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 2.02s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 2.23s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 2.06s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 2.10s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 1.66s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 413ms | Unsupported: unavailable | Failed: command | - | 0.42.0 | 413ms | Unsupported: unavailable | Failed: command | - | 0.42.2 | 454ms | Unsupported: unavailable | Failed: command | - | 0.43.1 | 402ms | Unsupported: unavailable | Failed: command | - | 0.45.0 | 375ms | Unsupported: unavailable | Failed: command | - | 0.52.2 | 498ms | Unsupported: unavailable | 470ms (1.06x faster) | - | 0.53.0 | 485ms | Unsupported: unavailable | 450ms (1.08x faster) | - | 0.54.0 | 507ms | Unsupported: unavailable | 473ms (1.07x faster) | - | 0.54.1 | 481ms | Unsupported: unavailable | 454ms (1.06x faster) | - | 0.55.0 | 505ms | Unsupported: unavailable | 465ms (1.09x faster) | - | 0.56.0 | 495ms | Unsupported: unavailable | 476ms (1.04x faster) | - | 0.56.1 | 432ms | Unsupported: unavailable | 408ms (1.06x faster) | - | 0.57.0 | 492ms | Unsupported: unavailable | 463ms (1.06x faster) | - | 0.58.0 | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | - | 0.59.0 | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | - | 0.64.0 | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | - | 0.64.1 | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | + | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 492ms | Unsupported: unavailable | 463ms (1.06x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 432ms | Unsupported: unavailable | 408ms (1.06x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 495ms | Unsupported: unavailable | 476ms (1.04x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 505ms | Unsupported: unavailable | 465ms (1.09x faster) | + | 0.54.1 | 2026-03-04 04:15 UTC | 481ms | Unsupported: unavailable | 454ms (1.06x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 507ms | Unsupported: unavailable | 473ms (1.07x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 485ms | Unsupported: unavailable | 450ms (1.08x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 498ms | Unsupported: unavailable | 470ms (1.06x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 375ms | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 402ms | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 454ms | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 413ms | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 413ms | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 1.66s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 2.10s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 2.06s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 2.23s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 2.02s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 2.05s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 2.09s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 2.00s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 2.23s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 1.59s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 2.13s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 2.07s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 435ms | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 399ms | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 419ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 400ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 432ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 389ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 392ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 488ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 401ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 423ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 404ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 413ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 418ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 387ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Small / OpenAPI" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 425ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 460ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 437ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 447ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 428ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 440ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 495ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 434ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 441ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 439ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 491ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 442ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 433ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 475ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 442ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 456ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 449ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 455ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 426ms | Unsupported: unavailable | Failed: command | - | 0.28.5 | 479ms | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 2.11s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 2.22s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 1.63s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 2.33s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 2.06s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 2.12s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 2.04s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 2.05s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 2.24s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 2.10s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 2.17s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 1.69s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 2.19s | Unsupported: unavailable | Failed: command | - | 0.42.0 | 2.21s | Unsupported: unavailable | Failed: command | - | 0.42.2 | 2.29s | Unsupported: unavailable | Failed: command | - | 0.43.1 | 2.09s | Unsupported: unavailable | Failed: command | - | 0.45.0 | 1.89s | Unsupported: unavailable | Failed: command | - | 0.52.2 | 2.30s | Unsupported: unavailable | 2.26s (1.02x faster) | - | 0.53.0 | 2.24s | Unsupported: unavailable | 2.20s (1.01x faster) | - | 0.54.0 | 2.36s | Unsupported: unavailable | 2.32s (1.02x faster) | - | 0.54.1 | 2.21s | Unsupported: unavailable | 2.17s (1.02x faster) | - | 0.55.0 | 2.27s | Unsupported: unavailable | 2.27s (same speed) | - | 0.56.0 | 2.45s | Unsupported: unavailable | 2.36s (1.04x faster) | - | 0.56.1 | 2.05s | Unsupported: unavailable | 2.02s (1.01x faster) | - | 0.57.0 | 2.24s | Unsupported: unavailable | 2.22s (1.01x faster) | - | 0.58.0 | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | - | 0.59.0 | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | - | 0.64.0 | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | - | 0.64.1 * | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 2.24s | Unsupported: unavailable | 2.22s (1.01x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 2.05s | Unsupported: unavailable | 2.02s (1.01x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 2.45s | Unsupported: unavailable | 2.36s (1.04x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 2.27s | Unsupported: unavailable | 2.27s (same speed) | + | 0.54.1 | 2026-03-04 04:15 UTC | 2.21s | Unsupported: unavailable | 2.17s (1.02x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 2.36s | Unsupported: unavailable | 2.32s (1.02x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 2.24s | Unsupported: unavailable | 2.20s (1.01x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 2.30s | Unsupported: unavailable | 2.26s (1.02x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 1.89s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 2.09s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 2.29s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 2.21s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 2.19s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 1.69s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 2.17s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 2.10s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 2.24s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 2.05s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 2.04s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 2.12s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 2.06s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 2.33s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 1.63s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 2.22s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 2.11s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 479ms | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 426ms | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 455ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 449ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 456ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 475ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 433ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 491ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 439ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 441ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 434ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 495ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 440ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 428ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 447ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 437ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 460ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 3.44s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 3.49s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 3.42s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 3.17s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 3.76s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 3.87s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 3.51s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 3.39s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 3.79s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 3.24s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 3.36s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 3.16s | Unsupported: unavailable | Failed: command | - | 0.28.5 | 3.93s | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 5.15s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 5.81s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 4.06s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 6.03s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 5.40s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 5.36s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 5.25s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 5.51s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 5.91s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 5.17s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 5.06s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 4.19s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 3.42s | Unsupported: unavailable | Failed: command | - | 0.42.0 | 3.47s | Unsupported: unavailable | Failed: command | - | 0.42.2 | 3.97s | Unsupported: unavailable | Failed: command | - | 0.43.1 | 3.85s | Unsupported: unavailable | Failed: command | - | 0.45.0 | 3.45s | Unsupported: unavailable | Failed: command | - | 0.52.2 | 3.80s | Unsupported: unavailable | 1.55s (2.45x faster) | - | 0.53.0 | 3.64s | Unsupported: unavailable | 1.53s (2.38x faster) | - | 0.54.0 | 3.80s | Unsupported: unavailable | 1.63s (2.34x faster) | - | 0.54.1 | 3.60s | Unsupported: unavailable | 1.55s (2.32x faster) | - | 0.55.0 | 3.72s | Unsupported: unavailable | 1.57s (2.36x faster) | - | 0.56.0 | 3.73s | Unsupported: unavailable | 1.50s (2.49x faster) | - | 0.56.1 | 3.16s | Unsupported: unavailable | 1.36s (2.32x faster) | - | 0.57.0 | 3.72s | Unsupported: unavailable | 1.58s (2.35x faster) | - | 0.58.0 | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | - | 0.59.0 | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | - | 0.64.0 | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | - | 0.64.1 | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | + | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 3.72s | Unsupported: unavailable | 1.58s (2.35x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 3.16s | Unsupported: unavailable | 1.36s (2.32x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 3.73s | Unsupported: unavailable | 1.50s (2.49x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 3.72s | Unsupported: unavailable | 1.57s (2.36x faster) | + | 0.54.1 | 2026-03-04 04:15 UTC | 3.60s | Unsupported: unavailable | 1.55s (2.32x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 3.80s | Unsupported: unavailable | 1.63s (2.34x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 3.64s | Unsupported: unavailable | 1.53s (2.38x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 3.80s | Unsupported: unavailable | 1.55s (2.45x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 3.45s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 3.85s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 3.97s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 3.47s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 3.42s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 4.19s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 5.06s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 5.17s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 5.91s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 5.51s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 5.25s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 5.36s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 5.40s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 6.03s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 4.06s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 5.81s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 5.15s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 3.93s | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 3.16s | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 3.36s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 3.24s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 3.79s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 3.39s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 3.51s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 3.87s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 3.76s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 3.17s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 3.42s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 3.49s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 3.44s | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / OpenAPI" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 3.19s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 3.10s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 2.92s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 3.31s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 3.53s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 3.04s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 3.01s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 3.21s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 3.47s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 3.59s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 3.00s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 3.48s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 3.40s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 2.98s | Unsupported: unavailable | Failed: command | - | 0.28.5 | 3.57s | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 4.72s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 5.36s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 3.69s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 5.50s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 5.07s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 4.82s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 4.81s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 4.90s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 5.42s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 4.74s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 4.60s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 3.68s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 3.13s | Unsupported: unavailable | Failed: command | - | 0.42.0 | 3.29s | Unsupported: unavailable | Failed: command | - | 0.42.2 | 3.48s | Unsupported: unavailable | Failed: command | - | 0.43.1 | 3.23s | Unsupported: unavailable | Failed: command | - | 0.45.0 | 2.81s | Unsupported: unavailable | Failed: command | - | 0.52.2 | 3.45s | Unsupported: unavailable | 1.52s (2.27x faster) | - | 0.53.0 | 3.31s | Unsupported: unavailable | 1.48s (2.24x faster) | - | 0.54.0 | 3.43s | Unsupported: unavailable | 1.55s (2.21x faster) | - | 0.54.1 | 3.33s | Unsupported: unavailable | 1.48s (2.26x faster) | - | 0.55.0 | 3.53s | Unsupported: unavailable | 1.56s (2.27x faster) | - | 0.56.0 | 3.37s | Unsupported: unavailable | 1.50s (2.25x faster) | - | 0.56.1 | 2.93s | Unsupported: unavailable | 1.35s (2.16x faster) | - | 0.57.0 | 3.40s | Unsupported: unavailable | 1.54s (2.20x faster) | - | 0.58.0 | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | - | 0.59.0 | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | - | 0.64.0 | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | - | 0.64.1 | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | + | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 3.40s | Unsupported: unavailable | 1.54s (2.20x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 2.93s | Unsupported: unavailable | 1.35s (2.16x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 3.37s | Unsupported: unavailable | 1.50s (2.25x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 3.53s | Unsupported: unavailable | 1.56s (2.27x faster) | + | 0.54.1 | 2026-03-04 04:15 UTC | 3.33s | Unsupported: unavailable | 1.48s (2.26x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 3.43s | Unsupported: unavailable | 1.55s (2.21x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 3.31s | Unsupported: unavailable | 1.48s (2.24x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 3.45s | Unsupported: unavailable | 1.52s (2.27x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 2.81s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 3.23s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 3.48s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 3.29s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 3.13s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 3.68s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 4.60s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 4.74s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 5.42s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 4.90s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 4.81s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 4.82s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 5.07s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 5.50s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 3.69s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 5.36s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 4.72s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 3.57s | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 2.98s | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 3.40s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 3.48s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 3.00s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 3.59s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 3.47s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 3.21s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 3.01s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 3.04s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 3.53s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 3.31s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 2.92s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 3.10s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 3.19s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | --- diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 1f50d6f65..df14377f8 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -68,13 +68,13 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-21T16:47:19Z` +- Generated at: `2026-06-21T18:25:22Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` -- Benchmark runs per case: `3` +- Benchmark runs per case: `mixed` - Version selection: `clickpy_downloads_with_compatibility_backfill` -- Selected versions: `50` +- Selected versions: `51` - Download source: `clickpy` - Download window: `365` days - Downloads in window: `117,300,797` @@ -84,250 +84,254 @@ Version markers in the charts and historical tables point to these benchmark int Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. -### 0.64.1 +### 0.65.0 === "Small" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 561ms | baseline | 551ms-568ms | OK | - | JSON Schema | Built-in | 420ms | 1.33x faster | 416ms-433ms | OK | - | JSON Schema | Ruff | 430ms | 1.30x faster | 424ms-446ms | OK | - | OpenAPI | Default | 2.30s | baseline | 2.29s-2.31s | OK | - | OpenAPI | Built-in | 2.28s | 1.01x faster | 2.20s-2.39s | OK | - | OpenAPI | Ruff | 2.17s | 1.06x faster | 2.16s-2.18s | OK | + | JSON Schema | Default | 515ms | baseline | 503ms-566ms | OK | + | JSON Schema | Built-in | 397ms | 1.30x faster | 382ms-406ms | OK | + | JSON Schema | Ruff | 416ms | 1.24x faster | 396ms-433ms | OK | + | OpenAPI | Default | 581ms | baseline | 560ms-616ms | OK | + | OpenAPI | Built-in | 439ms | 1.32x faster | 432ms-444ms | OK | + | OpenAPI | Ruff | 481ms | 1.21x faster | 447ms-504ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.78s | baseline | 3.75s-3.79s | OK | - | JSON Schema | Built-in | 1.51s | 2.50x faster | 1.51s-1.52s | OK | - | JSON Schema | Ruff | 1.53s | 2.48x faster | 1.45s-1.53s | OK | - | OpenAPI | Default | 3.30s | baseline | 3.29s-3.32s | OK | - | OpenAPI | Built-in | 1.45s | 2.28x faster | 1.43s-1.45s | OK | - | OpenAPI | Ruff | 1.39s | 2.38x faster | 1.37s-1.39s | OK | + | JSON Schema | Default | 3.20s | baseline | 2.99s-3.41s | OK | + | JSON Schema | Built-in | 1.19s | 2.69x faster | 1.15s-1.25s | OK | + | JSON Schema | Ruff | 1.14s | 2.80x faster | 1.11s-1.18s | OK | + | OpenAPI | Default | 2.97s | baseline | 2.77s-3.06s | OK | + | OpenAPI | Built-in | 1.23s | 2.42x faster | 1.20s-1.25s | OK | + | OpenAPI | Ruff | 1.22s | 2.44x faster | 1.16s-1.23s | OK | ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 387ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 418ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 396ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 413ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 396ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 404ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 423ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 401ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 405ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 405ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 488ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 392ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 389ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 432ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 400ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 425ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 405ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 419ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 399ms | Unsupported: unavailable | Failed: command | - | 0.28.5 | 435ms | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 2.07s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 2.13s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 1.59s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 2.23s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 2.00s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 2.09s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 2.05s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 2.02s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 2.23s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 2.06s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 2.10s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 1.66s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 413ms | Unsupported: unavailable | Failed: command | - | 0.42.0 | 413ms | Unsupported: unavailable | Failed: command | - | 0.42.2 | 454ms | Unsupported: unavailable | Failed: command | - | 0.43.1 | 402ms | Unsupported: unavailable | Failed: command | - | 0.45.0 | 375ms | Unsupported: unavailable | Failed: command | - | 0.52.2 | 498ms | Unsupported: unavailable | 470ms (1.06x faster) | - | 0.53.0 | 485ms | Unsupported: unavailable | 450ms (1.08x faster) | - | 0.54.0 | 507ms | Unsupported: unavailable | 473ms (1.07x faster) | - | 0.54.1 | 481ms | Unsupported: unavailable | 454ms (1.06x faster) | - | 0.55.0 | 505ms | Unsupported: unavailable | 465ms (1.09x faster) | - | 0.56.0 | 495ms | Unsupported: unavailable | 476ms (1.04x faster) | - | 0.56.1 | 432ms | Unsupported: unavailable | 408ms (1.06x faster) | - | 0.57.0 | 492ms | Unsupported: unavailable | 463ms (1.06x faster) | - | 0.58.0 | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | - | 0.59.0 | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | - | 0.64.0 | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | - | 0.64.1 | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | + | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 492ms | Unsupported: unavailable | 463ms (1.06x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 432ms | Unsupported: unavailable | 408ms (1.06x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 495ms | Unsupported: unavailable | 476ms (1.04x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 505ms | Unsupported: unavailable | 465ms (1.09x faster) | + | 0.54.1 | 2026-03-04 04:15 UTC | 481ms | Unsupported: unavailable | 454ms (1.06x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 507ms | Unsupported: unavailable | 473ms (1.07x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 485ms | Unsupported: unavailable | 450ms (1.08x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 498ms | Unsupported: unavailable | 470ms (1.06x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 375ms | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 402ms | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 454ms | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 413ms | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 413ms | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 1.66s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 2.10s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 2.06s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 2.23s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 2.02s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 2.05s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 2.09s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 2.00s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 2.23s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 1.59s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 2.13s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 2.07s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 435ms | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 399ms | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 419ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 400ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 432ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 389ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 392ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 488ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 405ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 401ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 423ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 404ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 413ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 396ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 418ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 387ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Small / OpenAPI" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 425ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 460ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 437ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 447ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 428ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 440ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 495ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 434ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 441ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 439ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 491ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 442ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 433ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 475ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 442ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 456ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 449ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 455ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 426ms | Unsupported: unavailable | Failed: command | - | 0.28.5 | 479ms | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 2.11s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 2.22s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 1.63s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 2.33s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 2.06s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 2.12s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 2.04s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 2.05s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 2.24s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 2.10s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 2.17s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 1.69s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 2.19s | Unsupported: unavailable | Failed: command | - | 0.42.0 | 2.21s | Unsupported: unavailable | Failed: command | - | 0.42.2 | 2.29s | Unsupported: unavailable | Failed: command | - | 0.43.1 | 2.09s | Unsupported: unavailable | Failed: command | - | 0.45.0 | 1.89s | Unsupported: unavailable | Failed: command | - | 0.52.2 | 2.30s | Unsupported: unavailable | 2.26s (1.02x faster) | - | 0.53.0 | 2.24s | Unsupported: unavailable | 2.20s (1.01x faster) | - | 0.54.0 | 2.36s | Unsupported: unavailable | 2.32s (1.02x faster) | - | 0.54.1 | 2.21s | Unsupported: unavailable | 2.17s (1.02x faster) | - | 0.55.0 | 2.27s | Unsupported: unavailable | 2.27s (same speed) | - | 0.56.0 | 2.45s | Unsupported: unavailable | 2.36s (1.04x faster) | - | 0.56.1 | 2.05s | Unsupported: unavailable | 2.02s (1.01x faster) | - | 0.57.0 | 2.24s | Unsupported: unavailable | 2.22s (1.01x faster) | - | 0.58.0 | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | - | 0.59.0 | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | - | 0.64.0 | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | - | 0.64.1 * | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 2.24s | Unsupported: unavailable | 2.22s (1.01x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 2.05s | Unsupported: unavailable | 2.02s (1.01x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 2.45s | Unsupported: unavailable | 2.36s (1.04x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 2.27s | Unsupported: unavailable | 2.27s (same speed) | + | 0.54.1 | 2026-03-04 04:15 UTC | 2.21s | Unsupported: unavailable | 2.17s (1.02x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 2.36s | Unsupported: unavailable | 2.32s (1.02x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 2.24s | Unsupported: unavailable | 2.20s (1.01x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 2.30s | Unsupported: unavailable | 2.26s (1.02x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 1.89s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 2.09s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 2.29s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 2.21s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 2.19s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 1.69s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 2.17s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 2.10s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 2.24s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 2.05s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 2.04s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 2.12s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 2.06s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 2.33s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 1.63s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 2.22s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 2.11s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 479ms | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 426ms | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 455ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 449ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 456ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 475ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 433ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 442ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 491ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 439ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 441ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 434ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 495ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 440ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 428ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 447ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 437ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 460ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 425ms | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 3.44s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 3.49s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 3.42s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 3.17s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 3.76s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 3.87s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 3.51s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 3.39s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 3.79s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 3.24s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 3.65s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 3.36s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 3.67s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 3.16s | Unsupported: unavailable | Failed: command | - | 0.28.5 | 3.93s | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 5.15s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 5.81s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 4.06s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 6.03s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 5.40s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 5.36s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 5.25s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 5.51s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 5.91s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 5.17s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 5.06s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 4.19s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 3.42s | Unsupported: unavailable | Failed: command | - | 0.42.0 | 3.47s | Unsupported: unavailable | Failed: command | - | 0.42.2 | 3.97s | Unsupported: unavailable | Failed: command | - | 0.43.1 | 3.85s | Unsupported: unavailable | Failed: command | - | 0.45.0 | 3.45s | Unsupported: unavailable | Failed: command | - | 0.52.2 | 3.80s | Unsupported: unavailable | 1.55s (2.45x faster) | - | 0.53.0 | 3.64s | Unsupported: unavailable | 1.53s (2.38x faster) | - | 0.54.0 | 3.80s | Unsupported: unavailable | 1.63s (2.34x faster) | - | 0.54.1 | 3.60s | Unsupported: unavailable | 1.55s (2.32x faster) | - | 0.55.0 | 3.72s | Unsupported: unavailable | 1.57s (2.36x faster) | - | 0.56.0 | 3.73s | Unsupported: unavailable | 1.50s (2.49x faster) | - | 0.56.1 | 3.16s | Unsupported: unavailable | 1.36s (2.32x faster) | - | 0.57.0 | 3.72s | Unsupported: unavailable | 1.58s (2.35x faster) | - | 0.58.0 | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | - | 0.59.0 | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | - | 0.64.0 | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | - | 0.64.1 | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | + | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 3.72s | Unsupported: unavailable | 1.58s (2.35x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 3.16s | Unsupported: unavailable | 1.36s (2.32x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 3.73s | Unsupported: unavailable | 1.50s (2.49x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 3.72s | Unsupported: unavailable | 1.57s (2.36x faster) | + | 0.54.1 | 2026-03-04 04:15 UTC | 3.60s | Unsupported: unavailable | 1.55s (2.32x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 3.80s | Unsupported: unavailable | 1.63s (2.34x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 3.64s | Unsupported: unavailable | 1.53s (2.38x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 3.80s | Unsupported: unavailable | 1.55s (2.45x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 3.45s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 3.85s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 3.97s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 3.47s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 3.42s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 4.19s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 5.06s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 5.17s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 5.91s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 5.51s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 5.25s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 5.36s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 5.40s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 6.03s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 4.06s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 5.81s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 5.15s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 3.93s | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 3.16s | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 3.36s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 3.24s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 3.79s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 3.39s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 3.51s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 3.65s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 3.87s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 3.76s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 3.17s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 3.42s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 3.49s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 3.67s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 3.44s | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / OpenAPI" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.17.2 | Failed: install | Failed: install | Failed: install | - | 0.25.0 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.2 | 3.28s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.4 | 3.19s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.6 | 3.10s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.7 | 2.92s | Unsupported: unavailable | Unsupported: unavailable | - | 0.25.9 | 3.31s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.1 | 3.53s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.3 | 3.04s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.4 | 3.01s | Unsupported: unavailable | Unsupported: unavailable | - | 0.26.5 | 3.21s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.0 | 3.47s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.1 | 3.29s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.27.3 | 3.59s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.0 | 3.00s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.1 | 3.48s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.2 | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.3 | 3.40s | Unsupported: unavailable | Unsupported: unavailable | - | 0.28.4 | 2.98s | Unsupported: unavailable | Failed: command | - | 0.28.5 | 3.57s | Unsupported: unavailable | Failed: command | - | 0.29.0 * | 4.72s | Unsupported: unavailable | Failed: command | - | 0.30.0 | 5.36s | Unsupported: unavailable | Failed: command | - | 0.30.1 | 3.69s | Unsupported: unavailable | Failed: command | - | 0.30.2 | 5.50s | Unsupported: unavailable | Failed: command | - | 0.31.0 | 5.07s | Unsupported: unavailable | Failed: command | - | 0.31.1 | 4.82s | Unsupported: unavailable | Failed: command | - | 0.31.2 | 4.81s | Unsupported: unavailable | Failed: command | - | 0.32.0 | 4.90s | Unsupported: unavailable | Failed: command | - | 0.33.0 | 5.42s | Unsupported: unavailable | Failed: command | - | 0.34.0 | 4.74s | Unsupported: unavailable | Failed: command | - | 0.35.0 | 4.60s | Unsupported: unavailable | Failed: command | - | 0.36.0 | 3.68s | Unsupported: unavailable | Failed: command | - | 0.39.0 | 3.13s | Unsupported: unavailable | Failed: command | - | 0.42.0 | 3.29s | Unsupported: unavailable | Failed: command | - | 0.42.2 | 3.48s | Unsupported: unavailable | Failed: command | - | 0.43.1 | 3.23s | Unsupported: unavailable | Failed: command | - | 0.45.0 | 2.81s | Unsupported: unavailable | Failed: command | - | 0.52.2 | 3.45s | Unsupported: unavailable | 1.52s (2.27x faster) | - | 0.53.0 | 3.31s | Unsupported: unavailable | 1.48s (2.24x faster) | - | 0.54.0 | 3.43s | Unsupported: unavailable | 1.55s (2.21x faster) | - | 0.54.1 | 3.33s | Unsupported: unavailable | 1.48s (2.26x faster) | - | 0.55.0 | 3.53s | Unsupported: unavailable | 1.56s (2.27x faster) | - | 0.56.0 | 3.37s | Unsupported: unavailable | 1.50s (2.25x faster) | - | 0.56.1 | 2.93s | Unsupported: unavailable | 1.35s (2.16x faster) | - | 0.57.0 | 3.40s | Unsupported: unavailable | 1.54s (2.20x faster) | - | 0.58.0 | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | - | 0.59.0 | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | - | 0.64.0 | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | - | 0.64.1 | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | + | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | + | 0.59.0 | 2026-05-29 15:47 UTC | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | + | 0.58.0 | 2026-05-25 03:23 UTC | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | + | 0.57.0 | 2026-05-07 16:21 UTC | 3.40s | Unsupported: unavailable | 1.54s (2.20x faster) | + | 0.56.1 | 2026-04-16 17:09 UTC | 2.93s | Unsupported: unavailable | 1.35s (2.16x faster) | + | 0.56.0 | 2026-04-04 09:46 UTC | 3.37s | Unsupported: unavailable | 1.50s (2.25x faster) | + | 0.55.0 | 2026-03-10 20:41 UTC | 3.53s | Unsupported: unavailable | 1.56s (2.27x faster) | + | 0.54.1 | 2026-03-04 04:15 UTC | 3.33s | Unsupported: unavailable | 1.48s (2.26x faster) | + | 0.54.0 | 2026-02-14 16:19 UTC | 3.43s | Unsupported: unavailable | 1.55s (2.21x faster) | + | 0.53.0 | 2026-01-12 18:14 UTC | 3.31s | Unsupported: unavailable | 1.48s (2.24x faster) | + | 0.52.2 | 2026-01-05 17:25 UTC | 3.45s | Unsupported: unavailable | 1.52s (2.27x faster) | + | 0.45.0 | 2025-12-19 00:13 UTC | 2.81s | Unsupported: unavailable | Failed: command | + | 0.43.1 | 2025-12-12 07:03 UTC | 3.23s | Unsupported: unavailable | Failed: command | + | 0.42.2 | 2025-12-08 21:04 UTC | 3.48s | Unsupported: unavailable | Failed: command | + | 0.42.0 | 2025-12-08 02:57 UTC | 3.29s | Unsupported: unavailable | Failed: command | + | 0.39.0 | 2025-12-02 19:29 UTC | 3.13s | Unsupported: unavailable | Failed: command | + | 0.36.0 | 2025-11-26 17:14 UTC | 3.68s | Unsupported: unavailable | Failed: command | + | 0.35.0 | 2025-10-09 19:26 UTC | 4.60s | Unsupported: unavailable | Failed: command | + | 0.34.0 | 2025-09-28 06:36 UTC | 4.74s | Unsupported: unavailable | Failed: command | + | 0.33.0 | 2025-08-14 13:50 UTC | 5.42s | Unsupported: unavailable | Failed: command | + | 0.32.0 | 2025-07-25 14:12 UTC | 4.90s | Unsupported: unavailable | Failed: command | + | 0.31.2 | 2025-06-22 17:40 UTC | 4.81s | Unsupported: unavailable | Failed: command | + | 0.31.1 | 2025-06-17 15:24 UTC | 4.82s | Unsupported: unavailable | Failed: command | + | 0.31.0 | 2025-06-12 16:20 UTC | 5.07s | Unsupported: unavailable | Failed: command | + | 0.30.2 | 2025-06-07 02:42 UTC | 5.50s | Unsupported: unavailable | Failed: command | + | 0.30.1 | 2025-04-28 13:58 UTC | 3.69s | Unsupported: unavailable | Failed: command | + | 0.30.0 | 2025-04-17 15:24 UTC | 5.36s | Unsupported: unavailable | Failed: command | + | 0.29.0 * | 2025-04-17 15:06 UTC | 4.72s | Unsupported: unavailable | Failed: command | + | 0.28.5 | 2025-03-24 17:36 UTC | 3.57s | Unsupported: unavailable | Failed: command | + | 0.28.4 | 2025-03-11 17:23 UTC | 2.98s | Unsupported: unavailable | Failed: command | + | 0.28.3 | 2025-03-10 18:31 UTC | 3.40s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.2 | 2025-02-27 18:00 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.1 | 2025-02-15 02:52 UTC | 3.48s | Unsupported: unavailable | Unsupported: unavailable | + | 0.28.0 | 2025-02-14 16:17 UTC | 3.00s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.3 | 2025-02-11 18:12 UTC | 3.59s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.2 | 2025-02-07 13:08 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.1 | 2025-02-06 17:11 UTC | 3.29s | Unsupported: unavailable | Unsupported: unavailable | + | 0.27.0 | 2025-02-06 16:13 UTC | 3.47s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.5 | 2025-01-14 12:02 UTC | 3.21s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.4 | 2024-12-15 17:26 UTC | 3.01s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.3 | 2024-11-10 16:42 UTC | 3.04s | Unsupported: unavailable | Unsupported: unavailable | + | 0.26.1 | 2024-09-27 09:04 UTC | 3.53s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.9 | 2024-08-07 03:11 UTC | 3.31s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.7 | 2024-06-11 17:16 UTC | 2.92s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.6 | 2024-04-25 17:06 UTC | 3.10s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.4 | 2024-02-13 18:10 UTC | 3.19s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.2 | 2023-12-21 18:12 UTC | 3.28s | Unsupported: unavailable | Unsupported: unavailable | + | 0.25.0 | 2023-11-25 07:17 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | + | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 423f30ee2..631c9f044 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -13,6 +13,7 @@ import re import sys from dataclasses import dataclass +from datetime import datetime, timezone from pathlib import Path from typing import Any @@ -308,6 +309,31 @@ def _latest_version(entries: tuple[BenchmarkEntry, ...]) -> str: return versions[-1] if versions else "" +def _release_dates(data: BenchmarkData) -> dict[str, str]: + if not isinstance(raw_dates := data.metadata.get("release_dates"), dict): + return {} + return { + version: uploaded_at + for version, uploaded_at in raw_dates.items() + if isinstance(version, str) and isinstance(uploaded_at, str) + } + + +def _parse_utc_datetime(value: str) -> datetime | None: + try: + return datetime.fromisoformat(value.replace("Z", "+00:00")).astimezone(timezone.utc) + except ValueError: + return None + + +def _release_date_cell(release_dates: dict[str, str], version: str) -> str: + if not (uploaded_at := release_dates.get(version, "")): + return EMPTY_CELL + if parsed := _parse_utc_datetime(uploaded_at): + return parsed.strftime("%Y-%m-%d %H:%M UTC") + return uploaded_at + + def _entries_by_scenario_and_formatter( entries: tuple[BenchmarkEntry, ...], ) -> dict[tuple[str, str], dict[str, BenchmarkEntry]]: @@ -498,27 +524,34 @@ def _render_scenario_history_table( *, input_type: str, case: str, + release_dates: dict[str, str], notes_by_version: dict[str, tuple[BenchmarkNote, ...]] | None = None, ) -> str: notes_by_version = notes_by_version or {} - headers = ("Version", *(_formatter_label(formatter) for formatter in FORMATTER_ORDER)) + headers = ("Version", "Released", *(_formatter_label(formatter) for formatter in FORMATTER_ORDER)) lines = [ "| " + " | ".join(headers) + " |", "| " + " | ".join("---" for _header in headers) + " |", ] scenario_entries = tuple(entry for entry in entries if entry.input_type == input_type and entry.case == case) - for version in sorted({entry.version for entry in scenario_entries}, key=_version_sort_key): + for version in sorted({entry.version for entry in scenario_entries}, key=_version_sort_key, reverse=True): formatter_entries = {entry.formatter: entry for entry in scenario_entries if entry.version == version} baseline = formatter_entries.get("default") values = [ _version_cell(version, notes_by_version), + _release_date_cell(release_dates, version), *(_formatter_history_cell(formatter_entries.get(formatter), baseline) for formatter in FORMATTER_ORDER), ] lines.append("| " + " | ".join(_markdown_cell(value) for value in values) + " |") return "\n".join(lines) -def _render_scenario_history_tabs(entries: tuple[BenchmarkEntry, ...], notes: tuple[BenchmarkNote, ...] = ()) -> str: +def _render_scenario_history_tabs( + entries: tuple[BenchmarkEntry, ...], + *, + release_dates: dict[str, str], + notes: tuple[BenchmarkNote, ...] = (), +) -> str: blocks: list[str] = [] for input_type, case in _scenarios(entries): blocks.extend(( @@ -529,6 +562,7 @@ def _render_scenario_history_tabs(entries: tuple[BenchmarkEntry, ...], notes: tu entries, input_type=input_type, case=case, + release_dates=release_dates, notes_by_version=_notes_by_version(notes, input_type=input_type, case=case), ) ), @@ -715,12 +749,12 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "## Historical Results", "", ( - "Rows are release versions. Formatter cells show median generation time; non-default cells include " - "the speed relative to Default when both results are available. Version cells marked with `*` have " - "benchmark notes above." + "Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter " + "cells show median generation time; non-default cells include the speed relative to Default when both " + "results are available. Version cells marked with `*` have benchmark notes above." ), "", - _render_scenario_history_tabs(data.entries, _visible_notes(data)), + _render_scenario_history_tabs(data.entries, release_dates=_release_dates(data), notes=_visible_notes(data)), "", ]) return "\n".join(lines) diff --git a/scripts/merge_release_benchmarks.py b/scripts/merge_release_benchmarks.py index fbb31f9db..3941fda7e 100644 --- a/scripts/merge_release_benchmarks.py +++ b/scripts/merge_release_benchmarks.py @@ -75,9 +75,24 @@ def _selection_metadata(selection: object) -> dict[str, object]: "pypistats_last_month": str(pypistats.get("last_month", "")), "pypistats_timeseries_days": str(pypistats.get("timeseries_days", "")), "pypistats_timeseries_downloads": str(pypistats.get("timeseries_downloads", "")), + "release_dates": _selection_release_dates(selection), } +def _selection_release_dates(selection: dict[str, object]) -> dict[str, str]: + if not isinstance(releases := selection.get("releases"), list): + return {} + release_dates: dict[str, str] = {} + for release in releases: + if ( + isinstance(release, dict) + and isinstance(version := release.get("version"), str) + and isinstance(uploaded_at := release.get("uploaded_at"), str) + ): + release_dates[version] = uploaded_at + return release_dates + + def _runner_os() -> str: return os.environ.get("OS") or os.environ.get("RUNNER_OS") or platform.platform() diff --git a/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt index ae6149785..c4a286ccc 100644 --- a/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/merge_release_benchmarks_cli_outputs.txt @@ -26,7 +26,13 @@ merged: "pypistats_last_week": "789", "pypistats_last_month": "3456", "pypistats_timeseries_days": "2", - "pypistats_timeseries_downloads": "300" + "pypistats_timeseries_downloads": "300", + "release_dates": { + "0.64.1": "2026-06-19T00:00:00Z", + "0.64.0": "2026-06-14T00:00:00Z", + "0.53.0": "2026-01-12T00:00:00Z", + "0.33.0": "2025-08-14T00:00:00Z" + } }, "entries": [ { diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index daba367c3..24e8fd775 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -87,24 +87,24 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.58.0 | - | - | 72.3ms | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.58.0 | 2026-06-20 08:30 UTC | - | - | 72.3ms | === "Large / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.58.0 | - | 420ms | - | - | 0.59.0 | - | 360ms | - | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.59.0 | 2026-06-21 09:45 UTC | - | 360ms | - | + | 0.58.0 | 2026-06-20 08:30 UTC | - | 420ms | - | === "Large / OpenAPI" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.58.0 | - | 980ms | - | - | 0.59.0 * | - | 881ms | Unsupported: formatter target is unavailable in this release | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.59.0 * | 2026-06-21 09:45 UTC | - | 881ms | Unsupported: formatter target is unavailable in this release | + | 0.58.0 | 2026-06-20 08:30 UTC | - | 980ms | - | diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index d10f15ed9..a583ee22f 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -85,24 +85,24 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.58.0 | - | - | 72.3ms | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.58.0 | 2026-06-20 08:30 UTC | - | - | 72.3ms | === "Large / JSON Schema" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.58.0 | - | 420ms | - | - | 0.59.0 | - | 360ms | - | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.59.0 | 2026-06-21 09:45 UTC | - | 360ms | - | + | 0.58.0 | 2026-06-20 08:30 UTC | - | 420ms | - | === "Large / OpenAPI" - | Version | Default | Built-in | Ruff | - | --- | --- | --- | --- | - | 0.58.0 | - | 980ms | - | - | 0.59.0 * | - | 881ms | Unsupported: formatter target is unavailable in this release | + | Version | Released | Default | Built-in | Ruff | + | --- | --- | --- | --- | --- | + | 0.59.0 * | 2026-06-21 09:45 UTC | - | 881ms | Unsupported: formatter target is unavailable in this release | + | 0.58.0 | 2026-06-20 08:30 UTC | - | 980ms | - | diff --git a/tests/data/release_benchmarks/sample.json b/tests/data/release_benchmarks/sample.json index 31dd79006..0ca97ba3c 100644 --- a/tests/data/release_benchmarks/sample.json +++ b/tests/data/release_benchmarks/sample.json @@ -4,7 +4,11 @@ "generated_at": "2026-06-22T00:00:00Z", "workflow": "Release Benchmarks", "python_version": "3.14.2", - "runs_per_case": "7" + "runs_per_case": "7", + "release_dates": { + "0.58.0": "2026-06-20T08:30:00Z", + "0.59.0": "2026-06-21T09:45:00Z" + } }, "entries": [ { From caf3d4ffc73bce3df1e6e9372bd4cef21853a958 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 03:49:34 +0900 Subject: [PATCH 07/19] Fix benchmark note scope --- scripts/build_release_benchmark_docs.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 631c9f044..e6b4c7c0e 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -572,17 +572,15 @@ def _render_scenario_history_tabs( def _note_scope_label(note: BenchmarkNote) -> str: - match note.input_type, note.case: - case "", "": - return "" - case input_type, "": - return _input_label(input_type) - case "", case_name: - return case_name.title() - case input_type, case_name: - return _scenario_label(input_type, case_name) - case _: - return "" + input_type = note.input_type + case_name = note.case + if not input_type and not case_name: + return "" + if input_type and not case_name: + return _input_label(input_type) + if not input_type: + return case_name.title() + return _scenario_label(input_type, case_name) def _render_benchmark_notes(data: BenchmarkData) -> str: From ddfdd70726d594578f2d9fed88b806a3a02f08ca Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 13:23:12 +0900 Subject: [PATCH 08/19] Add main benchmark support --- .github/workflows/release-benchmarks.yaml | 2 +- docs/assets/benchmarks/release-benchmarks.js | 8 +++- docs/performance-benchmarks.md | 5 +- scripts/build_release_benchmark_docs.py | 28 +++++++---- scripts/collect_release_benchmarks.py | 19 ++++++-- ...ollect_release_benchmark_install_specs.txt | 2 + .../release_benchmark_cli_outputs.txt | 18 +++---- .../release_benchmark_rendered.txt | 18 +++---- tests/data/release_benchmarks/sample.json | 48 +++++++++++++++++++ ...est_build_release_benchmark_docs_script.py | 13 ++++- 10 files changed, 125 insertions(+), 36 deletions(-) create mode 100644 tests/data/expected/release_benchmark_docs/collect_release_benchmark_install_specs.txt diff --git a/.github/workflows/release-benchmarks.yaml b/.github/workflows/release-benchmarks.yaml index 8ec884c1f..4e7b846f4 100644 --- a/.github/workflows/release-benchmarks.yaml +++ b/.github/workflows/release-benchmarks.yaml @@ -9,7 +9,7 @@ on: workflow_dispatch: inputs: versions: - description: "Release tags or versions to benchmark. Leave empty to select by PyPI download usage." + description: "Release tags, versions, or main to benchmark. Leave empty to select by PyPI download usage." required: false default: "" history_days: diff --git a/docs/assets/benchmarks/release-benchmarks.js b/docs/assets/benchmarks/release-benchmarks.js index 838761829..1f6586750 100644 --- a/docs/assets/benchmarks/release-benchmarks.js +++ b/docs/assets/benchmarks/release-benchmarks.js @@ -11,12 +11,17 @@ const scriptUrl = document.currentScript && document.currentScript.src ? document.currentScript.src : document.baseURI; const dataUrl = new URL("../../data/release-benchmarks.json", scriptUrl); const notesUrl = new URL("../../data/release-benchmark-notes.json", scriptUrl); + const MAIN_VERSION = "main"; function chartContainers() { return Array.from(document.querySelectorAll("[data-release-benchmark-chart]")); } function versionKey(version) { + const normalizedVersion = String(version).replace(/^v/, ""); + if (normalizedVersion === MAIN_VERSION) { + return [1, 0, 0, 0, 0]; + } const parts = String(version) .replace(/^v/, "") .split(/[.\-+_]/) @@ -24,13 +29,14 @@ while (parts.length < 4) { parts.push(0); } + parts.unshift(0); return parts; } function compareVersions(left, right) { const leftKey = versionKey(left); const rightKey = versionKey(right); - for (let index = 0; index < 4; index += 1) { + for (let index = 0; index < 5; index += 1) { if (leftKey[index] !== rightKey[index]) { return leftKey[index] - rightKey[index]; } diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index df14377f8..2ef6ab294 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -2,7 +2,7 @@ -This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. ## Historical Trends @@ -62,6 +62,7 @@ Version markers in the charts and historical tables point to these benchmark int - The benchmark workflow runs on `ubuntu-24.04`. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. +- The `main` snapshot is installed from the GitHub repository when it is explicitly selected. - Input coverage currently focuses on OpenAPI and JSON Schema. - Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. @@ -110,7 +111,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default ## Historical Results -Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index e6b4c7c0e..bd84a1ca0 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -35,6 +35,7 @@ SAME_SPEED_TOLERANCE = 0.005 FORMATTER_ORDER = ("default", "builtin", "ruff") CASE_ORDER = ("small", "large") +MAIN_VERSION = "main" @dataclass(frozen=True, slots=True) @@ -199,16 +200,20 @@ def load_benchmark_data(path: Path = DATA_PATH, *, notes_path: Path | None = NOT ) -def _version_sort_key(version: str) -> tuple[int, int, int, int, str]: +def _version_sort_key(version: str) -> tuple[int, int, int, int, int, str]: + normalized = version.strip().removeprefix("v") + if normalized == MAIN_VERSION: + return 1, 0, 0, 0, 0, normalized + numbers: list[int] = [] suffix_parts: list[str] = [] - for token in re.split(r"[.\-+_]", version.removeprefix("v")): + for token in re.split(r"[.\-+_]", normalized): if token.isdecimal(): numbers.append(int(token)) elif token: suffix_parts.append(token) numbers.extend([0] * 4) - return numbers[0], numbers[1], numbers[2], numbers[3], ".".join(suffix_parts) + return 0, numbers[0], numbers[1], numbers[2], numbers[3], ".".join(suffix_parts) def _sorted_entries(entries: tuple[BenchmarkEntry, ...]) -> list[BenchmarkEntry]: @@ -653,6 +658,7 @@ def _collection_metadata_lines(data: BenchmarkData) -> list[str]: "- The benchmark workflow runs on `ubuntu-24.04`.", "- The Python version is the workflow input, defaulting to the latest configured CI Python.", "- Release packages are installed from PyPI in isolated virtual environments.", + "- The `main` snapshot is installed from the GitHub repository when it is explicitly selected.", "- Input coverage currently focuses on OpenAPI and JSON Schema.", "- Historical backfills are produced by the `Release Benchmarks` workflow and committed after review.", "", @@ -682,10 +688,11 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "", "", ( - "This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. " - "The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release " - "changes can be compared without mixing in third-party generator results. Automatic backfills select " - "versions from PyPI download-by-version data when that public dataset is available." + "This page tracks datamodel-code-generator release and main-branch benchmark results collected on " + "GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so " + "release-to-release changes can be compared without mixing in third-party generator results. " + "Automatic backfills select versions from PyPI download-by-version data when that public dataset is " + "available." ), "", ] @@ -747,9 +754,10 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "## Historical Results", "", ( - "Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter " - "cells show median generation time; non-default cells include the speed relative to Default when both " - "results are available. Version cells marked with `*` have benchmark notes above." + "Rows are release versions, newest first, with `main` shown before releases when present. Released is " + "the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median " + "generation time; non-default cells include the speed relative to Default when both results are " + "available. Version cells marked with `*` have benchmark notes above." ), "", _render_scenario_history_tabs(data.entries, release_dates=_release_dates(data), notes=_visible_notes(data)), diff --git a/scripts/collect_release_benchmarks.py b/scripts/collect_release_benchmarks.py index d5fc4627e..f265a98e2 100644 --- a/scripts/collect_release_benchmarks.py +++ b/scripts/collect_release_benchmarks.py @@ -1,8 +1,8 @@ """Collect datamodel-code-generator release benchmarks in isolated environments. -This script is intended for GitHub Actions. It installs released PyPI packages in -temporary virtual environments, runs CLI generation commands, and writes a JSON -artifact consumed by scripts/build_release_benchmark_docs.py. +This script is intended for GitHub Actions. It installs released PyPI packages +or the main branch in temporary virtual environments, runs CLI generation +commands, and writes a JSON artifact consumed by scripts/build_release_benchmark_docs.py. """ from __future__ import annotations @@ -30,6 +30,7 @@ from release_benchmark_errors import compact_benchmark_error ROOT = Path(__file__).resolve().parents[1] +GITHUB_PACKAGE_URL = "git+https://github.com/koxudaxi/datamodel-code-generator.git" DEFAULT_OUTPUT = ROOT / ".benchmarks" / "release-benchmarks.json" DEFAULT_RUNS = 7 DEFAULT_WARMUPS = 1 @@ -151,8 +152,16 @@ def _truncate_error(text: str) -> str: return f"{compact[: MAX_ERROR_LENGTH - 3]}..." +def _install_spec(version: str) -> str: + match _normalize_version(version): + case "main": + return f"datamodel-code-generator[ruff] @ {GITHUB_PACKAGE_URL}@main" + case normalized: + return f"datamodel-code-generator[ruff]=={normalized}" + + def _install_command(python_path: Path, version: str) -> list[str]: - spec = f"datamodel-code-generator[ruff]=={_normalize_version(version)}" + spec = _install_spec(version) if uv_path := shutil.which("uv"): return [uv_path, "pip", "install", "--python", str(python_path), spec] return [str(python_path), "-m", "pip", "install", spec] @@ -361,7 +370,7 @@ def parse_args() -> argparse.Namespace: parser.add_argument( "--versions", required=True, - help="Comma, whitespace, or newline separated release versions/tags", + help="Comma, whitespace, or newline separated release versions/tags or main", ) parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT, help="JSON artifact output path") parser.add_argument("--runs", type=int, default=DEFAULT_RUNS, help="Measured runs per case") diff --git a/tests/data/expected/release_benchmark_docs/collect_release_benchmark_install_specs.txt b/tests/data/expected/release_benchmark_docs/collect_release_benchmark_install_specs.txt new file mode 100644 index 000000000..7ae054f35 --- /dev/null +++ b/tests/data/expected/release_benchmark_docs/collect_release_benchmark_install_specs.txt @@ -0,0 +1,2 @@ +release: datamodel-code-generator[ruff]==0.65.0 +main: datamodel-code-generator[ruff] @ git+https://github.com/koxudaxi/datamodel-code-generator.git@main diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index 24e8fd775..f1c30f0e6 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -6,7 +6,7 @@ docs: -This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. ## Historical Trends @@ -53,6 +53,7 @@ Version markers in the charts and historical tables point to these benchmark int - The benchmark workflow runs on `ubuntu-24.04`. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. +- The `main` snapshot is installed from the GitHub repository when it is explicitly selected. - Input coverage currently focuses on OpenAPI and JSON Schema. - Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. @@ -65,7 +66,7 @@ Version markers in the charts and historical tables point to these benchmark int - Entry Python versions: `3.14.2` - Benchmark runs per case: `7` - Version selection: `-` -- Selected versions: `2` +- Selected versions: `3` - Download source: `-` - Download window: `-` days - Downloads in window: `-` @@ -75,24 +76,25 @@ Version markers in the charts and historical tables point to these benchmark int Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. -### 0.59.0 +### main -=== "Large" +=== "Small" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Built-in | 360ms | - | 350ms-389ms | OK | - | OpenAPI | Built-in | 881ms | - | 850ms-901ms | OK | - | OpenAPI | Ruff | - | - | - | Unsupported: formatter target is unavailable in this release | + | JSON Schema | Default | 80.0ms | baseline | 78.0ms-83.0ms | OK | + | JSON Schema | Built-in | 70.0ms | 1.14x faster | 68.0ms-73.0ms | OK | + | JSON Schema | Ruff | 71.0ms | 1.13x faster | 69.0ms-75.0ms | OK | ## Historical Results -Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 80.0ms | 70.0ms (1.14x faster) | 71.0ms (1.13x faster) | | 0.58.0 | 2026-06-20 08:30 UTC | - | - | 72.3ms | === "Large / JSON Schema" diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index a583ee22f..46d8d4406 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -4,7 +4,7 @@ -This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. ## Historical Trends @@ -51,6 +51,7 @@ Version markers in the charts and historical tables point to these benchmark int - The benchmark workflow runs on `ubuntu-24.04`. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. +- The `main` snapshot is installed from the GitHub repository when it is explicitly selected. - Input coverage currently focuses on OpenAPI and JSON Schema. - Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. @@ -63,7 +64,7 @@ Version markers in the charts and historical tables point to these benchmark int - Entry Python versions: `3.14.2` - Benchmark runs per case: `7` - Version selection: `-` -- Selected versions: `2` +- Selected versions: `3` - Download source: `-` - Download window: `-` days - Downloads in window: `-` @@ -73,24 +74,25 @@ Version markers in the charts and historical tables point to these benchmark int Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. -### 0.59.0 +### main -=== "Large" +=== "Small" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Built-in | 360ms | - | 350ms-389ms | OK | - | OpenAPI | Built-in | 881ms | - | 850ms-901ms | OK | - | OpenAPI | Ruff | - | - | - | Unsupported: formatter target is unavailable in this release | + | JSON Schema | Default | 80.0ms | baseline | 78.0ms-83.0ms | OK | + | JSON Schema | Built-in | 70.0ms | 1.14x faster | 68.0ms-73.0ms | OK | + | JSON Schema | Ruff | 71.0ms | 1.13x faster | 69.0ms-75.0ms | OK | ## Historical Results -Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 80.0ms | 70.0ms (1.14x faster) | 71.0ms (1.13x faster) | | 0.58.0 | 2026-06-20 08:30 UTC | - | - | 72.3ms | === "Large / JSON Schema" diff --git a/tests/data/release_benchmarks/sample.json b/tests/data/release_benchmarks/sample.json index 0ca97ba3c..539fcc197 100644 --- a/tests/data/release_benchmarks/sample.json +++ b/tests/data/release_benchmarks/sample.json @@ -11,6 +11,54 @@ } }, "entries": [ + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 7, + "median_ms": 80.0, + "min_ms": 78.0, + "max_ms": 83.0, + "stdev_ms": 1.8, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output model.py", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 7, + "median_ms": 70.0, + "min_ms": 68.0, + "max_ms": 73.0, + "stdev_ms": 1.6, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --formatters builtin --output model.py", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 7, + "median_ms": 71.0, + "min_ms": 69.0, + "max_ms": 75.0, + "stdev_ms": 2.0, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --formatters ruff-check ruff-format --output model.py", + "error": "" + }, { "version": "0.58.0", "python_version": "3.14.2", diff --git a/tests/test_build_release_benchmark_docs_script.py b/tests/test_build_release_benchmark_docs_script.py index fefe61fe3..527f235b7 100644 --- a/tests/test_build_release_benchmark_docs_script.py +++ b/tests/test_build_release_benchmark_docs_script.py @@ -8,7 +8,7 @@ from pathlib import Path from scripts import build_release_benchmark_docs -from scripts.collect_release_benchmarks import _failure_status, _run_subprocess +from scripts.collect_release_benchmarks import _failure_status, _install_spec, _run_subprocess from scripts.release_benchmark_errors import sanitize_benchmark_error, summarize_benchmark_error from tests.conftest import assert_output @@ -137,6 +137,17 @@ def test_collect_release_benchmark_failure_helpers() -> None: assert_output(output, EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "collect_release_benchmarks_failures.txt") +def test_collect_release_benchmark_install_specs() -> None: + """Release versions use PyPI pins and main uses the GitHub branch ref.""" + output = "\n".join(( + f"release: {_install_spec('v0.65.0')}", + f"main: {_install_spec('main')}", + "", + )) + + assert_output(output, EXPECTED_RELEASE_BENCHMARK_DOCS_PATH / "collect_release_benchmark_install_specs.txt") + + def test_release_benchmark_error_helpers_redact_public_output() -> None: """Benchmark errors redact volatile temp paths and summarize noisy failures.""" path_error = ( From 2946b2cd308c9709cf44b7fc94918602d760a62a Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 13:28:30 +0900 Subject: [PATCH 09/19] Update main benchmark results --- docs/data/release-benchmarks.json | 222 ++++++++++++++++++++++++++++-- docs/performance-benchmarks.md | 40 +++--- 2 files changed, 231 insertions(+), 31 deletions(-) diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json index 74974b52f..68028a584 100644 --- a/docs/data/release-benchmarks.json +++ b/docs/data/release-benchmarks.json @@ -1,27 +1,27 @@ { "schema_version": 1, "metadata": { - "generated_at": "2026-06-21T18:25:22Z", + "generated_at": "2026-06-22T04:26:32Z", "workflow": "Release Benchmarks", - "workflow_run_id": "27913380074", - "collector_sha": "8c910c915d9c9ed5799d79fd904d44fc6c589501", + "workflow_run_id": "27929429807", + "collector_sha": "ddfdd70726d594578f2d9fed88b806a3a02f08ca", "os": "ubuntu-24.04", "python_version": "3.14.2", "runs_per_case": "mixed", "warmups_per_case": "1", - "selection_strategy": "clickpy_downloads_with_compatibility_backfill", + "selection_strategy": "clickpy_downloads_with_compatibility_backfill_and_main", "selection_window_days": "365", - "selected_versions": "0.17.2,0.25.0,0.25.2,0.25.4,0.25.6,0.25.7,0.25.9,0.26.1,0.26.3,0.26.4,0.26.5,0.27.0,0.27.1,0.27.2,0.27.3,0.28.0,0.28.1,0.28.2,0.28.3,0.28.4,0.28.5,0.29.0,0.30.0,0.30.1,0.30.2,0.31.0,0.31.1,0.31.2,0.32.0,0.33.0,0.34.0,0.35.0,0.36.0,0.39.0,0.42.0,0.42.2,0.43.1,0.45.0,0.52.2,0.53.0,0.54.0,0.54.1,0.55.0,0.56.0,0.56.1,0.57.0,0.58.0,0.59.0,0.64.0,0.64.1,0.65.0", + "selected_versions": "0.17.2,0.25.0,0.25.2,0.25.4,0.25.6,0.25.7,0.25.9,0.26.1,0.26.3,0.26.4,0.26.5,0.27.0,0.27.1,0.27.2,0.27.3,0.28.0,0.28.1,0.28.2,0.28.3,0.28.4,0.28.5,0.29.0,0.30.0,0.30.1,0.30.2,0.31.0,0.31.1,0.31.2,0.32.0,0.33.0,0.34.0,0.35.0,0.36.0,0.39.0,0.42.0,0.42.2,0.43.1,0.45.0,0.52.2,0.53.0,0.54.0,0.54.1,0.55.0,0.56.0,0.56.1,0.57.0,0.58.0,0.59.0,0.64.0,0.64.1,0.65.0,main", "download_source": "clickpy", "download_window_days": "365", "download_versions": "160", - "download_window_total": "117300797", + "download_window_total": "117445983", "pypistats_source": "pypistats.org", - "pypistats_last_day": "267992", - "pypistats_last_week": "3536677", - "pypistats_last_month": "14094143", - "pypistats_timeseries_days": "", - "pypistats_timeseries_downloads": "", + "pypistats_last_day": "267774", + "pypistats_last_week": "3551911", + "pypistats_last_month": "13805155", + "pypistats_timeseries_days": "180", + "pypistats_timeseries_downloads": "72119373", "compatibility_backfill": "Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing.", "compatibility_backfill_workflow_run_id": "27910916903", "compatibility_backfill_python_version": "3.13.14", @@ -76,8 +76,12 @@ "0.59.0": "2026-05-29T15:47:55Z", "0.64.0": "2026-06-14T17:24:50Z", "0.64.1": "2026-06-19T17:19:50Z", - "0.65.0": "2026-06-21T18:21:06Z" - } + "0.65.0": "2026-06-21T18:21:06Z", + "main": "" + }, + "main_snapshot_workflow_run_id": "27929429807", + "main_snapshot_collector_sha": "ddfdd70726d594578f2d9fed88b806a3a02f08ca", + "main_snapshot_generated_at": "2026-06-22T04:26:32Z" }, "entries": [ { @@ -9871,6 +9875,198 @@ "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "default", + "runs": 7, + "median_ms": 451.001, + "min_ms": 438.034, + "max_ms": 459.812, + "stdev_ms": 6.644, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "builtin", + "runs": 7, + "median_ms": 319.11, + "min_ms": 315.47, + "max_ms": 335.572, + "stdev_ms": 7.953, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "small", + "formatter": "ruff", + "runs": 7, + "median_ms": 321.511, + "min_ms": 319.14, + "max_ms": 331.25, + "stdev_ms": 4.138, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "default", + "runs": 7, + "median_ms": 3302.844, + "min_ms": 3171.939, + "max_ms": 3334.054, + "stdev_ms": 65.62, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 1173.355, + "min_ms": 1160.055, + "max_ms": 1208.078, + "stdev_ms": 16.787, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "jsonschema", + "case": "large", + "formatter": "ruff", + "runs": 7, + "median_ms": 1122.156, + "min_ms": 1108.781, + "max_ms": 1131.518, + "stdev_ms": 7.148, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "default", + "runs": 7, + "median_ms": 502.358, + "min_ms": 499.752, + "max_ms": 509.984, + "stdev_ms": 3.412, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "builtin", + "runs": 7, + "median_ms": 359.018, + "min_ms": 356.553, + "max_ms": 364.314, + "stdev_ms": 2.579, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "small", + "formatter": "ruff", + "runs": 7, + "median_ms": 361.899, + "min_ms": 359.832, + "max_ms": 366.719, + "stdev_ms": 2.296, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "default", + "runs": 7, + "median_ms": 2909.438, + "min_ms": 2843.088, + "max_ms": 2982.698, + "stdev_ms": 41.265, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "builtin", + "runs": 7, + "median_ms": 1170.627, + "min_ms": 1155.641, + "max_ms": 1190.426, + "stdev_ms": 13.502, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", + "error": "" + }, + { + "version": "main", + "python_version": "3.14.2", + "os": "ubuntu-24.04", + "input_type": "openapi", + "case": "large", + "formatter": "ruff", + "runs": 7, + "median_ms": 1113.95, + "min_ms": 1090.355, + "max_ms": 1137.027, + "stdev_ms": 16.577, + "status": "ok", + "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", + "error": "" } ] } diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 2ef6ab294..b3ad09421 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -69,45 +69,45 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-21T18:25:22Z` +- Generated at: `2026-06-22T04:26:32Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` - Benchmark runs per case: `mixed` -- Version selection: `clickpy_downloads_with_compatibility_backfill` -- Selected versions: `51` +- Version selection: `clickpy_downloads_with_compatibility_backfill_and_main` +- Selected versions: `52` - Download source: `clickpy` - Download window: `365` days -- Downloads in window: `117,300,797` -- PyPIStats last month: `14,094,143` +- Downloads in window: `117,445,983` +- PyPIStats last month: `13,805,155` ## Latest Release Summary Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. -### 0.65.0 +### main === "Small" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 515ms | baseline | 503ms-566ms | OK | - | JSON Schema | Built-in | 397ms | 1.30x faster | 382ms-406ms | OK | - | JSON Schema | Ruff | 416ms | 1.24x faster | 396ms-433ms | OK | - | OpenAPI | Default | 581ms | baseline | 560ms-616ms | OK | - | OpenAPI | Built-in | 439ms | 1.32x faster | 432ms-444ms | OK | - | OpenAPI | Ruff | 481ms | 1.21x faster | 447ms-504ms | OK | + | JSON Schema | Default | 451ms | baseline | 438ms-460ms | OK | + | JSON Schema | Built-in | 319ms | 1.41x faster | 315ms-336ms | OK | + | JSON Schema | Ruff | 322ms | 1.40x faster | 319ms-331ms | OK | + | OpenAPI | Default | 502ms | baseline | 500ms-510ms | OK | + | OpenAPI | Built-in | 359ms | 1.40x faster | 357ms-364ms | OK | + | OpenAPI | Ruff | 362ms | 1.39x faster | 360ms-367ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.20s | baseline | 2.99s-3.41s | OK | - | JSON Schema | Built-in | 1.19s | 2.69x faster | 1.15s-1.25s | OK | - | JSON Schema | Ruff | 1.14s | 2.80x faster | 1.11s-1.18s | OK | - | OpenAPI | Default | 2.97s | baseline | 2.77s-3.06s | OK | - | OpenAPI | Built-in | 1.23s | 2.42x faster | 1.20s-1.25s | OK | - | OpenAPI | Ruff | 1.22s | 2.44x faster | 1.16s-1.23s | OK | + | JSON Schema | Default | 3.30s | baseline | 3.17s-3.33s | OK | + | JSON Schema | Built-in | 1.17s | 2.81x faster | 1.16s-1.21s | OK | + | JSON Schema | Ruff | 1.12s | 2.94x faster | 1.11s-1.13s | OK | + | OpenAPI | Default | 2.91s | baseline | 2.84s-2.98s | OK | + | OpenAPI | Built-in | 1.17s | 2.49x faster | 1.16s-1.19s | OK | + | OpenAPI | Ruff | 1.11s | 2.61x faster | 1.09s-1.14s | OK | ## Historical Results @@ -117,6 +117,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 451ms | 319ms (1.41x faster) | 322ms (1.40x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -173,6 +174,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 502ms | 359ms (1.40x faster) | 362ms (1.39x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -229,6 +231,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 3.30s | 1.17s (2.81x faster) | 1.12s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -285,6 +288,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 2.91s | 1.17s (2.49x faster) | 1.11s (2.61x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | From 640fb30923cfee0b1493f00ea47f0883ed5a037c Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 15:35:22 +0900 Subject: [PATCH 10/19] Update main benchmark results --- docs/data/release-benchmarks.json | 108 +++++++++++++++--------------- docs/llms-full.txt | 45 +++++++------ docs/llms.txt | 2 +- docs/performance-benchmarks.md | 34 +++++----- 4 files changed, 97 insertions(+), 92 deletions(-) diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json index 68028a584..d218369db 100644 --- a/docs/data/release-benchmarks.json +++ b/docs/data/release-benchmarks.json @@ -1,10 +1,10 @@ { "schema_version": 1, "metadata": { - "generated_at": "2026-06-22T04:26:32Z", + "generated_at": "2026-06-22T06:32:02Z", "workflow": "Release Benchmarks", - "workflow_run_id": "27929429807", - "collector_sha": "ddfdd70726d594578f2d9fed88b806a3a02f08ca", + "workflow_run_id": "27933991940", + "collector_sha": "6e74b491e7035fcb34d26eaf3ce30523aa010081", "os": "ubuntu-24.04", "python_version": "3.14.2", "runs_per_case": "mixed", @@ -79,9 +79,9 @@ "0.65.0": "2026-06-21T18:21:06Z", "main": "" }, - "main_snapshot_workflow_run_id": "27929429807", - "main_snapshot_collector_sha": "ddfdd70726d594578f2d9fed88b806a3a02f08ca", - "main_snapshot_generated_at": "2026-06-22T04:26:32Z" + "main_snapshot_workflow_run_id": "27933991940", + "main_snapshot_collector_sha": "6e74b491e7035fcb34d26eaf3ce30523aa010081", + "main_snapshot_generated_at": "2026-06-22T06:32:02Z" }, "entries": [ { @@ -9884,10 +9884,10 @@ "case": "small", "formatter": "default", "runs": 7, - "median_ms": 451.001, - "min_ms": 438.034, - "max_ms": 459.812, - "stdev_ms": 6.644, + "median_ms": 519.661, + "min_ms": 500.412, + "max_ms": 525.128, + "stdev_ms": 8.985, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9900,10 +9900,10 @@ "case": "small", "formatter": "builtin", "runs": 7, - "median_ms": 319.11, - "min_ms": 315.47, - "max_ms": 335.572, - "stdev_ms": 7.953, + "median_ms": 358.131, + "min_ms": 349.071, + "max_ms": 393.954, + "stdev_ms": 14.551, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -9916,10 +9916,10 @@ "case": "small", "formatter": "ruff", "runs": 7, - "median_ms": 321.511, - "min_ms": 319.14, - "max_ms": 331.25, - "stdev_ms": 4.138, + "median_ms": 328.706, + "min_ms": 321.545, + "max_ms": 336.913, + "stdev_ms": 4.689, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -9932,10 +9932,10 @@ "case": "large", "formatter": "default", "runs": 7, - "median_ms": 3302.844, - "min_ms": 3171.939, - "max_ms": 3334.054, - "stdev_ms": 65.62, + "median_ms": 3528.522, + "min_ms": 3433.949, + "max_ms": 3578.483, + "stdev_ms": 60.924, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9948,10 +9948,10 @@ "case": "large", "formatter": "builtin", "runs": 7, - "median_ms": 1173.355, - "min_ms": 1160.055, - "max_ms": 1208.078, - "stdev_ms": 16.787, + "median_ms": 1252.195, + "min_ms": 1240.835, + "max_ms": 1269.241, + "stdev_ms": 10.364, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -9964,10 +9964,10 @@ "case": "large", "formatter": "ruff", "runs": 7, - "median_ms": 1122.156, - "min_ms": 1108.781, - "max_ms": 1131.518, - "stdev_ms": 7.148, + "median_ms": 1172.643, + "min_ms": 1161.064, + "max_ms": 1197.627, + "stdev_ms": 14.396, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -9980,10 +9980,10 @@ "case": "small", "formatter": "default", "runs": 7, - "median_ms": 502.358, - "min_ms": 499.752, - "max_ms": 509.984, - "stdev_ms": 3.412, + "median_ms": 518.423, + "min_ms": 509.365, + "max_ms": 524.199, + "stdev_ms": 5.173, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9996,10 +9996,10 @@ "case": "small", "formatter": "builtin", "runs": 7, - "median_ms": 359.018, - "min_ms": 356.553, - "max_ms": 364.314, - "stdev_ms": 2.579, + "median_ms": 379.27, + "min_ms": 377.759, + "max_ms": 385.135, + "stdev_ms": 2.583, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -10012,10 +10012,10 @@ "case": "small", "formatter": "ruff", "runs": 7, - "median_ms": 361.899, - "min_ms": 359.832, - "max_ms": 366.719, - "stdev_ms": 2.296, + "median_ms": 391.332, + "min_ms": 382.639, + "max_ms": 401.156, + "stdev_ms": 7.0, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -10028,10 +10028,10 @@ "case": "large", "formatter": "default", "runs": 7, - "median_ms": 2909.438, - "min_ms": 2843.088, - "max_ms": 2982.698, - "stdev_ms": 41.265, + "median_ms": 3215.532, + "min_ms": 3143.681, + "max_ms": 3305.979, + "stdev_ms": 52.59, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -10044,10 +10044,10 @@ "case": "large", "formatter": "builtin", "runs": 7, - "median_ms": 1170.627, - "min_ms": 1155.641, - "max_ms": 1190.426, - "stdev_ms": 13.502, + "median_ms": 1283.5, + "min_ms": 1270.038, + "max_ms": 1303.898, + "stdev_ms": 12.658, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -10060,10 +10060,10 @@ "case": "large", "formatter": "ruff", "runs": 7, - "median_ms": 1113.95, - "min_ms": 1090.355, - "max_ms": 1137.027, - "stdev_ms": 16.577, + "median_ms": 1213.968, + "min_ms": 1205.201, + "max_ms": 1235.718, + "stdev_ms": 10.624, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 04e5fe187..e7615fe98 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34914,7 +34914,7 @@ Source: https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/ -This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator releases and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. ## Historical Trends @@ -34974,60 +34974,62 @@ Version markers in the charts and historical tables point to these benchmark int - The benchmark workflow runs on `ubuntu-24.04`. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. +- The `main` snapshot is installed from the GitHub repository when it is explicitly selected. - Input coverage currently focuses on OpenAPI and JSON Schema. - Historical backfills are produced by the `Release Benchmarks` workflow and committed after review. ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-21T18:25:22Z` +- Generated at: `2026-06-22T06:32:02Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` - Benchmark runs per case: `mixed` -- Version selection: `clickpy_downloads_with_compatibility_backfill` -- Selected versions: `51` +- Version selection: `clickpy_downloads_with_compatibility_backfill_and_main` +- Selected versions: `52` - Download source: `clickpy` - Download window: `365` days -- Downloads in window: `117,300,797` -- PyPIStats last month: `14,094,143` +- Downloads in window: `117,445,983` +- PyPIStats last month: `13,805,155` ## Latest Release Summary Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. -### 0.65.0 +### main === "Small" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 515ms | baseline | 503ms-566ms | OK | - | JSON Schema | Built-in | 397ms | 1.30x faster | 382ms-406ms | OK | - | JSON Schema | Ruff | 416ms | 1.24x faster | 396ms-433ms | OK | - | OpenAPI | Default | 581ms | baseline | 560ms-616ms | OK | - | OpenAPI | Built-in | 439ms | 1.32x faster | 432ms-444ms | OK | - | OpenAPI | Ruff | 481ms | 1.21x faster | 447ms-504ms | OK | + | JSON Schema | Default | 520ms | baseline | 500ms-525ms | OK | + | JSON Schema | Built-in | 358ms | 1.45x faster | 349ms-394ms | OK | + | JSON Schema | Ruff | 329ms | 1.58x faster | 322ms-337ms | OK | + | OpenAPI | Default | 518ms | baseline | 509ms-524ms | OK | + | OpenAPI | Built-in | 379ms | 1.37x faster | 378ms-385ms | OK | + | OpenAPI | Ruff | 391ms | 1.32x faster | 383ms-401ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.20s | baseline | 2.99s-3.41s | OK | - | JSON Schema | Built-in | 1.19s | 2.69x faster | 1.15s-1.25s | OK | - | JSON Schema | Ruff | 1.14s | 2.80x faster | 1.11s-1.18s | OK | - | OpenAPI | Default | 2.97s | baseline | 2.77s-3.06s | OK | - | OpenAPI | Built-in | 1.23s | 2.42x faster | 1.20s-1.25s | OK | - | OpenAPI | Ruff | 1.22s | 2.44x faster | 1.16s-1.23s | OK | + | JSON Schema | Default | 3.53s | baseline | 3.43s-3.58s | OK | + | JSON Schema | Built-in | 1.25s | 2.82x faster | 1.24s-1.27s | OK | + | JSON Schema | Ruff | 1.17s | 3.01x faster | 1.16s-1.20s | OK | + | OpenAPI | Default | 3.22s | baseline | 3.14s-3.31s | OK | + | OpenAPI | Built-in | 1.28s | 2.51x faster | 1.27s-1.30s | OK | + | OpenAPI | Ruff | 1.21s | 2.65x faster | 1.21s-1.24s | OK | ## Historical Results -Rows are release versions, newest first. Released is the PyPI upload timestamp in UTC. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 520ms | 358ms (1.45x faster) | 329ms (1.58x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -35084,6 +35086,7 @@ Rows are release versions, newest first. Released is the PyPI upload timestamp i | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 518ms | 379ms (1.37x faster) | 391ms (1.32x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -35140,6 +35143,7 @@ Rows are release versions, newest first. Released is the PyPI upload timestamp i | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 3.53s | 1.25s (2.82x faster) | 1.17s (3.01x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -35196,6 +35200,7 @@ Rows are release versions, newest first. Released is the PyPI upload timestamp i | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | + | main | - | 3.22s | 1.28s (2.51x faster) | 1.21s (2.65x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | diff --git a/docs/llms.txt b/docs/llms.txt index 9e7e88f55..2f07aca63 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -79,7 +79,7 @@ - [Conformance Dashboard](https://datamodel-code-generator.koxudaxi.dev/conformance/): This page summarizes the external conformance and end-to-end corpus checks that CI runs for datamodel-code-generator. The table is generated from `... -- [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/): This page tracks datamodel-code-generator release benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator rele... +- [Performance Benchmarks](https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/): This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-cod... - [Deprecations](https://datamodel-code-generator.koxudaxi.dev/deprecations/): This page lists deprecations and scheduled breaking changes. - [Experimental Features](https://datamodel-code-generator.koxudaxi.dev/experimental/): This page lists features that are available but still experimental. - [Architecture](https://datamodel-code-generator.koxudaxi.dev/architecture/): `datamodel-code-generator` is organized around one central idea: many input formats are normalized into a shared generation graph, then rendered th... diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index b3ad09421..6a1415b22 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -69,7 +69,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-22T04:26:32Z` +- Generated at: `2026-06-22T06:32:02Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` @@ -91,23 +91,23 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 451ms | baseline | 438ms-460ms | OK | - | JSON Schema | Built-in | 319ms | 1.41x faster | 315ms-336ms | OK | - | JSON Schema | Ruff | 322ms | 1.40x faster | 319ms-331ms | OK | - | OpenAPI | Default | 502ms | baseline | 500ms-510ms | OK | - | OpenAPI | Built-in | 359ms | 1.40x faster | 357ms-364ms | OK | - | OpenAPI | Ruff | 362ms | 1.39x faster | 360ms-367ms | OK | + | JSON Schema | Default | 520ms | baseline | 500ms-525ms | OK | + | JSON Schema | Built-in | 358ms | 1.45x faster | 349ms-394ms | OK | + | JSON Schema | Ruff | 329ms | 1.58x faster | 322ms-337ms | OK | + | OpenAPI | Default | 518ms | baseline | 509ms-524ms | OK | + | OpenAPI | Built-in | 379ms | 1.37x faster | 378ms-385ms | OK | + | OpenAPI | Ruff | 391ms | 1.32x faster | 383ms-401ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.30s | baseline | 3.17s-3.33s | OK | - | JSON Schema | Built-in | 1.17s | 2.81x faster | 1.16s-1.21s | OK | - | JSON Schema | Ruff | 1.12s | 2.94x faster | 1.11s-1.13s | OK | - | OpenAPI | Default | 2.91s | baseline | 2.84s-2.98s | OK | - | OpenAPI | Built-in | 1.17s | 2.49x faster | 1.16s-1.19s | OK | - | OpenAPI | Ruff | 1.11s | 2.61x faster | 1.09s-1.14s | OK | + | JSON Schema | Default | 3.53s | baseline | 3.43s-3.58s | OK | + | JSON Schema | Built-in | 1.25s | 2.82x faster | 1.24s-1.27s | OK | + | JSON Schema | Ruff | 1.17s | 3.01x faster | 1.16s-1.20s | OK | + | OpenAPI | Default | 3.22s | baseline | 3.14s-3.31s | OK | + | OpenAPI | Built-in | 1.28s | 2.51x faster | 1.27s-1.30s | OK | + | OpenAPI | Ruff | 1.21s | 2.65x faster | 1.21s-1.24s | OK | ## Historical Results @@ -117,7 +117,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 451ms | 319ms (1.41x faster) | 322ms (1.40x faster) | + | main | - | 520ms | 358ms (1.45x faster) | 329ms (1.58x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -174,7 +174,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 502ms | 359ms (1.40x faster) | 362ms (1.39x faster) | + | main | - | 518ms | 379ms (1.37x faster) | 391ms (1.32x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -231,7 +231,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.30s | 1.17s (2.81x faster) | 1.12s (2.94x faster) | + | main | - | 3.53s | 1.25s (2.82x faster) | 1.17s (3.01x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -288,7 +288,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 2.91s | 1.17s (2.49x faster) | 1.11s (2.61x faster) | + | main | - | 3.22s | 1.28s (2.51x faster) | 1.21s (2.65x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | From 2d5ef839a404434865281b53e0279139a0696d87 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 15:36:41 +0900 Subject: [PATCH 11/19] Clarify benchmark install spec --- scripts/collect_release_benchmarks.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/collect_release_benchmarks.py b/scripts/collect_release_benchmarks.py index f265a98e2..a1ef5e773 100644 --- a/scripts/collect_release_benchmarks.py +++ b/scripts/collect_release_benchmarks.py @@ -153,11 +153,9 @@ def _truncate_error(text: str) -> str: def _install_spec(version: str) -> str: - match _normalize_version(version): - case "main": - return f"datamodel-code-generator[ruff] @ {GITHUB_PACKAGE_URL}@main" - case normalized: - return f"datamodel-code-generator[ruff]=={normalized}" + if (normalized := _normalize_version(version)) == "main": + return f"datamodel-code-generator[ruff] @ {GITHUB_PACKAGE_URL}@main" + return f"datamodel-code-generator[ruff]=={normalized}" def _install_command(python_path: Path, version: str) -> list[str]: From aab23cf4a035898fec241be0421db6a73f0cc379 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 16:04:51 +0900 Subject: [PATCH 12/19] Refresh main benchmark results --- docs/data/release-benchmarks.json | 108 +++++++++++++++--------------- docs/llms-full.txt | 34 +++++----- docs/performance-benchmarks.md | 34 +++++----- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json index d218369db..751ec9fc1 100644 --- a/docs/data/release-benchmarks.json +++ b/docs/data/release-benchmarks.json @@ -1,10 +1,10 @@ { "schema_version": 1, "metadata": { - "generated_at": "2026-06-22T06:32:02Z", + "generated_at": "2026-06-22T07:03:14Z", "workflow": "Release Benchmarks", - "workflow_run_id": "27933991940", - "collector_sha": "6e74b491e7035fcb34d26eaf3ce30523aa010081", + "workflow_run_id": "27935318007", + "collector_sha": "2d5ef839a404434865281b53e0279139a0696d87", "os": "ubuntu-24.04", "python_version": "3.14.2", "runs_per_case": "mixed", @@ -79,9 +79,9 @@ "0.65.0": "2026-06-21T18:21:06Z", "main": "" }, - "main_snapshot_workflow_run_id": "27933991940", - "main_snapshot_collector_sha": "6e74b491e7035fcb34d26eaf3ce30523aa010081", - "main_snapshot_generated_at": "2026-06-22T06:32:02Z" + "main_snapshot_workflow_run_id": "27935318007", + "main_snapshot_collector_sha": "2d5ef839a404434865281b53e0279139a0696d87", + "main_snapshot_generated_at": "2026-06-22T07:03:14Z" }, "entries": [ { @@ -9884,10 +9884,10 @@ "case": "small", "formatter": "default", "runs": 7, - "median_ms": 519.661, - "min_ms": 500.412, - "max_ms": 525.128, - "stdev_ms": 8.985, + "median_ms": 435.959, + "min_ms": 432.17, + "max_ms": 442.267, + "stdev_ms": 3.737, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9900,10 +9900,10 @@ "case": "small", "formatter": "builtin", "runs": 7, - "median_ms": 358.131, - "min_ms": 349.071, - "max_ms": 393.954, - "stdev_ms": 14.551, + "median_ms": 310.238, + "min_ms": 307.304, + "max_ms": 314.436, + "stdev_ms": 2.247, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -9916,10 +9916,10 @@ "case": "small", "formatter": "ruff", "runs": 7, - "median_ms": 328.706, - "min_ms": 321.545, - "max_ms": 336.913, - "stdev_ms": 4.689, + "median_ms": 317.568, + "min_ms": 314.586, + "max_ms": 324.296, + "stdev_ms": 3.459, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -9932,10 +9932,10 @@ "case": "large", "formatter": "default", "runs": 7, - "median_ms": 3528.522, - "min_ms": 3433.949, - "max_ms": 3578.483, - "stdev_ms": 60.924, + "median_ms": 3128.499, + "min_ms": 3085.361, + "max_ms": 3170.728, + "stdev_ms": 31.744, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9948,10 +9948,10 @@ "case": "large", "formatter": "builtin", "runs": 7, - "median_ms": 1252.195, - "min_ms": 1240.835, - "max_ms": 1269.241, - "stdev_ms": 10.364, + "median_ms": 1114.762, + "min_ms": 1095.525, + "max_ms": 1124.011, + "stdev_ms": 10.248, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -9964,10 +9964,10 @@ "case": "large", "formatter": "ruff", "runs": 7, - "median_ms": 1172.643, - "min_ms": 1161.064, - "max_ms": 1197.627, - "stdev_ms": 14.396, + "median_ms": 1063.377, + "min_ms": 1052.903, + "max_ms": 1101.06, + "stdev_ms": 16.471, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -9980,10 +9980,10 @@ "case": "small", "formatter": "default", "runs": 7, - "median_ms": 518.423, - "min_ms": 509.365, - "max_ms": 524.199, - "stdev_ms": 5.173, + "median_ms": 517.035, + "min_ms": 513.27, + "max_ms": 524.088, + "stdev_ms": 4.265, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9996,10 +9996,10 @@ "case": "small", "formatter": "builtin", "runs": 7, - "median_ms": 379.27, - "min_ms": 377.759, - "max_ms": 385.135, - "stdev_ms": 2.583, + "median_ms": 378.659, + "min_ms": 373.533, + "max_ms": 389.268, + "stdev_ms": 5.843, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -10012,10 +10012,10 @@ "case": "small", "formatter": "ruff", "runs": 7, - "median_ms": 391.332, - "min_ms": 382.639, - "max_ms": 401.156, - "stdev_ms": 7.0, + "median_ms": 383.395, + "min_ms": 376.184, + "max_ms": 386.667, + "stdev_ms": 3.957, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -10028,10 +10028,10 @@ "case": "large", "formatter": "default", "runs": 7, - "median_ms": 3215.532, - "min_ms": 3143.681, - "max_ms": 3305.979, - "stdev_ms": 52.59, + "median_ms": 3125.846, + "min_ms": 3028.754, + "max_ms": 3158.79, + "stdev_ms": 51.554, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -10044,10 +10044,10 @@ "case": "large", "formatter": "builtin", "runs": 7, - "median_ms": 1283.5, - "min_ms": 1270.038, - "max_ms": 1303.898, - "stdev_ms": 12.658, + "median_ms": 1207.013, + "min_ms": 1179.586, + "max_ms": 1213.785, + "stdev_ms": 14.659, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -10060,10 +10060,10 @@ "case": "large", "formatter": "ruff", "runs": 7, - "median_ms": 1213.968, - "min_ms": 1205.201, - "max_ms": 1235.718, - "stdev_ms": 10.624, + "median_ms": 1150.512, + "min_ms": 1141.479, + "max_ms": 1193.494, + "stdev_ms": 18.502, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" diff --git a/docs/llms-full.txt b/docs/llms-full.txt index e7615fe98..1bedf9938 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34981,7 +34981,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-22T06:32:02Z` +- Generated at: `2026-06-22T07:03:14Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` @@ -35003,23 +35003,23 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 520ms | baseline | 500ms-525ms | OK | - | JSON Schema | Built-in | 358ms | 1.45x faster | 349ms-394ms | OK | - | JSON Schema | Ruff | 329ms | 1.58x faster | 322ms-337ms | OK | - | OpenAPI | Default | 518ms | baseline | 509ms-524ms | OK | - | OpenAPI | Built-in | 379ms | 1.37x faster | 378ms-385ms | OK | - | OpenAPI | Ruff | 391ms | 1.32x faster | 383ms-401ms | OK | + | JSON Schema | Default | 436ms | baseline | 432ms-442ms | OK | + | JSON Schema | Built-in | 310ms | 1.41x faster | 307ms-314ms | OK | + | JSON Schema | Ruff | 318ms | 1.37x faster | 315ms-324ms | OK | + | OpenAPI | Default | 517ms | baseline | 513ms-524ms | OK | + | OpenAPI | Built-in | 379ms | 1.37x faster | 374ms-389ms | OK | + | OpenAPI | Ruff | 383ms | 1.35x faster | 376ms-387ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.53s | baseline | 3.43s-3.58s | OK | - | JSON Schema | Built-in | 1.25s | 2.82x faster | 1.24s-1.27s | OK | - | JSON Schema | Ruff | 1.17s | 3.01x faster | 1.16s-1.20s | OK | - | OpenAPI | Default | 3.22s | baseline | 3.14s-3.31s | OK | - | OpenAPI | Built-in | 1.28s | 2.51x faster | 1.27s-1.30s | OK | - | OpenAPI | Ruff | 1.21s | 2.65x faster | 1.21s-1.24s | OK | + | JSON Schema | Default | 3.13s | baseline | 3.09s-3.17s | OK | + | JSON Schema | Built-in | 1.11s | 2.81x faster | 1.10s-1.12s | OK | + | JSON Schema | Ruff | 1.06s | 2.94x faster | 1.05s-1.10s | OK | + | OpenAPI | Default | 3.13s | baseline | 3.03s-3.16s | OK | + | OpenAPI | Built-in | 1.21s | 2.59x faster | 1.18s-1.21s | OK | + | OpenAPI | Ruff | 1.15s | 2.72x faster | 1.14s-1.19s | OK | ## Historical Results @@ -35029,7 +35029,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 520ms | 358ms (1.45x faster) | 329ms (1.58x faster) | + | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -35086,7 +35086,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 518ms | 379ms (1.37x faster) | 391ms (1.32x faster) | + | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -35143,7 +35143,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.53s | 1.25s (2.82x faster) | 1.17s (3.01x faster) | + | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -35200,7 +35200,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.22s | 1.28s (2.51x faster) | 1.21s (2.65x faster) | + | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 6a1415b22..99e13780e 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -69,7 +69,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-22T06:32:02Z` +- Generated at: `2026-06-22T07:03:14Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` @@ -91,23 +91,23 @@ Results below are medians. Built-in and Ruff ratios are relative to the Default | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 520ms | baseline | 500ms-525ms | OK | - | JSON Schema | Built-in | 358ms | 1.45x faster | 349ms-394ms | OK | - | JSON Schema | Ruff | 329ms | 1.58x faster | 322ms-337ms | OK | - | OpenAPI | Default | 518ms | baseline | 509ms-524ms | OK | - | OpenAPI | Built-in | 379ms | 1.37x faster | 378ms-385ms | OK | - | OpenAPI | Ruff | 391ms | 1.32x faster | 383ms-401ms | OK | + | JSON Schema | Default | 436ms | baseline | 432ms-442ms | OK | + | JSON Schema | Built-in | 310ms | 1.41x faster | 307ms-314ms | OK | + | JSON Schema | Ruff | 318ms | 1.37x faster | 315ms-324ms | OK | + | OpenAPI | Default | 517ms | baseline | 513ms-524ms | OK | + | OpenAPI | Built-in | 379ms | 1.37x faster | 374ms-389ms | OK | + | OpenAPI | Ruff | 383ms | 1.35x faster | 376ms-387ms | OK | === "Large" | Input | Formatter | Median | vs Default | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.53s | baseline | 3.43s-3.58s | OK | - | JSON Schema | Built-in | 1.25s | 2.82x faster | 1.24s-1.27s | OK | - | JSON Schema | Ruff | 1.17s | 3.01x faster | 1.16s-1.20s | OK | - | OpenAPI | Default | 3.22s | baseline | 3.14s-3.31s | OK | - | OpenAPI | Built-in | 1.28s | 2.51x faster | 1.27s-1.30s | OK | - | OpenAPI | Ruff | 1.21s | 2.65x faster | 1.21s-1.24s | OK | + | JSON Schema | Default | 3.13s | baseline | 3.09s-3.17s | OK | + | JSON Schema | Built-in | 1.11s | 2.81x faster | 1.10s-1.12s | OK | + | JSON Schema | Ruff | 1.06s | 2.94x faster | 1.05s-1.10s | OK | + | OpenAPI | Default | 3.13s | baseline | 3.03s-3.16s | OK | + | OpenAPI | Built-in | 1.21s | 2.59x faster | 1.18s-1.21s | OK | + | OpenAPI | Ruff | 1.15s | 2.72x faster | 1.14s-1.19s | OK | ## Historical Results @@ -117,7 +117,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 520ms | 358ms (1.45x faster) | 329ms (1.58x faster) | + | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -174,7 +174,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 518ms | 379ms (1.37x faster) | 391ms (1.32x faster) | + | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -231,7 +231,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.53s | 1.25s (2.82x faster) | 1.17s (3.01x faster) | + | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -288,7 +288,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | Default | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.22s | 1.28s (2.51x faster) | 1.21s (2.65x faster) | + | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | From 6b9006adaf9828166a4d8b929a8e684644703559 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 16:25:27 +0900 Subject: [PATCH 13/19] Clarify benchmark formatter labels --- docs/assets/benchmarks/release-benchmarks.css | 5 ++++ docs/assets/benchmarks/release-benchmarks.js | 5 ++-- docs/llms-full.txt | 26 +++++++++---------- docs/performance-benchmarks.md | 26 +++++++++---------- scripts/build_release_benchmark_docs.py | 14 +++++----- .../release_benchmark_cli_outputs.txt | 16 ++++++------ .../release_benchmark_rendered.txt | 16 ++++++------ 7 files changed, 57 insertions(+), 51 deletions(-) diff --git a/docs/assets/benchmarks/release-benchmarks.css b/docs/assets/benchmarks/release-benchmarks.css index cb03afb1e..d35f03e86 100644 --- a/docs/assets/benchmarks/release-benchmarks.css +++ b/docs/assets/benchmarks/release-benchmarks.css @@ -28,6 +28,11 @@ gap: 0.35rem; } +.release-benchmark-chart__legend-label { + color: var(--md-default-fg-color--light, #6b7280); + font-weight: 700; +} + .release-benchmark-chart__swatch { width: 0.75rem; height: 0.75rem; diff --git a/docs/assets/benchmarks/release-benchmarks.js b/docs/assets/benchmarks/release-benchmarks.js index 1f6586750..1f0e5d111 100644 --- a/docs/assets/benchmarks/release-benchmarks.js +++ b/docs/assets/benchmarks/release-benchmarks.js @@ -3,7 +3,7 @@ const STATUS_OK = "ok"; const FORMATTERS = [ - { key: "default", label: "Default", color: "#f59e0b" }, + { key: "default", label: "black/isort(Default)", color: "#f59e0b" }, { key: "builtin", label: "Built-in", color: "#2563eb" }, { key: "ruff", label: "Ruff", color: "#16a34a" }, ]; @@ -177,10 +177,11 @@ if (!legend) { return; } - legend.innerHTML = FORMATTERS.map( + const legendItems = FORMATTERS.map( (formatter) => `${formatter.label}`, ).join(""); + legend.innerHTML = `Formatter:${legendItems}`; } function setStatus(container, message) { diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 1bedf9938..1928842e5 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34918,7 +34918,7 @@ This page tracks datamodel-code-generator release and main-branch benchmark resu ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. +Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing. @@ -34995,39 +34995,39 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Release Summary -Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. +Results below are medians. Built-in and Ruff ratios are relative to the black/isort(Default) formatter for the same scenario. ### main === "Small" - | Input | Formatter | Median | vs Default | Range | Status | + | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 436ms | baseline | 432ms-442ms | OK | + | JSON Schema | black/isort(Default) | 436ms | baseline | 432ms-442ms | OK | | JSON Schema | Built-in | 310ms | 1.41x faster | 307ms-314ms | OK | | JSON Schema | Ruff | 318ms | 1.37x faster | 315ms-324ms | OK | - | OpenAPI | Default | 517ms | baseline | 513ms-524ms | OK | + | OpenAPI | black/isort(Default) | 517ms | baseline | 513ms-524ms | OK | | OpenAPI | Built-in | 379ms | 1.37x faster | 374ms-389ms | OK | | OpenAPI | Ruff | 383ms | 1.35x faster | 376ms-387ms | OK | === "Large" - | Input | Formatter | Median | vs Default | Range | Status | + | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.13s | baseline | 3.09s-3.17s | OK | + | JSON Schema | black/isort(Default) | 3.13s | baseline | 3.09s-3.17s | OK | | JSON Schema | Built-in | 1.11s | 2.81x faster | 1.10s-1.12s | OK | | JSON Schema | Ruff | 1.06s | 2.94x faster | 1.05s-1.10s | OK | - | OpenAPI | Default | 3.13s | baseline | 3.03s-3.16s | OK | + | OpenAPI | black/isort(Default) | 3.13s | baseline | 3.03s-3.16s | OK | | OpenAPI | Built-in | 1.21s | 2.59x faster | 1.18s-1.21s | OK | | OpenAPI | Ruff | 1.15s | 2.72x faster | 1.14s-1.19s | OK | ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | @@ -35084,7 +35084,7 @@ Rows are release versions, newest first, with `main` shown before releases when === "Small / OpenAPI" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | @@ -35141,7 +35141,7 @@ Rows are release versions, newest first, with `main` shown before releases when === "Large / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | @@ -35198,7 +35198,7 @@ Rows are release versions, newest first, with `main` shown before releases when === "Large / OpenAPI" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 99e13780e..24c40a9f3 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -6,7 +6,7 @@ This page tracks datamodel-code-generator release and main-branch benchmark resu ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. +Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those releases fail during import on Python 3.14.2 before benchmark timing. @@ -83,39 +83,39 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Release Summary -Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. +Results below are medians. Built-in and Ruff ratios are relative to the black/isort(Default) formatter for the same scenario. ### main === "Small" - | Input | Formatter | Median | vs Default | Range | Status | + | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 436ms | baseline | 432ms-442ms | OK | + | JSON Schema | black/isort(Default) | 436ms | baseline | 432ms-442ms | OK | | JSON Schema | Built-in | 310ms | 1.41x faster | 307ms-314ms | OK | | JSON Schema | Ruff | 318ms | 1.37x faster | 315ms-324ms | OK | - | OpenAPI | Default | 517ms | baseline | 513ms-524ms | OK | + | OpenAPI | black/isort(Default) | 517ms | baseline | 513ms-524ms | OK | | OpenAPI | Built-in | 379ms | 1.37x faster | 374ms-389ms | OK | | OpenAPI | Ruff | 383ms | 1.35x faster | 376ms-387ms | OK | === "Large" - | Input | Formatter | Median | vs Default | Range | Status | + | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 3.13s | baseline | 3.09s-3.17s | OK | + | JSON Schema | black/isort(Default) | 3.13s | baseline | 3.09s-3.17s | OK | | JSON Schema | Built-in | 1.11s | 2.81x faster | 1.10s-1.12s | OK | | JSON Schema | Ruff | 1.06s | 2.94x faster | 1.05s-1.10s | OK | - | OpenAPI | Default | 3.13s | baseline | 3.03s-3.16s | OK | + | OpenAPI | black/isort(Default) | 3.13s | baseline | 3.03s-3.16s | OK | | OpenAPI | Built-in | 1.21s | 2.59x faster | 1.18s-1.21s | OK | | OpenAPI | Ruff | 1.15s | 2.72x faster | 1.14s-1.19s | OK | ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | @@ -172,7 +172,7 @@ Rows are release versions, newest first, with `main` shown before releases when === "Small / OpenAPI" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | @@ -229,7 +229,7 @@ Rows are release versions, newest first, with `main` shown before releases when === "Large / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | @@ -286,7 +286,7 @@ Rows are release versions, newest first, with `main` shown before releases when === "Large / OpenAPI" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index bd84a1ca0..74b22b350 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -264,7 +264,7 @@ def _formatter_label(formatter: str) -> str: label = formatter match formatter: case "default": - label = "Default" + label = "black/isort(Default)" case "builtin": label = "Built-in" case "ruff": @@ -432,9 +432,9 @@ def _version_cell(version: str, notes_by_version: dict[str, tuple[BenchmarkNote, def _render_case_results_table(entries: tuple[BenchmarkEntry, ...], *, case: str, include_version: bool) -> str: headers = ( - ("Version", "Input", "Formatter", "Median", "vs Default", "Status") + ("Version", "Input", "Formatter", "Median", "vs black/isort(Default)", "Status") if include_version - else ("Input", "Formatter", "Median", "vs Default", "Range", "Status") + else ("Input", "Formatter", "Median", "vs black/isort(Default)", "Range", "Status") ) lines = [ "| " + " | ".join(headers) + " |", @@ -719,7 +719,7 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "", ( "Each chart plots median generation time by release version for one benchmark scenario. " - "Formatter lines are included for context; missing or unsupported formatter results are skipped. " + "Each line is a formatter pipeline; missing or unsupported formatter results are skipped. " "Marked versions have benchmark notes below." ), "", @@ -743,7 +743,7 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "## Latest Release Summary", "", ( - "Results below are medians. Built-in and Ruff ratios are relative to the Default formatter " + "Results below are medians. Built-in and Ruff ratios are relative to the black/isort(Default) formatter " "for the same scenario." ), "", @@ -756,8 +756,8 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: ( "Rows are release versions, newest first, with `main` shown before releases when present. Released is " "the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median " - "generation time; non-default cells include the speed relative to Default when both results are " - "available. Version cells marked with `*` have benchmark notes above." + "generation time; non-default cells include the speed relative to black/isort(Default) when both " + "results are available. Version cells marked with `*` have benchmark notes above." ), "", _render_scenario_history_tabs(data.entries, release_dates=_release_dates(data), notes=_visible_notes(data)), diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index f1c30f0e6..c8c8b7c19 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -10,7 +10,7 @@ This page tracks datamodel-code-generator release and main-branch benchmark resu ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. +Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. === "Small / JSON Schema" @@ -74,39 +74,39 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Release Summary -Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. +Results below are medians. Built-in and Ruff ratios are relative to the black/isort(Default) formatter for the same scenario. ### main === "Small" - | Input | Formatter | Median | vs Default | Range | Status | + | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 80.0ms | baseline | 78.0ms-83.0ms | OK | + | JSON Schema | black/isort(Default) | 80.0ms | baseline | 78.0ms-83.0ms | OK | | JSON Schema | Built-in | 70.0ms | 1.14x faster | 68.0ms-73.0ms | OK | | JSON Schema | Ruff | 71.0ms | 1.13x faster | 69.0ms-75.0ms | OK | ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 80.0ms | 70.0ms (1.14x faster) | 71.0ms (1.13x faster) | | 0.58.0 | 2026-06-20 08:30 UTC | - | - | 72.3ms | === "Large / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | 0.59.0 | 2026-06-21 09:45 UTC | - | 360ms | - | | 0.58.0 | 2026-06-20 08:30 UTC | - | 420ms | - | === "Large / OpenAPI" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | 0.59.0 * | 2026-06-21 09:45 UTC | - | 881ms | Unsupported: formatter target is unavailable in this release | | 0.58.0 | 2026-06-20 08:30 UTC | - | 980ms | - | diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index 46d8d4406..4605816e7 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -8,7 +8,7 @@ This page tracks datamodel-code-generator release and main-branch benchmark resu ## Historical Trends -Each chart plots median generation time by release version for one benchmark scenario. Formatter lines are included for context; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. +Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. === "Small / JSON Schema" @@ -72,39 +72,39 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Release Summary -Results below are medians. Built-in and Ruff ratios are relative to the Default formatter for the same scenario. +Results below are medians. Built-in and Ruff ratios are relative to the black/isort(Default) formatter for the same scenario. ### main === "Small" - | Input | Formatter | Median | vs Default | Range | Status | + | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | Default | 80.0ms | baseline | 78.0ms-83.0ms | OK | + | JSON Schema | black/isort(Default) | 80.0ms | baseline | 78.0ms-83.0ms | OK | | JSON Schema | Built-in | 70.0ms | 1.14x faster | 68.0ms-73.0ms | OK | | JSON Schema | Ruff | 71.0ms | 1.13x faster | 69.0ms-75.0ms | OK | ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to Default when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | main | - | 80.0ms | 70.0ms (1.14x faster) | 71.0ms (1.13x faster) | | 0.58.0 | 2026-06-20 08:30 UTC | - | - | 72.3ms | === "Large / JSON Schema" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | 0.59.0 | 2026-06-21 09:45 UTC | - | 360ms | - | | 0.58.0 | 2026-06-20 08:30 UTC | - | 420ms | - | === "Large / OpenAPI" - | Version | Released | Default | Built-in | Ruff | + | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | | 0.59.0 * | 2026-06-21 09:45 UTC | - | 881ms | Unsupported: formatter target is unavailable in this release | | 0.58.0 | 2026-06-20 08:30 UTC | - | 980ms | - | From a4dea9c956559032089b1dc2f90b5a5b8129b429 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 16:35:38 +0900 Subject: [PATCH 14/19] Hide empty benchmark rows --- docs/llms-full.txt | 6 +----- docs/performance-benchmarks.md | 6 +----- scripts/build_release_benchmark_docs.py | 5 ++++- .../release_benchmark_cli_outputs.txt | 2 +- .../release_benchmark_docs/release_benchmark_rendered.txt | 2 +- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 1928842e5..2614faaeb 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -35023,7 +35023,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the black/is ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Rows without any successful formatter result are omitted. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" @@ -35080,7 +35080,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 396ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 418ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 387ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Small / OpenAPI" @@ -35137,7 +35136,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 437ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 460ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 425ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / JSON Schema" @@ -35194,7 +35192,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 3.49s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 3.67s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 3.44s | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / OpenAPI" @@ -35251,7 +35248,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 3.19s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 3.28s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | --- diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 24c40a9f3..f160957d8 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -111,7 +111,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the black/is ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Rows without any successful formatter result are omitted. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" @@ -168,7 +168,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 396ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 418ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 387ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Small / OpenAPI" @@ -225,7 +224,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 437ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 460ms | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 425ms | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / JSON Schema" @@ -282,7 +280,6 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 3.49s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 3.67s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 3.44s | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | === "Large / OpenAPI" @@ -339,4 +336,3 @@ Rows are release versions, newest first, with `main` shown before releases when | 0.25.4 | 2024-02-13 18:10 UTC | 3.19s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.2 | 2023-12-21 18:12 UTC | 3.28s | Unsupported: unavailable | Unsupported: unavailable | | 0.25.0 | 2023-11-25 07:17 UTC | 3.20s | Unsupported: unavailable | Unsupported: unavailable | - | 0.17.2 | 2023-03-31 15:26 UTC | Failed: install | Failed: install | Failed: install | diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 74b22b350..846437ae9 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -541,6 +541,8 @@ def _render_scenario_history_table( scenario_entries = tuple(entry for entry in entries if entry.input_type == input_type and entry.case == case) for version in sorted({entry.version for entry in scenario_entries}, key=_version_sort_key, reverse=True): formatter_entries = {entry.formatter: entry for entry in scenario_entries if entry.version == version} + if not any(entry.status == STATUS_OK for entry in formatter_entries.values()): + continue baseline = formatter_entries.get("default") values = [ _version_cell(version, notes_by_version), @@ -757,7 +759,8 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "Rows are release versions, newest first, with `main` shown before releases when present. Released is " "the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median " "generation time; non-default cells include the speed relative to black/isort(Default) when both " - "results are available. Version cells marked with `*` have benchmark notes above." + "results are available. Rows without any successful formatter result are omitted. Version cells marked " + "with `*` have benchmark notes above." ), "", _render_scenario_history_tabs(data.entries, release_dates=_release_dates(data), notes=_visible_notes(data)), diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index c8c8b7c19..c6e9c1b2d 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -88,7 +88,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the black/is ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Rows without any successful formatter result are omitted. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index 4605816e7..44a1e525a 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -86,7 +86,7 @@ Results below are medians. Built-in and Ruff ratios are relative to the black/is ## Historical Results -Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Version cells marked with `*` have benchmark notes above. +Rows are release versions, newest first, with `main` shown before releases when present. Released is the PyPI upload timestamp in UTC; branch refs such as `main` show `-`. Formatter cells show median generation time; non-default cells include the speed relative to black/isort(Default) when both results are available. Rows without any successful formatter result are omitted. Version cells marked with `*` have benchmark notes above. === "Small / JSON Schema" From 06e010a5de943b0bbbe74ab35247565b742ab255 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 16:50:13 +0900 Subject: [PATCH 15/19] Apply benchmark note to release --- docs/data/release-benchmark-notes.json | 6 ++---- docs/llms-full.txt | 10 +++++----- docs/performance-benchmarks.md | 10 +++++----- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/data/release-benchmark-notes.json b/docs/data/release-benchmark-notes.json index 8bdf44192..3a388f7bd 100644 --- a/docs/data/release-benchmark-notes.json +++ b/docs/data/release-benchmark-notes.json @@ -7,10 +7,8 @@ }, { "version": "0.64.1", - "input_type": "openapi", - "case": "small", - "summary": "Small OpenAPI in this release predates the main-branch inflect import mitigation.", - "details": "The latest release result still includes the inflect/typeguard cold-import cost. On main after the mitigation, the same Small/OpenAPI built-in formatter case is back near the Small/JSON Schema result." + "summary": "This release predates the main-branch inflect import mitigation.", + "details": "The latest release result still includes the inflect/typeguard cold-import cost. The effect is most visible in Small/OpenAPI because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small." } ] } diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 2614faaeb..5f8cf49b5 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34967,7 +34967,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those Version markers in the charts and historical tables point to these benchmark interpretation notes. - `0.29.0`: The inflect dependency range was widened and cold imports became slower. Release 0.29.0 allowed inflect 7.x, which resolves typeguard 4.x in modern environments. That typeguard instrumentation increased fresh-process startup cost. Small OpenAPI is especially visible because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small. -- `0.64.1` (Small / OpenAPI): Small OpenAPI in this release predates the main-branch inflect import mitigation. The latest release result still includes the inflect/typeguard cold-import cost. On main after the mitigation, the same Small/OpenAPI built-in formatter case is back near the Small/JSON Schema result. +- `0.64.1`: This release predates the main-branch inflect import mitigation. The latest release result still includes the inflect/typeguard cold-import cost. The effect is most visible in Small/OpenAPI because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small. ## Collection Policy @@ -35031,7 +35031,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | - | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | @@ -35087,7 +35087,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | - | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | @@ -35143,7 +35143,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | - | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | @@ -35199,7 +35199,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | - | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index f160957d8..8ac53219d 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -55,7 +55,7 @@ Compatibility backfill: Versions 0.26.4-0.34.0 use Python 3.13.14 because those Version markers in the charts and historical tables point to these benchmark interpretation notes. - `0.29.0`: The inflect dependency range was widened and cold imports became slower. Release 0.29.0 allowed inflect 7.x, which resolves typeguard 4.x in modern environments. That typeguard instrumentation increased fresh-process startup cost. Small OpenAPI is especially visible because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small. -- `0.64.1` (Small / OpenAPI): Small OpenAPI in this release predates the main-branch inflect import mitigation. The latest release result still includes the inflect/typeguard cold-import cost. On main after the mitigation, the same Small/OpenAPI built-in formatter case is back near the Small/JSON Schema result. +- `0.64.1`: This release predates the main-branch inflect import mitigation. The latest release result still includes the inflect/typeguard cold-import cost. The effect is most visible in Small/OpenAPI because the fixture has array component names such as Pets and Users, so class-name singularization initializes inflect while the rest of the generation work is small. ## Collection Policy @@ -119,7 +119,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | - | 0.64.1 | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 541ms | Unsupported: unavailable | 509ms (1.06x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 539ms | Unsupported: unavailable | 497ms (1.09x faster) | @@ -175,7 +175,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | - | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 2.38s | Unsupported: unavailable | 2.33s (1.02x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 2.59s | Unsupported: unavailable | 2.57s (1.01x faster) | @@ -231,7 +231,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | - | 0.64.1 | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 3.67s | Unsupported: unavailable | 1.71s (2.14x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 3.82s | Unsupported: unavailable | 1.59s (2.40x faster) | @@ -287,7 +287,7 @@ Rows are release versions, newest first, with `main` shown before releases when | --- | --- | --- | --- | --- | | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | - | 0.64.1 | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | + | 0.64.1 * | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | | 0.59.0 | 2026-05-29 15:47 UTC | 3.55s | Unsupported: unavailable | 1.70s (2.09x faster) | | 0.58.0 | 2026-05-25 03:23 UTC | 3.58s | Unsupported: unavailable | 1.60s (2.23x faster) | From 4459682eef04147a294af92225b0a07ce04ef2b6 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 16:57:07 +0900 Subject: [PATCH 16/19] Clarify benchmark performance goals --- docs/llms-full.txt | 2 ++ docs/performance-benchmarks.md | 2 ++ scripts/build_release_benchmark_docs.py | 6 ++++++ .../release_benchmark_cli_outputs.txt | 2 ++ .../release_benchmark_docs/release_benchmark_rendered.txt | 2 ++ 5 files changed, 14 insertions(+) diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 5f8cf49b5..70f63693e 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34916,6 +34916,8 @@ Source: https://datamodel-code-generator.koxudaxi.dev/performance-benchmarks/ This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +datamodel-code-generator supports many schema styles and production use cases, so it includes a broad set of useful options. As releases add more capabilities, these benchmarks help keep the implementation measured, managed, and tuned so code generation stays fast in everyday use. + ## Historical Trends Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index 8ac53219d..fe780f4e4 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -4,6 +4,8 @@ This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +datamodel-code-generator supports many schema styles and production use cases, so it includes a broad set of useful options. As releases add more capabilities, these benchmarks help keep the implementation measured, managed, and tuned so code generation stays fast in everyday use. + ## Historical Trends Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 846437ae9..9405283b4 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -697,6 +697,12 @@ def render_release_benchmark_markdown(data: BenchmarkData) -> str: "available." ), "", + ( + "datamodel-code-generator supports many schema styles and production use cases, so it includes a broad " + "set of useful options. As releases add more capabilities, these benchmarks help keep the implementation " + "measured, managed, and tuned so code generation stays fast in everyday use." + ), + "", ] if not data.entries: diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index c6e9c1b2d..0f4c58a18 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -8,6 +8,8 @@ docs: This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +datamodel-code-generator supports many schema styles and production use cases, so it includes a broad set of useful options. As releases add more capabilities, these benchmarks help keep the implementation measured, managed, and tuned so code generation stays fast in everyday use. + ## Historical Trends Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index 44a1e525a..0cdc7611f 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -6,6 +6,8 @@ This page tracks datamodel-code-generator release and main-branch benchmark results collected on GitHub Actions. The data covers only datamodel-code-generator and uses Ubuntu runners so release-to-release changes can be compared without mixing in third-party generator results. Automatic backfills select versions from PyPI download-by-version data when that public dataset is available. +datamodel-code-generator supports many schema styles and production use cases, so it includes a broad set of useful options. As releases add more capabilities, these benchmarks help keep the implementation measured, managed, and tuned so code generation stays fast in everyday use. + ## Historical Trends Each chart plots median generation time by release version for one benchmark scenario. Each line is a formatter pipeline; missing or unsupported formatter results are skipped. Marked versions have benchmark notes below. From 6759323ffad1623c49cd3043ebf02ffc54c4b7ee Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 18:38:56 +0900 Subject: [PATCH 17/19] Refresh main benchmark results --- docs/data/release-benchmarks.json | 108 +++++++++++++++--------------- docs/llms-full.txt | 34 +++++----- docs/performance-benchmarks.md | 34 +++++----- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/docs/data/release-benchmarks.json b/docs/data/release-benchmarks.json index 751ec9fc1..36403683f 100644 --- a/docs/data/release-benchmarks.json +++ b/docs/data/release-benchmarks.json @@ -1,10 +1,10 @@ { "schema_version": 1, "metadata": { - "generated_at": "2026-06-22T07:03:14Z", + "generated_at": "2026-06-22T09:37:07Z", "workflow": "Release Benchmarks", - "workflow_run_id": "27935318007", - "collector_sha": "2d5ef839a404434865281b53e0279139a0696d87", + "workflow_run_id": "27943311457", + "collector_sha": "4459682eef04147a294af92225b0a07ce04ef2b6", "os": "ubuntu-24.04", "python_version": "3.14.2", "runs_per_case": "mixed", @@ -79,9 +79,9 @@ "0.65.0": "2026-06-21T18:21:06Z", "main": "" }, - "main_snapshot_workflow_run_id": "27935318007", - "main_snapshot_collector_sha": "2d5ef839a404434865281b53e0279139a0696d87", - "main_snapshot_generated_at": "2026-06-22T07:03:14Z" + "main_snapshot_workflow_run_id": "27943311457", + "main_snapshot_collector_sha": "4459682eef04147a294af92225b0a07ce04ef2b6", + "main_snapshot_generated_at": "2026-06-22T09:37:07Z" }, "entries": [ { @@ -9884,10 +9884,10 @@ "case": "small", "formatter": "default", "runs": 7, - "median_ms": 435.959, - "min_ms": 432.17, - "max_ms": 442.267, - "stdev_ms": 3.737, + "median_ms": 456.848, + "min_ms": 449.608, + "max_ms": 459.955, + "stdev_ms": 4.383, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9900,10 +9900,10 @@ "case": "small", "formatter": "builtin", "runs": 7, - "median_ms": 310.238, - "min_ms": 307.304, - "max_ms": 314.436, - "stdev_ms": 2.247, + "median_ms": 325.147, + "min_ms": 320.863, + "max_ms": 338.907, + "stdev_ms": 5.839, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -9916,10 +9916,10 @@ "case": "small", "formatter": "ruff", "runs": 7, - "median_ms": 317.568, - "min_ms": 314.586, - "max_ms": 324.296, - "stdev_ms": 3.459, + "median_ms": 327.959, + "min_ms": 324.34, + "max_ms": 332.243, + "stdev_ms": 2.544, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/jsonschema/person.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -9932,10 +9932,10 @@ "case": "large", "formatter": "default", "runs": 7, - "median_ms": 3128.499, - "min_ms": 3085.361, - "max_ms": 3170.728, - "stdev_ms": 31.744, + "median_ms": 3542.722, + "min_ms": 3420.499, + "max_ms": 3625.524, + "stdev_ms": 80.205, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9948,10 +9948,10 @@ "case": "large", "formatter": "builtin", "runs": 7, - "median_ms": 1114.762, - "min_ms": 1095.525, - "max_ms": 1124.011, - "stdev_ms": 10.248, + "median_ms": 1225.419, + "min_ms": 1203.212, + "max_ms": 1242.089, + "stdev_ms": 14.851, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -9964,10 +9964,10 @@ "case": "large", "formatter": "ruff", "runs": 7, - "median_ms": 1063.377, - "min_ms": 1052.903, - "max_ms": 1101.06, - "stdev_ms": 16.471, + "median_ms": 1148.031, + "min_ms": 1143.926, + "max_ms": 1161.826, + "stdev_ms": 7.235, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/large_models.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -9980,10 +9980,10 @@ "case": "small", "formatter": "default", "runs": 7, - "median_ms": 517.035, - "min_ms": 513.27, - "max_ms": 524.088, - "stdev_ms": 4.265, + "median_ms": 522.674, + "min_ms": 514.851, + "max_ms": 528.757, + "stdev_ms": 6.391, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -9996,10 +9996,10 @@ "case": "small", "formatter": "builtin", "runs": 7, - "median_ms": 378.659, - "min_ms": 373.533, - "max_ms": 389.268, - "stdev_ms": 5.843, + "median_ms": 382.548, + "min_ms": 375.214, + "max_ms": 388.914, + "stdev_ms": 5.207, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -10012,10 +10012,10 @@ "case": "small", "formatter": "ruff", "runs": 7, - "median_ms": 383.395, - "min_ms": 376.184, - "max_ms": 386.667, - "stdev_ms": 3.957, + "median_ms": 379.743, + "min_ms": 372.118, + "max_ms": 386.327, + "stdev_ms": 4.681, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/openapi/api.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" @@ -10028,10 +10028,10 @@ "case": "large", "formatter": "default", "runs": 7, - "median_ms": 3125.846, - "min_ms": 3028.754, - "max_ms": 3158.79, - "stdev_ms": 51.554, + "median_ms": 3188.015, + "min_ms": 3170.67, + "max_ms": 3260.619, + "stdev_ms": 31.516, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py", "error": "" @@ -10044,10 +10044,10 @@ "case": "large", "formatter": "builtin", "runs": 7, - "median_ms": 1207.013, - "min_ms": 1179.586, - "max_ms": 1213.785, - "stdev_ms": 14.659, + "median_ms": 1280.562, + "min_ms": 1247.579, + "max_ms": 1301.65, + "stdev_ms": 18.433, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters builtin", "error": "" @@ -10060,10 +10060,10 @@ "case": "large", "formatter": "ruff", "runs": 7, - "median_ms": 1150.512, - "min_ms": 1141.479, - "max_ms": 1193.494, - "stdev_ms": 18.502, + "median_ms": 1233.131, + "min_ms": 1203.411, + "max_ms": 1247.045, + "stdev_ms": 13.67, "status": "ok", "command": "python -m datamodel_code_generator --input tests/data/performance/openapi_large.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py --formatters ruff-check ruff-format", "error": "" diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 70f63693e..24c804db5 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34983,7 +34983,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-22T07:03:14Z` +- Generated at: `2026-06-22T09:37:07Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` @@ -35005,23 +35005,23 @@ Results below are medians. Built-in and Ruff ratios are relative to the black/is | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | black/isort(Default) | 436ms | baseline | 432ms-442ms | OK | - | JSON Schema | Built-in | 310ms | 1.41x faster | 307ms-314ms | OK | - | JSON Schema | Ruff | 318ms | 1.37x faster | 315ms-324ms | OK | - | OpenAPI | black/isort(Default) | 517ms | baseline | 513ms-524ms | OK | - | OpenAPI | Built-in | 379ms | 1.37x faster | 374ms-389ms | OK | - | OpenAPI | Ruff | 383ms | 1.35x faster | 376ms-387ms | OK | + | JSON Schema | black/isort(Default) | 457ms | baseline | 450ms-460ms | OK | + | JSON Schema | Built-in | 325ms | 1.41x faster | 321ms-339ms | OK | + | JSON Schema | Ruff | 328ms | 1.39x faster | 324ms-332ms | OK | + | OpenAPI | black/isort(Default) | 523ms | baseline | 515ms-529ms | OK | + | OpenAPI | Built-in | 383ms | 1.37x faster | 375ms-389ms | OK | + | OpenAPI | Ruff | 380ms | 1.38x faster | 372ms-386ms | OK | === "Large" | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | black/isort(Default) | 3.13s | baseline | 3.09s-3.17s | OK | - | JSON Schema | Built-in | 1.11s | 2.81x faster | 1.10s-1.12s | OK | - | JSON Schema | Ruff | 1.06s | 2.94x faster | 1.05s-1.10s | OK | - | OpenAPI | black/isort(Default) | 3.13s | baseline | 3.03s-3.16s | OK | - | OpenAPI | Built-in | 1.21s | 2.59x faster | 1.18s-1.21s | OK | - | OpenAPI | Ruff | 1.15s | 2.72x faster | 1.14s-1.19s | OK | + | JSON Schema | black/isort(Default) | 3.54s | baseline | 3.42s-3.63s | OK | + | JSON Schema | Built-in | 1.23s | 2.89x faster | 1.20s-1.24s | OK | + | JSON Schema | Ruff | 1.15s | 3.09x faster | 1.14s-1.16s | OK | + | OpenAPI | black/isort(Default) | 3.19s | baseline | 3.17s-3.26s | OK | + | OpenAPI | Built-in | 1.28s | 2.49x faster | 1.25s-1.30s | OK | + | OpenAPI | Ruff | 1.23s | 2.59x faster | 1.20s-1.25s | OK | ## Historical Results @@ -35031,7 +35031,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | + | main | - | 457ms | 325ms (1.41x faster) | 328ms (1.39x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -35087,7 +35087,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | + | main | - | 523ms | 383ms (1.37x faster) | 380ms (1.38x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -35143,7 +35143,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | + | main | - | 3.54s | 1.23s (2.89x faster) | 1.15s (3.09x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -35199,7 +35199,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | + | main | - | 3.19s | 1.28s (2.49x faster) | 1.23s (2.59x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index fe780f4e4..ef413a432 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -71,7 +71,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Latest Dataset - Schema version: `1` -- Generated at: `2026-06-22T07:03:14Z` +- Generated at: `2026-06-22T09:37:07Z` - Source workflow: `Release Benchmarks` - Primary Python version: `3.14.2` - Entry Python versions: `3.13.14`, `3.14.2` @@ -93,23 +93,23 @@ Results below are medians. Built-in and Ruff ratios are relative to the black/is | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | black/isort(Default) | 436ms | baseline | 432ms-442ms | OK | - | JSON Schema | Built-in | 310ms | 1.41x faster | 307ms-314ms | OK | - | JSON Schema | Ruff | 318ms | 1.37x faster | 315ms-324ms | OK | - | OpenAPI | black/isort(Default) | 517ms | baseline | 513ms-524ms | OK | - | OpenAPI | Built-in | 379ms | 1.37x faster | 374ms-389ms | OK | - | OpenAPI | Ruff | 383ms | 1.35x faster | 376ms-387ms | OK | + | JSON Schema | black/isort(Default) | 457ms | baseline | 450ms-460ms | OK | + | JSON Schema | Built-in | 325ms | 1.41x faster | 321ms-339ms | OK | + | JSON Schema | Ruff | 328ms | 1.39x faster | 324ms-332ms | OK | + | OpenAPI | black/isort(Default) | 523ms | baseline | 515ms-529ms | OK | + | OpenAPI | Built-in | 383ms | 1.37x faster | 375ms-389ms | OK | + | OpenAPI | Ruff | 380ms | 1.38x faster | 372ms-386ms | OK | === "Large" | Input | Formatter | Median | vs black/isort(Default) | Range | Status | | --- | --- | --- | --- | --- | --- | - | JSON Schema | black/isort(Default) | 3.13s | baseline | 3.09s-3.17s | OK | - | JSON Schema | Built-in | 1.11s | 2.81x faster | 1.10s-1.12s | OK | - | JSON Schema | Ruff | 1.06s | 2.94x faster | 1.05s-1.10s | OK | - | OpenAPI | black/isort(Default) | 3.13s | baseline | 3.03s-3.16s | OK | - | OpenAPI | Built-in | 1.21s | 2.59x faster | 1.18s-1.21s | OK | - | OpenAPI | Ruff | 1.15s | 2.72x faster | 1.14s-1.19s | OK | + | JSON Schema | black/isort(Default) | 3.54s | baseline | 3.42s-3.63s | OK | + | JSON Schema | Built-in | 1.23s | 2.89x faster | 1.20s-1.24s | OK | + | JSON Schema | Ruff | 1.15s | 3.09x faster | 1.14s-1.16s | OK | + | OpenAPI | black/isort(Default) | 3.19s | baseline | 3.17s-3.26s | OK | + | OpenAPI | Built-in | 1.28s | 2.49x faster | 1.25s-1.30s | OK | + | OpenAPI | Ruff | 1.23s | 2.59x faster | 1.20s-1.25s | OK | ## Historical Results @@ -119,7 +119,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 436ms | 310ms (1.41x faster) | 318ms (1.37x faster) | + | main | - | 457ms | 325ms (1.41x faster) | 328ms (1.39x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 515ms | 397ms (1.30x faster) | 416ms (1.24x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 561ms | 420ms (1.33x faster) | 430ms (1.30x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 588ms | 415ms (1.42x faster) | 416ms (1.41x faster) | @@ -175,7 +175,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 517ms | 379ms (1.37x faster) | 383ms (1.35x faster) | + | main | - | 523ms | 383ms (1.37x faster) | 380ms (1.38x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 581ms | 439ms (1.32x faster) | 481ms (1.21x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 2.30s | 2.28s (1.01x faster) | 2.17s (1.06x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 2.32s | 2.20s (1.06x faster) | 2.21s (1.05x faster) | @@ -231,7 +231,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.13s | 1.11s (2.81x faster) | 1.06s (2.94x faster) | + | main | - | 3.54s | 1.23s (2.89x faster) | 1.15s (3.09x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 3.20s | 1.19s (2.69x faster) | 1.14s (2.80x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 3.78s | 1.51s (2.50x faster) | 1.53s (2.48x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.77s | 1.51s (2.50x faster) | 1.47s (2.56x faster) | @@ -287,7 +287,7 @@ Rows are release versions, newest first, with `main` shown before releases when | Version | Released | black/isort(Default) | Built-in | Ruff | | --- | --- | --- | --- | --- | - | main | - | 3.13s | 1.21s (2.59x faster) | 1.15s (2.72x faster) | + | main | - | 3.19s | 1.28s (2.49x faster) | 1.23s (2.59x faster) | | 0.65.0 | 2026-06-21 18:21 UTC | 2.97s | 1.23s (2.42x faster) | 1.22s (2.44x faster) | | 0.64.1 * | 2026-06-19 17:19 UTC | 3.30s | 1.45s (2.28x faster) | 1.39s (2.38x faster) | | 0.64.0 | 2026-06-14 17:24 UTC | 3.42s | 1.46s (2.34x faster) | 1.41s (2.43x faster) | From 49123be2a3b33c4afb09164aef49720813b506ad Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 19:32:19 +0900 Subject: [PATCH 18/19] Document benchmark timing variance --- docs/llms-full.txt | 1 + docs/performance-benchmarks.md | 1 + scripts/build_release_benchmark_docs.py | 4 ++++ .../release_benchmark_docs/release_benchmark_cli_outputs.txt | 1 + .../release_benchmark_docs/release_benchmark_rendered.txt | 1 + 5 files changed, 8 insertions(+) diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 24c804db5..23c275b27 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -34974,6 +34974,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. +- Benchmark results are collected on GitHub Actions CI runners, so median timings can vary slightly with runner load and workflow timing; rerun benchmarks before treating small differences as regressions. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. - The `main` snapshot is installed from the GitHub repository when it is explicitly selected. diff --git a/docs/performance-benchmarks.md b/docs/performance-benchmarks.md index ef413a432..fd8a05bc1 100644 --- a/docs/performance-benchmarks.md +++ b/docs/performance-benchmarks.md @@ -62,6 +62,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. +- Benchmark results are collected on GitHub Actions CI runners, so median timings can vary slightly with runner load and workflow timing; rerun benchmarks before treating small differences as regressions. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. - The `main` snapshot is installed from the GitHub repository when it is explicitly selected. diff --git a/scripts/build_release_benchmark_docs.py b/scripts/build_release_benchmark_docs.py index 9405283b4..03780aa58 100644 --- a/scripts/build_release_benchmark_docs.py +++ b/scripts/build_release_benchmark_docs.py @@ -658,6 +658,10 @@ def _collection_metadata_lines(data: BenchmarkData) -> list[str]: "## Collection Policy", "", "- The benchmark workflow runs on `ubuntu-24.04`.", + ( + "- Benchmark results are collected on GitHub Actions CI runners, so median timings can vary slightly " + "with runner load and workflow timing; rerun benchmarks before treating small differences as regressions." + ), "- The Python version is the workflow input, defaulting to the latest configured CI Python.", "- Release packages are installed from PyPI in isolated virtual environments.", "- The `main` snapshot is installed from the GitHub repository when it is explicitly selected.", diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt index 0f4c58a18..04cbd54db 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_cli_outputs.txt @@ -53,6 +53,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. +- Benchmark results are collected on GitHub Actions CI runners, so median timings can vary slightly with runner load and workflow timing; rerun benchmarks before treating small differences as regressions. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. - The `main` snapshot is installed from the GitHub repository when it is explicitly selected. diff --git a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt index 0cdc7611f..c44b709d8 100644 --- a/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt +++ b/tests/data/expected/release_benchmark_docs/release_benchmark_rendered.txt @@ -51,6 +51,7 @@ Version markers in the charts and historical tables point to these benchmark int ## Collection Policy - The benchmark workflow runs on `ubuntu-24.04`. +- Benchmark results are collected on GitHub Actions CI runners, so median timings can vary slightly with runner load and workflow timing; rerun benchmarks before treating small differences as regressions. - The Python version is the workflow input, defaulting to the latest configured CI Python. - Release packages are installed from PyPI in isolated virtual environments. - The `main` snapshot is installed from the GitHub repository when it is explicitly selected. From 449c413da017293437a8399268c6dad9184490e1 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 22 Jun 2026 21:29:51 +0900 Subject: [PATCH 19/19] Fix benchmark chart navigation --- docs/assets/benchmarks/release-benchmarks.js | 201 ++++++++++++++++--- zensical.toml | 2 +- 2 files changed, 176 insertions(+), 27 deletions(-) diff --git a/docs/assets/benchmarks/release-benchmarks.js b/docs/assets/benchmarks/release-benchmarks.js index 1f0e5d111..f6749d28a 100644 --- a/docs/assets/benchmarks/release-benchmarks.js +++ b/docs/assets/benchmarks/release-benchmarks.js @@ -12,6 +12,16 @@ const dataUrl = new URL("../../data/release-benchmarks.json", scriptUrl); const notesUrl = new URL("../../data/release-benchmark-notes.json", scriptUrl); const MAIN_VERSION = "main"; + const initializedCharts = new WeakSet(); + const observedCharts = new WeakSet(); + let benchmarkPayloadPromise = null; + let benchmarkPayload = null; + let resizeObserver = null; + let globalEventsAttached = false; + let instantNavigationHookAttached = false; + let navigationEventsAttached = false; + let mutationObserverAttached = false; + let initializeScheduled = false; function chartContainers() { return Array.from(document.querySelectorAll("[data-release-benchmark-chart]")); @@ -413,22 +423,34 @@ } function scheduleRender(data, notes, charts) { - window.requestAnimationFrame(() => renderAll(data, notes, charts)); + let rendered = false; + const render = () => { + if (rendered) { + return; + } + rendered = true; + renderAll(data, notes, charts); + }; + window.requestAnimationFrame(render); + window.setTimeout(render, 100); } - function initializeCharts() { - const charts = chartContainers(); - if (charts.length === 0) { + function initializedChartContainers() { + return chartContainers().filter((container) => initializedCharts.has(container)); + } + + function scheduleInitializedChartsRender() { + if (!benchmarkPayload) { return; } - charts.forEach((container) => { - renderLegend(container); - setStatus(container, "Loading benchmark chart..."); - container.addEventListener("mousemove", (event) => showTooltip(container, event)); - container.addEventListener("mouseleave", () => hideTooltip(container)); - }); + scheduleRender(benchmarkPayload.data, benchmarkPayload.notes, initializedChartContainers()); + } - Promise.all([ + function loadBenchmarkPayload() { + if (benchmarkPayloadPromise) { + return benchmarkPayloadPromise; + } + benchmarkPayloadPromise = Promise.all([ fetch(dataUrl).then((response) => { if (!response.ok) { throw new Error(`Could not load ${dataUrl.pathname}`); @@ -439,19 +461,84 @@ .then((response) => (response.ok ? response.json() : { notes: [] })) .then(normalizeNotes) .catch(() => []), - ]) - .then((response) => { - const [data, notes] = response; - scheduleRender(data, notes, charts); - if ("ResizeObserver" in window) { - const observer = new ResizeObserver(() => scheduleRender(data, notes, charts)); - charts.forEach((container) => observer.observe(container)); - } else { - window.addEventListener("resize", () => scheduleRender(data, notes, charts)); + ]).then((response) => { + const [data, notes] = response; + benchmarkPayload = { data, notes }; + return benchmarkPayload; + }); + return benchmarkPayloadPromise; + } + + function observeChart(container) { + if (!("ResizeObserver" in window) || observedCharts.has(container)) { + return; + } + if (!resizeObserver) { + resizeObserver = new ResizeObserver(scheduleInitializedChartsRender); + } + resizeObserver.observe(container); + observedCharts.add(container); + } + + function attachGlobalEvents() { + if (globalEventsAttached) { + return; + } + globalEventsAttached = true; + window.addEventListener("resize", scheduleInitializedChartsRender); + document.addEventListener("click", () => window.setTimeout(scheduleInitializedChartsRender, 50)); + document.addEventListener("change", () => window.setTimeout(scheduleInitializedChartsRender, 50)); + document.addEventListener("visibilitychange", scheduleInitializedChartsRender); + } + + // Material instant navigation swaps page content without re-running destination extra scripts. + function scheduleNavigationRetry() { + [0, 50, 250, 750].forEach((delay) => { + window.setTimeout(scheduleInitializeCharts, delay); + }); + } + + function attachNavigationEvents() { + if (navigationEventsAttached) { + return; + } + navigationEventsAttached = true; + document.addEventListener( + "click", + (event) => { + const anchor = event.target instanceof Element ? event.target.closest("a") : null; + if (!(anchor instanceof HTMLAnchorElement) || anchor.target || anchor.origin !== window.location.origin) { + return; } - document.addEventListener("click", () => window.setTimeout(() => scheduleRender(data, notes, charts), 50)); - document.addEventListener("change", () => window.setTimeout(() => scheduleRender(data, notes, charts), 50)); - document.addEventListener("visibilitychange", () => scheduleRender(data, notes, charts)); + scheduleNavigationRetry(); + }, + true, + ); + window.addEventListener("popstate", scheduleNavigationRetry); + } + + function prepareChart(container) { + if (initializedCharts.has(container)) { + return; + } + initializedCharts.add(container); + renderLegend(container); + setStatus(container, "Loading benchmark chart..."); + container.addEventListener("mousemove", (event) => showTooltip(container, event)); + container.addEventListener("mouseleave", () => hideTooltip(container)); + observeChart(container); + } + + function initializeCharts() { + const charts = chartContainers(); + if (charts.length === 0) { + return; + } + charts.forEach(prepareChart); + attachGlobalEvents(); + loadBenchmarkPayload() + .then(({ data, notes }) => { + scheduleRender(data, notes, charts); }) .catch((error) => { charts.forEach((container) => { @@ -465,9 +552,71 @@ }); } + function scheduleInitializeCharts() { + if (initializeScheduled) { + return; + } + initializeScheduled = true; + window.setTimeout(() => { + initializeScheduled = false; + initializeCharts(); + }, 0); + } + + function attachMutationObserver() { + if (mutationObserverAttached || !("MutationObserver" in window) || !document.documentElement) { + return; + } + mutationObserverAttached = true; + const observer = new MutationObserver(() => { + if (chartContainers().some((container) => !initializedCharts.has(container))) { + scheduleInitializeCharts(); + } + }); + observer.observe(document.documentElement, { childList: true, subtree: true }); + } + + function instantNavigationDocument() { + if (window.document$ && typeof window.document$.subscribe === "function") { + return window.document$; + } + if (typeof document$ !== "undefined" && typeof document$.subscribe === "function") { + return document$; + } + return null; + } + + function attachInstantNavigationHook() { + if (instantNavigationHookAttached) { + return; + } + const navigationDocument = instantNavigationDocument(); + if (!navigationDocument) { + return; + } + instantNavigationHookAttached = true; + try { + navigationDocument.subscribe(scheduleInitializeCharts); + } catch { + // Initial rendering and navigation retry still cover environments without this observable. + } + } + + function start() { + attachNavigationEvents(); + attachMutationObserver(); + scheduleInitializeCharts(); + attachInstantNavigationHook(); + } + if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", initializeCharts, { once: true }); - } else { - initializeCharts(); + document.addEventListener( + "DOMContentLoaded", + start, + { once: true }, + ); } + start(); + window.addEventListener("load", start, { once: true }); + window.setTimeout(start, 0); })(); diff --git a/zensical.toml b/zensical.toml index 45bc70bdd..62a47fb68 100644 --- a/zensical.toml +++ b/zensical.toml @@ -90,7 +90,7 @@ extra_css = [ ] extra_javascript = [ - { path = "assets/benchmarks/release-benchmarks.js", defer = true } + "assets/benchmarks/release-benchmarks.js" ] [project.theme]