Skip to content

wip split generationcriterion and transitioncriterion#4854

Closed
mgarrard wants to merge 1 commit intofacebook:mainfrom
mgarrard:export-D92201085
Closed

wip split generationcriterion and transitioncriterion#4854
mgarrard wants to merge 1 commit intofacebook:mainfrom
mgarrard:export-D92201085

Conversation

@mgarrard
Copy link
Copy Markdown
Contributor

@mgarrard mgarrard commented Feb 4, 2026

Summary: wip

Differential Revision: D92201085

@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented Feb 4, 2026

@mgarrard has exported this pull request. If you are a Meta employee, you can view the originating Diff in D92201085.

@meta-cla meta-cla Bot added the CLA Signed Do not delete this pull request or issue due to inactivity. label Feb 4, 2026
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 5, 2026
Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Differential Revision: D92201085
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 5, 2026
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Differential Revision: D92201085
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 5, 2026
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Differential Revision: D92201085
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Feb 5, 2026

Codecov Report

❌ Patch coverage is 96.06987% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 96.83%. Comparing base (c2f9aec) to head (7d0a6f1).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
ax/generation_strategy/transition_criterion.py 90.90% 6 Missing ⚠️
ax/generation_strategy/generation_node.py 92.85% 2 Missing ⚠️
ax/utils/testing/core_stubs.py 66.66% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##             main    #4854    +/-   ##
========================================
  Coverage   96.83%   96.83%            
========================================
  Files         596      596            
  Lines       63108    63244   +136     
========================================
+ Hits        61109    61241   +132     
- Misses       1999     2003     +4     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 24, 2026
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 24, 2026
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
@mgarrard mgarrard force-pushed the export-D92201085 branch 2 times, most recently from 36dccfd to 9c67229 Compare February 24, 2026 22:13
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 24, 2026
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 24, 2026
…erion (facebook#4854)

Summary:
Pull Request resolved: facebook#4854

**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless

**Cons of this change:**
- it’s a large change, sorry about that.
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about.

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests

**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
@mgarrard mgarrard force-pushed the export-D92201085 branch 2 times, most recently from f672739 to 6174c31 Compare February 24, 2026 22:21
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 24, 2026
…erion (facebook#4854)

Summary:
Pull Request resolved: facebook#4854

**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless

**Cons of this change:**
- it’s a large change, sorry about that.
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about.

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests

**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
mgarrard added a commit to mgarrard/Ax that referenced this pull request Feb 25, 2026
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
…erion (facebook#4854)

Summary:


**TLDR:** This diff splits TransitionCriterion into (1) TransitionCriterion and (2) GenerationBlockingCriterion. I think this makes sense to do because it *greatly* increases the conceptual clarity of the transition criterion. Some ways it does this include:

1. Removal of confusing dual purpose flags — block_transition_if_unmet and block_generation_if_met flags. Now transition criteria are inferred to block transition if unmet and generation criteria are inferred to raise informative errors if the criteria is met.
2. Each criterion contains less flags, and the flags are more directly intuitive.
3. With upcoming removal of special logic for online, we will need to add more generation blocking criteria (ie do we have an opt config), it is better to make this change before adding more criteria that will need to be migrated 
4. It will allows the logic for transition and generation to be smoother — this diff keeps things ~= to exisiting logic as possible to minimize diff review overhead, but in subsequent diffs we can save fit time if we know we can’t generate from this node + can’t transition. It will also allow for some further clarification on generation/transition blocking logic that i think is contributing to the confusion of the file
5. i like that creating a new generation blocking criteria with a specific error to raise is easy and painless


**Cons of this change:**
- it’s a large change, sorry about that. 
- There is some duplication between TrialBased transition criterion and generation criterion. I explored using a Mixin here, but i find mixins tend to add unnecessary inheritance structures to reason about. 

**Most important files for review, in order of importance**
1. transition_criterion.py
2. generation_node.py
3. decoder.py
4. encoders.py
5. registery.py
6. generation_strategy_dispatch.py
7. generation_nodes.py
8. generation_strategy.py

The remaining files are mainly trivial updates to tests


**Note about backwards compatibility:**
* This diff will directly decode legacy MaxGenerationParallelism as a generation blocking criterion called MaxGenrationParallelism
* Historically, there are some instances of mintrials that have block_gen_if_met=True, this usually comes from enforce_num_trials=True. Now we call this MaxTrialsAwaitingData, and MinTrials is decoded as that. I am open to other, better names for this new criterion.

**Other notes/potential improvements:**
- we could split transition criterion, generation criterion, and utils into their own files. i kinda like them together, and if we do want to do this split i’d like to do it in a follow up to try to minimize an already v large blast radius

Reviewed By: lena-kashtelyan

Differential Revision: D92201085
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented Feb 26, 2026

This pull request has been merged in debdf00.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed Do not delete this pull request or issue due to inactivity. fb-exported Merged meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants