Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
82ba2fa
Add files
SkiHatDuckie Jun 30, 2026
a3df594
Update field description
SkiHatDuckie Jun 30, 2026
7fce97b
Add stubs
SkiHatDuckie Jun 30, 2026
6a5822a
Add missing trailing whitespace
SkiHatDuckie Jun 30, 2026
489fa6a
Implement trace format & args
SkiHatDuckie Jun 30, 2026
b68c34b
Add tests
SkiHatDuckie Jul 1, 2026
b4f1000
Test prompts matching or bordering block size
SkiHatDuckie Jul 1, 2026
abb0a48
Update tests
SkiHatDuckie Jul 1, 2026
970ad18
Update trace format docs
SkiHatDuckie Jul 1, 2026
cc31049
Update trace_replay.md
SkiHatDuckie Jul 1, 2026
e135bc0
Reapir tests
SkiHatDuckie Jul 13, 2026
e275ea3
Indicate private functions
SkiHatDuckie Jul 15, 2026
a643718
Update trace_replay.md
SkiHatDuckie Jul 15, 2026
56b907c
Make mdformat happy
SkiHatDuckie Jul 15, 2026
51d9f96
Add json utils + impl in trace_common
SkiHatDuckie Jul 21, 2026
8b047b6
Refactor
SkiHatDuckie Jul 21, 2026
84ee596
Handle unserializable python dicts
SkiHatDuckie Jul 21, 2026
9828c40
Improve json_unwrap tests
SkiHatDuckie Jul 22, 2026
de0668a
Improve trace_common test coverage
SkiHatDuckie Jul 22, 2026
91f996c
Handle multi-conversation datasets
SkiHatDuckie Jul 27, 2026
743b143
Store token blocks as tuples
SkiHatDuckie Jul 27, 2026
4d189fa
Repair tests
SkiHatDuckie Jul 28, 2026
dc6565c
Tolerate partially filled hash ID
SkiHatDuckie Jul 28, 2026
3a40885
Improve test coverage
SkiHatDuckie Jul 28, 2026
134a64e
Fix linting
SkiHatDuckie Jul 28, 2026
56c01d9
Update docs
SkiHatDuckie Jul 28, 2026
baab25a
Fix typo
SkiHatDuckie Jul 28, 2026
adc33ee
Set conv_start_ts outside the loop
SkiHatDuckie Jul 30, 2026
043b666
Move create_prompt_from_hash_ids to trace_common
SkiHatDuckie Jul 30, 2026
78c6cf1
Update docs
SkiHatDuckie Jul 30, 2026
280c38e
Rename ColumnSearchResult field
SkiHatDuckie Jul 30, 2026
ed429ef
Update guide
SkiHatDuckie Jul 30, 2026
52915a8
Try loading json columns if type `str`
SkiHatDuckie Jul 30, 2026
96ab6b1
Handle final prompt if `prompt` is empty
SkiHatDuckie Jul 30, 2026
9d3175d
Change final prompt again
SkiHatDuckie Jul 30, 2026
6c009e7
Change defaults to WEKA spec names
SkiHatDuckie Jul 30, 2026
1d69c7f
Patch dataset edge cases
SkiHatDuckie Jul 31, 2026
aa85201
Remove debug print
SkiHatDuckie Jul 31, 2026
0f5335d
Use parsed list instead on unparsed
SkiHatDuckie Aug 3, 2026
1efae6f
Move create_distinct_token_block to trace_common
SkiHatDuckie Aug 3, 2026
8267872
Update docs to match new WEKA defaults
SkiHatDuckie Aug 3, 2026
03c7ea7
Pass conversation_id_col as list
SkiHatDuckie Aug 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/guides/datasets.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ The following arguments configure datasets and their processing:
- `huggingface` (alias `hf`) — loads from HuggingFace Hub or a local directory/file. Required field: `source` (dataset ID or path). Pass dataset loading arguments (for example `split`, `name`) via `load_kwargs`.
- `json_file`, `csv_file`, `text_file`, `parquet_file`, `arrow_file`, `hdf5_file`, `db_file`, `tar_file` — loads from a local file. Required field: `path`.
- `trace_synthetic`, `mooncake` — loads a JSONL, JSON, CSV, or Parquet trace file for replay benchmarking. Required field: `path`. Optional: `timestamp_column` (default: `timestamp`), `prompt_tokens_column` (default: `input_length`), `output_tokens_column` (default: `output_length`).
- `weka` - Similar to `trace_synthetic`, but with the following changes to the optional field defaults: `timestamp_column` (default: `t`), `prompt_tokens_column` (default: `in`), `output_tokens_column` (default: `out`).

In addition, you can specify additional arguments to the dataset loading with the data argument `load_kwargs`:

Expand Down
33 changes: 29 additions & 4 deletions docs/guides/trace_replay.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ Detailed use of the replay profile and file-based datasets as a whole is explain
These are passed to the `--data` argument as `kind=format`:

- `trace_synthetic`: A trace format that does the bare minimum needed to complete a fully functioning trace replay benchmark with synthetic prompt generation
- `mooncake`: The trace format used by the serving platform Mooncake, as defined in [https://doi.org/10.48550/arXiv.2407.00079](https://doi.org/10.48550/arXiv.2407.00079)
- `mooncake`: The trace format used by the serving platform *Mooncake*, as defined in [https://doi.org/10.48550/arXiv.2407.00079](https://doi.org/10.48550/arXiv.2407.00079)
- `weka`: The trace format used by WEKA's *Augmented Memory Grid*, as specified [in the original research repository](https://github.com/callanjfox/agentic-coding-analysis/blob/master/docs/TRACE_FORMAT.md)

## Format-Agnostic Data Arguments

Expand All @@ -24,8 +25,8 @@ All trace formats can accept the following optional data arguments:
These are passed through the `--data` argument like below:

```bash
guidellm benchmark \
--target http://localhost:8000 \
guidellm run \
--backend kind=openai_http,target=http://localhost:8000 \
--profile kind=replay \
--data "kind=trace_synthetic,path=replay.jsonl,timestamp_column=ts,prompt_tokens_column=input_tokens,output_tokens_column=generated_tokens"
```
Expand All @@ -36,9 +37,33 @@ guidellm benchmark \

### `mooncake`

The Mooncake format expects an additional column for hash IDs. During prompt generation, hash IDs sharing the same previous ID are required to represent distinct blocks of token ids.
The Mooncake format expects an additional column for prefix-based cache hash IDs. During prompt generation, hash IDs sharing the same previous ID are required to represent distinct blocks of token ids.

| Argument | Default | Description |
| -------------------- | ---------- | --------------------------------------------------- |
| `hash_ids_column` | "hash_ids" | Column name for lists of hash IDs in the trace file |
| `hash_id_block_size` | 512 | Amount of tokens represented by one hash ID |

### `weka`

**NOTE:** :construction: While the format is accepted, some features such as subagent conversations, tool call events and non-linear histories are still in active development. The results from datasets including these features will be unreliable.

The WEKA format expects a column with conversation UUIDs that is not wrapped within another column. The timestamp, input token length, output token length and hash IDs columns must either be top level columns, or must all be wrapped inside the same JSON column (ex. "requests").

Similar to Mooncake, WEKA uses prefix-based cache hash IDs. The original [specification](https://github.com/callanjfox/agentic-coding-analysis/blob/master/docs/TRACE_FORMAT.md) for the trace requires hash IDs to be 1 or greater, and for trailing hash IDs to be dropped if there are not enough input tokens to fill the hash ID block size. To accommodate for datasets which may not follow the specification exactly (ex. [semianalysisai/cc-traces-weka-no-subagents-051226](https://huggingface.co/datasets/semianalysisai/cc-traces-weka-no-subagents-051226)), GuideLLM will accept any non-negative integer as a valid hash ID, and will drop partially filled hash IDs if they exist.

GuideLLM will generate prompts starting from the first conversation. When the conversation ends, the next conversation will be used. Hash IDs and relative timestamps are local to the conversation. After a conversation ends, the hash ID tree is reset and the relative timestamp returns to 0.0.

| Argument | Default | Description |
| ------------------------ | ---------- | ---------------------------------------------------- |
| `conversation_id_column` | "id" | Column name for conversation UUIDs in the trace file |
| `hash_ids_column` | "hash_ids" | Column name for lists of hash IDs in the trace file |
| `hash_id_block_size` | 64 | Amount of tokens represented by one hash ID |

Modified defaults:

| Argument | New Default |
| ---------------------- | ----------- |
| `timestamp_column` | "t" |
| `prompt_tokens_column` | "in" |
| `output_tokens_column` | "out" |
6 changes: 6 additions & 0 deletions src/guidellm/data/deserializers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,14 @@
TraceDatasetDeserializer,
TraceFormatBase,
TraceFormatRegistry,
create_distinct_token_block,
create_prompt_from_hash_ids,
decode_prompt,
generate_token_ids,
)
from .trace_minimal import MinimalTraceFormatArgs
from .trace_mooncake import MooncakeTraceFormatArgs
from .trace_weka import WEKATraceFormatArgs

__all__ = [
"ArrowFileDatasetDeserializer",
Expand Down Expand Up @@ -85,6 +88,9 @@
"TraceDatasetDeserializer",
"TraceFormatBase",
"TraceFormatRegistry",
"WEKATraceFormatArgs",
"create_distinct_token_block",
"create_prompt_from_hash_ids",
"decode_prompt",
"generate_token_ids",
]
Loading