Skip to content

chore(deps): Update dependency openai to >=2.38.0 - #7

Merged
lusoris merged 2 commits into
masterfrom
renovate/openai-2.x
May 28, 2026
Merged

lusoris merged 2 commits into
masterfrom
renovate/openai-2.x

Conversation

@renovate

@renovate renovate Bot commented May 28, 2026 •

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
openai >=2.37.0 → >=2.38.0 age confidence

Release Notes

openai/openai-python (openai)

v2.38.0

Compare Source

Full Changelog: v2.37.0...v2.38.0

Features
  • api: api update (33d1d01)
  • api: manual updates (a21700a)
  • api: update OpenAPI spec or Stainless config (00265c5)
Chores
  • api: docs updates (ee10152)
  • check release PR custom code sync (2638779)
  • remove release automation trigger (bd6eea5)
  • trigger release automation (f62d082)

Configuration

📅 Schedule: (in timezone Europe/Vienna)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot requested a review from lusoris as a code owner May 28, 2026 10:53
@renovate
renovate Bot force-pushed the renovate/openai-2.x branch from edbcf9c to db9fe22 Compare May 28, 2026 12:05
@lusoris
lusoris merged commit cf1ba30 into master May 28, 2026
11 of 21 checks passed
@lusoris
lusoris deleted the renovate/openai-2.x branch May 28, 2026 12:19
lusoris added a commit that referenced this pull request May 29, 2026
Five actionable errno defects from the PR #125 code review:

1. vmaf_write_output_with_format: capture errno immediately after
   open(2) / fdopen(3) failure; return -errno instead of hardcoded
   -EINVAL so callers receive the OS-precise error code.

2. vmaf_cuda_state_init: map driver-library-missing → -ENOSYS and
   cuInit(0) failure → -ENODEV, mirroring the SYCL/HIP pattern
   already established in sycl/common.cpp and cuda/cuda_helper.cuh.

3. vmaf_close: propagate return values from vmaf_thread_pool_wait()
   and vmaf_framesync_destroy() (CERT ERR33-C / Power-of-10 #7).
   NULL-pool case (n_threads == 0) correctly returns 0.

4. vmaf_cuda_preallocate_pictures: return -EBUSY on double-call to
   prevent silent ring-buffer leak and in-flight picture corruption.

5. vmaf_init: return the actual sub-init error code rather than a
   hardcoded -ENOMEM for every error path.

Fast test suite: 49/49. Pre-commit: all checks pass.
ADR-0214 parity gate: unaffected (errno-only changes, no algorithm delta).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request May 29, 2026
Five actionable errno defects from the PR #125 code review:

1. vmaf_write_output_with_format: capture errno immediately after
   open(2) / fdopen(3) failure; return -errno instead of hardcoded
   -EINVAL so callers receive the OS-precise error code.

2. vmaf_cuda_state_init: map driver-library-missing → -ENOSYS and
   cuInit(0) failure → -ENODEV, mirroring the SYCL/HIP pattern
   already established in sycl/common.cpp and cuda/cuda_helper.cuh.

3. vmaf_close: propagate return values from vmaf_thread_pool_wait()
   and vmaf_framesync_destroy() (CERT ERR33-C / Power-of-10 #7).
   NULL-pool case (n_threads == 0) correctly returns 0.

4. vmaf_cuda_preallocate_pictures: return -EBUSY on double-call to
   prevent silent ring-buffer leak and in-flight picture corruption.

5. vmaf_init: return the actual sub-init error code rather than a
   hardcoded -ENOMEM for every error path.

Fast test suite: 49/49. Pre-commit: all checks pass.
ADR-0214 parity gate: unaffected (errno-only changes, no algorithm delta).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 2, 2026
Five actionable errno defects from the PR #125 code review:

1. vmaf_write_output_with_format: capture errno immediately after
   open(2) / fdopen(3) failure; return -errno instead of hardcoded
   -EINVAL so callers receive the OS-precise error code.

2. vmaf_cuda_state_init: map driver-library-missing → -ENOSYS and
   cuInit(0) failure → -ENODEV, mirroring the SYCL/HIP pattern
   already established in sycl/common.cpp and cuda/cuda_helper.cuh.

3. vmaf_close: propagate return values from vmaf_thread_pool_wait()
   and vmaf_framesync_destroy() (CERT ERR33-C / Power-of-10 #7).
   NULL-pool case (n_threads == 0) correctly returns 0.

4. vmaf_cuda_preallocate_pictures: return -EBUSY on double-call to
   prevent silent ring-buffer leak and in-flight picture corruption.

5. vmaf_init: return the actual sub-init error code rather than a
   hardcoded -ENOMEM for every error path.

Fast test suite: 49/49. Pre-commit: all checks pass.
ADR-0214 parity gate: unaffected (errno-only changes, no algorithm delta).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 2, 2026
#308 ENOSYS stubs + #316 dispatch token-boundary) (#525)

* fix(core): propagate correct errno codes — PR #125 defects

Five actionable errno defects from the PR #125 code review:

1. vmaf_write_output_with_format: capture errno immediately after
   open(2) / fdopen(3) failure; return -errno instead of hardcoded
   -EINVAL so callers receive the OS-precise error code.

2. vmaf_cuda_state_init: map driver-library-missing → -ENOSYS and
   cuInit(0) failure → -ENODEV, mirroring the SYCL/HIP pattern
   already established in sycl/common.cpp and cuda/cuda_helper.cuh.

3. vmaf_close: propagate return values from vmaf_thread_pool_wait()
   and vmaf_framesync_destroy() (CERT ERR33-C / Power-of-10 #7).
   NULL-pool case (n_threads == 0) correctly returns 0.

4. vmaf_cuda_preallocate_pictures: return -EBUSY on double-call to
   prevent silent ring-buffer leak and in-flight picture corruption.

5. vmaf_init: return the actual sub-init error code rather than a
   hardcoded -ENOMEM for every error path.

Fast test suite: 49/49. Pre-commit: all checks pass.
ADR-0214 parity gate: unaffected (errno-only changes, no algorithm delta).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(tools): check fseek / vmaf_picture_alloc / vmaf_read_pictures returns in vmaf_bench

Discharge three S9 (JPL Power-of-10 r7) unchecked-return findings in
`core/tools/vmaf_bench.c` surfaced by the 2026-05-30 audit. Independent
of PR #304 (the vmaf.c/vmaf_bench.c CUDA/SYCL state-leak fix); no
overlapping hunks.

* `yuv_pair_read_frame` — the two `fseek` calls were `(void)`-cast,
  silencing the lint but hiding the semantic bug: a failed `fseek`
  leaves the FILE position undefined, after which `fread` silently
  feeds the wrong bytes into the benchmark. Now checks each `fseek`
  and returns `-EIO` with a `perror` diagnostic on failure.
* `run_sycl_gpu_profile` per-frame loop — `vmaf_picture_alloc`
  returns were discarded; on allocation failure the subsequent
  `yuv_pair_read_frame -> ref->data[0]` dereference would crash on
  a sentinel-zero `VmafPicture`. Now captures the return code,
  logs, unrefs any already-allocated sibling, and breaks the loop.
* `run_sycl_gpu_profile` end-of-stream block — the final
  `vmaf_read_pictures(vmaf, NULL, NULL, 0)` flush surfaces pooling /
  aggregation errors via its int return that the previous code
  discarded; now captured and propagated. `printf` / `vmaf_close`
  returns explicitly `(void)`-cast to match the surrounding file
  convention.

Adds `#include <errno.h>` for `EIO`. No behavior change on success
paths. Builds clean (`meson setup build-cpu core -Denable_cuda=false
-Denable_sycl=false && ninja -C build-cpu`); clang-tidy on the
touched file produces no new warnings vs master (line numbers shift
only).

* fix(core): emit -ENOSYS stubs for libvmaf_hip.h / libvmaf_metal.h when backend OFF

Both `core/include/libvmaf/libvmaf_hip.h` and
`core/include/libvmaf/libvmaf_metal.h` document the contract that every
public entry point returns `-ENOSYS` when libvmaf is built without the
relevant backend. The real bodies in `core/src/hip/common.c`,
`core/src/metal/common.mm`, `core/src/metal/picture_import.mm`, and the
`vmaf_hip_import_state` / `vmaf_metal_import_state` /
`vmaf_metal_read_imported_pictures` definitions inside `core/src/libvmaf.c`
all sit behind `#ifdef HAVE_HIP` / `#ifdef HAVE_METAL`, so a default
`-Denable_hip=false -Denable_metal=disabled` build emitted none of those
symbols into `libvmaf.so` and any downstream link that referenced them
failed.

Fix: add `core/src/hip/stubs.c` + `core/src/metal/stubs.c` that mirror the
canonical `core/src/dnn/dnn_api.c` `VMAF_HAVE_DNN` stub pattern and wire
each TU into `libvmaf_feature_static_lib` via `hip_sources` /
`metal_sources` only when the backend is disabled. The stubs return
`-ENOSYS`, set out-params to NULL on the pointer-returning entry points,
and `vmaf_hip_available()` / `vmaf_metal_available()` correctly return 0.

Verified locally with:
  meson setup build-cpu core -Denable_hip=false -Denable_metal=disabled \\
                              -Denable_cuda=false -Denable_sycl=false   \\
                              -Denable_dnn=disabled
  ninja -C build-cpu
  nm -D build-cpu/src/libvmaf.so | grep -E "vmaf_(hip|metal)_"
all 14 documented public symbols are present (T-type) and a smoke main
linking against libvmaf.so observes -ENOSYS / NULL out-params on every
entry point and 0 from the availability probes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(gpu-dispatch): enforce token boundary on strategy-name match

The shared VMAF_<BACKEND>_DISPATCH env-variable parser in
core/src/gpu_dispatch_parse.h matched strategy names with
strncmp(v, strategy_names[idx], slen) and accepted any string with
the strategy name as a prefix. So
VMAF_CUDA_DISPATCH=feature:directx silently routed to the valid
"direct" strategy instead of being treated as unknown. A typo in
any backend's dispatch env-var was indistinguishable from a valid
override at the parse layer.

Add a token-boundary check after the strncmp: the byte at
v[slen] must be one of '\0', ',', '\n', ' ', or '\t' for a match
to succeed. The terminator set mirrors the grammar documented in
the header's leading doc comment plus newline (for env values
read line-by-line in tests).

Adds core/test/test_gpu_dispatch_parse.c (9 cases) wired into
core/test/meson.build under the `fast` suite. The negative-control
(prefix-without-boundary) cases fail against the previous code and
pass against the fix, so any regression is caught locally and in
CI.

**Research digest** — no digest needed: trivial bug fix with a
small, targeted reproducer.
**Decision matrix** — no alternatives: only-one-way fix. The
terminator set is mechanically derived from the doc-commented
grammar plus '\n' for line-buffered tests.
**AGENTS.md invariant note** — no rebase-sensitive invariants:
file is fork-added (ADR-0483) and absent in upstream.
**Reproducer / smoke-test command** —
  meson setup build-cpu core -Denable_cuda=false -Denable_sycl=false \
    -Denable_hip=false -Denable_metal=disabled -Denable_dnn=disabled
  ninja -C build-cpu test/test_gpu_dispatch_parse -j4
  meson test -C build-cpu --no-rebuild test_gpu_dispatch_parse
**CHANGELOG fragment** — changelog.d/fixed/gpu-dispatch-parse-strict-match.md
**Rebase note** — docs/rebase-notes.md entry
gpu-dispatch-parse-strict-strategy-match (2026-05-30).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(changelog): add bundle-core-c fragment for PRs #148 #307 #308 #316

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Lusoris <lusoris@pm.me>
lusoris added a commit that referenced this pull request Jun 2, 2026
Replace the platform-#ifdef pthread_mutex_t/CRITICAL_SECTION lock
bootstrap with std::mutex + std::lock_guard RAII; replace strdup +
nullable char * with std::optional<std::string>; use std::string_view
for the fast-path comparisons; add [[nodiscard]] to the public entry
point. The Windows-specific InitOnceExecuteOnce / CRITICAL_SECTION
branch (~25 LOC) is eliminated entirely.

Compiled as an isolated gpu_dispatch_env_cpp23_lib static library with
override_options=['cpp_std=c++23'], following the ADR-0708 pattern for
metadata_handler_cpp20_lib. Public extern "C" symbol unchanged; all
GPU backends link without modification.

Fast-test gate: 49/49 pass (CPU-only build).

Six deliverables (ADR-0108):
  D1: no digest needed: trivial mechanical conversion
  D2: ADR-0858 §Alternatives considered
  D3: core/AGENTS.md — added invariant #7 for isolated lib pattern
  D4: reproducer: meson setup core/build -Denable_cuda=false && ninja
  D5: changelog.d/changed/adr-0858-cpp23-gpu-dispatch-env.md
  D6: docs/rebase-notes.md — feat/cpp23-gpu-dispatch-env-20260529 entry

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 2, 2026
…136 opt+read_json_model + #154 feature_extractor + #198 cli_parse+vmaf) (#531)

* refactor(core): C++23 pilot — log.c → log.cpp wired (ADR-0708 Wave 1)

Converts core/src/log.c to core/src/log.cpp and wires it into the meson
build as the second C++23 pilot under ADR-0708 (first was dict.c/dict.cpp
per ADR-0727). The log.cpp file existed on master from the earlier
PR #45 attempt but remained inert (meson still referenced log.c, see
PR #205 "Wave 1 INERT" audit). This PR completes the conversion by:

- Adding `extern "C"` guards to core/src/log.h so the header is includable
  from both C and C++ TUs.
- Wrapping the function definitions in log.cpp in `extern "C"` so the
  emitted symbols carry C-mangling (verified via nm: `vmaf_log` and
  `vmaf_set_log_level` are C-mangled exports, same as the prior log.c
  build).
- Replacing the C `static` file-scope log state with a C++ anonymous
  namespace (clang-tidy misc-use-anonymous-namespace clean).
- Compiling log.cpp in an isolated `log_cpp23_lib` static_library with
  `override_options: ['cpp_std=' + libvmaf_cpu_cpp_std]`, mirroring the
  ADR-0708 `metadata_handler_cpp20_lib` pattern so the C++23 override
  does not leak to other TUs.
- Removing log.c from libvmaf_sources; adding `log_cpp23_lib` objects to
  the libvmaf library() target.
- Removing 21 inline `'../src/log.c'` source entries from test executables
  in core/test/meson.build; adding a shared `log_cpp23_test_objects`
  aggregate that those tests pick up via objects:.
- Wiring the orphan `test_log` executable into the fast suite (mirrors
  the orphan-test sweep in draft PR #315) so the formatter / log-level
  filtering coverage is no longer silently dead.

Behaviour is byte-identical to the prior C build: same fprintf format
string, same va_list pass-through, same stderr destination, same ANSI
colour codes. std::print / std::format were considered but rejected to
preserve printf-style varargs at the libvmaf log surface.

Build + test:
  meson setup build-cpu core -Denable_cuda=false -Denable_sycl=false \
                              -Denable_hip=false
  ninja -C build-cpu                   # 726 targets, all link clean
  meson test -C build-cpu --suite=fast # 50/50 pass, incl. new test_log

ABI verification (nm libvmaf.so | grep vmaf_log):
  master:    0000000000000000 t vmaf_log              (LTO-hidden)
             0000000000000000 t vmaf_log.constprop.0  (LTO-hidden)
  this PR:   0000000000000000 T vmaf_log              (externally visible)
             0000000000000000 T vmaf_set_log_level    (externally visible)
The promotion from `t` (local) to `T` (global) is a consequence of
moving the TU into an isolated static_library — the linker can no longer
elide the symbol via LTO. This matches the established
metadata_handler_cpp20_lib precedent (vmaf_metadata_* are also `T` in
master). Neither symbol is marked VMAF_EXPORT, so the public libvmaf
ABI is unchanged.

**Research digest**: ADR-0708 (C++23 internals pilot policy) and the
Wave 1 backlog rationale in ADR-0727 §Context. The log.c migration
recipe is the same as metadata_handler (extern "C", isolated static_lib,
cpp_std override) — no separate research digest needed.

**Decision matrix**: log.c was chosen as the next pilot over mem.c,
opt.c, and fex_ctx_vector.c because (1) its C surface is the smallest of
the four (72 lines, two functions, no out-params), (2) it has zero
callers in the public ABI (vmaf_log / vmaf_set_log_level are internal
diagnostics, not VMAF_EXPORT-marked), and (3) the log.cpp body already
existed in tree from a prior aborted Wave 1 attempt — adopting it is
strictly cheaper than starting fresh from mem.c. See ADR-0708
`## Alternatives considered` for the original ROI ranking.

**AGENTS.md invariant note**: no rebase-sensitive invariants — the log
function semantics, output format, and stderr destination are unchanged.
The rebase-mapping (upstream `libvmaf/src/log.c` → fork
`core/src/log.cpp`) is recorded in docs/rebase-notes.md so future
port-upstream-commit runs target the right file.

**Reproducer / smoke-test command**:
  meson setup build-cpu core -Denable_cuda=false -Denable_sycl=false \
                              -Denable_hip=false
  ninja -C build-cpu
  meson test -C build-cpu test_log --print-errorlogs
  nm build-cpu/src/libvmaf.so | grep -E " T vmaf_log| T vmaf_set_log_level"

**CHANGELOG fragment**: changelog.d/changed/log-c-to-cpp23.md

**Rebase note**: docs/rebase-notes.md — section "log.c → log.cpp C++23
pilot (ADR-0708 Wave 1, 2026-05-30)".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* refactor(core): convert gpu_dispatch_env.c → C++23 (ADR-0858)

Replace the platform-#ifdef pthread_mutex_t/CRITICAL_SECTION lock
bootstrap with std::mutex + std::lock_guard RAII; replace strdup +
nullable char * with std::optional<std::string>; use std::string_view
for the fast-path comparisons; add [[nodiscard]] to the public entry
point. The Windows-specific InitOnceExecuteOnce / CRITICAL_SECTION
branch (~25 LOC) is eliminated entirely.

Compiled as an isolated gpu_dispatch_env_cpp23_lib static library with
override_options=['cpp_std=c++23'], following the ADR-0708 pattern for
metadata_handler_cpp20_lib. Public extern "C" symbol unchanged; all
GPU backends link without modification.

Fast-test gate: 49/49 pass (CPU-only build).

Six deliverables (ADR-0108):
  D1: no digest needed: trivial mechanical conversion
  D2: ADR-0858 §Alternatives considered
  D3: core/AGENTS.md — added invariant #7 for isolated lib pattern
  D4: reproducer: meson setup core/build -Denable_cuda=false && ninja
  D5: changelog.d/changed/adr-0858-cpp23-gpu-dispatch-env.md
  D6: docs/rebase-notes.md — feat/cpp23-gpu-dispatch-env-20260529 entry

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(core): cpp23 Wave 8 — opt.cpp activation + read_json_model.cpp (ADR-0761)

Activate opt.cpp (completing Wave 1 / ADR-0721) and convert
read_json_model.c → read_json_model.cpp (new, 639 LOC).

Both compile under cpp_std=c++23 in isolated static libraries
(opt_cpp23_lib / read_json_model_cpp23_lib) linked into libvmaf.so
via extract_all_objects(). Public C ABI unchanged.

Changes per file:
- opt.h: extern "C" guards added; opt_cpp23_lib wired into meson
- read_json_model.cpp: nullptr, static_cast<>, [[nodiscard]] on 4 entry
  points; goto-past-init replaced with if/else scoping; C++ <c*> headers
- log.h, model.h, read_json_model.h: extern "C" guards added
- core/src/meson.build: opt_cpp23_lib + read_json_model_cpp23_lib static
  libs; opt.c and read_json_model.c comments in libvmaf_sources
- core/test/meson.build: wave8_cpp23_objects variable; all affected test
  executables updated to use objects instead of direct source compilation
- scripts/ci/coverage-check.sh: updated opt.c -> opt.cpp, read_json_model.c
  -> read_json_model.cpp in critical-coverage exclusion list
- core/src/AGENTS.md: invariant 10 documenting the active .cpp files

predict.c skipped: depends on feature_extractor.h / feature_collector.h
without extern "C" guards; deferred to a later wave.

Build: 49/49 fast-suite pass (CPU-only).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(core): rename feature_extractor.c → .cpp (ADR-0772)

Six void* cast fixups, one atomic_load arithmetic guard, placement-new
pool slot init (avoids copying std::atomic), extern "C" guards on
feature_extractor.h / log.h / opt.h, and extern "C" on opt.cpp
definition. meson.build refs updated; old .c deleted via git rm.

Fast-test gate: 49/49 PASS (CPU-only build-0772).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(tools)!: C++23 Wave 8 — cli_parse.c + vmaf.c → .cpp (ADR-0809)

Convert core/tools/cli_parse.c and core/tools/vmaf.c to C++23 translation
units. Conservative idioms only: nullptr, static_cast, [[nodiscard]],
[[noreturn]], std::string_view for option-string dispatch, and a ModelArrays
RAII struct that replaces the three manual vmaf_model_destroy/free loops in
vmaf.cpp's goto-cleanup block.

- cli_parse.h: extern "C" guards for C caller compatibility
- spinner.h: static internal linkage on spinner[]/spinner_length
- meson.build: cpp files + cpp_args + override_options cpp_std=c++23
- .pre-commit-config.yaml: add --disable-version-check to semgrep entry
  to fix spurious exit-2 from semgrep 1.159.0 version-check notification

Build: CPU-only build in container — 724 targets, zero errors.
Smoke: vmaf --help output identical; Netflix golden pair scores 76.66783
(ADR-0214 PASS; places=4 >= 76.668).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(bundle): add CHANGELOG fragment for C++23 wave bundle PR

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): remove pre-existing conflict-marker residuals from workflow files

Conflicts in .github/workflows/libvmaf-build-matrix.yml (2 blocks)
and .github/workflows/security-scans.yml (1 block) were committed into
the PR branch prior to this rebase. They produced blank lines or garbled
YAML steps that would fail CI. Remove all conflict markers and restore
the correct content matching the master baseline.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Lusoris <lusoris@pm.me>
lusoris added a commit that referenced this pull request Jun 3, 2026
…llow-up #7)

Extend _VERSION_PROBE_PATTERNS to cover libx265 and libvpx-vp9 in addition
to the existing libx264 and libsvtav1 entries, so _probe_encoder_version_from_ffmpeg
can detect all three software encoder families from the ffmpeg -version
configure summary.

Add EncoderInfo dataclass (encoder, codec_detected: bool, version_label: str)
and the public probe_encoder_info() helper that returns it. Callers can now
check codec_detected directly instead of parsing the version label string.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 3, 2026
…ollow-up #7)

_build_production_sample_extractor now accepts a backend kwarg and forwards
it to run_score, so all 30 TPE probe-encode trials score on the same GPU
backend as the mandatory verify pass. Previously the extractor always
defaulted to CPU even when a GPU was available.

_build_prod_predictor gains a backend kwarg forwarded to the extractor.
fast_recommend (production path) calls select_backend once and passes the
result to both the predictor and the verify pass.

Remove the dead _ = backend stub from _gpu_verify that was left over from
before the encode_runner forwarding was implemented.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 3, 2026
… follow-up #7)

Add codec_adapters.parse_available_codecs(stdout, *, restrict_to_known=True)
that parses ffmpeg -hide_banner -encoders output into a frozenset of available
codec names. This is the codec-list parser that was deferred from the initial
codec_adapters scaffolding ("parser arrives in a follow-up").

When restrict_to_known=True (default) only names in the adapter registry are
returned; set False to get the full encoder list. Also update the
supports_encoder_stats Protocol comment to remove the "parser arrives in a
follow-up PR" placeholder and clarify the current state (x264+x265 text
formats supported; libvpx binary format deferred).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 3, 2026
Add test_adr_0498_followup7.py covering all four sub-tasks:
- EncoderInfo fields and probe_encoder_info detection for x264/x265/libvpx-vp9
- _VERSION_PROBE_PATTERNS coverage assertions
- build_pass1_stats_command duplicate-fallback_duration removal regression
- _build_production_sample_extractor backend parameter signature
- _gpu_verify dead stub removal via source inspection
- backend forwarding to run_score via mock injection
- parse_available_codecs parsing and frozenset contract

Fix test_encode_dispatcher_per_adapter to capture only the first subprocess
call (the encode argv); the probe-cache expansion for libvpx-vp9 adds a
second ffmpeg -version call that would otherwise overwrite the captured cmd.

ADR-0108 deliverables:
- changelog.d/fixed/0498-vmaf-tune-adr-0498-followup7.md
- docs/rebase-notes.md (no rebase impact, all changes fork-local)
- AGENTS.md invariant notes for probe-cache expansion, backend kwarg, parser

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 3, 2026
…n, backend dispatch, codec-list parser (#573)

* fix(vmaf-tune): x264/x265/libvpx detection + EncoderInfo (ADR-0498 follow-up #7)

Extend _VERSION_PROBE_PATTERNS to cover libx265 and libvpx-vp9 in addition
to the existing libx264 and libsvtav1 entries, so _probe_encoder_version_from_ffmpeg
can detect all three software encoder families from the ffmpeg -version
configure summary.

Add EncoderInfo dataclass (encoder, codec_detected: bool, version_label: str)
and the public probe_encoder_info() helper that returns it. Callers can now
check codec_detected directly instead of parsing the version label string.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(vmaf-tune): wire GPU backend through sample extractor (ADR-0498 follow-up #7)

_build_production_sample_extractor now accepts a backend kwarg and forwards
it to run_score, so all 30 TPE probe-encode trials score on the same GPU
backend as the mandatory verify pass. Previously the extractor always
defaulted to CPU even when a GPU was available.

_build_prod_predictor gains a backend kwarg forwarded to the extractor.
fast_recommend (production path) calls select_backend once and passes the
result to both the predictor and the verify pass.

Remove the dead _ = backend stub from _gpu_verify that was left over from
before the encode_runner forwarding was implemented.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(vmaf-tune): parse_available_codecs — codec-list parser (ADR-0498 follow-up #7)

Add codec_adapters.parse_available_codecs(stdout, *, restrict_to_known=True)
that parses ffmpeg -hide_banner -encoders output into a frozenset of available
codec names. This is the codec-list parser that was deferred from the initial
codec_adapters scaffolding ("parser arrives in a follow-up").

When restrict_to_known=True (default) only names in the adapter registry are
returned; set False to get the full encoder list. Also update the
supports_encoder_stats Protocol comment to remove the "parser arrives in a
follow-up PR" placeholder and clarify the current state (x264+x265 text
formats supported; libvpx binary format deferred).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(vmaf-tune): ADR-0498 follow-up #7 regression tests + deliverables

Add test_adr_0498_followup7.py covering all four sub-tasks:
- EncoderInfo fields and probe_encoder_info detection for x264/x265/libvpx-vp9
- _VERSION_PROBE_PATTERNS coverage assertions
- build_pass1_stats_command duplicate-fallback_duration removal regression
- _build_production_sample_extractor backend parameter signature
- _gpu_verify dead stub removal via source inspection
- backend forwarding to run_score via mock injection
- parse_available_codecs parsing and frozenset contract

Fix test_encode_dispatcher_per_adapter to capture only the first subprocess
call (the encode argv); the probe-cache expansion for libvpx-vp9 adds a
second ffmpeg -version call that would otherwise overwrite the captured cmd.

ADR-0108 deliverables:
- changelog.d/fixed/0498-vmaf-tune-adr-0498-followup7.md
- docs/rebase-notes.md (no rebase impact, all changes fork-local)
- AGENTS.md invariant notes for probe-cache expansion, backend kwarg, parser

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Lusoris <lusoris@pm.me>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@lusoris lusoris added this to the 1.0.0 — First release milestone Sep 4, 2026
lusoris added a commit that referenced this pull request Sep 5, 2026
…-AV1-HDR knobs

- Land profile report audit findings #2-#10 in report.py and cli.py:
  - #2: Unify bitrate axis labels and tick formatting (Mbps/kbps).
  - #3: Render em-dash for failed rows with 0.0 values in HTML/Markdown.
  - #4: Assign VideoToolbox encoders to distinct palette slots (15-17).
  - #5 & #8: Deduplicate pareto annotations to lowest-bitrate point with bitrate.
  - #6: Add --json-sidecar CLI flag and ReportData.from_dict round-trip.
  - #7: Add picked CRF label to scatter plot and deduplicate legend entries.
  - #9: Strip timestamp and pin svg.hashsalt for byte-identical rendering.
  - #10: Add failed target markers and failure annotations to sweep chart.
- Document SVT-AV1-HDR tuning knobs and libsvtav1@svt-av1-hdr runtime variant
  in docs/usage/vmaf-tune.md and docs/usage/vmaf-tune-codec-adapters.md.
- Add comprehensive regression tests in tools/vmaf-tune/tests/test_report.py.
- Update docs/state.md, docs/rebase-notes.md, and changelog fragments.
lusoris added a commit that referenced this pull request Sep 5, 2026
…-AV1-HDR knobs

- Land profile report audit findings #2-#10 in report.py and cli.py:
  - #2: Unify bitrate axis labels and tick formatting (Mbps/kbps).
  - #3: Render em-dash for failed rows with 0.0 values in HTML/Markdown.
  - #4: Assign VideoToolbox encoders to distinct palette slots (15-17).
  - #5 & #8: Deduplicate pareto annotations to lowest-bitrate point with bitrate.
  - #6: Add --json-sidecar CLI flag and ReportData.from_dict round-trip.
  - #7: Add picked CRF label to scatter plot and deduplicate legend entries.
  - #9: Strip timestamp and pin svg.hashsalt for byte-identical rendering.
  - #10: Add failed target markers and failure annotations to sweep chart.
- Document SVT-AV1-HDR tuning knobs and libsvtav1@svt-av1-hdr runtime variant
  in docs/usage/vmaf-tune.md and docs/usage/vmaf-tune-codec-adapters.md.
- Add comprehensive regression tests in tools/vmaf-tune/tests/test_report.py.
- Update docs/state.md, docs/rebase-notes.md, and changelog fragments.
lusoris added a commit that referenced this pull request Sep 6, 2026
…-AV1-HDR knobs

- Land profile report audit findings #2-#10 in report.py and cli.py:
  - #2: Unify bitrate axis labels and tick formatting (Mbps/kbps).
  - #3: Render em-dash for failed rows with 0.0 values in HTML/Markdown.
  - #4: Assign VideoToolbox encoders to distinct palette slots (15-17).
  - #5 & #8: Deduplicate pareto annotations to lowest-bitrate point with bitrate.
  - #6: Add --json-sidecar CLI flag and ReportData.from_dict round-trip.
  - #7: Add picked CRF label to scatter plot and deduplicate legend entries.
  - #9: Strip timestamp and pin svg.hashsalt for byte-identical rendering.
  - #10: Add failed target markers and failure annotations to sweep chart.
- Document SVT-AV1-HDR tuning knobs and libsvtav1@svt-av1-hdr runtime variant
  in docs/usage/vmaf-tune.md and docs/usage/vmaf-tune-codec-adapters.md.
- Add comprehensive regression tests in tools/vmaf-tune/tests/test_report.py.
- Update docs/state.md, docs/rebase-notes.md, and changelog fragments.
lusoris added a commit that referenced this pull request Sep 6, 2026
…-AV1-HDR knobs

- Land profile report audit findings #2-#10 in report.py and cli.py:
  - #2: Unify bitrate axis labels and tick formatting (Mbps/kbps).
  - #3: Render em-dash for failed rows with 0.0 values in HTML/Markdown.
  - #4: Assign VideoToolbox encoders to distinct palette slots (15-17).
  - #5 & #8: Deduplicate pareto annotations to lowest-bitrate point with bitrate.
  - #6: Add --json-sidecar CLI flag and ReportData.from_dict round-trip.
  - #7: Add picked CRF label to scatter plot and deduplicate legend entries.
  - #9: Strip timestamp and pin svg.hashsalt for byte-identical rendering.
  - #10: Add failed target markers and failure annotations to sweep chart.
- Document SVT-AV1-HDR tuning knobs and libsvtav1@svt-av1-hdr runtime variant
  in docs/usage/vmaf-tune.md and docs/usage/vmaf-tune-codec-adapters.md.
- Add comprehensive regression tests in tools/vmaf-tune/tests/test_report.py.
- Update docs/state.md, docs/rebase-notes.md, and changelog fragments.
lusoris added a commit that referenced this pull request Sep 6, 2026
…-AV1-HDR knobs (#1296)

* fix(vmaf-tune): address report audit findings #2-#10 and document SVT-AV1-HDR knobs

- Land profile report audit findings #2-#10 in report.py and cli.py:
  - #2: Unify bitrate axis labels and tick formatting (Mbps/kbps).
  - #3: Render em-dash for failed rows with 0.0 values in HTML/Markdown.
  - #4: Assign VideoToolbox encoders to distinct palette slots (15-17).
  - #5 & #8: Deduplicate pareto annotations to lowest-bitrate point with bitrate.
  - #6: Add --json-sidecar CLI flag and ReportData.from_dict round-trip.
  - #7: Add picked CRF label to scatter plot and deduplicate legend entries.
  - #9: Strip timestamp and pin svg.hashsalt for byte-identical rendering.
  - #10: Add failed target markers and failure annotations to sweep chart.
- Document SVT-AV1-HDR tuning knobs and libsvtav1@svt-av1-hdr runtime variant
  in docs/usage/vmaf-tune.md and docs/usage/vmaf-tune-codec-adapters.md.
- Add comprehensive regression tests in tools/vmaf-tune/tests/test_report.py.
- Update docs/state.md, docs/rebase-notes.md, and changelog fragments.

* docs(vmaf-tune): correct SVT-AV1-HDR knob defaults against upstream Parameters.md

The first cut of the knob table carried three defaults that contradict
juliobbv-p/svt-av1-hdr Docs/Parameters.md @ 0033340 (tune=1 not 0,
sharp-tx=1 not 0, noise-adaptive-filtering=2 not 0) and omitted twelve
documented keys. Rebuild the table from the upstream parameter reference,
state the three injection points for the -svtav1-params string and the
ADR-0294 CRF/preset window the variant inherits, and drop the
'this PR' placeholders from docs/state.md so the ADR-0165 touch gate
accepts the rows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(state): drop the duplicate rows a keep-both rebase created

Each dropped row restates one origin/master already carries; master is the
authoritative record. Verified with scripts/ci/check-state-md-rows.sh.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Lusoris <lusoris@pm.me>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant