---
title: "ClikaRT::nn::MoeOptions"
sidebar_label: "MoeOptions"
description: "MoE configuration beyond the required top-k. Every field is optional; the defaults are the runtime's (SoftmaxTopK routing, renormalized top-k weights, SwiGLU with the Interleaved gate‖up layout, erf g…"
---

<!-- Generated by tools/doxygen2mdx from Doxygen XML. Do not edit. -->

<span class="api-kind api-kind--struct">struct</span>

**Header:** `ClikaRT/nn/moe.h`

[MoE](./MoE.md) configuration beyond the required top-k. Every field is optional; the defaults are the runtime's (SoftmaxTopK routing, renormalized top-k weights, [SwiGLU](./SwiGLU.md) with the Interleaved gate‖up layout, erf gelu).

## Data members

### routing\_mode {#routing_mode}

<div class="api-signature">

`std::optional<`[`ops::MoeRouting`](../ops/index.md#MoeRouting)`>` **`routing_mode`**

</div>

default SoftmaxTopK

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 52

</div>

### renormalize {#renormalize}

<div class="api-signature">

`std::optional<bool>` **`renormalize`**

</div>

÷ sum of top-k (default true)

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 53

</div>

### activation {#activation}

<div class="api-signature">

`std::optional<`[`ops::Activation`](../ops/index.md#Activation)`>` **`activation`**

</div>

gated SwiGlu/GeGlu/ReGlu or plain (default SwiGlu)

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 54

</div>

### swiglu\_fusion {#swiglu_fusion}

<div class="api-signature">

`std::optional<`[`ops::fused::SwigluFusion`](../ops/fused/index.md#SwigluFusion)`>` **`swiglu_fusion`**

</div>

gate‖up layout (default Interleaved)

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 55

</div>

### gelu\_mode {#gelu_mode}

<div class="api-signature">

`std::optional<`[`ops::GeluMode`](../ops/index.md#GeluMode)`>` **`gelu_mode`**

</div>

a gated GeGlu's gelu form (default erf)

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 56

</div>

### n\_group {#n_group}

<div class="api-signature">

`std::optional<std::int64_t>` **`n_group`**

</div>

group-limited routing (DeepSeek)

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 57

</div>

### topk\_group {#topk_group}

<div class="api-signature">

`std::optional<std::int64_t>` **`topk_group`**

</div>

Experts drawn per group under group-limited routing.

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 59

</div>

### routed\_scaling\_factor {#routed_scaling_factor}

<div class="api-signature">

`std::optional<double>` **`routed_scaling_factor`**

</div>

× the combine weights

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 60

</div>

### sparse\_mixer\_eps {#sparse_mixer_eps}

<div class="api-signature">

`std::optional<double>` **`sparse_mixer_eps`**

</div>

Sparse-mixer routing epsilon (the sparse-mixer variant).

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 62

</div>

### apply\_router\_weight\_on\_input {#apply_router_weight_on_input}

<div class="api-signature">

`std::optional<bool>` **`apply_router_weight_on_input`**

</div>

Scale the expert INPUT by the router weight (instead of the output combine).

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 65

</div>

### swiglu\_alpha {#swiglu_alpha}

<div class="api-signature">

`std::optional<double>` **`swiglu_alpha`**

</div>

clamped-SwiGLU form knobs

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 66

</div>

### swiglu\_beta {#swiglu_beta}

<div class="api-signature">

`std::optional<double>` **`swiglu_beta`**

</div>

Clamped-SwiGLU beta (see [`ops::swiglu`](../ops/swiglu.md#swiglu)).

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 68

</div>

### swiglu\_limit {#swiglu_limit}

<div class="api-signature">

`std::optional<double>` **`swiglu_limit`**

</div>

Clamped-SwiGLU symmetric limit; absent = no clamping.

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 70

</div>

### expert\_output\_scale {#expert_output_scale}

<div class="api-signature">

`std::optional<std::vector<double>>` **`expert_output_scale`**

</div>

Per-expert combine scale (`[E]`, one value per expert): multiplies each SELECTED expert's routing weight after renormalization. For a checkpoint that ships a per-expert output scale beside QUANTIZED expert stacks this is the faithful application point; the payloads stay untouched (a dense checkpoint may instead fold the scale into its down weights; the two are value-identical).

<div class="api-declared">

Declared in `ClikaRT/nn/moe.h`, line 77

</div>
