DynoSim Replay CLI Reference
aisimulate predict --stack dynamo evaluates one concrete workload and deployment configuration
through the Dynamo simulation stack. AISimulate owns the traffic and engine schema. The ai-dynamo
package supplies the Dynamo runner and the optional router and planner configuration adapters.
For an end-to-end workflow, see Run a DynoSim Simulation. To search configuration domains, see Sweep DynoSim Configurations.
The former Replay online mode has no replacement in the unified AISimulate CLI yet. aisimulate predict and aisimulate recommend are offline-only. The separate python3 -m dynamo.mocker
command remains available for launching live workers but does not provide replay orchestration.
Command
YAML prediction configuration. Prediction files contain concrete values and reject search
domains, presets, optimization, and optimizer.
Execution stack. Set this option to dynamo to load the Dynamo runner and the Router and Planner
adapters registered by ai-dynamo.
Override a schema-valid configuration path after loading the YAML file. Repeat the option for multiple overrides. Values are parsed as YAML, and later assignments win. Sequence indexes are not supported.
Directory for prediction.json and optional per-request output.
Replace known AISimulate output files in an existing nonempty output directory. Unrelated files are preserved.
Standard-output format.
Allowed values: table jsonWrite one record per request to requests.jsonl.
Configuration Sections
The YAML document uses these top-level sections:
Unknown fields are rejected. predict accepts only concrete values. Use aisimulate recommend for
choices, range, or preset domains.
Dynamo Prediction Example
Traffic Rules
traffic contains source, load, and stop mappings.
- Omitting the entire section creates 100 independent synthetic requests at concurrency 10, with 1,024 input tokens and 128 output tokens per request.
source.type: syntheticcreates independent requests withinput_tokensandoutput_tokens.source.type: synthetic-sessioncreates ordered multi-turn sessions.source.type: tracereads one or more paths. Supported formats includemooncake,mooncake-delta,agentic_mooncake,applied_compute_agentic, anddynamo.load.type: concurrencykeeps a fixed number of requests or sessions active.load.type: constant_rateschedules evenly spaced arrivals fromrequests_per_secondorsessions_per_second.load.type: poissonuses the matching rate with exponential inter-arrival times and an optionalseed, which defaults to 42.load.type: trace_timestampspreserves trace timing and accepts a positivespeedup.stop.requestsapplies to independent requests.stop.sessionsapplies to session sources.stop.requests_per_load_unitandstop.sessions_per_load_unitderive the count from the concrete concurrency or arrival rate.stop.max_virtual_time_secondsis a soft virtual-time cutoff. Requests admitted before the cutoff may finish afterward.
For a Dynamo request trace, omit traffic.source.block_size; AISimulate derives it from the trace
records and rejects mixed block sizes. Dynamo format accepts multiple trace shards. Other formats
accept exactly one path, and their block size defaults to 512 when omitted.
mooncake-delta and agentic_mooncake require aggregated engine mode.
agentic_mooncake also requires trace_timestamps and rejects the virtual-time cutoff.
applied_compute_agentic requires concurrency load.
With the Dynamo stack, omit planner or set planner.policy: disabled for mooncake-delta,
agentic_mooncake, and Dynamo traces that carry agent_context records.
Typed agentic replay through the Dynamo API
The lower-level dynamo.replay.run_trace_replay(...) API additionally accepts weka and supports
Agentic Mooncake, Weka, and fully agentic Dynamo traces in aggregated or disaggregated offline mode.
These API-only inputs are not yet fields in the aisimulate predict YAML schema.
Set agentic_lanes to a positive integer to replay a fixed number of trajectories concurrently.
Plays are stable-sorted and stride-assigned to lanes. A lane starts its next play only after its
current play is quiescent, and lanes do not steal work. Agentic replay rejects
replay_concurrency, Planner scaling, and mixed-model Weka corpora.
Agentic Mooncake v2 begins with a required versioned header:
Each request row contains a globally unique request_id, nonempty play_id, session_id, model,
exact input and output metadata, hash_ids, and not_before_ms. The optional dependencies array
contains typed incoming edges. Each edge identifies its predecessor, a dispatch or completion
trigger, a nonnegative delay, and a sequence, spawn, join, or replay_barrier relation.
The Weka importer recursively traverses local files in deterministic order, namespaces local
identity by normalized source-relative path, and preserves public AgentX semantics. Request and
nested-subagent t values are absolute seconds from the trace start, and every request requires a
finite api_time. For each explicit subagent marker, the latest preceding outer request in source
order becomes the inferred owner. Spawn and blocking-join edges stay within that request’s
reconstructed stream. Weka does not record an explicit parent request ID, so this rule is a
deterministic replay policy rather than captured provider causality.
Sequential turns wait for completion. Overlapping subagents depend on parent dispatch,
post-completion subagents depend on parent completion, blocking results join the owning parent
stream, and async_launched work remains background. Timestamp-inferred cross-stream ordering uses
replay_barrier, not a causal join. Inner requests before their subagent marker, unsupported
terminal states, blocking empty subagents, symlinks, mixed block sizes, and mixed models are
rejected.
To materialize the same validated graph as canonical Agentic Mooncake v2 JSONL:
The converter verifies that direct Weka ingestion and reparsed v2 produce the same canonical graph identity. Weka remains an input format; Dynamo does not integrate with the AIPerf runtime or export Weka.
Engine and Adapter Rules
engine.mode: aggregatedrequiresengine.workers.aggregated.engine.mode: disaggregatedrequiresengine.workers.prefill,engine.workers.decode, andengine.kv_transfer.aisimulate predictandaisimulate recommendcurrently support TensorRT-LLM only in aggregated mode. This is an offline simulation limitation; Dynamo runtime deployments support TensorRT-LLM disaggregated serving.- Each
parallelismmapping is concrete and containsreplicas,tensor,pipeline,attention_data,moe_tensor, andmoe_expert. engine.context_lengthdefaults tomax, which AISimulate resolves from the model’s Hugging Face configuration. Default KV block sizes are 64 for vLLM, 1 for SGLang, and 32 for TensorRT-LLM.- Scheduler defaults are 8,192 batched tokens for every role and 256 sequences for aggregated and decode workers. Prefill workers default to one sequence.
timing.type: defaultuses the AIConfigurator forward-pass model shipped in theaisimulatewheel.fixedrequires bothprefill_msanddecode_ms;polynomialselects the built-in polynomial model.router.policy: kv_routerrequires more than one routable worker. Setrouter.prefill_load_model.typetononeoraic.planner.policyisdisabledorenabled. When enabled,planner.max_num_gpuslimits the Planner runtime budget; it is distinct from recommendation candidate constraints.evaluation.slaaccepts eithere2e_msalone orttft_msanditl_mstogether. The two forms are mutually exclusive.
Overrides
--set accepts dot-separated, schema-valid paths. The field does not need to be present in the
input YAML:
An override cannot create an unknown field. Override a complete mapping when changing a tagged
configuration shape, such as traffic.source.
Output
The output directory contains:
prediction.json preserves the Dynamo runner report, including summary metrics and available
Planner diagnostics. requests.jsonl is present only with --capture-per-request. --format
changes standard output but not durable files.
The command exits with 0 on success, 1 for execution failure, 2 for CLI or configuration
errors, and 130 when interrupted.