Skip to content

Prepare repeated DSPy/Jev comparisons; record offline reruns and live blockers - #32

Merged
CompleteDotTech merged 6 commits into
mainfrom
research/dspy-jev-benchmark
Sep 28, 2026
Merged

CompleteDotTech merged 6 commits into
mainfrom
research/dspy-jev-benchmark

Conversation

@CompleteDotTech

Copy link
Copy Markdown
Owner

Execution status — no live DSPy result claimed

The requested live with/without-DSPy comparison could not start. Preflight run 35355158096 found the explicitly mapped TypeSafe key populated but none of the mapped OpenRouter/OpenAI/Anthropic proposal keys. It stopped before Jev inference. A second diagnostic 35355491970 was marked action_required with zero jobs. That gate was not bypassed. Broad secret-context diagnostics were removed; live workflows are manual-only and use named credentials.

Implemented comparison matrix

  • Two tasks, all eight native historical formulations, five repeat seeds, two DSPy objectives (20 searches), eight proposals per search.
  • Separate training/validation, calibration and held-out inference phases; raw, temperature and regularized bias/temperature at three calibration sizes.
  • Primary tests plus fixtures, semantic challenge and multicall input panels; explicit exclusion of 12 unscorable uncertain entity fixtures.
  • Model/repeat-aware caches, bounded parallel inference, complete request/response audit, strict invalid-response handling, and reports that never turn missing runs into zero scores.
  • Manual live CI matrix; pull-request validation does not receive inference credentials.

Actually executed

  • 1,092 local tests passed; six skipped across 16 suites (skips are not passes).
  • All 11 deterministic experiment replays reproduced saved results; original 161-file evidence inventory and existing optimizer inventory verified.
  • 26 comparison tests passed, including full orchestration with explicitly marked test doubles.
  • Exploratory recalibration of archived outputs shows task/metric-dependent effects. It contains zero fresh model calls and zero DSPy runs, and excludes malformed archived probabilities explicitly.
  • The published Git tree before its self-excluding artifact manifest exactly matched the locally tested source tree (3b0a82c5ebd405fb60faf6fc93e7d79d9f61f0f6).

Entry point: DSPY_BENCHMARKS.md. Detailed status: experiments/dspy-comparison-20260918/STATUS.md. The root MANIFEST and prior research results are unchanged. This is an execution package plus honest partial results, not evidence that DSPy improved Jev.

Prepare five-seed live comparisons with separate calibration and held-out panels. Preserve native baseline formulations and immutable research evidence. Record 1092 passing local tests, six skips, eleven successful archived replays, and exploratory saved-output recalibration. Live inference remains blocked by missing mapped proposal credentials and an Actions approval requirement; no DSPy performance gain is claimed.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 18, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-28T19:20:10.572885Z 162afe1 New commits
🔒 Security Review ✅ Completed 2026-09-18T14:59:31.355998Z 2db0643 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copy link
Copy Markdown
Owner Author

Final artifact verification: the complete published tree 6bb569f97779640dd892dc7b5f271bde2ac842a6 matches the locally assembled and tested source tree byte for byte. All 17 entries in the independent SHA-256 inventory passed. The downloadable audit bundle supplied in the conversation contains 97 files (source, full-precision calibration fits/results, executed offline logs, and the Boolean-only preflight report), SHA-256 566df5a64180f73fbccd14023f50b09beb45f4423c670fe17a86931a0844a447.

Validation scope remains the c726b66 baseline plus this additive implementation, not a claim that the newer main branch or PR merge result has been tested locally. Live DSPy/Jev comparisons remain unexecuted. The PR is left open; no inference-credential or Actions approval restriction was bypassed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2db06433d5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +51 to +53
- name: Generate report without inventing missing runs
if: always()
run: python -B -m graph_synthesis.dspy_benchmark.report --directory '${{ runner.temp }}/comparison'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Aggregate seed artifacts before generating the report

Each matrix leg runs on an isolated runner and invokes the report before any other seed's artifact is available, so even after all five live jobs succeed every generated report sees only its own seed-* directory, reports the other four seeds as not_run, and cannot calculate the promised five-run means or standard deviations. Add a downstream job that downloads all five seed artifacts into one comparison directory and invokes the reporter once.

Useful? React with 👍 / 👎.

Comment thread .github/workflows/dspy-benchmark.yml Outdated
Comment on lines +3 to +4
pull_request:
paths: ['graph_synthesis/dspy_benchmark/**', '.github/workflows/dspy-benchmark.yml']

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Run benchmark tests when the optimizer dependency changes

The benchmark imports core.py and providers.py from graph_synthesis/dspy_jev_optimizer, but this path filter does not trigger the benchmark workflow for changes under that package. Such a PR only runs the optimizer's own tests, so an API or behavioral change that breaks the benchmark can merge unnoticed and surface only during a costly manual live dispatch; include the optimizer directory in this workflow's pull-request paths.

Useful? React with 👍 / 👎.

Comment thread graph_synthesis/dspy_benchmark/run.py Outdated
Comment on lines +161 to +167
proposer_model = provider_model()
output.mkdir(parents=True)
if not os.environ.get('TYPESAFE_API_KEY') or (not proposer_model and not baseline_only):
write_json(output/'status.json', {'status':'blocked_missing_credentials',
'typesafe_key_present':bool(os.environ.get('TYPESAFE_API_KEY')),
'proposer_model_configured':bool(proposer_model),'live_calls':0})
raise RuntimeError('Live benchmark requires TypeSafe and a generative proposal provider')

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Validate proposal credentials before making Jev calls

When DSPY_PROPOSER_MODEL is configured but its corresponding provider secret is absent, this guard passes because it checks only that the model string is nonempty. The optimizer then performs the baseline validation and training Jev evaluations before the first DSPy proposal attempts authentication and fails, wasting roughly 60 paid Jev calls per task/seed instead of recording a zero-call credential block. For the explicitly supported workflow providers, validate the credential matching the configured model—or probe the proposer—before starting target inference.

Useful? React with 👍 / 👎.

Comment on lines +18 to +19
if item['status'] in ('completed','completed_baseline_only'):
rows.extend(read_json(directory/'metrics.json'))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Exclude baseline-only runs from comparison summaries

If users run the documented --baseline-only mode, this condition loads those partial metrics into the main comparison summary even though no DSPy arm was executed. With only baseline-only runs, summary is nonempty, so the report also suppresses the explicit “No completed live comparison” warning and presents control scores under “Primary test results”; with mixed runs it aggregates controls over more seeds than DSPy arms. Keep partial baseline results separate from the completed-comparison aggregate.

Useful? React with 👍 / 👎.

Comment on lines +156 to +158
def execute(output: Path, seed: int, *, iterations=8, baseline_only=False, model='jev-1.13.0', workers=4):
if seed not in SEEDS or not 0 <= iterations <= 12:
raise ValueError('Unregistered seed or iteration budget')

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reject zero-iteration runs as completed DSPy comparisons

The public CLI accepts --iterations 0, but optimize() then freezes the untouched baseline without ever invoking the DSPy proposer; the runner still names both resulting arms dspy_accuracy/dspy_composite and writes status completed. The reporter consequently counts a zero-DSPy-call execution as a completed full DSPy run and can publish its scores as DSPy results. Require at least one iteration for non-baseline runs, or record and report this mode as a distinct partial/no-search execution.

Useful? React with 👍 / 👎.

@CompleteDotTech CompleteDotTech added reproducibility Reproduction commands, pinned inputs, and verification priority: high Blocks a reliable public release or core reproduction path labels Sep 28, 2026
@CompleteDotTech
CompleteDotTech merged commit 68c5bf7 into main Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: high Blocks a reliable public release or core reproduction path reproducibility Reproduction commands, pinned inputs, and verification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant