Skip to content

Fix preset verification rejecting a tool's synthetic dataset name - #4199

Closed
r4victor wants to merge 1 commit into
masterfrom
issue_4198_preset_benchmark_dataset_verification
Closed

Fix preset verification rejecting a tool's synthetic dataset name#4199
r4victor wants to merge 1 commit into
masterfrom
issue_4198_preset_benchmark_dataset_verification

Conversation

@r4victor

Copy link
Copy Markdown
Collaborator

Fixes #4198. A preset with shared_prefix_tokens and no dataset failed verification whenever the agent benchmarked with a tool that doesn't call its synthetic dataset random.

  • Collapse PresetRandomWorkload into PresetWorkload so one workload can carry both the tool's dataset name and shared_prefix_tokens, which the old union made mutually exclusive.
  • Compare the requested shared prefix instead of the dataset name for synthetic workloads, since random is dstack's own name for them while the report carries the benchmark tool's.
  • Compare concurrency against the request, which nothing checked before; input_tokens and output_tokens stay uncompared because they are measured means rather than an echo of the request.
  • Name both values in every workload mismatch error.
  • Update the system prompt's synthetic-workload branch to match the schema.

AI assistance: written with Claude Code.

`random` is dstack's own name for a synthetic workload, while the agent
reports the benchmark tool's name for the data it generated, so a
shared-prefix benchmark run with SGLang could never match. The workload
also had no way to state both a tool dataset name and a shared prefix,
which is why the shared prefix went missing from the stored record.
@peterschmidt85

Copy link
Copy Markdown
Contributor

Will review and resolve conflicts myself tomorrow!

peterschmidt85 pushed a commit that referenced this pull request Aug 25, 2026
`random` was dstack's own name for a synthetic workload, but the report's
`dataset` carried the benchmark tool's name for the data it served, so a
shared-prefix benchmark run with SGLang could never verify (#4198): two
namespaces, compared as one.

Now the workload states the request. `dataset` echoes the requested dataset
and is absent for a synthetic workload, whose requested shared prefix is
compared instead - the one fact the request and the report share. The tool's
own name for its generated data stays where it already was, in `command`.
The stored record is normalized from the configuration, the authority on
what was requested, so nothing the agent volunteers can contradict the
contract - and the system prompt needs no change.

`dataset: random` is retired from the configuration: a set dataset always
means a real one, and synthetic prompts are requested by omitting it.
Records it was legal in are upgraded when read - stored presets, in both
the configuration and the workload, and an in-flight session's saved
configuration.

Based on #4199: the verification comparisons and much of
the test suite are Victor's.

Co-authored-by: Victor Skvortsov <vds003@gmail.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
peterschmidt85 added a commit that referenced this pull request Aug 25, 2026
`random` was dstack's own name for a synthetic workload, but the report's
`dataset` carried the benchmark tool's name for the data it served, so a
shared-prefix benchmark run with SGLang could never verify (#4198): two
namespaces, compared as one.

Now the workload states the request. `dataset` echoes the requested dataset
and is absent for a synthetic workload, whose requested shared prefix is
compared instead - the one fact the request and the report share. The tool's
own name for its generated data stays where it already was, in `command`.
The stored record is normalized from the configuration, the authority on
what was requested, so nothing the agent volunteers can contradict the
contract - and the system prompt needs no change.

`dataset: random` is retired from the configuration: a set dataset always
means a real one, and synthetic prompts are requested by omitting it.
Records it was legal in are upgraded when read - stored presets, in both
the configuration and the workload, and an in-flight session's saved
configuration.

Based on #4199: the verification comparisons and much of
the test suite are Victor's.

Co-authored-by: Andrey Cheptsov <andrey.cheptsov@github.com>
Co-authored-by: Victor Skvortsov <vds003@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@peterschmidt85

Copy link
Copy Markdown
Contributor

Closing in favor of #4201: same fix, cleaner contract (dataset = the requested dataset, absent for synthetic), no system prompt changes.

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.

[Bug]: Preset creation fails with a dataset error when no dataset is set

2 participants