Markuplint v4.14.1 はパッチアップデートの扱いだけれど、required-element ルールに ignoreOmittedElements が追加されたのは嬉しい。
これで table 要素内に tbody 開始・終了タグの記述を強制できるようになった。(tbody の記述を省略しても DOM 上は存在するため、これまではチェックができなかった)
Markuplint v4.14.1 はパッチアップデートの扱いだけれど、required-element ルールに ignoreOmittedElements が追加されたのは嬉しい。
これで table 要素内に tbody 開始・終了タグの記述を強制できるようになった。(tbody の記述を省略しても DOM 上は存在するため、これまではチェックができなかった)
<td>N/A</td>
<td>Real-time interception</td>
</tr>
</tbody>
</table>
<p><strong>Key takeaways:</strong></p>
<ul>
<td>N/A</td>
<td>Real-time interception</td>
</tr>
</tbody>
</table>
<p><strong>Key takeaways:</strong></p>
<ul>
<th>Signal Detection</th>
<th>Reasoning</th>
<th>Optimization</th>
</tr>
</thead>
<tbody>
<tr>
<td>Math/Science</td>
<td><code class="language-plaintext highlighter-rouge">domain: math</code></td>
<td>✅ Enabled</td>
<th>Signal Detection</th>
<th>Reasoning</th>
<th>Optimization</th>
</tr>
</thead>
<tbody>
<tr>
<td>Math/Science</td>
<td><code class="language-plaintext highlighter-rouge">domain: math</code></td>
<td>✅ Enabled</td>
</tr>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">default_route</code></td>
<td>Any</td>
<td>gpt-oss-120b</td>
<td>General queries</td>
</tr>
</tbody>
</table>
<hr />
</tr>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">default_route</code></td>
<td>Any</td>
<td>gpt-oss-120b</td>
<td>General queries</td>
</tr>
</tbody>
</table>
<hr />
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">jailbreak_blocked</code></td>
<td><code class="language-plaintext highlighter-rouge">keyword: jailbreak_attempt</code></td>
<td>gpt-oss-20b</td>
<td>Security</td>
</tr>
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">jailbreak_blocked</code></td>
<td><code class="language-plaintext highlighter-rouge">keyword: jailbreak_attempt</code></td>
<td>gpt-oss-20b</td>
<td>Security</td>
</tr>
<td>50-100ms</td>
</tr>
<tr>
<td><strong>preference</strong></td>
<td>Route preference matching via external LLM</td>
<td>100-200ms</td>
</tr>
</tbody>
</table>
<td>50-100ms</td>
</tr>
<tr>
<td><strong>preference</strong></td>
<td>Route preference matching via external LLM</td>
<td>100-200ms</td>
</tr>
</tbody>
</table>
<th>Latency</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>keyword</strong></td>
<td>Pattern matching with keywords/regex</td>
<td>< 1ms</td>
</tr>
<tr>
<td><strong>embedding</strong></td>
<th>Latency</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>keyword</strong></td>
<td>Pattern matching with keywords/regex</td>
<td>< 1ms</td>
</tr>
<tr>
<td><strong>embedding</strong></td>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">casual_chat</code></td>
<td>Any (default)</td>
<td>gpt-oss-20b</td>
<td>off</td>
</tr>
</tbody>
</table>
<p><img src="/assets/figures/semantic-router/mom-3.png" alt="" /></p>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">casual_chat</code></td>
<td>Any (default)</td>
<td>gpt-oss-20b</td>
<td>off</td>
</tr>
</tbody>
</table>
<p><img src="/assets/figures/semantic-router/mom-3.png" alt="" /></p>
<th>Priority</th>
<th>Decision</th>
<th>Trigger Signals</th>
<th>Target Model</th>
<th>Reasoning</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">guardrails</code></td>
<th>Priority</th>
<th>Decision</th>
<th>Trigger Signals</th>
<th>Target Model</th>
<th>Reasoning</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">guardrails</code></td>
<td>General purpose, default fallback</td>
</tr>
<tr>
<td><strong>gpt-oss-20b</strong></td>
<td>20B</td>
<td>Fast QA, security responses</td>
</tr>
</tbody>
</table>
<p><strong>Routing Decision Matrix:</strong></p>
<table>
<thead>
<td>General purpose, default fallback</td>
</tr>
<tr>
<td><strong>gpt-oss-20b</strong></td>
<td>20B</td>
<td>Fast QA, security responses</td>
</tr>
</tbody>
</table>
<p><strong>Routing Decision Matrix:</strong></p>
<table>
<thead>
</thead>
<tbody>
<tr>
<td><strong>Qwen3-235B</strong></td>
<td>235B</td>
<td>Complex reasoning (Chinese), Math, Creative</td>
</tr>
<tr>
<td><strong>DeepSeek-V3.2</strong></td>
<td>320B</td>
<td>Code generation and analysis</td>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Qwen3-235B</strong></td>
<td>235B</td>
<td>Complex reasoning (Chinese), Math, Creative</td>
</tr>
<tr>
<td><strong>DeepSeek-V3.2</strong></td>
<td>320B</td>
<td>Code generation and analysis</td>
</tr>
<table>
<thead>
<tr>
<th>Aspect</th>
<th>MoE</th>
<th>MoM</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Scope</strong></td>
<td>Single model architecture</td>
<table>
<thead>
<tr>
<th>Aspect</th>
<th>MoE</th>
<th>MoM</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Scope</strong></td>
<td>Single model architecture</td>
</tr>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">default_route</code></td>
<td>Any</td>
<td>gpt-oss-120b</td>
<td>General queries</td>
</tr>
</tbody>
</table>
<hr />
</tr>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">default_route</code></td>
<td>Any</td>
<td>gpt-oss-120b</td>
<td>General queries</td>
</tr>
</tbody>
</table>
<hr />
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">jailbreak_blocked</code></td>
<td><code class="language-plaintext highlighter-rouge">keyword: jailbreak_attempt</code></td>
<td>gpt-oss-20b</td>
<td>Security</td>
</tr>
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">jailbreak_blocked</code></td>
<td><code class="language-plaintext highlighter-rouge">keyword: jailbreak_attempt</code></td>
<td>gpt-oss-20b</td>
<td>Security</td>
</tr>
<td>50-100ms</td>
</tr>
<tr>
<td><strong>preference</strong></td>
<td>Route preference matching via external LLM</td>
<td>100-200ms</td>
</tr>
</tbody>
</table>
<td>50-100ms</td>
</tr>
<tr>
<td><strong>preference</strong></td>
<td>Route preference matching via external LLM</td>
<td>100-200ms</td>
</tr>
</tbody>
</table>
<th>Latency</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>keyword</strong></td>
<td>Pattern matching with keywords/regex</td>
<td>< 1ms</td>
</tr>
<tr>
<td><strong>embedding</strong></td>
<th>Latency</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>keyword</strong></td>
<td>Pattern matching with keywords/regex</td>
<td>< 1ms</td>
</tr>
<tr>
<td><strong>embedding</strong></td>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">casual_chat</code></td>
<td>Any (default)</td>
<td>gpt-oss-20b</td>
<td>off</td>
</tr>
</tbody>
</table>
<p><img src="/assets/figures/semantic-router/mom-3.png" alt="" /></p>
<tr>
<td>100</td>
<td><code class="language-plaintext highlighter-rouge">casual_chat</code></td>
<td>Any (default)</td>
<td>gpt-oss-20b</td>
<td>off</td>
</tr>
</tbody>
</table>
<p><img src="/assets/figures/semantic-router/mom-3.png" alt="" /></p>
<th>Priority</th>
<th>Decision</th>
<th>Trigger Signals</th>
<th>Target Model</th>
<th>Reasoning</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">guardrails</code></td>
<th>Priority</th>
<th>Decision</th>
<th>Trigger Signals</th>
<th>Target Model</th>
<th>Reasoning</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td><code class="language-plaintext highlighter-rouge">guardrails</code></td>
<td>General purpose, default fallback</td>
</tr>
<tr>
<td><strong>gpt-oss-20b</strong></td>
<td>20B</td>
<td>Fast QA, security responses</td>
</tr>
</tbody>
</table>
<p><strong>Routing Decision Matrix:</strong></p>
<table>
<thead>
<td>General purpose, default fallback</td>
</tr>
<tr>
<td><strong>gpt-oss-20b</strong></td>
<td>20B</td>
<td>Fast QA, security responses</td>
</tr>
</tbody>
</table>
<p><strong>Routing Decision Matrix:</strong></p>
<table>
<thead>
</thead>
<tbody>
<tr>
<td><strong>Qwen3-235B</strong></td>
<td>235B</td>
<td>Complex reasoning (Chinese), Math, Creative</td>
</tr>
<tr>
<td><strong>DeepSeek-V3.2</strong></td>
<td>320B</td>
<td>Code generation and analysis</td>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Qwen3-235B</strong></td>
<td>235B</td>
<td>Complex reasoning (Chinese), Math, Creative</td>
</tr>
<tr>
<td><strong>DeepSeek-V3.2</strong></td>
<td>320B</td>
<td>Code generation and analysis</td>
</tr>
</tbody>
</table>
<p><strong>The insight</strong>: MoE and MoM are complementary. You can use MoE models (like Qwen3-30B-A3B) as components within a MoM system—getting the best of both worlds.</p>
<p><img src="/assets/figures/semantic-router/mom-0.png" alt="" /></p>
<hr />
</tbody>
</table>
<p><strong>The insight</strong>: MoE and MoM are complementary. You can use MoE models (like Qwen3-30B-A3B) as components within a MoM system—getting the best of both worlds.</p>
<p><img src="/assets/figures/semantic-router/mom-0.png" alt="" /></p>
<hr />
Start with raw tables.
Add structure with thead and tbody.
Map rows clearly.
Only then add sorting.
Build trust first,
speed second,
polish third.
#fasthtml
Start with raw tables.
Add structure with thead and tbody.
Map rows clearly.
Only then add sorting.
Build trust first,
speed second,
polish third.
#fasthtml
users can trust.
users can trust.
tableの行スタイルで
tbody tr:nth-child(2n) を使うと、
奇数行と偶数行で背景色を分けられる。
視認性を上げるのにちょうどいい。
#CSS
#WebDevelopment
tableの行スタイルで
tbody tr:nth-child(2n) を使うと、
奇数行と偶数行で背景色を分けられる。
視認性を上げるのにちょうどいい。
#CSS
#WebDevelopment
Context:
Table row styling
Details:
Applied tbody tr:nth-child(2n)
Effect:
Alternating background colours for odd and even rows, improving scanability ✨
#CSS
#WebDevelopment
#buildinpublic
Context:
Table row styling
Details:
Applied tbody tr:nth-child(2n)
Effect:
Alternating background colours for odd and even rows, improving scanability ✨
#CSS
#WebDevelopment
#buildinpublic