Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
277dcc8
test: integration coverage for aimodelbuilder configure* methods
ooples May 17, 2026
1b898ce
test(configure-coverage): lower baseline spread floor to tolerate par…
ooples May 17, 2026
6a17e07
test(configure-coverage): Bucket4 deployment-metadata methods — real …
franklinic May 18, 2026
bbf9f22
test(configure-coverage): Bucket5 lifecycle methods — observable side…
franklinic May 18, 2026
c18d9c2
fix(configure): wire ConfigurePostprocessing into AiModelResult.Predi…
franklinic May 18, 2026
bceb0b4
fix(configure): wire ConfigureRegularization to GradientBasedOptimize…
franklinic May 18, 2026
a7a1686
fix(configure): wire ConfigureAugmentation through BuildAsync via Cus…
franklinic May 18, 2026
74e4ed1
fix(configure): propagate KnowledgeDistillation options to result + r…
franklinic May 18, 2026
0b8c9e2
fix(LoRA): 3 stacked wiring bugs in ConfigureLoRA path
franklinic May 18, 2026
05a412c
test(configure-coverage): Bucket11 hijack-path methods — real wiring …
franklinic May 18, 2026
a679d5c
test(configure-coverage): Bucket12 distributed/federated/pipeline met…
franklinic May 18, 2026
0ca3d1a
test(configure-coverage): Bucket13 ProgramSynthesis + ProgramSynthesi…
franklinic May 18, 2026
3f17242
docs(configure-coverage): expand README with all 13 buckets + 6 sourc…
franklinic May 18, 2026
5a004c2
fix(configure): address CodeRabbit review feedback (7 substantive fixes)
franklinic May 18, 2026
19c4591
chore: remove temporary read_threads.py utility (CodeRabbit triage sc…
franklinic May 18, 2026
307fb02
fix(configure): more CodeRabbit feedback — observable assertions, LoR…
franklinic May 18, 2026
d87dfd5
chore: remove temporary read_remaining.py utility
franklinic May 18, 2026
3a6bc06
fix(configure): final CodeRabbit batch — augmentation guards, streami…
franklinic May 18, 2026
2b1464c
chore: remove temporary read_last.py utility
franklinic May 18, 2026
05752d1
fix(configure): wrap up CodeRabbit feedback — typed augmenter setter,…
franklinic May 18, 2026
8cde3a1
fix(#1368 review): mechanical fixes — typo, doc, readme dedup + linkify
ooples May 18, 2026
17cfe0e
fix(#1368 review): fail-fast on misconfig + move postprocessing-unfit…
ooples May 18, 2026
4b4ea32
fix(#1368 review): lora — try harder before falling back on dim infer…
ooples May 18, 2026
4a3aca1
test(#1368 review): narrow exception catches in bucket 10/11/12 routi…
ooples May 18, 2026
e959486
fix(#1368 review): add gpudiagnosticsconfig.pushlevel scoped api + us…
ooples May 18, 2026
1072c61
test(#1368 review): tighten bucket 5/6 recording stubs
ooples May 18, 2026
0f1a0d2
fix(#1368 review): promote test-only regularization accessor to publi…
ooples May 18, 2026
1ab48ca
fix(#1368 review): generic augmentationconfig<t, tinput> subclass for…
ooples May 18, 2026
ffada80
docs(#1368 review): document lora warmup contiguous layout assumption…
ooples May 18, 2026
46d44c7
test(#1368 review): adapt bucket9 kd test to fail-fast contract resto…
ooples May 18, 2026
fc9562f
docs(#1368 review): document usedirecttrainingpath's intentional mode…
ooples May 18, 2026
ae9a45b
fix(#1368 review): split augmentation cast errors + dedupe trace warn…
ooples May 18, 2026
961ef66
Merge remote-tracking branch 'origin/master' into feat/configure-meth…
ooples May 18, 2026
9a34313
fix(#1368 review): small fixes batch 1 — preprocessedX null-guard, lo…
ooples May 18, 2026
7b97cff
fix(#1368 review): batch 2 — lora dim contract tighten, predict debug…
ooples May 18, 2026
52abaa7
fix(#1368 review C6WQg): pushlevel uses lifo stack + lock for true sc…
ooples May 18, 2026
8b8d23e
fix(#1368 review C6WMS): aimodelresult ctor lazy-fits postprocessing …
ooples May 18, 2026
b915ba4
fix(#1368 review C6WJG): extract fitpostprocessingifneeded helper + c…
ooples May 18, 2026
f742d7c
fix(#1368 review C6WKu): wire each modality to its builtin augmenter
ooples May 18, 2026
5e8dac0
fix(#1368 review C6WRW): move test-only configured-state accessors be…
ooples May 18, 2026
008dcb4
fix(#1368 review C6WLV + C6WRk): isexceptionfromnamespace tolerates t…
ooples May 18, 2026
a80e127
fix(#1368 review): c7hap process-wide latch non-generic + c6wpz final…
ooples May 18, 2026
6355e0d
fix(#1368 review): c6wns/c7g77 narrow argument/invalidop catches + c7…
ooples May 18, 2026
1cd1867
fix(#1368 review): c7mmq narrow fitpostprocessing catch + c7mmp pushl…
ooples May 18, 2026
3570792
fix(#1368 review C7mmB/C7g8-): deduplicate tryinferbothdimsfromweight…
ooples May 18, 2026
ef5463a
Merge remote-tracking branch 'origin/master' into feat/configure-meth…
ooples May 18, 2026
a3ab26f
fix(#1368 review): kd readme alignment + changelog breaking changes +…
ooples May 18, 2026
64dd8dd
fix(#1368 review): c7hau opt-in fit-rows cap + c7mpf tensor span cont…
ooples May 18, 2026
b3d2ae4
fix(#1368 review): docs + tighter assertions for remaining concerns
ooples May 18, 2026
e2824e0
fix(#1368 review): test cast generics + agent listener + kd provenanc…
ooples May 18, 2026
fcbb441
fix(#1368 review): c8efy postprocessingfitsample is model predictions…
ooples May 18, 2026
6435c63
fix(#1368 review): c8eka audio snr floor + c8eks predict release-buil…
ooples May 18, 2026
e42b37b
fix(#1368 review): c88jh/j4 volatile int + c88rh overflow + c88r8 tri…
ooples May 18, 2026
802f2f3
fix(#1368 review C88Kn): auto-promote to AdamOptimizer when regulariz…
ooples May 18, 2026
9b5be00
fix(#1368 review): c88so nullable overload + c88iz/p9 kd readme + c88…
ooples May 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,89 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased] - 2025-12-18

### Breaking changes (PR #1368)

- **`AiModelBuilder<T,TInput,TOutput>`'s test-only `Configured*` accessors
moved behind an explicit-interface implementation.** PR #1368 extracted
the 8 `internal Configured*` properties on `AiModelBuilder` into an
explicitly-implemented `internal interface IConfiguredView<T,TInput,TOutput>`
to keep them off the regular type surface. **Migration for other
`InternalsVisibleTo` consumers:** cast the builder to
`AiDotNet.Configuration.IConfiguredView<T,TInput,TOutput>` before
accessing `ConfiguredOptimizer`, `ConfiguredCaching`,
`ConfiguredInferenceOptimizations`, `ConfiguredJitCompilation`,
`ConfiguredInterpretability`, `ConfiguredMemoryManagement`,
`ConfiguredLicenseKey`, or `ConfiguredAgentAssistance`. Source:
`src/Configuration/IConfiguredView.cs`, `src/AiModelBuilder.cs` (review
#1368 C8eN_).

- **`AiModelResult.Predict` now throws `InvalidOperationException` with a
clear diagnostic when `Model` is null.** Previously a null Model would
surface as a `NullReferenceException` deep inside the dispatch path.
The new path throws "AiModelResult.Model is null; cannot dispatch
Predict." at the call site (review #1368 C8eRj). **Migration:** if any
caller was catching `NullReferenceException` to detect "no model
configured", switch to catching `InvalidOperationException` or check
`result.Model is not null` before calling Predict.

- **`ConfigureRegularization` now throws when paired with a non-gradient optimizer.**
Previously, calling `ConfigureRegularization(...)` while the active optimizer
was `NormalOptimizer` / an evolutionary search / any custom `IOptimizer`
outside the `GradientBasedOptimizerBase` family silently dropped the
configured regularization (the gradient-application loop where the slot is
consumed never runs on non-gradient optimizers, so the value was stored on
the builder and forgotten). PR #1368 surfaces this as a `Build`-time
`InvalidOperationException` so the misconfiguration is caught before training
starts. **Migration:** either remove the `ConfigureRegularization(...)` call
on builds that use a non-gradient optimizer, or switch the optimizer to a
`GradientBasedOptimizerBase` subclass (`AdamOptimizer`, `SGDOptimizer`,
`AdamWOptimizer`, etc.). Source: `src/AiModelBuilder.cs:2699-2719`.

- **`LoRAAdapterBase.CreateLoRALayer` now throws when neither weight-matrix
probing nor the shape API can resolve both `inputSize` and `outputSize`.**
Previously the adapter silently produced a wrongly-sized LoRA layer using
`outSize * 2` as a heuristic fallback, which later crashed at forward time
with an opaque shape mismatch. Now the throw surfaces the unresolvable layer
at the LoRA wrap step where the upstream cause is obvious. **Migration:**
ensure LoRA-wrapped layers have their shape resolved (run one warmup forward
through the model before `ConfigureLoRA(...)` fires, or supply a layer that
exposes authoritative `GetInputShape()` values) before the wrap loop fires.
Source: `src/LoRA/Adapters/LoRAAdapterBase.cs`.

- **`AiModelResult` constructor throws on unfitted `PostprocessingPipeline`.**
Previously the unfitted pipeline rode through to `AiModelResult.Predict` and
threw on the first inference call — surfacing the misconfiguration at the
wrong layer of the stack. The constructor now fail-fasts at Build time.
**Migration:** either fit `PostprocessingPipeline.Fit(...)` before passing
the options to the ctor, or set
`AiModelResultOptions.PostprocessingFitSample` to a representative
training-target sample so the ctor can lazy-fit (review #1368 C6WMS).
`AiModelBuilder` build paths already do this — the breaking change only
affects callers that construct `AiModelResultOptions` manually.

- **Inference fast paths (`InferenceOptimizationConfig`, `JitCompiledFunction`)
now flow through postprocessing and the safety filter.** Previously these
branches returned the raw model output early, bypassing the
`denormalize → PostprocessingPipeline.Transform → SafetyFilter` tail. Now
`DispatchModelInference` returns into a single shared tail that all three
paths (optimized, JIT, standard) traverse. **Migration:** if downstream
consumers relied on the fast paths skipping postprocessing for performance,
add `.ConfigurePostprocessing(null)` / leave the pipeline unconfigured —
the shared tail short-circuits when no postprocessing is wired. Source:
`src/Models/Results/AiModelResult.cs:DispatchModelInference` (review #1368
C7HAa).

- **`ConfigureKnowledgeDistillation` on the regular-training (non-LoRA, non-
direct-training) NN path now throws `NotSupportedException` at Build time.**
Previously the second throw site was on this path; the option was stored but
never reached the tape-based training flow. The throw is preserved (not
downgraded to a Trace-warning) so users discover the missing KD-tape
integration at Build time rather than getting standard supervised training
silently substituted for the requested distillation. **Migration:** either
configure LoRA / a direct-training path (where the options ARE attached to
the result without going through the regular tape loop), or wait for the
upstream KD-tape integration to land. Source: `src/AiModelBuilder.cs:3636`.

### Added
- **iMAML (implicit Model-Agnostic Meta-Learning) Algorithm**
- True implicit differentiation implementation with constant memory complexity
Expand Down
Loading
Loading