feat: generate an exact number of rows matching a declared criterion
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
- #817 @nabinchha による — マージされずにクローズ
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
- issue の種類
- 機能追加
- 明瞭さ
- 明確に書かれている
- 活発さ
- 静か
- 技術スタック
- python
調査の方向性
設計の信頼できる唯一の情報源、アーキテクチャ図、実装フェーズ、テスト計画、Definition of Doneが記載されている plans/790/engine-native-record-selection.md から始めます。通常の DataDesigner.create() の実行で、候補バッチ、受け入れられた行、チェックポイント、再開時の動作がどのように処理されるかを追跡します。完了とは、一覧にある V1 の受け入れ基準を満たすことを意味します。これには、正確なターゲット、上限付きの枯渇、受け入れ数がゼロのバッチの永続化、再開の正確性、受け入れられた行のみの処理が含まれます。
索引モデルが issue の本文から書いたものです。
説明
Problem
DataDesigner users can generate candidate rows and filter them afterward, but they cannot declaratively request an exact number of rows that satisfy a quality or validation criterion. Doing this today requires user-managed loops across multiple create() calls, including candidate budgeting, artifact extension, trimming, and resume behavior.
Examples include generating 5,000 answers above a judge threshold, 10,000 policy-compliant conversations, or a fixed number of successful tool-use traces.
Proposed feature
Add engine-native record selection to a normal DataDesigner.create() run. A user declares a boolean predicate column and a hard candidate limit. When selection is configured, num_records means the desired number of accepted output rows:
builder.with_record_selection(
dd.RecordSelectionConfig(
predicate_column="meets_criteria",
max_candidate_records=20_000,
on_exhausted="raise",
)
)
results = data_designer.create(builder, num_records=5_000)
The engine generates immutable candidate batches, evaluates the predicate, checkpoints accepted rows, and continues until the target is met or the candidate budget is exhausted.
V1 scope
- Treat
num_recordsas the accepted-row target when record selection is enabled. - Require an explicit boolean predicate column and hard
max_candidate_recordsbound. - Support
raiseandreturn_partialexhaustion behavior. - Preserve deterministic candidate ordering and trim final overshoot exactly.
- Track candidate attempts separately from accepted output.
- Persist candidate-batch completion markers so zero-acceptance batches and resume are correct.
- Preserve normal DAG generation, processors, profiling, plugins, and model-usage accounting.
- Run one candidate batch at a time while retaining the scheduler's normal within-row-group concurrency.
Out of scope
- Concurrent candidate batches.
- Early cancellation of downstream row work after predicate rejection.
- Exporting every rejected candidate.
- Unbounded generation based on an expected acceptance rate.
- Row-count-changing after-generation processors.
These are optional performance or expansion ideas, not requirements for a complete V1.
Acceptance criteria
- A single
create()call can reliably return exactlyXmatching rows. - Generation is bounded and exhaustion behavior is explicit.
- Candidate progress is independent of accepted parquet row counts.
- Runs resume after any committed candidate batch without repeating candidate offsets or accepted output.
- Zero-acceptance candidate batches remain durably complete.
- Output processing and profiling operate on accepted rows only, while usage metadata includes rejected work.
- Default-buffer behavior works when the target is reached only after three or more candidate batches.
- Documentation explains cost, bounds, partial exhaustion, and resume semantics.
Investigation and context
PR #773 explored workflow-level repetition. Real-run testing showed that extending a static row-group plan can stall when small increments remain inside the same buffer boundary, and that an interrupted append flow can request a target smaller than persisted output. Record selection therefore needs engine-owned candidate progress rather than repeated public create() orchestration.
Detailed plan
The source-of-truth design, architecture diagrams, implementation phases, test plan, and definition of done are in plans/790/engine-native-record-selection.md.
- 主要言語
- Python
- スター
- 2.4k
- フォーク
- 243
- 平均マージ
- 1日 3時間
- マージ済み PR(30日)
- 88
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NVIDIA-NeMo/DataDesigner のほかの issue
-
Structured-output prompt schemas escape non-ASCII text as \uXXXX対応中かも @spped2000 が 3 日前に担当しました。 オープンtriaged
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
NVIDIA-NeMo/DataDesigner#1130 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
needs-discussion triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
NVIDIA-NeMo/DataDesigner#1129 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
Allow huggingface-hub 2.x (widen cap from <2 to <3)対応中かも @davanstrien が 8 日前に担当しました。 オープンenhancement triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
NVIDIA-NeMo/DataDesigner#1110 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Local seed path containing a single quote breaks the DuckDB query再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンbug triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
NVIDIA-NeMo/DataDesigner#1102 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
enforce \from future import annotations` via ruff FA102 rule`対応中かも @chethanuk が 57 日前に担当しました。 オープンtask
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
NVIDIA-NeMo/DataDesigner#760 ·
メンテナーはふだん 1 日以内に返信
NVIDIA-NeMo/DataDesigner の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
RunestoneInteractive/rs#1661 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
streamlink/streamlink#7192 · コメント 4 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 75/100
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
aws-samples/sample-per-model-bedrock#795 ·
メンテナーはふだん 1 日以内に返信