Skip to content

feat(#2090): phase 4 — embedding, retrieval and GAN families - #2133

Closed
ooples wants to merge 11 commits into
masterfrom
feature/options-surface-phase-4-embed-gan
Closed

ooples wants to merge 11 commits into
masterfrom
feature/options-surface-phase-4-embed-gan

Conversation

@ooples

@ooples ooples commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Phase 4 of #2090. Follows #2130 (phase 3). Spec in #2122.

Ratchet: 875 → 741. Three groups land here: enum/string parameters that earlier phases skipped, the 11 embedding and retrieval models, and the 10 GANs.

step models params ratchet
enum/string parameters + VisionMambaModel 14 875 → 861
embedding & retrieval 11 77 861 → 782
GAN family 10 41 782 → 741

PoolingStrategy is promoted out of a generic type

This is the collision phase 1 deliberately deferred. PoolingStrategy was nested inside TransformerEmbeddingNetwork<T>, and a type nested in a generic class is a distinct type per type argumentTransformerEmbeddingNetwork<float>.PoolingStrategy and the <double> one were unrelated types, and neither could be named from a non-generic options class. It was never usable as configuration, which is exactly what it describes.

It becomes AiDotNet.Enums.EmbeddingPoolingStrategy. Renamed rather than moved as-is, because src/VisionLanguage/Encoders has its own unrelated PoolingStrategy with different members.

Options inheritance now mirrors model inheritance

Seven embedding models derive from TransformerEmbeddingNetwork<T> and forward through : base(...). Their options classes had to derive from TransformerEmbeddingOptions rather than straight from EmbeddingModelOptions — otherwise a derived model cannot pass its own options to base at all.

Three assumptions the GANs broke

  1. Not every model has an architecture parameter. The GAN primary constructors take explicit image dimensions and build their generator and discriminator architectures from them.
  2. A constructor may delegate with : this(...), not only : base(...), and such a constructor is public and carries movable parameters of its own.
  3. A moved value may be used inside the initializer: : base(CreateDCGANGeneratorArchitecture(latentSize, ..., generatorFeatureMaps), ...). Dropping the identifier is wrong — the expression needs the value. options is in scope in an initializer, so it becomes (options?.GeneratorChannels ?? 64), carrying the same default. And a name defaulted in one constructor but required in another (DCGAN's latentSize) must be supplied there, not dropped.

What the tests caught that the build did not

GanOptions.ValidateCore required LatentSize and InitialLearningRate. 30 GAN tests failed. LatentSize stays a required constructor argument on the four models that build architectures from it, so it is legitimately unset on those options objects; and most GANs never had an InitialLearningRate parameter at all. It now carries the DCGAN paper's 0.0002 as a default, and only ImageChannels is required.

Worth noting against the ratchet itself: it counts a parameter as covered when the options class has a matching name, so a model whose constructor still takes the parameter can score as migrated. UnifiedMultimodalNetwork did exactly that in phase 3. The skipped behavioural assertion is what closes that hole.

Verification

  • dotnet build src/AiDotNet.csproj -f net8.0 — 0 errors
  • dotnet build tests/AiDotNet.Tests -f net8.0 — 0 errors
  • GAN suite — 57 passed, 0 failed; embedding suite — 37 passed
  • Ratchet — passing at 741

Refs #2090

🤖 Generated with Claude Code

franklinic and others added 11 commits September 8, 2026 15:19
Six family base classes, each declaring a model family's shared knobs once:

- ModelHyperparameterOptions (new, Models/Options) — MaxGradNorm plus the
  Require() guards every family shares.
- SequenceModelOptions, VisionLanguageModelOptions, EmbeddingModelOptions,
  GanOptions (new, NeuralNetworks/Options).
- DocumentNeuralNetworkOptions — EXTENDED rather than replaced. All 29 Document
  options classes already derive from it, so adding the shared knobs there
  reaches the whole area without touching a leaf.
- VideoHyperparameterOptions (new, Video/Options). Video has no base in use:
  96 of its 108 options classes derive straight from NeuralNetworkOptions.

Properties are non-nullable with no base default. A shared default would be
wrong for nearly every model that inherits it — NumLayers = 12 is right for
BERT and wrong for Mamba-130M. Per-model values go in each leaf's constructor
in phases 2-7. Until a leaf is wired, Require() throws naming the property
rather than letting a zero-width model through silently.

The ratchet counts tunable defaulted constructor parameters that have no
correspondingly-named property on their model's options type, resolving models
by transitive reflection over NeuralNetworkBase<T> — BGE derives from
TransformerEmbeddingNetwork, TrOCR from DocumentNeuralNetworkBase, and only 3
files under src/NeuralNetworks name the base directly, so no naming or path
heuristic finds them.

BASELINE IS 1067, not the 806 the spec estimated. The file-based estimate only
looked at the three areas the spec named. Reflection also finds Tacotron2Model
(20 params), TtsModel (17) and VITSModel (16) configured against a generic
OnnxModelOptions, and SpeechEmotionRecognizer (11) with no options parameter at
all. Those areas scored clean on "do their Options classes declare properties",
which turns out to be a different question from "do the models read them".

The behavioural assertion — that setting an options property actually changes
the model — is written and skipped until phase 2, when the first family reads
its options and there is something for it to assert against.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 1's ratchet measurement pulled TextToSpeech, SpeechRecognition and Audio
into scope: 22 models carrying 192 tunable constructor parameters between them,
including the three largest single offenders in the library (Tacotron2Model at
20, TtsModel at 17, VITSModel at 16, all configured against a generic
OnnxModelOptions).

The knobs are dominated by signal parameters rather than network shape —
sampleRate appears in 21 of the 22 models — so they get their own base rather
than being folded into an existing one. It spans three source areas, so it lives
in Models/Options beside DocumentNeuralNetworkOptions.

Canonicalises two pairs of synonyms the constructors currently use
interchangeably: hopLength/hopSize and fftSize/frameSize.

Build green, ratchet unchanged at 1067 — nothing inherits from this yet, which
is correct until the wiring phases.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…onfig

Establishes the per-model pattern for the sequence family:
- MambaOptions derives from SequenceModelOptions and sets the model's shipped
  defaults in its parameterless constructor.
- The constructor drops its six scalar parameters, taking (architecture,
  options, lossFunction) and reading every value off _options.
- The hand-written positivity guards are replaced by MambaOptions.Validate(),
  which covers the same four values plus MaxSequenceLength and ExpandFactor.

Values are carried over UNCHANGED. Mamba-130M is 768x24; this ships 256x4.
Correcting that is phase 9, kept apart so behaviour changes are reviewed
separately from the mechanical move.

Build green, no call site in src passed the removed parameters.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ven config

Moves each model's tunable ctor params onto its Options class, which now derives
from SequenceModelOptions. Values are carried over UNCHANGED, read straight out
of each ctor signature so nothing can drift in the move; verifying them against
the papers is a later phase.

Validation now throws ArgumentException naming 'options', preserving the public
contract these constructors already had rather than changing it to
InvalidOperationException as an incidental consequence of the move.

RWKV7's model-dimension/head divisibility check is moved below the options
assignment — repointing it at _options had put it above, where _options was
still null. RWKV4's four hand-written positivity guards are removed as
unreachable behind Validate().

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The script that swapped <exception cref> tags filtered on 'has a Validate()
method', which is far too loose: six files outside this work have their own
Validate() that genuinely throws InvalidOperationException, and their docs were
mislabelled as ArgumentException.

Only the #2090 family bases keep the ArgumentException contract, which is the
one their Require() actually throws.
Migrating 11 sequence models to options-driven configuration is a breaking
change to every call site that passed the removed scalar parameters. The
compiler enumerated them; there were 106 across 6 files plus the generator.

- TestScaffoldGenerator: 8 construction snippets. Worth noting WHY they exist —
  the generator builds these models at reduced "scaffold scale" precisely
  because the production defaults are too large for CI (a 50,277-way LM head
  made one synthetic target 6.4M values). That is a legitimate use of the
  configuration surface, and it now goes through Options like everything else.
- MambaLanguageModelTests, RWKV7LanguageModelTests: 40 call sites.
- WeightImporterTests, RealModelLocalInferenceTests, LoRAFineTunerTests: 6.

All 16 existing ArgumentException assertions still pass unchanged, which is the
evidence that keeping ArgumentException over InvalidOperationException was the
right call — the public contract of these constructors is unaltered.

Ratchet 1067 -> 1004, exactly the 63 parameters moved. 88 model tests pass.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…-> 977

Finishes the six models the earlier migration guard refused because their
Options classes already declared a constructor: Finch, GLA, GatedDeltaNet,
Griffin, Hawk, RecurrentGemma.

These six also declare COPY constructors, and GLAOptions carries an explicit
warning about them: a property missing from the copy constructor does not
merely vanish from the clone — the clone silently reverts to the default while
the original keeps its configured value, and nothing reports the divergence.
CreateNewInstance calls it. Every property added here is therefore added to the
copy constructor too (28 params, 27 new base properties, all copied).

Call sites needed three shapes none of the earlier scripts matched:
- `: base(...)` in test subclasses (4 sites) — hand-edited.
- Generator blocks covering several models at once, where the options type
  differs per model within one block: Griffin/Hawk and Hawk/GLA/GatedDeltaNet
  now derive it from model.ClassName.
- A third generator shape, `scaleArgs` appended to the architecture expression.

Two escaping traps, both caught by the build: a replacement string containing
"$1" must not be escaped, or the capture reference is emitted literally and the
declaration is deleted; and "}}" collapses to one brace only inside an
INTERPOLATED string, so the same text in a plain segment emits two.

Build green. 93 tests pass, ratchet 977.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Eleven multimodal models (CLIP, BLIP, BLIP-2, Flamingo, LLaVA, ImageBind,
GPT-4 Vision, VideoCLIP, UnifiedMultimodal, and the two AudioVisual networks)
now take their configuration through VisionLanguageModelOptions. 102 parameters
moved, carried over unchanged.

Three defects in my own tooling, each caught by the build rather than by care:

1. The migration handled only ONE constructor per model. Eight of these eleven
   declare two, and both contain `_options = options ?? new XOptions()`, so the
   script took the first and left the second's parameters in place — 44 params
   moved instead of 102. It now migrates every constructor that takes an
   options parameter, and the options class carries the union of their defaults.

2. Repointing a guard at _options could place it ABOVE the assignment, a null
   dereference. This happened in three different guard shapes (RWKV7 in phase 2,
   Blip2 and Flamingo here), so rather than recognising each shape the options
   assignment is now hoisted to the top of the constructor body.

3. Call sites received the options object as the last POSITIONAL argument, but
   the new signature puts `options` before the optional collaborators. It is now
   emitted as a named argument.

Also handled: defaults that are `private const` on the model are resolved to
their literal value with the constant's name kept as a comment; a default naming
an open generic is reported rather than emitted into a non-generic options class.

Known gap: enum- and string-typed parameters are not yet moved (VideoCLIP's
TemporalAggregation, LLaVA's LanguageModelBackbone). The ratchet counts them, so
they are covered in a follow-up rather than left implicit.

Build green, ratchet 875.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The ratchet counts enum- and string-typed constructor parameters as
configuration, so the count could never reach its floor while the migration
moved only numeric scalars. Detection is syntactic, since the script does not
resolve types: a bare identifier type whose default reads `Type.Member` is an
enum, and `string`/`string?` with a literal default is a string. An interface
defaulting to null matches neither.

Also picks up VisionMambaModel (9 params), which sat in the sequence group but
was never run, and UnifiedMultimodalNetwork, which was silently NOT migrated in
phase 3 — see below.

A third defect in the migration script, and the reason it mattered:
the constructor-signature pattern captured its parameter list with `[\s\S]*?`.
When a model declares a parameterless constructor that chains with `: this(...)`
BEFORE the real one, the lazy match ran past it hunting for `: base`, swallowing
a whole constructor body. The replacement was then not found inside the narrower
region the script edits, so the migration did nothing while still reporting
success. A parameter list never contains braces, so the capture is now `[^{}]*?`.

That failure mode is worth noting against the ratchet itself: it counts a
parameter as covered when the Options class has a matching NAME, so
UnifiedMultimodalNetwork scored as migrated while its constructor still took all
three parameters. The behavioural assertion is what closes that hole.

The migration is also idempotent now — a default the options constructor already
assigns is not appended a second time — so it can be re-run to pick up parameter
kinds an earlier pass did not recognise.

Build green, ratchet 861.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…> 782

Eleven models (BGE, ColBERT, SGPT, SPLADE, SimCSE, Instructor, Matryoshka,
FastText, GloVe, Word2Vec, TransformerEmbeddingNetwork) now configure through
EmbeddingModelOptions. 77 parameters moved, carried over unchanged.

PoolingStrategy is promoted out of TransformerEmbeddingNetwork<T> into
AiDotNet.Enums.EmbeddingPoolingStrategy. This is the collision phase 1
deliberately deferred: a type nested in a generic class is a DISTINCT type per
type argument, so TransformerEmbeddingNetwork<float>.PoolingStrategy and the
<double> one were unrelated, and neither could be named from a non-generic
options class. It was never usable as configuration, which is what it describes.
Renamed rather than moved as-is, because src/VisionLanguage/Encoders has its own
unrelated PoolingStrategy with different members.

Options inheritance now mirrors model inheritance. Seven of these models derive
from TransformerEmbeddingNetwork<T> and forward through `: base(...)`, so their
options classes had to derive from TransformerEmbeddingOptions rather than
straight from EmbeddingModelOptions — otherwise a derived model cannot pass its
own options to base at all. Their duplicated pooling property and Validate() are
removed; the base's are shared.

Two more migration-script fixes:
- A delegating `: this(...)` initializer was being repointed at _options, which
  is not in scope before the body and produced an argument name that was an
  expression. Initializers are now pruned (the target no longer takes those
  parameters) and only the body is repointed.
- `options` IS a parameter, so an initializer needing a moved value reads
  `options?.MaxGradNorm ?? 1.0` — used by FastText, GloVe, Word2Vec and
  TransformerEmbeddingNetwork.

GANs are deliberately NOT in this commit. DCGAN, BigGAN, SAGAN and ProgressiveGAN
use their moved values inside `: base(CreateGeneratorArchitecture(latentSize,
...))` to build architectures before the object exists. That is per-model
judgement rather than a mechanical move, so it gets its own pass instead of being
forced through the script.

Build green. 37 tests pass, ratchet 782.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ten GANs (DCGAN, WGAN, WGAN-GP, BigGAN, SAGAN, StyleGAN, ProgressiveGAN, InfoGAN,
Pix2Pix, CycleGAN) now configure through GanOptions. 41 parameters moved.

These broke three more assumptions the migration had been carrying:

1. NOT EVERY MODEL HAS AN ARCHITECTURE PARAMETER. The GAN primary constructors
   take explicit image dimensions and build their generator and discriminator
   architectures from them. The architecture parameter was only ever used to
   place a parameter first; when absent, the required parameters lead.

2. A CONSTRUCTOR MAY DELEGATE WITH `: this(...)`, not just `: base(...)`, and
   such a constructor is public and carries movable parameters of its own.

3. A MOVED VALUE MAY BE USED INSIDE THE INITIALIZER:
       : base(CreateDCGANGeneratorArchitecture(latentSize, ..., generatorFeatureMaps), ...)
   Dropping the identifier is wrong — the expression needs the value. `options`
   IS in scope in an initializer, so it becomes `(options?.GeneratorChannels ?? 64)`,
   carrying the same default. And a name that is defaulted in one constructor but
   REQUIRED in another (DCGAN's latentSize) must be supplied there, not dropped.

Every argument that is a bare parameter name in an initializer is now emitted
named, because moving `options` ahead of the optional collaborators changes what
a positional argument binds to.

GanOptions.ValidateCore no longer requires LatentSize or InitialLearningRate.
This was caught by 30 failing tests, not by the build: LatentSize stays a
required CONSTRUCTOR argument on the four models that build architectures from
it, so it is legitimately unset on those options objects, and most GANs never had
an InitialLearningRate parameter at all. It now carries the DCGAN paper's 0.0002
as a default and only ImageChannels is required.

Build green. All 57 GAN tests pass, ratchet 741.

Refs #2090

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 9, 2026 14:11
@vercel

vercel Bot commented Sep 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Actions Updated
aidotnet_website Ignored Ignored Sep 9, 2026 2:11pm UTC
aidotnet-playground-api Ignored Ignored Sep 9, 2026 2:11pm UTC

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 134 files, which is 34 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 931fb40d-4c18-4173-b71a-5d8b1450ca08

📥 Commits

Reviewing files that changed from the base of the PR and between 8decd96 and 80ecfe0.

📒 Files selected for processing (134)
  • CI_SHARD_INVENTORY.md
  • src/AiDotNet.Generators/TestScaffoldGenerator.cs
  • src/Enums/EmbeddingPoolingStrategy.cs
  • src/Models/Options/AudioHyperparameterOptions.cs
  • src/Models/Options/DocumentNeuralNetworkOptions.cs
  • src/Models/Options/ModelHyperparameterOptions.cs
  • src/NeuralNetworks/AudioVisualCorrespondenceNetwork.cs
  • src/NeuralNetworks/AudioVisualEventLocalizationNetwork.cs
  • src/NeuralNetworks/BGE.cs
  • src/NeuralNetworks/BigGAN.cs
  • src/NeuralNetworks/Blip2NeuralNetwork.cs
  • src/NeuralNetworks/BlipNeuralNetwork.cs
  • src/NeuralNetworks/ClipModelLoader.cs
  • src/NeuralNetworks/ClipNeuralNetwork.cs
  • src/NeuralNetworks/ColBERT.cs
  • src/NeuralNetworks/CycleGAN.cs
  • src/NeuralNetworks/DCGAN.cs
  • src/NeuralNetworks/EagleLanguageModel.cs
  • src/NeuralNetworks/FalconMambaLanguageModel.cs
  • src/NeuralNetworks/FastText.cs
  • src/NeuralNetworks/FinchLanguageModel.cs
  • src/NeuralNetworks/FlamingoNeuralNetwork.cs
  • src/NeuralNetworks/GLALanguageModel.cs
  • src/NeuralNetworks/GatedDeltaNetLanguageModel.cs
  • src/NeuralNetworks/GloVe.cs
  • src/NeuralNetworks/Gpt4VisionNeuralNetwork.cs
  • src/NeuralNetworks/GriffinLanguageModel.cs
  • src/NeuralNetworks/HawkLanguageModel.cs
  • src/NeuralNetworks/ImageBindNeuralNetwork.cs
  • src/NeuralNetworks/InfoGAN.cs
  • src/NeuralNetworks/InstructorEmbedding.cs
  • src/NeuralNetworks/JambaLanguageModel.cs
  • src/NeuralNetworks/LLaVANeuralNetwork.cs
  • src/NeuralNetworks/Mamba2LanguageModel.cs
  • src/NeuralNetworks/MambaLanguageModel.cs
  • src/NeuralNetworks/MatryoshkaEmbedding.cs
  • src/NeuralNetworks/Options/AudioVisualCorrespondenceOptions.cs
  • src/NeuralNetworks/Options/AudioVisualEventLocalizationOptions.cs
  • src/NeuralNetworks/Options/BGEOptions.cs
  • src/NeuralNetworks/Options/BigGANOptions.cs
  • src/NeuralNetworks/Options/Blip2Options.cs
  • src/NeuralNetworks/Options/BlipOptions.cs
  • src/NeuralNetworks/Options/ClipOptions.cs
  • src/NeuralNetworks/Options/ColBERTOptions.cs
  • src/NeuralNetworks/Options/CycleGANOptions.cs
  • src/NeuralNetworks/Options/DCGANOptions.cs
  • src/NeuralNetworks/Options/EagleOptions.cs
  • src/NeuralNetworks/Options/EmbeddingModelOptions.cs
  • src/NeuralNetworks/Options/FalconMambaOptions.cs
  • src/NeuralNetworks/Options/FastTextOptions.cs
  • src/NeuralNetworks/Options/FinchOptions.cs
  • src/NeuralNetworks/Options/FlamingoOptions.cs
  • src/NeuralNetworks/Options/GLAOptions.cs
  • src/NeuralNetworks/Options/GanOptions.cs
  • src/NeuralNetworks/Options/GatedDeltaNetOptions.cs
  • src/NeuralNetworks/Options/GloVeOptions.cs
  • src/NeuralNetworks/Options/Gpt4VisionOptions.cs
  • src/NeuralNetworks/Options/GriffinOptions.cs
  • src/NeuralNetworks/Options/HawkOptions.cs
  • src/NeuralNetworks/Options/ImageBindOptions.cs
  • src/NeuralNetworks/Options/InfoGANOptions.cs
  • src/NeuralNetworks/Options/InstructorEmbeddingOptions.cs
  • src/NeuralNetworks/Options/JambaOptions.cs
  • src/NeuralNetworks/Options/LLaVAOptions.cs
  • src/NeuralNetworks/Options/Mamba2Options.cs
  • src/NeuralNetworks/Options/MambaOptions.cs
  • src/NeuralNetworks/Options/MatryoshkaEmbeddingOptions.cs
  • src/NeuralNetworks/Options/Pix2PixOptions.cs
  • src/NeuralNetworks/Options/ProgressiveGANOptions.cs
  • src/NeuralNetworks/Options/RWKV4Options.cs
  • src/NeuralNetworks/Options/RWKV7Options.cs
  • src/NeuralNetworks/Options/RecurrentGemmaOptions.cs
  • src/NeuralNetworks/Options/SAGANOptions.cs
  • src/NeuralNetworks/Options/SGPTOptions.cs
  • src/NeuralNetworks/Options/SPLADEOptions.cs
  • src/NeuralNetworks/Options/SambaOptions.cs
  • src/NeuralNetworks/Options/SequenceModelOptions.cs
  • src/NeuralNetworks/Options/SimCSEOptions.cs
  • src/NeuralNetworks/Options/StyleGANOptions.cs
  • src/NeuralNetworks/Options/TransformerEmbeddingOptions.cs
  • src/NeuralNetworks/Options/UnifiedMultimodalNetworkOptions.cs
  • src/NeuralNetworks/Options/VideoCLIPOptions.cs
  • src/NeuralNetworks/Options/VisionLanguageModelOptions.cs
  • src/NeuralNetworks/Options/VisionMambaOptions.cs
  • src/NeuralNetworks/Options/WGANGPOptions.cs
  • src/NeuralNetworks/Options/WGANOptions.cs
  • src/NeuralNetworks/Options/Word2VecOptions.cs
  • src/NeuralNetworks/Options/XLSTMOptions.cs
  • src/NeuralNetworks/Options/Zamba2Options.cs
  • src/NeuralNetworks/Options/ZambaOptions.cs
  • src/NeuralNetworks/Pix2Pix.cs
  • src/NeuralNetworks/ProgressiveGAN.cs
  • src/NeuralNetworks/RWKV4LanguageModel.cs
  • src/NeuralNetworks/RWKV7LanguageModel.cs
  • src/NeuralNetworks/RecurrentGemmaLanguageModel.cs
  • src/NeuralNetworks/SAGAN.cs
  • src/NeuralNetworks/SGPT.cs
  • src/NeuralNetworks/SPLADE.cs
  • src/NeuralNetworks/SambaLanguageModel.cs
  • src/NeuralNetworks/SimCSE.cs
  • src/NeuralNetworks/StyleGAN.cs
  • src/NeuralNetworks/TransformerEmbeddingNetwork.cs
  • src/NeuralNetworks/UnifiedMultimodalNetwork.cs
  • src/NeuralNetworks/VideoCLIPNeuralNetwork.cs
  • src/NeuralNetworks/VisionMambaModel.cs
  • src/NeuralNetworks/WGAN.cs
  • src/NeuralNetworks/WGANGP.cs
  • src/NeuralNetworks/Word2Vec.cs
  • src/NeuralNetworks/XLSTMLanguageModel.cs
  • src/NeuralNetworks/Zamba2LanguageModel.cs
  • src/NeuralNetworks/ZambaLanguageModel.cs
  • src/Video/Options/VideoHyperparameterOptions.cs
  • tests/AiDotNet.Tests/IntegrationTests/Configuration/OptionsSurfaceRatchetTests.cs
  • tests/AiDotNet.Tests/IntegrationTests/NeuralNetworks/AdvancedNeuralNetworkModelsIntegrationTests.cs
  • tests/AiDotNet.Tests/IntegrationTests/NeuralNetworks/FusedOptimizerIntegrationTests.cs
  • tests/AiDotNet.Tests/IntegrationTests/NeuralNetworks/MissingModelsIntegrationTests.cs
  • tests/AiDotNet.Tests/IntegrationTests/NeuralNetworks/RecurrentGemmaTrainingRegressionTests.cs
  • tests/AiDotNet.Tests/IntegrationTests/NeuralNetworks/RgLruFamilyFusedCompiledTrainingTests.cs
  • tests/AiDotNet.Tests/IntegrationTests/NeuralNetworks/TransformerEmbeddingNetworkTests.cs
  • tests/AiDotNet.Tests/ModelFamilyTests/NeuralNetworks/AudioVisualEventLocalizationNetworkTests.cs
  • tests/AiDotNet.Tests/ModelFamilyTests/NeuralNetworks/BigGANTests.cs
  • tests/AiDotNet.Tests/ModelFamilyTests/NeuralNetworks/ProgressiveGANTests.cs
  • tests/AiDotNet.Tests/ModelFamilyTests/NeuralNetworks/SAGANTests.cs
  • tests/AiDotNet.Tests/ModelFamilyTests/NeuralNetworks/VideoCLIPNeuralNetworkTests.cs
  • tests/AiDotNet.Tests/UnitTests/Agentic/Local/RealModelLocalInferenceTests.cs
  • tests/AiDotNet.Tests/UnitTests/Agentic/Local/WeightImporterTests.cs
  • tests/AiDotNet.Tests/UnitTests/Agentic/SelfImproving/LoRAFineTunerTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/Blip2NeuralNetworkTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/ClipNeuralNetworkTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/FusedTrainingArenaBoundednessTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/GANs/GenerativeAdversarialNetworkTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/Layers/SSM/MambaLanguageModelTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/Layers/SSM/RWKV7LanguageModelTests.cs
  • tests/AiDotNet.Tests/UnitTests/NeuralNetworks/Layers/SSM/VisionMambaModelTests.cs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ooples

ooples commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

Closing as superseded, with the evidence rather than an assumption.

git merge-base --is-ancestor feature/options-surface-phase-4-embed-gan feature/options-surface-phase-7-audio succeeds: every commit on this branch is already contained in the phase-7 branch, which is open as #2158 and now ready for review. Nothing here is lost by closing.

Two things worth noting about why this looked worse than it was:

  • The "27 of 32 checks failing" is misleading. The run (34361949155, 2026-09-09) has conclusion cancelled, not failure — an early job failed and the rest were cancelled, so most of those 27 never actually ran and never actually failed.
  • The branch is 48 commits behind master and its tip is 11 days old, so even a fresh run would not have told us much about the current state of the work.

The branch is not deleted. If anything here turns out not to have made it into #2158 after all, it can be recovered from feature/options-surface-phase-4-embed-gan at its tip.

@ooples ooples closed this Sep 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants