)]}'
{
  "log": [
    {
      "commit": "d469ea484104ec1c9fbbe7c82a2b362c2d9e3d29",
      "tree": "99630fa759c06c440ccffd9d897a6e519ea35ace",
      "parents": [
        "d67a7969b4508932c8dbecbb3fd5dce6f593109d"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Tue Oct 20 04:32:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 04:35:43 2026"
      },
      "message": "Automated Code Change\n\nPiperOrigin-RevId: 1002814498\n"
    },
    {
      "commit": "d67a7969b4508932c8dbecbb3fd5dce6f593109d",
      "tree": "8a6abbe1fca3bbfcb42c389750143a8339b64f40",
      "parents": [
        "fdc20d459d9cc6cd1e86a92c6bd149e644417b35"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Tue Oct 20 01:13:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 01:16:16 2026"
      },
      "message": "Support DEQUANTIZE v5 constant weights and 6D DepthToSpace TRANSPOSE v6 in ML Drift TFLite parser.\n\nLiteRT-PiperOrigin-RevId: 1002733304\n"
    },
    {
      "commit": "fdc20d459d9cc6cd1e86a92c6bd149e644417b35",
      "tree": "89472276d2ec9a9fc5ad2672fccdde78af711c11",
      "parents": [
        "a62f231aaa35223f84fe1f230507b811cd8ed5d6"
      ],
      "author": {
        "name": "Changming Sun CA",
        "email": "changmingsun@google.com",
        "time": "Mon Oct 19 23:22:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 23:27:16 2026"
      },
      "message": "Verify FlatBuffer, subgraph, and tensor buffers directly in LiteRT.\n\n`litert::VerifyModel` previously delegated structural FlatBuffer, subgraph, and tensor-buffer checks to `::tflite::Verify` through a `tflite::ErrorReporter` adapter before running LiteRT\u0027s operator and shape inference checks. Removing the dependency on `::tflite::Verify` decouples LiteRT\u0027s model verifier from the legacy TFLite verifier and returns `absl::Status` errors directly without an intermediate `ErrorReporter`.\n\nMigrate FlatBuffer table verification, schema version checking (`TFLITE_SCHEMA_VERSION`), subgraph tensor and operator consistency checks, and numeric, string, and sparse tensor buffer validation into `litert::VerifyModel`. Expose `litert::internal::VerifyAndCountElements` and `litert::internal::VerifyAndCountSparseElements` returning `absl::StatusOr\u003cuint32_t\u003e` for direct unit testing of sparse metadata validation, and remove the unused `tflite::ErrorReporter` parameter from `litert::Verify`.\n\nLiteRT-PiperOrigin-RevId: 1002672576\n"
    },
    {
      "commit": "a62f231aaa35223f84fe1f230507b811cd8ed5d6",
      "tree": "2c713a1f9c8fc3e61ecb6f98cda598e4e6b261f4",
      "parents": [
        "d3b84ea9aa831e7c77300aa9f8dda8c2616439c3"
      ],
      "author": {
        "name": "Dillon Sharlet",
        "email": "dsharlet@google.com",
        "time": "Mon Oct 19 23:11:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 23:13:01 2026"
      },
      "message": "Update XNNPACK in XLA\n\nThis includes required fixes for https://github.com/jax-ml/jax/issues/41335\n\nPiperOrigin-RevId: 1002665896\n"
    },
    {
      "commit": "d3b84ea9aa831e7c77300aa9f8dda8c2616439c3",
      "tree": "945d14d2ea3d097e417ad91719eab1537554fbaf",
      "parents": [
        "717b5b90dce54684cb08fc54454b5f300fe17f46"
      ],
      "author": {
        "name": "Terry Heo",
        "email": "terryheo@google.com",
        "time": "Mon Oct 19 22:47:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 22:56:17 2026"
      },
      "message": "Pad model files with trailing zeros to avoid SIMD out-of-bounds reads\n\nAdd 128 bytes of zero padding after the last tensor buffer in FlatBuffer\nexporters and model serializers. This prevents out-of-bounds reads by SIMD\nkernels (e.g. XNNPACK microkernels, Qualcomm Hexagon DSP) on memory-mapped\nmodels when reading unaligned tail data.\n\n- Updated MLIR FlatBuffer exporters to pad 128 trailing bytes for both\n  inline and appended buffer layouts.\n- Moved trailing zero padding after custom op buffers in appended mode.\n- Updated LiteRT model serialization to pad 128 trailing bytes for both\n  inline and appended models.\n- Adjusted model serialization test expectations to 128 bytes.\n\nLiteRT-PiperOrigin-RevId: 1002650502\n"
    },
    {
      "commit": "717b5b90dce54684cb08fc54454b5f300fe17f46",
      "tree": "3e151b9401ecc30276e942ca4ce52121cf18a548",
      "parents": [
        "f4b4155936258459b459d8b94eb0b882a6d3e818"
      ],
      "author": {
        "name": "Terry Heo",
        "email": "terryheo@google.com",
        "time": "Mon Oct 19 22:47:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 22:48:39 2026"
      },
      "message": "Pad model files with trailing zeros to avoid SIMD out-of-bounds reads\n\nAdd 128 bytes of zero padding after the last tensor buffer in FlatBuffer\nexporters and model serializers. This prevents out-of-bounds reads by SIMD\nkernels (e.g. XNNPACK microkernels, Qualcomm Hexagon DSP) on memory-mapped\nmodels when reading unaligned tail data.\n\n- Updated MLIR FlatBuffer exporters to pad 128 trailing bytes for both\n  inline and appended buffer layouts.\n- Moved trailing zero padding after custom op buffers in appended mode.\n- Updated LiteRT model serialization to pad 128 trailing bytes for both\n  inline and appended models.\n- Adjusted model serialization test expectations to 128 bytes.\n\nLiteRT-Converter-PiperOrigin-RevId: 1002650502\n"
    },
    {
      "commit": "f4b4155936258459b459d8b94eb0b882a6d3e818",
      "tree": "9f8d67aa677c1a278db4cbcba1bcb1ed8f3ac954",
      "parents": [
        "f2843cf42b91d2cd491895afc6a2911df8167efd"
      ],
      "author": {
        "name": "Changming Sun CA",
        "email": "changmingsun@google.com",
        "time": "Mon Oct 19 22:40:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 22:43:12 2026"
      },
      "message": "Shard LiteRT fuzz tests and exclude builtin cases from XNNPACK targets.\n\nIn the LiteRT FuzzTest CI workflow, each registered `FUZZ_TEST` executes for 48 minutes per phase. Because `pad_fuzz_test.cc`, `reduce_fuzz_test.cc`, `reshape_fuzz_test.cc`, and `slice_fuzz_test.cc` did not guard their builtin CPU `FUZZ_TEST` registrations with `#if !defined(TFLITE_*_FUZZ_ENABLE_XNNPACK)`, the corresponding `*_xnnpack_fuzz_test` targets redundantly compiled and executed all builtin CPU fuzz tests alongside the XNNPACK delegate fuzz tests (up to 11 `FUZZ_TEST` cases in `slice_xnnpack_fuzz_test`, exceeding the 10-test per-shard cap). In addition, multi-test fuzz targets other than `convolution_fuzz_test` and `convolution_xnnpack_fuzz_test` did not specify `shard_count` in `litert/test/fuzzing/BUILD`, forcing a single worker shard to run for 5 to 9.5 hours continuously and causing worker preemptions during `Run_Fuzzing_And_Update_Corpus_Database`.\n\nGuard builtin-only fuzz domains, helpers, and `FUZZ_TEST` registrations with `#if !defined(TFLITE_*_FUZZ_ENABLE_XNNPACK)` in `pad_fuzz_test.cc`, `reduce_fuzz_test.cc`, `reshape_fuzz_test.cc`, and `slice_fuzz_test.cc` to match `convolution_fuzz_test.cc`, and set `shard_count` on all multi-test targets in `litert/test/fuzzing/BUILD` so that each shard runs a single `FUZZ_TEST`.\n\nLiteRT-PiperOrigin-RevId: 1002645857\n"
    },
    {
      "commit": "f2843cf42b91d2cd491895afc6a2911df8167efd",
      "tree": "ed7831ec38a656edf70074a1d571b6b5afa01985",
      "parents": [
        "31af84243fb0a70f2cbca733d0069322329b41de"
      ],
      "author": {
        "name": "Ping Yu",
        "email": "piyu@google.com",
        "time": "Mon Oct 19 21:59:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 22:03:38 2026"
      },
      "message": "[Tensor API] ExecutionPlan lowering of the fused transformer ops, with conversion test.\n\nLiteRT-PiperOrigin-RevId: 1002618537\n"
    },
    {
      "commit": "31af84243fb0a70f2cbca733d0069322329b41de",
      "tree": "a72975901791b90b64e3fd57514b23cb4d514da2",
      "parents": [
        "5bcbd4d9b71e96d3ed931885830b9f8bba7e7f1c"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Mon Oct 19 21:23:00 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 21:26:13 2026"
      },
      "message": "Exclude MoeExperts from ML Drift GPU and XNNPACK ATS test suites.\n\nLiteRT-PiperOrigin-RevId: 1002592565\n"
    },
    {
      "commit": "5bcbd4d9b71e96d3ed931885830b9f8bba7e7f1c",
      "tree": "8d31d7a17d3ccebefb6e6b946d984cdf6b6b0594",
      "parents": [
        "92cee59b73ef2fccc387aea85d3960b3662d2516"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Mon Oct 19 21:12:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 21:15:45 2026"
      },
      "message": "Speed up externalize_tflite_flatbuffer for models with large embedded buffers.\n\nLiteRT-PiperOrigin-RevId: 1002584817\n"
    },
    {
      "commit": "92cee59b73ef2fccc387aea85d3960b3662d2516",
      "tree": "7abf7378d77127ff38150ce9c8e0e74593f1b043",
      "parents": [
        "faa57c6d95991feec60b020470f3937abf868948"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Mon Oct 19 20:51:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 20:55:35 2026"
      },
      "message": "litert: Support internal host pointer I/O buffers to reduce delegate latency.\n\nOn PowerVR Rogue / Tensor G5 architectures, CPU-to-GPU memory transfer and readback operations suffer high latency due to uncached memory mappings (~15 ms bus stall on OpenCL ReadBuffer).\n\nWrap MLDrift OpenCL delegate internal tensors with page-aligned host allocations via CL_MEM_USE_HOST_PTR on supported architectures:\n1. Internal Host Staging Buffers: The delegate allocates internal page-aligned host buffers (reused across invocations) and synchronizes data with the TFLite arena via CPU memcpy (~0.05 ms), completely bypassing the uncached driver bus readback stall (~15 ms).\n2. Generic Backend Abstractions: Extends GpuBackend with SupportsHostPtrIOBuffer(input), GetHostPtrAlignment(), and CreateHostIOBuffer(type, size, input), keeping backend abstractions vendor-agnostic and extensible across GPU platforms.\n3. OpenCL Implementation: GpuBackendOpenCl allocates page-aligned host memory via posix_memalign (or _aligned_malloc on Windows) and maps it into the OpenCL context with CL_MEM_USE_HOST_PTR. Memory is safely owned and managed by GpuIOBufferOpenCl.\n4. Preserves TFLite Delegate Contracts: Does not mutate tensor allocation types or data pointers; arena-allocated tensors are safely preserved.\n\nConfigurable via `MlDriftDelegateOptions::enable_host_ptr_io_buffers` or the `--enable_host_ptr_io_buffers` benchmark flag. When disabled or on unsupported platforms, standard device allocations are retained.\n\nNote: Support for external caller-provided zero-copy allocations (SetCustomAllocationForTensor) and dynamic buffer lifecycle arbitration will follow in a stacked subsequent CL.\nLiteRT-PiperOrigin-RevId: 1002570018\n"
    },
    {
      "commit": "faa57c6d95991feec60b020470f3937abf868948",
      "tree": "2ab4c6cfc2fd7e327445b85f888b8d3bcff24175",
      "parents": [
        "57d5dfb5f1a98d5c116cdbde43e336384befb887"
      ],
      "author": {
        "name": "Ping Yu",
        "email": "piyu@google.com",
        "time": "Mon Oct 19 20:44:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 20:47:08 2026"
      },
      "message": "[Tensor API] Qwen3.5: structured benchmark mode (CL6), perf smoke test, and Tensor API model bring-up agent skills.\n\nLiteRT-PiperOrigin-RevId: 1002565307\n"
    },
    {
      "commit": "57d5dfb5f1a98d5c116cdbde43e336384befb887",
      "tree": "8c5284efaa38b6017c1bfbe038a514819f4631eb",
      "parents": [
        "6071e2cd9c4846c7aa2a1226cc2c9e175275fa47"
      ],
      "author": {
        "name": "Ping Yu",
        "email": "piyu@google.com",
        "time": "Mon Oct 19 20:33:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 20:36:07 2026"
      },
      "message": "[Tensor API] Qwen3.5: GgufLoader for multi-format GGUF checkpoints and zero-copy GPU-resident KV caches / Gated DeltaNet states on ML Drift.\n\nLiteRT-PiperOrigin-RevId: 1002557471\n"
    },
    {
      "commit": "6071e2cd9c4846c7aa2a1226cc2c9e175275fa47",
      "tree": "f4f04433c040c09ef4a3d4113c0de98ab2a64210",
      "parents": [
        "3e49a3789864362f6069e0568435b584a38cf917"
      ],
      "author": {
        "name": "Andrew Zhang",
        "email": "yunandrew@google.com",
        "time": "Mon Oct 19 20:12:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 20:16:30 2026"
      },
      "message": "Discover `.dylib` shared libraries in the LiteRT dynamic loader on Apple platforms.\n\nMove the prefix and extension matching logic for `FindLiteRtCompilerPluginSharedLibs` and `FindLiteRtDispatchSharedLibs` into the `IsSharedLibFileName` predicate, accept `.dylib` in addition to `.so` on Apple platforms, and cover it with unit tests.\n\nLiteRT-PiperOrigin-RevId: 1002542989\n"
    },
    {
      "commit": "3e49a3789864362f6069e0568435b584a38cf917",
      "tree": "7959f54636e807c6b6b43fd09e17882f558751e7",
      "parents": [
        "dc7771aa3e0d5f315dfffcec60fbc2221de73f4e"
      ],
      "author": {
        "name": "Doyoung Gwak",
        "email": "doyounggwak@google.com",
        "time": "Mon Oct 19 19:21:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 19:25:35 2026"
      },
      "message": "Avoid O(N) list traversal in IrAllocator::EmplaceBack.\n\n`EmplaceBack` previously delegated to `EmplaceAt(Size(), ...)`, which walked `storage_` (`std::list\u003cIr\u003e`) from `begin()` on every append and made bulk insertions O(N^2). Directly append to `storage_` and `refs_` in O(1).\n\nFixes #10701\n\nLiteRT-PiperOrigin-RevId: 1002510795\n"
    },
    {
      "commit": "dc7771aa3e0d5f315dfffcec60fbc2221de73f4e",
      "tree": "90cb1fb92bc727ede9ce735ac7e3a19c46bd56d4",
      "parents": [
        "0e8e75a52d19fa5066f00771ffa35d848d8a74c8"
      ],
      "author": {
        "name": "Andrew Zhang",
        "email": "yunandrew@google.com",
        "time": "Mon Oct 19 19:07:14 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 19:10:30 2026"
      },
      "message": "Internal change\n\nLiteRT-PiperOrigin-RevId: 1002501717\n"
    },
    {
      "commit": "0e8e75a52d19fa5066f00771ffa35d848d8a74c8",
      "tree": "073c58dda960e403800a750b4d0d4c7abb530b57",
      "parents": [
        "8f9e43c053e50efe14afc041e0f6cb5000941c72"
      ],
      "author": {
        "name": "Ping Yu",
        "email": "piyu@google.com",
        "time": "Mon Oct 19 18:43:03 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 18:47:04 2026"
      },
      "message": "[Tensor API] Qwen3.5 text decoder skeleton: config, weight map, attention/MLP graph, GDN gap; ML Drift parity.\n\nLiteRT-PiperOrigin-RevId: 1002485243\n"
    },
    {
      "commit": "8f9e43c053e50efe14afc041e0f6cb5000941c72",
      "tree": "c4335ba59cf5bde3cbba8fce95f6ca6a785291fe",
      "parents": [
        "29a514492e9dda25c56330c9cfc9dcebc7047284"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Mon Oct 19 18:33:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 18:37:03 2026"
      },
      "message": "Onboard qualcomm_ats_aot to the LiteRT ATS NPU AOT test suite.\n\nLiteRT-PiperOrigin-RevId: 1002478730\n"
    },
    {
      "commit": "29a514492e9dda25c56330c9cfc9dcebc7047284",
      "tree": "16f8041d917facd3bc5d86998ee005d2342050af",
      "parents": [
        "afb64ec28c4069afbc60644d3ef60f9b191043a0"
      ],
      "author": {
        "name": "Quentin Khan",
        "email": "qkhan@google.com",
        "time": "Mon Oct 19 17:38:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 17:41:59 2026"
      },
      "message": "Create a YNNPACK backend for the Tensor API.\n\nLiteRT-PiperOrigin-RevId: 1002440173\n"
    },
    {
      "commit": "afb64ec28c4069afbc60644d3ef60f9b191043a0",
      "tree": "237e2c2ffb3439e020f2924c8fa657163d27adf3",
      "parents": [
        "7c5bdd919bea6897ea2f17041016cb4fe23728bc"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Mon Oct 19 17:21:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 17:25:21 2026"
      },
      "message": "Materialize dynamic input dimensions to 1 in ExtraModel::MakeInputs.\n\nLiteRT-PiperOrigin-RevId: 1002427544\n"
    },
    {
      "commit": "7c5bdd919bea6897ea2f17041016cb4fe23728bc",
      "tree": "8830b0c00ea2fc06803f0f99d0d82b8df59414ee",
      "parents": [
        "f49461f65c73bfa3cada9f656189494f48330031"
      ],
      "author": {
        "name": "Quentin Khan",
        "email": "qkhan@google.com",
        "time": "Mon Oct 19 17:12:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 17:16:43 2026"
      },
      "message": "Update XNNPACK and its dependencies (KleidiAI, slinky and cpuinfo).\n\n- Disable YNNPACK\u0027s SME and SME2 kernels when the Android CI builds the Tensor\n  API: the Clang of the Android NDK r26 it uses doesn\u0027t have `arm_sme.h`.\n\nLiteRT-PiperOrigin-RevId: 1002421013\n"
    },
    {
      "commit": "f49461f65c73bfa3cada9f656189494f48330031",
      "tree": "f874cd81c0d1c8dd935ac583b0b033e79cab951f",
      "parents": [
        "585622e7497abe23afa65bc0178efd0f9030e459"
      ],
      "author": {
        "name": "Esun Kim",
        "email": "veblush@google.com",
        "time": "Mon Oct 19 15:15:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 15:17:02 2026"
      },
      "message": "Remove uint8 special case in GetQuantizedConvolutionMultipler.\n\nUse double precision for input-\u003eparams.scale * filter-\u003eparams.scale across all types in GetQuantizedConvolutionMultipler.\n\nPiperOrigin-RevId: 1002350100\n"
    },
    {
      "commit": "585622e7497abe23afa65bc0178efd0f9030e459",
      "tree": "fb26dbf1f7d169c59d0d58a3d756c5a62647393c",
      "parents": [
        "d45ae3c912f1412c5044e198b89d4ed87369f79f"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Mon Oct 19 14:48:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 14:52:32 2026"
      },
      "message": "Unify in-place GPU state updates for `odml.short_conv_step` and `gated_delta_update` under `kGpuOptimizedInplace`.\n\nLiteRT-PiperOrigin-RevId: 1002334687\n"
    },
    {
      "commit": "d45ae3c912f1412c5044e198b89d4ed87369f79f",
      "tree": "a089d1925ee49e9b30d557e47407fa4ecd038a84",
      "parents": [
        "44455548be35bde21737b8a28ef0d027632c282d"
      ],
      "author": {
        "name": "lao fan",
        "email": "928784910@qq.com",
        "time": "Mon Oct 19 10:42:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 10:43:52 2026"
      },
      "message": "PR #127026: Fix L2 normalization fusion for multi-axis reductions\n\nImported from GitHub PR https://github.com/tensorflow/tensorflow/pull/127026\n\n ## Summary\n\n  This change prevents the L2 normalization rewrite from fusing reductions over\n  multiple axes.\n\n  `TFL_L2_NORMALIZATION` normalizes only along the trailing dimension. The existing\n  constraint also accepted an axis list containing every input dimension, which could\n  change a global L2 normalization into a per-trailing-dimension normalization.\n\n  The updated constraint:\n\n  - requires exactly one reduction axis;\n  - accepts `rank - 1` or its equivalent negative index `-1`;\n  - leaves multi-axis normalization patterns unfused.\n\n  A regression test verifies that the `square -\u003e sum -\u003e rsqrt -\u003e mul` sequence is\n  preserved for `axis \u003d [0, 1]`.\n\n  ## Testing\n\n  ```text\n  bazel test //tensorflow/compiler/mlir/lite/tests:optimize.mlir.test\n```\n\n  Fixes #118181\n\n  Related to google-ai-edge/LiteRT#9212.\n  This supersedes my earlier attempt in google-ai-edge/LiteRT#9464.\nCopybara import of the project:\n\n--\n77ca4ae1875444c082305d7436ede3a1cbd8667c by wuren \u003c928784910@qq.com\u003e:\n\nFix L2 normalization fusion for multi-axis reductions\n\n--\nb9558b9b5623b97a415d1540af413687cd1d67fa by wuren \u003c928784910@qq.com\u003e:\n\nPreserve safe all-axis L2 normalization fusion\n\n--\n6b5677b9f78509d5c1a147b72db0eb188db2e7fd by wuren \u003c928784910@qq.com\u003e:\n\nfix: guard scalar inputs in L2 normalization fusion\n\nReject rank-zero inputs before checking reduction axes. Iterate axis values directly and add scalar and rank-three regression tests addressing review feedback on #127026.\n\nMerging this change closes #127026\n\nLiteRT-Converter-PiperOrigin-RevId: 1002223142\n"
    },
    {
      "commit": "44455548be35bde21737b8a28ef0d027632c282d",
      "tree": "db69e5cfeda384b54db9b77b114795a217435089",
      "parents": [
        "0d58dc4d0838d13ea1e54117f8d386a3bb9b8aa0"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Mon Oct 19 07:07:58 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 07:09:16 2026"
      },
      "message": "Automated Code Change\n\nPiperOrigin-RevId: 1002126877\n"
    },
    {
      "commit": "0d58dc4d0838d13ea1e54117f8d386a3bb9b8aa0",
      "tree": "e4b7818a940cb2f81823fa309c6b7df4fee6120f",
      "parents": [
        "3a26d1209a24c74b49d552d95a3c5cf8d5c438a9"
      ],
      "author": {
        "name": "Ping Yu",
        "email": "piyu@google.com",
        "time": "Sun Oct 18 17:15:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Oct 18 17:19:26 2026"
      },
      "message": "[Tensor API] Persist and round-trip hierarchical graph::Scope in TFLite FlatBuffers.\n\nLiteRT-PiperOrigin-RevId: 1001872224\n"
    },
    {
      "commit": "3a26d1209a24c74b49d552d95a3c5cf8d5c438a9",
      "tree": "ba9bbdf96e5dc8bf2451227028c83f057ff7bb0e",
      "parents": [
        "ab0f2b30953a242200f2e2c9db710856aa7dc8b5"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Sat Oct 17 09:36:03 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 09:39:54 2026"
      },
      "message": "Enable multi-iteration latency benchmarking on ATS ExtraModel test suites.\n\nLiteRT-PiperOrigin-RevId: 1001392502\n"
    },
    {
      "commit": "ab0f2b30953a242200f2e2c9db710856aa7dc8b5",
      "tree": "29708b04c3271e307b8f3ce89f5e14bdff05a267",
      "parents": [
        "5d305798c056f0731330818eae0127fec5719c95"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Sat Oct 17 08:04:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 08:08:35 2026"
      },
      "message": "Add LayerNorm Generator to ATS.\n\nLiteRT-PiperOrigin-RevId: 1001363232\n"
    },
    {
      "commit": "5d305798c056f0731330818eae0127fec5719c95",
      "tree": "f70528b0163123e0cf990a3b759d9fb7da64c300",
      "parents": [
        "fdb3785c7a211db33aab4e3c26316d12253f55bb"
      ],
      "author": {
        "name": "Changming Sun CA",
        "email": "changmingsun@google.com",
        "time": "Sat Oct 17 04:51:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 04:56:30 2026"
      },
      "message": "Harden LiteRT model verification and shape inference.\n\nFuzzing of LiteRT model loading, verification, and shape inference uncovered three classes of undefined behavior on malformed FlatBuffers: out-of-range `BuiltinOperator` enum casts in `FlatbufferContext::SetOpCode`, out-of-bounds `output_shapes[0]` accesses when operators declare zero output tensors, and 32-bit signed integer overflows when computing spatial and shape inference output dimensions.\n\nValidate `OperatorCode` tables in `ValidateFlatBufferOperatorCodes` during `VerifyModel` and reject out-of-range `builtin_code` or `deprecated_builtin_code` values in `FlatbufferContext::SetOpCode` before casting to `LiteRtOpCode`. Guard `AdaptToStatelessOpInferrer` and individual operator shape inferrers against zero-output operators and negative dimensions below `-1`, and use `SafeInt` arithmetic across spatial, pooling, padding, convolution, matmul, reduction, reshape, and tensor manipulation shape inferrers to reject overflowing dimension calculations. Add unit tests for the new validation paths and structured FuzzTests targeting `ValidateFlatBufferOperatorCodes`, `ValidateFlatBufferTensors`, and `ShapeInferenceEngine::InferOpShapes` directly.\n\nLiteRT-PiperOrigin-RevId: 1001297239\n"
    },
    {
      "commit": "fdb3785c7a211db33aab4e3c26316d12253f55bb",
      "tree": "b00b91255b67d573e0127306d9b7a41a0b136b35",
      "parents": [
        "d481ae54706399ac9d406988f3856b9e9f922923"
      ],
      "author": {
        "name": "Weiyi Wang",
        "email": "weiyiw@google.com",
        "time": "Sat Oct 17 01:16:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 01:20:08 2026"
      },
      "message": "Internal only change\n\nLiteRT-PiperOrigin-RevId: 1001224551\n"
    },
    {
      "commit": "d481ae54706399ac9d406988f3856b9e9f922923",
      "tree": "9a237ee53bf07703cde8c926a6efba385e7f5e06",
      "parents": [
        "bfbe14d64dfb4dae7f48f2a48b67e15ab63feab6"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Sat Oct 17 01:00:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 01:03:36 2026"
      },
      "message": "Support STABLEHLO_COMPOSITE (odml.group_norm) with full reduction_axes [1, ..., n-1] when sub_type is not specified.\n\nLiteRT-PiperOrigin-RevId: 1001218128\n"
    },
    {
      "commit": "bfbe14d64dfb4dae7f48f2a48b67e15ab63feab6",
      "tree": "478eae1ef260cf2c7ee56dab6561612170b50e5f",
      "parents": [
        "a2305757ef054cddc0038955b503f57344ceb57a"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Fri Oct 16 19:44:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 19:47:38 2026"
      },
      "message": "Expand `SLICE` fuzz test coverage in `slice_fuzz_test.cc`:\n\n- Re-enable `SliceRejectsInvalidBegins` and `SliceReferenceRejectsInvalidBegins`.\n- Allow `RunSliceCase` to construct models where `begin.size() !\u003d input_shape.size()` and add `MalformedSliceIndexLengthCaseDomain`, `SliceRejectsMismatchedIndexLength`, and `SliceReferenceRejectsMismatchedIndexLength`.\n- Move deterministic `TEST` cases (`RankSixReferencePathSmoke`, `SliceXnnpackRankSixSmokeDelegates`, `RejectsMismatchedBeginAndSizeIndexTypes`) to `SLICE` unit tests (`slice_test.cc` and `delegates/xnnpack/slice_test.cc`).\n\nLiteRT-PiperOrigin-RevId: 1001035818\n"
    },
    {
      "commit": "a2305757ef054cddc0038955b503f57344ceb57a",
      "tree": "7b91e2c9ff464abcd6d41ff758d682354faf0c8c",
      "parents": [
        "db2f08db9d044ea6ae8ce947f426cf1a813f3308"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 18:35:58 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 18:39:44 2026"
      },
      "message": "Add MoeExperts (odml.moe_experts) Generator to ATS.\n\nLiteRT-PiperOrigin-RevId: 1000991260\n"
    },
    {
      "commit": "db2f08db9d044ea6ae8ce947f426cf1a813f3308",
      "tree": "8c2e945e7766d538648b573bcbaf9bc34d0b0677",
      "parents": [
        "3d0b2bcac681ff7b163ff334e2ebfbe6e5ebdf72"
      ],
      "author": {
        "name": "Terry Heo",
        "email": "terryheo@google.com",
        "time": "Fri Oct 16 18:09:14 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 18:13:02 2026"
      },
      "message": "Use top-level actions/cache in Linux container workflows\n\n- Replaced actions/cache/restore and actions/cache/save with top-level\n  actions/cache in cmake_android_linux_x86_64.yml and linux_nightly_wheel.yml\n  to fix missing dist/restore-only/index.js module errors in container pods.\n- Moved cache deletion before the cache step when refreshing cache in\n  cmake_android_linux_x86_64.yml.\n\nLiteRT-PiperOrigin-RevId: 1000972637\n"
    },
    {
      "commit": "3d0b2bcac681ff7b163ff334e2ebfbe6e5ebdf72",
      "tree": "a5137533751fea88ed2a05d6c76c9873d2db38b1",
      "parents": [
        "484131d9d1cf1802b4375c08a9b6e2fb777974aa"
      ],
      "author": {
        "name": "Weiyi Wang",
        "email": "weiyiw@google.com",
        "time": "Fri Oct 16 17:57:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 18:00:33 2026"
      },
      "message": "Remove GitHub team link from LiteRT CODEOWNERS.\n\nLiteRT-PiperOrigin-RevId: 1000964414\n"
    },
    {
      "commit": "484131d9d1cf1802b4375c08a9b6e2fb777974aa",
      "tree": "8e0286ed804463ec55f3b507b19d30bda9f38e77",
      "parents": [
        "b0983dc2dc27141a64fba7553f40299631e65937"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 17:12:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 17:17:17 2026"
      },
      "message": "Promote non-external `odml.cache_update` outputs to buffer storage in `LiteRtOpSelector`.\n\nLiteRT-PiperOrigin-RevId: 1000935062\n"
    },
    {
      "commit": "b0983dc2dc27141a64fba7553f40299631e65937",
      "tree": "880e3314af0b1e6e0cb4c9919ec9f6b3ebd5b41c",
      "parents": [
        "cdade5eb890c1941b162099be58fa8f8c500233a"
      ],
      "author": {
        "name": "Quentin Khan",
        "email": "qkhan@google.com",
        "time": "Fri Oct 16 11:18:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 11:22:07 2026"
      },
      "message": "Don\u0027t repeat KV heads in SDPA.\n\n**Gemma 4**\n\n`Pixel 10`, 212 token prompt, 1024 decoded tokens.\n| Model | Baseline (ms/tok) | This change (ms/tok) |        Δ | Throughput                |\n|:-----:|------------------:|---------------------:|---------:|---------------------------|\n|  E2B  |             50.80 |                49.07 |      −3% | 19.7 → 20.4 tok/s         |\n|  E4B  |            183.70 |               121.08 | **−34%** | 5.44 → 8.26 tok/s (1.52×) |\n\nLiteRT-PiperOrigin-RevId: 1000763912\n"
    },
    {
      "commit": "cdade5eb890c1941b162099be58fa8f8c500233a",
      "tree": "097e2c6080ef15858ae2d3a22b92d0223aa8cc09",
      "parents": [
        "481f1f655c4fc1362f67167c37b415bd44e49c1b"
      ],
      "author": {
        "name": "Alexandru Paiu",
        "email": "apaiu@google.com",
        "time": "Fri Oct 16 09:53:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 09:56:45 2026"
      },
      "message": "Check mldrift_compatibility in RegisterGpuAccelerator on Android.\n\nLiteRT-PiperOrigin-RevId: 1000725926\n"
    },
    {
      "commit": "481f1f655c4fc1362f67167c37b415bd44e49c1b",
      "tree": "3b20e3051ae54d5e43446124c3de533a72a3ccc4",
      "parents": [
        "20c6a1040e2c3cf084c67d395ff44a15b0277407"
      ],
      "author": {
        "name": "Matt Kreileder CA",
        "email": "mattalexander@google.com",
        "time": "Fri Oct 16 09:21:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 09:25:18 2026"
      },
      "message": "Exclude Intel OpenVINO guitar validation tests from arm builds.\n\nLiteRT-PiperOrigin-RevId: 1000712173\n"
    },
    {
      "commit": "20c6a1040e2c3cf084c67d395ff44a15b0277407",
      "tree": "565cdb3539ef178af1432660b52fb391248bc0d3",
      "parents": [
        "4b5599afe4cab7fdfd836f0c57077d3692f6f60a"
      ],
      "author": {
        "name": "Quentin Khan",
        "email": "qkhan@google.com",
        "time": "Fri Oct 16 08:47:56 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 08:51:01 2026"
      },
      "message": "Allow the buffers in the `SafetensorLoader` to not be ordered by offset.\n\nLiteRT-PiperOrigin-RevId: 1000695860\n"
    },
    {
      "commit": "4b5599afe4cab7fdfd836f0c57077d3692f6f60a",
      "tree": "be18d3098236e572199c3a6baede827ee46b8a9b",
      "parents": [
        "45b6211540b8ee0320b80095cb8516a53cfe198c",
        "4935c8fcb32dbabd4e7987f544ca615bc39af19f"
      ],
      "author": {
        "name": "jl45G",
        "email": "jingjiangli@google.com",
        "time": "Fri Oct 16 06:40:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 06:40:35 2026"
      },
      "message": "Merge pull request #10966 from google-ai-edge/litert_pr_1000636638\n\nThis is an internal change"
    },
    {
      "commit": "4935c8fcb32dbabd4e7987f544ca615bc39af19f",
      "tree": "be18d3098236e572199c3a6baede827ee46b8a9b",
      "parents": [
        "45b6211540b8ee0320b80095cb8516a53cfe198c"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 06:23:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 06:28:54 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000636638\n"
    },
    {
      "commit": "45b6211540b8ee0320b80095cb8516a53cfe198c",
      "tree": "af302dee1ef5cf7158cb33dc6dd82ec68b65492d",
      "parents": [
        "1810bd3280f47572cefd25b91880e83a60f9324f"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:50:39 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:31:41 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000601393\n"
    },
    {
      "commit": "1810bd3280f47572cefd25b91880e83a60f9324f",
      "tree": "b706c524562098a8ebc6d158b82dba0c57f0c7c0",
      "parents": [
        "e8421a132afd8f6a148ed5390aa6161296fe73f9"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:50:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:27:59 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000601216\n"
    },
    {
      "commit": "e8421a132afd8f6a148ed5390aa6161296fe73f9",
      "tree": "e37e8c1ed83ce950e62355b4394b933841dea001",
      "parents": [
        "2b7daa19ade0d817eb2ada3be0597f71fca5f6cd"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:49:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:24:47 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000601061\n"
    },
    {
      "commit": "2b7daa19ade0d817eb2ada3be0597f71fca5f6cd",
      "tree": "9ce66bf1f1cc8f0ceb6874c7bc6da51ec7d5844a",
      "parents": [
        "469072e962571fd672ae5d6b48f157abf019c9bf"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:49:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:20:59 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000600853\n"
    },
    {
      "commit": "469072e962571fd672ae5d6b48f157abf019c9bf",
      "tree": "3d1c7c783c7b1fb30918e62da9d13eb0f12df51a",
      "parents": [
        "8a0173a9a5973bff81a9207a9d2d40ccba43c1b3"
      ],
      "author": {
        "name": "Andrew Zhang",
        "email": "yunandrew@google.com",
        "time": "Fri Oct 16 04:48:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:17:10 2026"
      },
      "message": "Drop IoT SHA256SUMS file.\n\nLiteRT-PiperOrigin-RevId: 1000600658\n"
    },
    {
      "commit": "8a0173a9a5973bff81a9207a9d2d40ccba43c1b3",
      "tree": "cd727a96cdb5e6ca1828a30d4bc97c77805c9d17",
      "parents": [
        "b85895f03ca2d091b3f85ad13ac2e244147d5fcf"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:48:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:13:12 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000600646\n"
    },
    {
      "commit": "b85895f03ca2d091b3f85ad13ac2e244147d5fcf",
      "tree": "b336b78be2eee88a018793dcd7fa96cff936958f",
      "parents": [
        "99525baa5dcf67cba816463ae015b15a50266dc2"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:46:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:09:01 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000599790\n"
    },
    {
      "commit": "99525baa5dcf67cba816463ae015b15a50266dc2",
      "tree": "ebd57b094c219cfd6a544cdc1ae71c22d21f3b91",
      "parents": [
        "9ea6c2f1595eb7d291555afd5f7c19451a909f9e"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:45:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:05:17 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000599620\n"
    },
    {
      "commit": "9ea6c2f1595eb7d291555afd5f7c19451a909f9e",
      "tree": "549ce7d612d28d82a01f240c62cd9604f75a6fa6",
      "parents": [
        "76f7e8b59e139a98edd44b01972c31b6f8743f86"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:45:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 05:01:52 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000599391\n"
    },
    {
      "commit": "76f7e8b59e139a98edd44b01972c31b6f8743f86",
      "tree": "a2b0d1d7505519c1b39a5692efeb30dd5dd8e9bc",
      "parents": [
        "c424f91452ea4a1daa47cfd46d3b3900046d1410"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:44:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 04:58:45 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000599206\n"
    },
    {
      "commit": "c424f91452ea4a1daa47cfd46d3b3900046d1410",
      "tree": "d0a738aa79a6033d949955d13dc852b822e702ec",
      "parents": [
        "553876a1fa0e0442b16848543df7d142aaf03736"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:44:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 04:53:01 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000599074\n"
    },
    {
      "commit": "553876a1fa0e0442b16848543df7d142aaf03736",
      "tree": "9f4c8dcbf6ef2a56e200bf5853558f8c71d1c6bc",
      "parents": [
        "24ace46272d164c6b5185838825c8442828cc1b2"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 04:43:52 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 04:47:16 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 1000598912\n"
    },
    {
      "commit": "24ace46272d164c6b5185838825c8442828cc1b2",
      "tree": "0cfd58c30355ebb49bac5601b5f421bee256d762",
      "parents": [
        "0d64c923425d693d716e7ffda436ac77b0c5f925"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 04:10:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 04:20:56 2026"
      },
      "message": "Ensure natural alignment for read-only tensor buffers in `Subgraph::SetTensorParametersReadOnly`\n\nLiteRT-PiperOrigin-RevId: 1000587435\n"
    },
    {
      "commit": "0d64c923425d693d716e7ffda436ac77b0c5f925",
      "tree": "a3dd7f67a806a878ab93ebc73d4f7ab7c65cf7c5",
      "parents": [
        "7a207625bb1aa71189bea4a52c5b08546366bcae"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 04:10:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 04:12:14 2026"
      },
      "message": "Ensure natural alignment for read-only tensor buffers in `Subgraph::SetTensorParametersReadOnly`\n\nPiperOrigin-RevId: 1000587435\n"
    },
    {
      "commit": "7a207625bb1aa71189bea4a52c5b08546366bcae",
      "tree": "279650041e9b97cfee4a55743424f892c9875355",
      "parents": [
        "e43a4e6456dec7d706ce2b52235dbbe873c0b9d0"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 03:44:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 03:49:49 2026"
      },
      "message": "Enforce 16-byte buffer alignment in FlatBuffer export.\n\nLiteRT-PiperOrigin-RevId: 1000578242\n"
    },
    {
      "commit": "e43a4e6456dec7d706ce2b52235dbbe873c0b9d0",
      "tree": "220b463a3eca7f7073d349aece6a691f1c8eee03",
      "parents": [
        "d6f5db3fa875f3e897e754ff3b27a7cc5db515d4"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 03:44:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 03:45:10 2026"
      },
      "message": "Enforce 16-byte buffer alignment in FlatBuffer export.\n\nLiteRT-Converter-PiperOrigin-RevId: 1000578242\n"
    },
    {
      "commit": "d6f5db3fa875f3e897e754ff3b27a7cc5db515d4",
      "tree": "0392d48ba033ff14ce1ac05abfc365c6323be1f1",
      "parents": [
        "8ed451800114e5812e36590b554f8e7841fb7543"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 03:41:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 03:44:15 2026"
      },
      "message": "Pass RuntimeBmm control tensor as a dynamic input for ATS.\n\nLiteRT-PiperOrigin-RevId: 1000577282\n"
    },
    {
      "commit": "8ed451800114e5812e36590b554f8e7841fb7543",
      "tree": "0458f7280a32aef1047385ee9e46907dbd0ead97",
      "parents": [
        "9f02430c332fc084aacbf03f4b0ad5167f90eb6a"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Fri Oct 16 02:36:27 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 02:40:22 2026"
      },
      "message": "Support Bool, Int8, UInt8, and Int16 in untemplated SimpleBuffer::WriteRandom.\n\nLiteRT-PiperOrigin-RevId: 1000553094\n"
    },
    {
      "commit": "9f02430c332fc084aacbf03f4b0ad5167f90eb6a",
      "tree": "eb7d78cf6e4c8016f7a42851b273a1d881d0d022",
      "parents": [
        "951b9336bdab9e2054445951289e4e5c78f420ab"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Fri Oct 16 01:36:14 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 01:42:19 2026"
      },
      "message": "Add missing relu_min_max.cc source to QNN transformation CMake build.\n\nPR #9996 added `qnn::FuseMinMaxOpsToReLUMinMax` in `relu_min_max.cc` and wired it into `graph_to_graph.cc` and the Bazel build, but omitted `relu_min_max.cc` from `target_sources(qnn_transformation ...)` in `CMakeLists.txt`, causing an undefined reference linker error in CMake builds.\n\nLiteRT-PiperOrigin-RevId: 1000531651\n"
    },
    {
      "commit": "951b9336bdab9e2054445951289e4e5c78f420ab",
      "tree": "aa26e0a80c38b85b31dc9d573e1ce278c53a8752",
      "parents": [
        "6f0c91111482b0b6cca70d1383c2fe9a8cca7145"
      ],
      "author": {
        "name": "Aravind Murali",
        "email": "aravindmurali@google.com",
        "time": "Thu Oct 15 21:42:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 21:50:40 2026"
      },
      "message": "Fix QnnTypes.h include path in conv2d_test.cc\n\nLiteRT-PiperOrigin-RevId: 1000404687\n"
    },
    {
      "commit": "6f0c91111482b0b6cca70d1383c2fe9a8cca7145",
      "tree": "bf595be8918773ddfd7f0661b1d14ed3397b88d4",
      "parents": [
        "e0fd6318389f18d337035f8b66f962f09a653207",
        "21211e789d66a61fc23647b52c182085d27ecfd9"
      ],
      "author": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 21:22:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 21:22:20 2026"
      },
      "message": "Merge pull request #10742 from YingyingMaIntel:unflod_gqa_sequence\n\nLiteRT-PiperOrigin-RevId: 1000388232\n"
    },
    {
      "commit": "e0fd6318389f18d337035f8b66f962f09a653207",
      "tree": "f2776bfe2a489689b54e564f50f427f4509f6841",
      "parents": [
        "309cf084eb93470ed4b1999e6fa45d580252992c",
        "98737e7158914084f6b1990613945e354185b0b4"
      ],
      "author": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 20:47:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 20:47:42 2026"
      },
      "message": "Merge pull request #9996 from graham0824:dev/hungjuiw/relu-min-max\n\nLiteRT-PiperOrigin-RevId: 1000362872\n"
    },
    {
      "commit": "309cf084eb93470ed4b1999e6fa45d580252992c",
      "tree": "0065ed46230ac68124bd3afb2788cc92b3085caa",
      "parents": [
        "f8bccfc8470fdce6edc354f2b2996cf3a761ff4b"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 19:42:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 19:44:18 2026"
      },
      "message": "Fold f32, DRQ, and Weight-Only Conv2D, DepthwiseConv2D, TransposeConv, and FC ops.\n\nReverts ea75322fb1d28f90f155df96d1eef09c389d5369\n\nLiteRT-Converter-PiperOrigin-RevId: 1000323289\n"
    },
    {
      "commit": "f8bccfc8470fdce6edc354f2b2996cf3a761ff4b",
      "tree": "ee3b2c9aa2a944eeb7f257b83a68e7a83c937c99",
      "parents": [
        "d71ba31e1d7841079caab00152b7c7708e9d9406",
        "3560a7fb4db7552b08180142e24f45d5577752b8"
      ],
      "author": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 19:37:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 19:37:08 2026"
      },
      "message": "Merge pull request #10658 from akodanka:looped_write\n\nLiteRT-PiperOrigin-RevId: 1000317412\n"
    },
    {
      "commit": "d71ba31e1d7841079caab00152b7c7708e9d9406",
      "tree": "468c3e12541c50b24766ff7a9d52a1c209e0c268",
      "parents": [
        "13daf66a5d965a696549a92a2e3a44f64546f2b0"
      ],
      "author": {
        "name": "Gerardo Carranza",
        "email": "gcarranza@google.com",
        "time": "Thu Oct 15 19:19:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 19:21:28 2026"
      },
      "message": "Mark decomposition subgraphs as delegation-skippable in YNNPackDelegate.\n\nPiperOrigin-RevId: 1000308956\n"
    },
    {
      "commit": "13daf66a5d965a696549a92a2e3a44f64546f2b0",
      "tree": "0dd9b447cd96b784c34b3de5f24ab82adec10886",
      "parents": [
        "ea75322fb1d28f90f155df96d1eef09c389d5369",
        "395f9646c276d6567214eb7a1925989653dc8e6d"
      ],
      "author": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 19:00:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 19:00:31 2026"
      },
      "message": "Merge pull request #10629 from YingyingMaIntel:26b_moe_prefill_p2\n\nLiteRT-PiperOrigin-RevId: 1000292737\n"
    },
    {
      "commit": "ea75322fb1d28f90f155df96d1eef09c389d5369",
      "tree": "5c496fd232150ec9bd98604e2f3751264017ecac",
      "parents": [
        "8cf9a2fdcb7e7d0350e94bb703601f024e4e7842"
      ],
      "author": {
        "name": "Artsiom Ablavatski",
        "email": "artsiom@google.com",
        "time": "Thu Oct 15 17:41:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 17:42:45 2026"
      },
      "message": "Fold f32, DRQ, and Weight-Only Conv2D, DepthwiseConv2D, TransposeConv, and FC ops.\n\nLiteRT-Converter-PiperOrigin-RevId: 1000238610\n"
    },
    {
      "commit": "8cf9a2fdcb7e7d0350e94bb703601f024e4e7842",
      "tree": "1c24cfc449346671a5f774e37be5d6a2b3758400",
      "parents": [
        "97dbc0ad953d9bac40b2b18f71ecc4259f80a8d1"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 16:16:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 16:18:05 2026"
      },
      "message": "[tflite] Constant-fold PAD with a constant input.\n\n`PadOp::fold` only handled the no-op case (input and output shapes equal), so a\n`PAD` whose input and paddings are both constant survived into the flatbuffer.\nDelegates that require a runtime data input reject such a node; ML Drift\nreports `PAD: inputs[0] should not be a constant tensor.`\n\nThis shows up in Swin: torchvision\u0027s `shifted_window_attention` builds the\nshifted-window attention mask from static shapes, and its decomposition starts\nfrom a constant `PAD` in each shifted stage. Fold a constant input padded by\nconstant amounts (with zeros, as `PAD` does), subject to the usual\n`ShouldFoldOperation` size limit. Quantized element types are left unfolded.\n\nLiteRT-Converter-PiperOrigin-RevId: 1000183464\n"
    },
    {
      "commit": "98737e7158914084f6b1990613945e354185b0b4",
      "tree": "7857996ddab5ba6956383271a48bc8f165f527fb",
      "parents": [
        "29cf1646bb90fa78ddd74ac54d379a1159686e6a"
      ],
      "author": {
        "name": "hungjuiw",
        "email": "hungjuiw@qti.qualcomm.com",
        "time": "Thu Oct 15 15:14:14 2026"
      },
      "committer": {
        "name": "hungjuiw",
        "email": "hungjuiw@qti.qualcomm.com",
        "time": "Thu Oct 15 15:42:50 2026"
      },
      "message": "Fix review comments\n"
    },
    {
      "commit": "97dbc0ad953d9bac40b2b18f71ecc4259f80a8d1",
      "tree": "85b7f8e62a8e4f4c066900ed4690e770f947436a",
      "parents": [
        "791e0653bf1646c0822ca50b0d30dcb372c88765"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 12:27:02 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 12:38:23 2026"
      },
      "message": "Refactor litert_api_no_jni to export sub-libraries.\n\nReplaces the direct compilation of sources in litert_api_no_jni with exports of litert_compiled_model_api_no_jni and litert_interpreter_api_no_jni. Same for litert_api_no_jni_no_aipack.\n\nReverts 1ca66ebb76e0708d7f2e7a0639c85d8b6ecb8f89\n\nLiteRT-PiperOrigin-RevId: 1000067638\n"
    },
    {
      "commit": "791e0653bf1646c0822ca50b0d30dcb372c88765",
      "tree": "34efd2bae743a9794ee7b4601de3a137cf995bfa",
      "parents": [
        "86bbf78e5b5dd4d6ecebcfd10609d09b471ce618"
      ],
      "author": {
        "name": "Quentin Khan",
        "email": "qkhan@google.com",
        "time": "Thu Oct 15 12:26:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 12:27:35 2026"
      },
      "message": "Use a `size_t` instead of an `int` in `LoadLastBuildStep`.\n\nThis allows us to build cache files that are over 2 GiB.\n\nPiperOrigin-RevId: 1000067200\n"
    },
    {
      "commit": "86bbf78e5b5dd4d6ecebcfd10609d09b471ce618",
      "tree": "1293093b4b9b7b6aa988d96de611cd2b01ae4014",
      "parents": [
        "1ca66ebb76e0708d7f2e7a0639c85d8b6ecb8f89"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 11:56:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 11:59:51 2026"
      },
      "message": "Fix RoPE with src_sh.b !\u003d pos_sh.b\n\nIn cl/998199345, RoPE shape validation was tightened to require src and pos to have identical batch sizes (src_sh.b \u003d\u003d pos_sh.b). However, a valid use case is src_sh \u003d [n_frames, H, W, C], while the 2D position grid may have batch size pos_sh.b \u003d 1. This makes the GPU delegate fall back to the STABLEHLO_COMPOSITE subgraph.\n\nThis CL allows pos_sh.b !\u003d src_sh.b if pos_sh.b is 1. The ML Drift RoPE GPU kernels (CreateRoPE and CreateSplitRoPEConcat) handle this situation, they broadcast pos with batch size 1 across src batches.\n\nLiteRT-PiperOrigin-RevId: 1000054698\n"
    },
    {
      "commit": "29cf1646bb90fa78ddd74ac54d379a1159686e6a",
      "tree": "2e87a06986caf1b0afba786904e00124e00fdd87",
      "parents": [
        "97fbc68f81488028c18f77e5584eb0c3eac16839"
      ],
      "author": {
        "name": "hungjuiw",
        "email": "hungjuiw@qti.qualcomm.com",
        "time": "Wed Sep 16 10:06:01 2026"
      },
      "committer": {
        "name": "hungjuiw",
        "email": "hungjuiw@qti.qualcomm.com",
        "time": "Thu Oct 15 09:34:11 2026"
      },
      "message": "Qualcomm AI Engine Direct - Add FuseMinMaxOpsToReLUMinMax.\n\nSummary:\n- Add FuseMinMaxOpsToReLUMinMax to enhance performance.\n- Add corresponding unit tests.\n"
    },
    {
      "commit": "1ca66ebb76e0708d7f2e7a0639c85d8b6ecb8f89",
      "tree": "8a23f75ba53a506bb68bcda625629fa9442791b8",
      "parents": [
        "b6bc76939f2f6087c771342d7a705ff0d2934e38"
      ],
      "author": {
        "name": "Catalin Termure",
        "email": "catalintermure@google.com",
        "time": "Thu Oct 15 09:25:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 09:29:12 2026"
      },
      "message": "Refactor litert_api_no_jni to export sub-libraries.\n\nReplaces the direct compilation of sources in litert_api_no_jni with exports of litert_compiled_model_api_no_jni and litert_interpreter_api_no_jni. Same for litert_api_no_jni_no_aipack.\n\nLiteRT-PiperOrigin-RevId: 999983363\n"
    },
    {
      "commit": "b6bc76939f2f6087c771342d7a705ff0d2934e38",
      "tree": "c7e970882d3929712dfbc4e61f4c15eba65a89a7",
      "parents": [
        "97fbc68f81488028c18f77e5584eb0c3eac16839"
      ],
      "author": {
        "name": "RohithPariki",
        "email": "159949499+RohithPariki@users.noreply.github.com",
        "time": "Thu Oct 15 07:45:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 07:46:33 2026"
      },
      "message": "PR #127955: Avoid re-logging non-variable input tensors post-evaluation in calibrator\n\nImported from GitHub PR https://github.com/tensorflow/tensorflow/pull/127955\n\nFixes #127842\n\n### Problem\nWhen evaluating operators during model calibration in `tensorflow/lite/tools/optimize/calibration/calibrator.cc`, input tensors were being logged twice: once prior to kernel invocation, and again after kernel invocation. When the `MemoryPlanner` / `ArenaPlanner` reuses an input tensor\u0027s memory buffer for an output tensor to save memory (as documented in `tensorflow/lite/core/subgraph.cc`), the second logging pass records the output tensor\u0027s values into the input tensor\u0027s calibration statistics, corrupting the input min/max ranges and subsequent quantization.\n\n### Root Cause\nIn `LoggingEval` (`calibrator.cc`), all `loggable_inputs` were re-logged after `kernel_invoke` with the original intent of capturing in-place state changes for variable tensors (such as LSTM cells). However, non-variable input tensors do not undergo in-place state changes during invocation; their values are already captured accurately prior to invocation. If their underlying buffer is reused by the memory planner for an output tensor, re-logging them post-invocation reads the overwritten output data instead of the input data.\n\n### Solution\nIn `calibrator.cc`, check `if (tensor.is_variable)` before re-logging input tensors post-invocation. Non-variable input tensors are already logged prior to kernel invocation and are skipped post-invocation, preventing overwritten shared buffers from corrupting input calibration statistics while preserving state logging for variable tensors (e.g. LSTM cells).\n\n### Testing\n- Added regression test `NonVariableInputsNotReLoggedPostInvocation` in `tensorflow/lite/tools/optimize/calibration/calibrator_test.cc` to verify that non-variable inputs maintain their pre-invocation calibration statistics.\n- Verified C++ style and syntax conformance.\n\n### Risk\nNone. Non-variable inputs do not change values during evaluation, so their pre-invocation logging captures their true values. Variable tensors retain their post-invocation logging.\n\nCopybara import of the project:\n\n--\n461fa22aa1b9b166c46db2925e2d37f332025e4c by Rohith Pariki \u003crohithpariki@gmail.com\u003e:\n\n[TFLite] Avoid re-logging non-variable input tensors post-evaluation in calibrator\n\nFixes #127842\n\nWhen evaluating operators in LoggingEval, input tensors are already logged\nprior to kernel invocation. Previously, all loggable inputs were logged a\nsecond time after kernel invocation with the intent of capturing state changes\nfor variable tensors (e.g. LSTM cells). However, when the MemoryPlanner / ArenaPlanner\nreuses or shares input tensor buffers with output tensors to save memory, this\nsecond logging step records output tensor values as input values, corrupting\ninput tensor min/max calibration statistics.\n\nOnly input tensors with is_variable \u003d\u003d true should be re-logged post-evaluation.\n\n--\n67137e9acb409bfdcffafacc28ccf6187bb53468 by Rohith Pariki \u003crohithpariki@gmail.com\u003e:\n\nAddress PR feedback: Add safety assertions to C++ unit tests to prevent null deref and undefined behavior\n\n--\n0d760bba0b4a328cb5a2cc55befa52704a442c05 by Rohith Pariki \u003crohithpariki@gmail.com\u003e:\n\nAddress review feedback: simulate buffer reuse in calibrator test, pass TfLiteTensor by const ref, and fix namespace formatting\n\n--\ned39579b8bb3b82d206c432daab066d2fd67ed80 by Rohith Pariki \u003crohithpariki@gmail.com\u003e:\n\nstyle: avoid pass-by-value copy of TfLiteTensor in all LoggingEval loops\n\nMerging this change closes #127955\n\nPiperOrigin-RevId: 999929959\n"
    },
    {
      "commit": "97fbc68f81488028c18f77e5584eb0c3eac16839",
      "tree": "1c54cf5c3aaa089386283e97103fe7f9c8c46209",
      "parents": [
        "da71531a2fa627b31b106c32843ba450a2178cdf"
      ],
      "author": {
        "name": "Layau Eulizier Jr",
        "email": "130326664+cybrdude@users.noreply.github.com",
        "time": "Thu Oct 15 06:52:53 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 06:56:30 2026"
      },
      "message": "PR #123123: security/fuzzing: add TFLite model load + interpreter invoke fuzz target\n\nImported from GitHub PR https://github.com/tensorflow/tensorflow/pull/123123\n\n### What\nAdds a FuzzTest target under `tensorflow/security/fuzzing/cc/` that loads a serialized `.tflite` model, builds an interpreter with the builtin op resolver, allocates tensors, and invokes. The OSS-Fuzz `tensorflow` build currently has no target that reaches TFLite model load / interpreter build / invoke, so this path is unfuzzed upstream.\n\n### Why\n`FlatBufferModel` -\u003e `InterpreterBuilder` -\u003e `AllocateTensors` -\u003e `Invoke` parses attacker-supplied model structure, including external-buffer descriptors handled in `interpreter_builder.cc` (`get_readonly_data` / `ParseTensors`). That path performs a `uint64` `offset + size` addition and compares it against `allocation_-\u003ebytes()`. Adding coverage here lets OSS-Fuzz continuously exercise external-offset handling, tensor wiring, and builtin-kernel eval on malformed models, which is a class of input the existing core fuzzers do not reach.\n\n### Change\n`tensorflow/lite/core/interpreter_builder.cc`: the two external-offset bounds checks (`ParseNodes`, large_custom_options; `ParseTensors`, Buffer offset) use the subtraction form `offset \u003e bytes || size \u003e bytes - offset` instead of `offset + size \u003e bytes`, so the uint64 sum can no longer wrap below `allocation_-\u003ebytes()`. The offset, size and allocation size are read once into locals. Requested in review (2026-09-16, 2026-10-03).\n\nOne new file plus a `tf_cc_fuzz_test` entry in `security/fuzzing/cc/BUILD`:\n\n```python\ntf_cc_fuzz_test(\n    name \u003d \"tflite_interp_overflow_fuzz\",\n    srcs \u003d [\"tflite_interp_overflow_fuzz.cc\"],\n    deps \u003d [\n        \"//tensorflow/lite:framework\",\n        \"//tensorflow/lite/c:common\",\n        \"//tensorflow/lite/kernels:builtin_ops\",\n    ],\n)\n```\n\nThe target uses only the public `//tensorflow/lite:framework`, `//tensorflow/lite/c:common` and `//tensorflow/lite/kernels:builtin_ops`, so no visibility changes are needed. The BUILD already loads `tf_cc_fuzz_test` (sibling targets use it). The harness returns early on any non-OK status so benign malformed inputs are not treated as findings; only a genuine memory-safety violation surfaces as a crash.\n\n### Notes for review\n- Dep closure is the public framework + builtin ops; if CI\u0027s linker wants a narrower or additional core target for the `tensorflow/lite/core/*` headers, I will adjust to match.\n- Happy to add a seed corpus entry in a follow-up if the fuzzing infra owners prefer a seeded start.\nCopybara import of the project:\n\n--\n653c77178c4839ca340b7179aae7b3222f708698 by cybrdude \u003clayau@netguard24-7.com\u003e:\n\nAdd TFLite interpreter-build fuzz target (model load + invoke)\n\nThe OSS-Fuzz tensorflow build has no fuzz target that reaches TFLite model load, interpreter build, and invoke. This adds one under security/fuzzing/cc, exercising interpreter_builder.cc external-buffer handling (get_readonly_data / ParseTensors), where an unchecked uint64 offset+size addition can bypass the allocation bounds check and set a wild read-only tensor pointer that is dereferenced during Invoke. Deps use the public //tensorflow/lite:framework and //tensorflow/lite/kernels:builtin_ops.\n\n--\n3eb7b68f504251c397ee07e253798d545d8027fc by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nUpdate tensorflow/security/fuzzing/cc/tflite_interp_overflow_fuzz.cc\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e\n--\n141f0b41e740c9e29e7696597a5155a183b760cc by cybrdude \u003clayau@netguard24-7.com\u003e:\n\nfuzz: zero-init runtime input tensors before Invoke to avoid MSan false positives\n\nAddresses gemini-code-assist review. TFLite\u0027s arena allocator does not zero tensor memory, so kernels reading uninitialized runtime inputs raise MemorySanitizer use-of-uninitialized-value reports. Only runtime inputs are zeroed, not the crafted constant buffer that carries the finding.\n\n--\n75365a8d636f7ec401b59abd3575c5bef90b6814 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nfuzz(tflite): use public TFLite headers instead of core internal paths\n\nSwitches the three lite/core includes to the public forwarding headers exported by //tensorflow/lite:framework, per review. Including the core internal package directly caused the dependency layering check to fail. Include block re-sorted. No functional change to the target.\n--\n1c832e34eabd2b20398be3b12cf879b1fb8656f7 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: verify the model before building it in the TFLite fuzz target\n\nPuts the harness on the supported ingress path for untrusted models: call\ntflite::Verify() first and stop on rejection, then build and invoke. The\nverifier owns the bounds checks on model metadata (tensorflow/tensorflow\n#116631 review, Sep 18; checks landed in #123910), so inputs like the\nuint64 external-offset wrap are rejected before ParseTensors, and the\nverifier itself gets fuzz coverage. No change to interpreter_builder.cc.\n\nVerifyAndBuildFromBuffer alone would not do this: without an extra_verifier\nit runs only the flatbuffers structural check.\n--\n0111afab059556333fd8514eb5a833007636db66 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: depend on //tensorflow/lite/tools:verifier for the TFLite fuzz target\n\nThe target now calls tflite::Verify() before building the model.\n--\nf1ef1e37f86accdc21240fa43881db9d9019f633 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: do not zero kTfLiteMmapRo inputs in the TFLite fuzz target\n\nA crafted model can declare a subgraph input backed by a constant buffer;\nthat tensor is kTfLiteMmapRo and points into the read-only model mapping,\nso the MSan zero-fill would fault on it. Skip those; they are initialized\nby the model already. Per review.\n--\nd481802c00127f44d8607a4841a620972fbb6e45 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: include \u003cvector\u003e and tensorflow/lite/c/common.h directly\n\nThe target uses TfLiteTensor, kTfLiteMmapRo, kTfLiteOk and std::vector;\ninclude their headers instead of relying on transitive includes. Per review.\n--\nae5b26db83123e460eb2658796ebce1601b9586e by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: depend on //tensorflow/lite/c:common for the TFLite fuzz target\n\nMatches the direct include of tensorflow/lite/c/common.h. Per review.\n--\n72272479b6209adccbc3f7ba7660af22cb607769 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: drop the tflite::Verify() gate from the TFLite fuzz target\n\nPer the Oct 3 review: malformed models go straight to InterpreterBuilder\nso its own handling of model metadata is what gets fuzzed. Removes the\nVerify() early return and its include; keeps the direct includes and the\nkTfLiteMmapRo exclusion from the earlier rounds.\n--\nfd2f77c447ec35203d6a6db8c0e672ba68033507 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: drop the verifier dep from the TFLite fuzz target\n\nThe target no longer calls tflite::Verify(). Per the Oct 3 review.\n--\ndb0ba16e36ff663983f49a9e5a7b544d227dd84b by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\ntflite: overflow-safe external-offset bounds checks in InterpreterBuilder\n\nBoth sites compared offset + size against allocation_-\u003ebytes() with two\nuint64_t operands; a pair whose sum wraps passed the check and the pointer\ncomputed from base + offset wrapped with it. Compare in the subtraction\nform instead, so the check cannot overflow. Same predicate for every valid\n(offset, size); only the wrapping pairs change outcome.\n\nRequested on this PR on Sep 16 and again on Oct 3 so the fuzz target in\nthe same change does not report a known crash. Re-applies the change from\n#116631 that was reverted on Sep 18; the verifier-side check from #123910\nstays, so both layers reject the wrap.\n--\n72567388959f68b271686cd87b6721845457bdee by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\ntflite: restore master ParseQuantization dropped by the previous commit\n\ndb0ba16 was applied to a stale copy of interpreter_builder.cc and removed\n56 lines of ParseQuantization that master had added. This puts the file\nback to master plus only the two bounds-check hunks.\n--\nc624d970b2667b4e96aa54579552600a8ed38e44 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: enter through VerifyAndBuildFromBuffer in the TFLite fuzz target\n\nPer review: models now pass the flatbuffers structural verifier before\nInterpreterBuilder sees them. No extra_verifier, so tflite::Verify() is not\non this path; the external-offset bounds checks in interpreter_builder.cc\nremain the check exercised for wrapped offsets.\n--\n6b637521dbde57526747589a95a68d9e0bcba52d by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nlite: cache offset, size and allocation bytes in the external-offset checks\n\nPer review: hoist op-\u003elarge_custom_options_offset(), the option size and\nallocation_-\u003ebytes() into locals in ParseNodes, and allocation_-\u003ebytes() and\nbuffer-\u003esize() in ParseTensors, so the checks do not repeat the flatbuffer\naccessors and the virtual call. No behaviour change.\n--\n267042d6b57f914b92baca79a17dcb2b5bc4ca63 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: drop unused \u003cvector\u003e include from the TFLite fuzz target\n\nPer review (IWYU): the file never names std::vector.\n--\ne9612f26a1f95d898257ad3c0644fc31e8edeb1b by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: restore \u003cvector\u003e include in the TFLite fuzz target\n\nPer the corrected review: interpreter-\u003einputs() returns const std::vector\u003cint\u003e\u0026\nand the range-for over it is a use, so IWYU wants the header named here.\n--\n0193d170dba8cca45f7189170265a85453fe324e by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nlite: regression tests for wrapping external offsets in InterpreterBuilder\n\nPer review: two deterministic tests in model_test.cc. Each builds a model whose\n(offset, size) pair sums past uint64 to 9, loads it with BuildFromBuffer so the\nverifier is not in the way, and expects InterpreterBuilder to reject it. One\ncovers the Buffer offset path in ParseTensors (tensor bytes equal the claimed\nsize so the size check cannot mask the result), the other the\nlarge_custom_options path in ParseNodes.\n--\n2c10c04377c30d05add06b08c3c1371bfd94f54b by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nlite: mark the test registration CUSTOM so the ParseNodes case reaches the check\n\nPer review: ParseNodes derives the op type from registration-\u003ebuiltin_code,\nand dummy_reg carries 0 (ADD), so the large_custom_options branch never ran\nand the test passed vacuously. The test now resolves to a copy of dummy_reg\nmarked BuiltinOperator_CUSTOM with custom_name WRAP.\n--\nc0f8e2696af0b17230c690c689316f769c20b7c4 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: silent reporter, add.bin seed, stricter input zeroing\n\nPer internal review: the model (and through it the interpreter builder) report\ninto a no-op ErrorReporter so malformed inputs do not write to stderr on every\niteration; tensorflow/lite/testdata/add.bin is loaded as a seed so the fuzzer\nstarts from a model that passes the structural check; the MSan zeroing skips\nempty, persistent read-only, string, resource and variant inputs as well as\nmmap-backed constants.\n--\nba730ad80897d79270609605cc8027d7faec8a54 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nsecurity/fuzzing: seed data and resource_loader dep for the TFLite fuzz target\n\nadd.bin from //tensorflow/lite is the seed corpus; resource_loader resolves its\nrunfiles path, the same way checkpoint_reader_fuzz does in this package.\n--\nc1be76e06447c1643b6b7f94f315b05a86eae532 by Layau Eulizier Jr \u003c130326664+cybrdude@users.noreply.github.com\u003e:\n\nlite: initialize buffer_ptr before get_readonly_data\n\nPer internal review: buffer_ptr is never left uninitialized if a path through\nget_readonly_data returns kTfLiteOk without assigning it.\n\nMerging this change closes #123123\n\nPiperOrigin-RevId: 999903734\n"
    },
    {
      "commit": "da71531a2fa627b31b106c32843ba450a2178cdf",
      "tree": "f28a99257faa3a75acf3aeb0540ac01659297b89",
      "parents": [
        "eba450b276a09445caba06275d7ce2f972822fb0"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 06:48:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 06:53:31 2026"
      },
      "message": "Add XNNPACK unit test for variable assignment with no outputs.\n\nAdds VariableOpsTester::TestAssignOnly and ReadAssignVariable.SimpleAssignOnly to exercise delegating a subgraph containing only VAR_HANDLE and ASSIGN_VARIABLE with zero subgraph outputs. Under UndefinedBehaviorSanitizer with nonnull-attribute checks enabled, this reproduces the null source pointer passed to memcpy in CopyVectorToTfLiteIntArray.\n\nPiperOrigin-RevId: 999901794\n"
    },
    {
      "commit": "eba450b276a09445caba06275d7ce2f972822fb0",
      "tree": "98b943984a83837a03ea75a43dea72f56516c8b1",
      "parents": [
        "77c7e83e5ce94978f533fc48cc51e2cd66af2735"
      ],
      "author": {
        "name": "George Necula",
        "email": "necula@google.com",
        "time": "Thu Oct 15 06:48:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 06:49:47 2026"
      },
      "message": "[tflite] Set hoist_constants_as_args\u003dFalse in TFLiteJaxConverterV2\n\nWith the upcoming jax_use_simplified_jaxpr_constants\u003dTrue, JAX hoists closed-over array constants larger than 32 bytes into leading const_args parameters of the lowered HLO @main function by default. Because TFLiteJaxConverterV2 exports a standalone HLO proto and binds only explicit ordered_inputs, set hoist_constants_as_args\u003dFalse in mlir.LoweringParameters.\n\nPiperOrigin-RevId: 999901656\n"
    },
    {
      "commit": "77c7e83e5ce94978f533fc48cc51e2cd66af2735",
      "tree": "026c14e556fc697749393762dd21d485c7296508",
      "parents": [
        "3cf7257c89463e5bbc72b3853187b80c5d10cb7a"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Thu Oct 15 05:55:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 05:56:47 2026"
      },
      "message": "Harden `SLICE` kernel and XNNPACK delegate validation and expand unit test coverage:\n\n- In `VisitSliceNode` (`xnnpack_delegate.cc`), verify that `begin_tensor.dims-\u003edata[0]` matches `input_tensor.dims-\u003esize` so dynamic-input `SLICE` nodes with mismatched `begin`/`size` lengths are rejected before delegation, and guard `begin[i] + size[i]` against signed `int64_t` overflow.\n- In `Prepare` (`slice.cc`), verify that `begin-\u003etype \u003d\u003d size-\u003etype`, and in `CalculateOutputShapeVector` (`slice.cc`), check that `GetTensorData\u003cT\u003e(begin)` and `GetTensorData\u003cT\u003e(size)` are non-null when `input_dims \u003e 0`.\n- Add unit tests in `slice_test.cc` and `delegates/xnnpack/*slice_test.cc` covering all supported data types (`FLOAT32`, `FLOAT64`, `FLOAT16`, `BFLOAT16`, `INT32`, `UINT32`, `INT64`, `UINT64`, `INT16`, `UINT16`, `INT8`, `UINT8`, `BOOL`, `INT4`, `STRING`), `INT32`/`INT64` index types, 6D reference paths, and rejection of invalid/overflowing/mismatched indices.\n\nPiperOrigin-RevId: 999877264\n"
    },
    {
      "commit": "3cf7257c89463e5bbc72b3853187b80c5d10cb7a",
      "tree": "b3cb885d1d0ab824279e9a9815a84bd649d0a491",
      "parents": [
        "536d64103e8a943675e6388570e7dfdf1f70905f"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 05:21:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 05:26:38 2026"
      },
      "message": "This is an internal change\n\nLiteRT-PiperOrigin-RevId: 999862901\n"
    },
    {
      "commit": "536d64103e8a943675e6388570e7dfdf1f70905f",
      "tree": "ddc9c2224386fa641e52d49e762d08bb09e24906",
      "parents": [
        "40e5f817779b7d40cb0701aa998f99f19f69e878"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Thu Oct 15 04:12:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 04:24:00 2026"
      },
      "message": "Harden convolution kernels and LiteRT model verification against int32_t overflows.\n\nLiteRT-PiperOrigin-RevId: 999832154\n"
    },
    {
      "commit": "40e5f817779b7d40cb0701aa998f99f19f69e878",
      "tree": "23c9c3e1a6283816f9be6e5357499f237fe16875",
      "parents": [
        "2e93f21d5b4d0b638f4915ad42e731abbf8f06c1"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Thu Oct 15 04:12:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 04:15:50 2026"
      },
      "message": "Harden convolution kernels and LiteRT model verification against int32_t overflows.\n\nPiperOrigin-RevId: 999832154\n"
    },
    {
      "commit": "2e93f21d5b4d0b638f4915ad42e731abbf8f06c1",
      "tree": "821dfca88967bc18a1b2fbe96cfebc106edc5973",
      "parents": [
        "d15ef8f8834f85e96358be8b9556ba661fa70b0f"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 04:01:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 04:03:06 2026"
      },
      "message": "Automated Code Change\n\nPiperOrigin-RevId: 999827465\n"
    },
    {
      "commit": "d15ef8f8834f85e96358be8b9556ba661fa70b0f",
      "tree": "5fb40973d5fc5516605c209f5d5340819cb00ad9",
      "parents": [
        "8085eeaad0eb44faa6a67fe3f96d5cd2df6e0e2d"
      ],
      "author": {
        "name": "Esun Kim",
        "email": "veblush@google.com",
        "time": "Thu Oct 15 03:30:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 03:36:52 2026"
      },
      "message": "Fix float-to-double narrowing in GetQuantizedConvolutionMultipler for int8/int16.\n\nEvaluate input-\u003eparams.scale * filter-\u003eparams.scale in double precision for non-uint8 quantized tensors in the 5-argument GetQuantizedConvolutionMultipler overload (matching the 6-argument overload), while preserving legacy float scale multiplication for deprecated kTfLiteUInt8 quantization to maintain backward compatibility with existing golden tests.\n\nPiperOrigin-RevId: 999815030\n"
    },
    {
      "commit": "8085eeaad0eb44faa6a67fe3f96d5cd2df6e0e2d",
      "tree": "861173fc7c644c13fa0ce1c4fcc3dbc126c52b40",
      "parents": [
        "5ef80b77e3631b4cea3692787d701c48c993440d"
      ],
      "author": {
        "name": "Esun Kim",
        "email": "veblush@google.com",
        "time": "Thu Oct 15 03:30:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 03:33:48 2026"
      },
      "message": "Fix float-to-double narrowing in TFLite reference kernels.\n\nCorrects a numerical precision issue in several TFLite reference kernels where intermediate scale variables intended for double precision calculations were evaluated in float precision before promotion to double.\n\nPiperOrigin-RevId: 999814910\n"
    },
    {
      "commit": "5ef80b77e3631b4cea3692787d701c48c993440d",
      "tree": "48150744e221a52984f72f09f7f100985a69e735",
      "parents": [
        "28c5c6247a3cf928a8c23c6636a06aaaf67d807d"
      ],
      "author": {
        "name": "Esun Kim",
        "email": "veblush@google.com",
        "time": "Thu Oct 15 03:29:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 03:31:20 2026"
      },
      "message": "Fix float-to-double narrowing in TFLite quantized Mul kernel.\n\nCast input1-\u003eparams.scale, input2-\u003eparams.scale, and output-\u003eparams.scale to double before computing real_multiplier in Prepare so that QuantizeMultiplier receives full double precision rather than a float-narrowed intermediate value.\n\nPiperOrigin-RevId: 999814764\n"
    },
    {
      "commit": "28c5c6247a3cf928a8c23c6636a06aaaf67d807d",
      "tree": "802df25da4c515f9aee030d7e02f8d04c673c88e",
      "parents": [
        "bea3bc69df855f80e062ea5a7fb72b5445d2a64c"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Thu Oct 15 03:03:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 03:07:35 2026"
      },
      "message": "Add FuzzTest suites in `embedding_lookup_fuzz_test.cc` covering `EMBEDDING_LOOKUP` (dense, hybrid per-tensor/per-axis, and blockwise 2-bit/4-bit quantized) and `HASHTABLE_LOOKUP` (numeric and string tables), along with regression tests for sub-byte buffer sizing, blockwise scale overflow, extreme `int32_t` keys, and corrupted string offsets.\n\nLiteRT-PiperOrigin-RevId: 999804019\n"
    },
    {
      "commit": "bea3bc69df855f80e062ea5a7fb72b5445d2a64c",
      "tree": "b2a489748e6ca96312500105bdefb2d3cade7044",
      "parents": [
        "ef2055c0ac1224d5239028d7810eb20b46a17ef6"
      ],
      "author": {
        "name": "Graham",
        "email": "slight616574916@gmail.com",
        "time": "Thu Oct 15 02:18:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 02:21:15 2026"
      },
      "message": "PR #10797: Qualcomm AI Engine Direct - Support 4-bit per-channel quantization.\n\nImported from GitHub PR https://github.com/google-ai-edge/LiteRT/pull/10797\n\n# What\n- Fix the per-channel quantizationi issue.\n- Add related tests.\n\n# Verification\n\n- [x] Developer-Verified\n- Tested with multiple real cases\n\n# Test\n\n- Passed x86 unit test.\n- Passed android unit test.\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Test Summary \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n//litert/c/options:litert_qualcomm_options_test\n//litert/c/options:litert_qualcomm_options_test                          PASSED in 0.0s\n\n//litert/tools/flags/vendors:qualcomm_flags_test\n//litert/tools/flags/vendors:qualcomm_flags_test                         PASSED in 0.1s\n\n//litert/vendors/qualcomm/core/utils:utils_test\n//litert/vendors/qualcomm/core/utils:utils_test                          PASSED in 0.1s\n\n//litert/vendors/qualcomm/core/wrappers/tests:op_wrapper_test\n//litert/vendors/qualcomm/core/wrappers/tests:op_wrapper_test            PASSED in 0.0s\n\n//litert/vendors/qualcomm/core/wrappers/tests:tensor_wrapper_test\n//litert/vendors/qualcomm/core/wrappers/tests:tensor_wrapper_test        PASSED in 0.0s\n\n//litert/vendors/qualcomm/core/wrappers/tests:param_wrapper_test\n//litert/vendors/qualcomm/core/wrappers/tests:param_wrapper_test         PASSED in 0.0s\n\n//litert/vendors/qualcomm/core/wrappers/tests:quantize_params_wrapper_test\n//litert/vendors/qualcomm/core/wrappers/tests:quantize_params_wrapper_test PASSED in 0.0s\n\n//litert/vendors/qualcomm/core:common_test\n//litert/vendors/qualcomm/core:common_test                               PASSED in 0.0s\n\n//litert/vendors/qualcomm/core:tensor_pool_test\n//litert/vendors/qualcomm/core:tensor_pool_test                          PASSED in 0.0s\n\n//litert/vendors/qualcomm/core/transformation:all\n//litert/vendors/qualcomm/core/transformation:embedding_gemma_test       PASSED in 0.0s\n//litert/vendors/qualcomm/core/transformation:graph_to_graph_test        PASSED in 0.0s\n//litert/vendors/qualcomm/core/transformation:kv_swapped_attn_test       PASSED in 0.0s\n\n//litert/vendors/qualcomm/qnn_backend_test:qnn_model_test\n//litert/vendors/qualcomm/qnn_backend_test:qnn_model_test                PASSED in 0.4s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:relu_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:relu_test        PASSED in 0.1s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:spatial_transform_nd_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:spatial_transform_nd_test PASSED in 0.6s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:topk_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:topk_test        PASSED in 0.4s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:elementwise_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:elementwise_test PASSED in 16.1s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:fully_connected_int2_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:fully_connected_int2_test PASSED in 1.2s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:pack_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:pack_test        PASSED in 0.6s\n\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:splitv_test\n//litert/vendors/qualcomm/qnn_backend_test/builder_test:splitv_test      PASSED in 1.2s\n\n//litert/vendors/qualcomm/core/dump:dump_graph_test\n//litert/vendors/qualcomm/core/dump:dump_graph_test                      PASSED in 0.0s\n\n//litert/vendors/qualcomm:qnn_manager_test\n//litert/vendors/qualcomm:qnn_manager_test                               PASSED in 0.3s\n\n//litert/vendors/qualcomm/core/backends:backend_utils_test\n//litert/vendors/qualcomm/core/backends:backend_utils_test      (cached) PASSED in 0.7s\n\n//litert/vendors/qualcomm/core/backends:graph_config_builder_test\n//litert/vendors/qualcomm/core/backends:graph_config_builder_test        PASSED in 0.0s\n\n//litert/vendors/qualcomm/core/backends:htp_backend_test\n//litert/vendors/qualcomm/core/backends:htp_backend_test                 PASSED in 0.9s\n\n//litert/vendors/qualcomm/core/backends:ir_backend_test\n//litert/vendors/qualcomm/core/backends:ir_backend_test                  PASSED in 0.0s\n\n//litert/vendors/qualcomm/core/backends:lpai_backend_test\n//litert/vendors/qualcomm/core/backends:lpai_backend_test                PASSED in 0.0s\n\n//litert/tools:tensor_utils_test\n//litert/tools:tensor_utils_test                                         PASSED in 0.2s\n\n//litert/vendors/qualcomm/core/schema:soc_table_test\n//litert/vendors/qualcomm/core/schema:soc_table_test            (cached) PASSED in 0.0s\n\n//litert/c:litert_op_options_test\n//litert/c:litert_op_options_test                                        PASSED in 0.1s\n\n//litert/vendors/qualcomm/compiler:qnn_compiler_plugin_test\n//litert/vendors/qualcomm/compiler:qnn_compiler_plugin_test              PASSED in 91.4s\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Test Summary \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nSM8850: //litert/c/options:litert_qualcomm_options_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 33 tests from 2 test suites ran. (4 ms total)\n[  PASSED  ] 33 tests.\n\nSM8850: //litert/tools/flags/vendors:qualcomm_flags_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 32 tests from 18 test suites ran. (0 ms total)\n[  PASSED  ] 32 tests.\n\nSM8850: //litert/vendors/qualcomm/core/utils:utils_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 17 tests from 3 test suites ran. (15 ms total)\n[  PASSED  ] 17 tests.\n\nSM8850: //litert/vendors/qualcomm/core/wrappers/tests:op_wrapper_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 22 tests from 2 test suites ran. (1 ms total)\n[  PASSED  ] 22 tests.\n\nSM8850: //litert/vendors/qualcomm/core/wrappers/tests:tensor_wrapper_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 40 tests from 3 test suites ran. (6 ms total)\n[  PASSED  ] 40 tests.\n\nSM8850: //litert/vendors/qualcomm/core/wrappers/tests:param_wrapper_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 31 tests from 17 test suites ran. (2 ms total)\n[  PASSED  ] 31 tests.\n\nSM8850: //litert/vendors/qualcomm/core/wrappers/tests:quantize_params_wrapper_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 67 tests from 9 test suites ran. (2 ms total)\n[  PASSED  ] 67 tests.\n\nSM8850: //litert/vendors/qualcomm/core:common_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 37 tests from 2 test suites ran. (1 ms total)\n[  PASSED  ] 37 tests.\n\nSM8850: //litert/vendors/qualcomm/core:tensor_pool_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 19 tests from 2 test suites ran. (3 ms total)\n[  PASSED  ] 19 tests.\n\nSM8850: //litert/vendors/qualcomm/core/transformation:kv_swapped_attn_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 1 test from 1 test suite ran. (3 ms total)\n[  PASSED  ] 1 test.\n\nSM8850: //litert/vendors/qualcomm/core/transformation:graph_to_graph_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 17 tests from 6 test suites ran. (30 ms total)\n[  PASSED  ] 17 tests.\n\nSM8850: //litert/vendors/qualcomm/core/transformation:embedding_gemma_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 1 test from 1 test suite ran. (3 ms total)\n[  PASSED  ] 1 test.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test:qnn_model_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 1 test from 1 test suite ran. (529 ms total)\n[  PASSED  ] 1 test.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:relu_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 1 test from 1 test suite ran. (145 ms total)\n[  PASSED  ] 0 tests.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:spatial_transform_nd_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 2 tests from 1 test suite ran. (928 ms total)\n[  PASSED  ] 2 tests.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:topk_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 1 test from 1 test suite ran. (630 ms total)\n[  PASSED  ] 1 test.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:elementwise_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 50 tests from 1 test suite ran. (17170 ms total)\n[  PASSED  ] 50 tests.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:fully_connected_int2_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 5 tests from 1 test suite ran. (1573 ms total)\n[  PASSED  ] 5 tests.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:pack_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 3 tests from 1 test suite ran. (812 ms total)\n[  PASSED  ] 3 tests.\n\nSM8850: //litert/vendors/qualcomm/qnn_backend_test/builder_test:splitv_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 5 tests from 1 test suite ran. (1516 ms total)\n[  PASSED  ] 5 tests.\n\nSM8850: //litert/vendors/qualcomm/core/dump:dump_graph_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 7 tests from 1 test suite ran. (7 ms total)\n[  PASSED  ] 7 tests.\n\nSM8850: //litert/vendors/qualcomm:qnn_manager_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 11 tests from 3 test suites ran. (20 ms total)\n[  PASSED  ] 11 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:backend_utils_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 5 tests from 2 test suites ran. (616 ms total)\n[  PASSED  ] 5 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:graph_config_builder_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 5 tests from 1 test suite ran. (0 ms total)\n[  PASSED  ] 5 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:htp_backend_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 38 tests from 7 test suites ran. (1589 ms total)\n[  PASSED  ] 38 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:ir_backend_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 3 tests from 2 test suites ran. (9 ms total)\n[  PASSED  ] 3 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:lpai_backend_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 7 tests from 1 test suite ran. (2 ms total)\n[  PASSED  ] 7 tests.\n\nSM8850: //litert/tools:tensor_utils_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 23 tests from 1 test suite ran. (39 ms total)\n[  PASSED  ] 23 tests.\n\nSM8850: //litert/vendors/qualcomm/core/schema:soc_table_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 3 tests from 1 test suite ran. (0 ms total)\n[  PASSED  ] 3 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:dsp_backend_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 37 tests from 5 test suites ran. (21 ms total)\n[  PASSED  ] 6 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:gpu_backend_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 2 tests from 1 test suite ran. (4 ms total)\n[  PASSED  ] 0 tests.\n\nSM8850: //litert/vendors/qualcomm/core/backends:backend_factory_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 5 tests from 1 test suite ran. (622 ms total)\n[  PASSED  ] 3 tests.\n\nSM8850: //litert/vendors/qualcomm/dispatch:_dispatch_api_qualcomm_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 5 tests from 1 test suite ran. (545 ms total)\n[  PASSED  ] 5 tests.\n\nSM8850: //litert/cc:_litert_compiled_model_qualcomm_test\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 2 tests from 1 test suite ran. (518 ms total)\n[  PASSED  ] 2 tests.\nCopybara import of the project:\n\n--\ne5529f83bd1fb1d6ab0733ee47bcfc2c30b9514b by chuntl-qti \u003cchuntl@qti.qualcomm.com\u003e:\n\nQualcomm AI Engine Direct - Support 4-bit per-channel quantization.\n\nSummary:\n- Fix the per-channel quantizationi issue.\n- Add related tests.\n\nMerging this change closes #10797\n\nCOPYBARA_INTEGRATE_REVIEW\u003dhttps://github.com/google-ai-edge/LiteRT/pull/10797 from graham0824:dev/chuntl/support_4bit_per_channel e5529f83bd1fb1d6ab0733ee47bcfc2c30b9514b\nLiteRT-PiperOrigin-RevId: 999785152\n"
    },
    {
      "commit": "395f9646c276d6567214eb7a1925989653dc8e6d",
      "tree": "27a0a895c4e89882a4ecfc246813bc97edb39757",
      "parents": [
        "681fd6f691dd1af7d4dd3daa57eaa55cac6a2e63"
      ],
      "author": {
        "name": "yingyingma",
        "email": "yingying.ma@intel.com",
        "time": "Thu Oct 08 08:11:30 2026"
      },
      "committer": {
        "name": "yingyingma",
        "email": "yingying.ma@intel.com",
        "time": "Thu Oct 15 02:15:01 2026"
      },
      "message": "[Intel OV] Extend the MoE rewrite to multi-token chunks\n\nThe existing rewrite Gathers K of N experts, which only works for a\nsingle-token chunk. Multi-token layers instead fold their 128 branches\ninto one batched op over stacked weights, recombined via a scattered\n[chunk,N] routing matrix, and compile under NPUW\u0027s host-router (REP)\npipeline instead of CWAI.\n\nBoth paths now split each expert\u0027s fused gate+up weight and scale into\ntwo independent buffers at the raw-byte level (packing preserved), so\nthe GEGLU becomes two batched MatMuls instead of an on-device slice.\nStacked constants carry LiteRtGeneratedConstantAttribute so they land\nin the shared weight pool.\n\nAlso adds SplitSharedConstants, giving each consumer of a\nmulti-consumer Constant its own copy.\n"
    },
    {
      "commit": "681fd6f691dd1af7d4dd3daa57eaa55cac6a2e63",
      "tree": "252cb62b6573702ff9e76dcc9dd5fb502e3c8a9e",
      "parents": [
        "ef2055c0ac1224d5239028d7810eb20b46a17ef6"
      ],
      "author": {
        "name": "yingyingma",
        "email": "yingying.ma@intel.com",
        "time": "Thu Oct 08 07:11:38 2026"
      },
      "committer": {
        "name": "yingyingma",
        "email": "yingying.ma@intel.com",
        "time": "Thu Oct 15 02:14:57 2026"
      },
      "message": "[Intel OV] Rework WeightBank for MoE-generated constants\n\nMoE lowering synthesizes stacked expert weights during OptimizeModel, so they\nhave no LiteRt BufferId and could not be shared: every partition baked its own\ncopy, and the per-expert buffers they superseded stayed in the pool.\n\nRegisterGeneratedConstant() now takes them, keyed by the source_key on the new\nLiteRtGeneratedConstantAttribute; FinalizeDerivedBuffers() assigns ids past the\nhighest real one in ascending key order, so the id -\u003e pool offset -\u003e bin_offset\nchain is reproducible. BuildPool() also drops unreferenced buffers on NPU.\n\nCompilation is two-phase: harvest from each optimized partition, then re-derive\neach to alias against the final pool. Reloading avoids peak memory scaling with\npartition count, but both phases must rebuild the same graph.\n"
    },
    {
      "commit": "ef2055c0ac1224d5239028d7810eb20b46a17ef6",
      "tree": "c704ea4a3989385473203654674179910aea7715",
      "parents": [
        "4d8b3380ae748ddf613e199cbaf3f9ab2ba3bd98"
      ],
      "author": {
        "name": "Fengwu Yao",
        "email": "fengwuyao@google.com",
        "time": "Thu Oct 15 01:36:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 01:39:01 2026"
      },
      "message": "Adopt LRTTensorType in LRTTensorBuffer and add signature/tensor introspection to LRTCompiledModel.\n\nLiteRT-PiperOrigin-RevId: 999766800\n"
    },
    {
      "commit": "4d8b3380ae748ddf613e199cbaf3f9ab2ba3bd98",
      "tree": "c07c53ff9aa05705f00b5a21ab7cd4f62e59995c",
      "parents": [
        "e8ea29dc77f7fd48fa6c086c28943ebe49974640"
      ],
      "author": {
        "name": "Terry Heo",
        "email": "terryheo@google.com",
        "time": "Thu Oct 15 01:31:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 01:34:33 2026"
      },
      "message": "Replace legacy TFLite GPU delegate modules with ML Drift in LiteRT\n\n- Replaced `//third_party/tensorflow/lite/delegates/gpu/...` dependencies and\n  `tflite::gpu` usages with `//third_party/ml_drift/...` and `ml_drift` across\n  LiteRT runtime, C/C++ APIs, tests, and OpenCL buffer handler.\n- Updated `gles_deps()`, `opencl_deps()`, and `metal_info_deps()` in\n  `special_rule.bzl` and `special_rule.bzl.oss` to reference ML Drift targets.\n\nLiteRT-PiperOrigin-RevId: 999764503\n"
    },
    {
      "commit": "e8ea29dc77f7fd48fa6c086c28943ebe49974640",
      "tree": "4b9cfa8ce931a7061e810888d1befcefaf28056d",
      "parents": [
        "9a0a72f672c9584a475ec63cb4b4390ff19a8109"
      ],
      "author": {
        "name": "Andrew Zhang",
        "email": "yunandrew@google.com",
        "time": "Thu Oct 15 01:25:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 01:27:56 2026"
      },
      "message": "Add Qualcomm compiler graph transformations for Vision Encoder models.\n\nVision Encoder models (such as vision_70 and vision_140) suffer from CPU fallback partitions and high HTP latency due to unsupported int32 ops, redundant per-head RoPE subgraphs, large Multi-Head Attention (MHA) intermediates exceeding VTCM capacity, and 3D sequence layouts that underutilize HTP 8×8 Crouton spatial tiles.\nRegister six graph transformations in the Qualcomm compiler plugin (configurable via `--qualcomm_graph_transform`) to achieve 100% NPU offload and optimize HTP execution:\n- `LegalizeInt32OpsTransformation`: Rewrites unsupported int32 `Sign` and `ReduceMax` ops into HTP-supported equivalents.\n- `EntryEmbeddingTransformation`: Replaces one-hot, select, and fully-connected coordinate embedding patterns with native `EmbeddingLookup` ops.\n- `RopeTransformation`: Shares precomputed RoPE `Cos`/`Sin` tables across attention heads and folds `Neg + Mul` into constant weights.\n- `AttentionChunkTransformation`: Rewrites MHA into per-head Single-Head Attention (SHA) and folds long sequences (`S ≥ 600`) into 4D `[1, H_s, W_s, D]` spatial layouts with `[1, 1, K, D]` K/V broadcasting to fit within 8 MB VTCM.\n- `MLPInt8QuantTransformation`: Aligns MLP quant/dequant parameters and folds 3D `[1, S, D]` residual, `RmsNorm`, and `Gelu + Mul` blocks into 4D Crouton spatial layouts.\n- `OrphanCleanupTransformation`: Removes dead intermediate ops and guards `ConvertTensor` in `qnn_compose_graph.cc` with `is_tensor_output` so orphaned tensors are not registered as QNN graph outputs.\n\nLiteRT-PiperOrigin-RevId: 999762077\n"
    },
    {
      "commit": "9a0a72f672c9584a475ec63cb4b4390ff19a8109",
      "tree": "53281e2b1add3d77339d92deca890e68dfb35cbc",
      "parents": [
        "01f7b0e0ec338ad202e5c6421980b7a40f93736b"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 01:17:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 01:20:50 2026"
      },
      "message": "Upload in-memory weights directly in LiteRtWeightLoader::UploadWeightsOnWebImpl\n\nLiteRT-PiperOrigin-RevId: 999758262\n"
    },
    {
      "commit": "01f7b0e0ec338ad202e5c6421980b7a40f93736b",
      "tree": "574d6d633a52d8cf6c86d531105c5d065e8d7d22",
      "parents": [
        "338d96e88e6cc7c7c67be221530bfbdb00769d23"
      ],
      "author": {
        "name": "Maria Lyubimtseva",
        "email": "marialyu@google.com",
        "time": "Thu Oct 15 00:58:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 01:01:20 2026"
      },
      "message": "Add a progress bar for model buffer serialization\n\nLiteRT-PiperOrigin-RevId: 999748764\n"
    },
    {
      "commit": "338d96e88e6cc7c7c67be221530bfbdb00769d23",
      "tree": "d040121873097e9a25ae631d4a55365b8291efe3",
      "parents": [
        "4b030367bb3cbeb5a3a9e0b266bbe18986a50da9"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Thu Oct 15 00:45:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 00:51:13 2026"
      },
      "message": "Harden lookup kernels and LiteRT model verification.\n\nLiteRT-PiperOrigin-RevId: 999742990\n"
    },
    {
      "commit": "4b030367bb3cbeb5a3a9e0b266bbe18986a50da9",
      "tree": "0645c12da4cf94e0c033819cfd306cd93750d584",
      "parents": [
        "62f1a9cacfbbaee7e1a30a55ca2fb4a7ed89bb30"
      ],
      "author": {
        "name": "Changming Sun",
        "email": "changmingsun@google.com",
        "time": "Thu Oct 15 00:45:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 00:46:58 2026"
      },
      "message": "Harden lookup kernels and LiteRT model verification.\n\nPiperOrigin-RevId: 999742990\n"
    },
    {
      "commit": "62f1a9cacfbbaee7e1a30a55ca2fb4a7ed89bb30",
      "tree": "12359ce78d7892ecd81740bb82bb189166a9a8bf",
      "parents": [
        "62e92c8bf7405cfa82164f5b48702112e523e5fb"
      ],
      "author": {
        "name": "Google AI Edge",
        "email": "ai-edge-bot@google.com",
        "time": "Thu Oct 15 00:42:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 00:46:02 2026"
      },
      "message": "Add acceleration status checks and accelerator discovery to LiteRT Rust bindings.\n\nExposes recent LiteRT C API additions in the Rust bindings:\n- CompiledModel::is_fully_accelerated and CompiledModel::is_non_cpu_fully_accelerated to query hardware acceleration status of a compiled model.\n- Environment::get_available_accelerators to query available hardware accelerators registered in the environment.\n- OptionTag::SystemGpuAcceleratorHandle environment option tag.\n- Updated version of CC Binary SDK to 2.3.0\n- Changed Crate version to 0.1.6\n\nLiteRT-PiperOrigin-RevId: 999741434\n"
    }
  ],
  "next": "62e92c8bf7405cfa82164f5b48702112e523e5fb"
}
