# `Dsxir`

Top-level facade for the dsxir framework. Re-exports the user-facing entry
points; predictors, adapters, optimizers, and LM impls are reached for under
their own module names.

# `compile`

# `configure`

# `context`

# `evaluate`

# `evaluate!`

# `load`

# `load!`

# `save`

# `save!`

# `with_trace`

```elixir
@spec with_trace((-&gt; {Dsxir.Program.t(), Dsxir.Prediction.t()})) ::
  {Dsxir.Program.t(), Dsxir.Prediction.t(), [Dsxir.Trace.entry()]}
```

Run `fun.()` with a per-process trace accumulator open. The block must return
`{program, prediction}` (the standard `forward/2` shape). The helper returns
`{program, prediction, trace}` where `trace` is the list of recorded entries
in invocation order.

The accumulator is process-local. Inside the block, any `Dsxir.Module.call/3`
running in the calling process records an entry; calls inside spawned tasks
(`Dsxir.Predictor.Parallel`, user-supplied `Task`s) do not — Trace does not
cross process boundaries in v0.

When `fun.()` raises, throws, or exits, the prior accumulator is restored in
the matching `rescue` / `catch` clause and the original condition is
reraised. Partial traces on failure are not surfaced.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
