post dev
Browse files- dist/distill.bundle.js +0 -0
- dist/distill.bundle.js.map +0 -0
- dist/fragments/attention-visualizer.html +0 -46
- dist/fragments/d3-graph.html +0 -12
- dist/fragments/glm-compare.html +0 -149
- dist/fragments/memory-profiler.html +0 -61
- dist/fragments/terminal.html +0 -22
- dist/index.html +0 -602
- dist/main.bundle.js +0 -1867
- dist/main.bundle.js.map +0 -0
- dist/static/Bloatedness_visualizer.png +0 -3
- dist/static/Jaccard_similarity_plot.png +0 -3
- dist/static/d3_dependency_graph.html +0 -1895
- dist/static/graph_modular_related_models.png +0 -3
- dist/static/hf-logo.svg +0 -1
- dist/static/model_debugger.png +0 -3
- dist/static/modular_candidates.png +0 -3
- dist/static/popular_models_barplot.png +0 -3
- dist/style.css +0 -741
dist/distill.bundle.js
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
dist/distill.bundle.js.map
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
dist/fragments/attention-visualizer.html
DELETED
|
@@ -1,46 +0,0 @@
|
|
| 1 |
-
<div style="border: 1px solid #e2e8f0; border-radius: 8px; background: white; margin: 1.5rem 0;">
|
| 2 |
-
<div style="padding: 1rem; border-bottom: 1px solid #e2e8f0; background: #f8f9fa;">
|
| 3 |
-
<h4 style="margin: 0 0 0.5rem 0; color: #495057;">π Attention Mask Visualizer</h4>
|
| 4 |
-
<p style="margin: 0; font-size: 0.9em; color: #6c757d;">
|
| 5 |
-
Visualize attention patterns in transformer models. This helps debug attention mask issues.
|
| 6 |
-
</p>
|
| 7 |
-
</div>
|
| 8 |
-
|
| 9 |
-
<div style="padding: 1rem;">
|
| 10 |
-
<div style="display: grid; grid-template-columns: 1fr auto; gap: 1rem; align-items: start; margin-bottom: 1rem;">
|
| 11 |
-
<div>
|
| 12 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Model:</label>
|
| 13 |
-
<select id=model-select style="width: 100%; padding: 0.5rem; border: 1px solid #d1d5db; border-radius: 6px; background: white;">
|
| 14 |
-
<option value=openai-community/gpt2>openai-community/gpt2</option>
|
| 15 |
-
<option value=google/gemma-2-2b>google/gemma-2-2b</option>
|
| 16 |
-
<option value=microsoft/DialoGPT-small>microsoft/DialoGPT-small</option>
|
| 17 |
-
</select>
|
| 18 |
-
</div>
|
| 19 |
-
|
| 20 |
-
<div>
|
| 21 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Action:</label>
|
| 22 |
-
<button id=visualize-btn style="padding: 0.5rem 1rem; background: #3b82f6; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: 500;">
|
| 23 |
-
π Visualize
|
| 24 |
-
</button>
|
| 25 |
-
</div>
|
| 26 |
-
</div>
|
| 27 |
-
|
| 28 |
-
<div style="margin-bottom: 1rem;">
|
| 29 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Prompt:</label>
|
| 30 |
-
<textarea id=prompt-input style="width: 100%; padding: 0.75rem; border: 1px solid #d1d5db; border-radius: 6px; resize: vertical; font-family: monospace; font-size: 0.9em;" rows=3 placeholder="You are an assistant. Make sure you print me."></textarea>
|
| 31 |
-
</div>
|
| 32 |
-
|
| 33 |
-
<div id=attention-output style="min-height: 200px; background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 6px; padding: 1rem;">
|
| 34 |
-
<div style="text-align: center; color: #6c757d; font-style: italic;">
|
| 35 |
-
Click "Visualize" to generate attention visualization
|
| 36 |
-
</div>
|
| 37 |
-
</div>
|
| 38 |
-
</div>
|
| 39 |
-
|
| 40 |
-
<div style="padding: 1rem; border-top: 1px solid #e2e8f0; background: #f8f9fa; font-size: 0.9em; color: #6c757d;">
|
| 41 |
-
<strong>Note:</strong> This is a demonstration. In the original Gradio app, this would use GPU processing with ZeroGPU
|
| 42 |
-
to generate real attention visualizations from transformer models.
|
| 43 |
-
</div>
|
| 44 |
-
</div>
|
| 45 |
-
|
| 46 |
-
<script>document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("model-select"),t=document.getElementById("prompt-input"),n=document.getElementById("visualize-btn"),i=document.getElementById("attention-output");t.value="You are an assistant. Make sure you print me.",n.addEventListener("click",function(){let o=e.value,r=t.value.trim();if(!r){i.innerHTML='<div style="color: #e53e3e;">Please enter a prompt</div>';return}n.disabled=!0,n.textContent="Processing...",i.innerHTML='<div style="text-align: center; color: #6c757d;"><em>Generating attention visualization...</em></div>',setTimeout(()=>{let e=r.split(" ").slice(0,8),t='<div style="margin-bottom: 1rem;"><strong>Model:</strong> '+o+"</div>";t+='<div style="margin-bottom: 1rem;"><strong>Tokens:</strong> '+e.join(" β’ ")+'</div><div><strong>Attention Matrix (Layer 0, Head 0):</strong></div><table style="margin-top: 0.5rem; border-collapse: collapse; font-family: monospace; font-size: 0.8em;">';for(let n=0;n<e.length;n++){t+="<tr>";for(let n=0;n<e.length;n++){let e=Math.random(),n=`rgba(59, 130, 246, ${e})`;t+=`<td style="border: 1px solid #ddd; padding: 4px; background: ${n}; text-align: center; min-width: 40px;">${e.toFixed(2)}</td>`}t+="</tr>"}i.innerHTML=t+='</table><div style="margin-top: 1rem; font-size: 0.9em; color: #6c757d;"><em>Darker blue = higher attention weight</em></div>',n.disabled=!1,n.textContent="\uD83D\uDE80 Visualize"},2e3)})})</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/fragments/d3-graph.html
DELETED
|
@@ -1,12 +0,0 @@
|
|
| 1 |
-
<div class=interactive-demo>
|
| 2 |
-
<div class=demo-header>
|
| 3 |
-
<h3>π Model Dependency Graph</h3>
|
| 4 |
-
</div>
|
| 5 |
-
<div class=demo-content>
|
| 6 |
-
<iframe src=static/d3_dependency_graph.html width=100% height=600px frameborder=0 style="border-radius: 8px; background: white;"></iframe>
|
| 7 |
-
</div>
|
| 8 |
-
<div class=demo-footer>
|
| 9 |
-
Interactive dependency graph showing real relationships between Transformers models. π‘ Base models (HuggingFace logo), π΅ Derived modular models. Click and drag to explore!
|
| 10 |
-
</div>
|
| 11 |
-
</div>
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/fragments/glm-compare.html
DELETED
|
@@ -1,149 +0,0 @@
|
|
| 1 |
-
<div class=code-compare style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.5rem 0;">
|
| 2 |
-
<div class=code-column style="border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;">
|
| 3 |
-
<div class=code-header style="background: #f8f9fa; padding: 0.75rem 1rem; font-weight: 600; color: #495057; border-bottom: 1px solid #e2e8f0;">
|
| 4 |
-
modular_glm.py
|
| 5 |
-
</div>
|
| 6 |
-
<pre style="margin: 0; padding: 1rem; background: #ffffff; overflow-x: auto; font-size: 0.9em;"><code class=language-python>class GlmMLP(Phi3MLP):
|
| 7 |
-
pass
|
| 8 |
-
|
| 9 |
-
class GlmAttention(LlamaAttention):
|
| 10 |
-
def __init__(self, config, layer_idx=None):
|
| 11 |
-
super().__init__(config, layer_idx)
|
| 12 |
-
self.o_proj = nn.Linear(
|
| 13 |
-
config.num_attention_heads * self.head_dim,
|
| 14 |
-
config.hidden_size,
|
| 15 |
-
bias=False
|
| 16 |
-
)
|
| 17 |
-
|
| 18 |
-
class GlmForCausalLM(LlamaForCausalLM):
|
| 19 |
-
pass</code></pre>
|
| 20 |
-
</div>
|
| 21 |
-
|
| 22 |
-
<div class=code-column style="border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;">
|
| 23 |
-
<div class=code-header style="background: #f8f9fa; padding: 0.75rem 1rem; font-weight: 600; color: #495057; border-bottom: 1px solid #e2e8f0;">
|
| 24 |
-
modeling_glm.py (auto-expanded)
|
| 25 |
-
</div>
|
| 26 |
-
<pre style="margin: 0; padding: 1rem; background: #ffffff; overflow-x: auto; font-size: 0.9em; max-height: 400px;"><code class=language-python>class GlmMLP(nn.Module):
|
| 27 |
-
def __init__(self, config):
|
| 28 |
-
super().__init__()
|
| 29 |
-
self.config = config
|
| 30 |
-
self.gate_up_proj = nn.Linear(
|
| 31 |
-
config.hidden_size,
|
| 32 |
-
2 * config.intermediate_size,
|
| 33 |
-
bias=False
|
| 34 |
-
)
|
| 35 |
-
self.down_proj = nn.Linear(
|
| 36 |
-
config.intermediate_size,
|
| 37 |
-
config.hidden_size,
|
| 38 |
-
bias=False
|
| 39 |
-
)
|
| 40 |
-
self.activation_fn = ACT2FN[config.hidden_act]
|
| 41 |
-
|
| 42 |
-
def forward(self, hidden_states: torch.FloatTensor) -> torch.FloatTensor:
|
| 43 |
-
up_states = self.gate_up_proj(hidden_states)
|
| 44 |
-
gate, up_states = up_states.chunk(2, dim=-1)
|
| 45 |
-
up_states = up_states * self.activation_fn(gate)
|
| 46 |
-
return self.down_proj(up_states)
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
class GlmAttention(nn.Module):
|
| 50 |
-
"""Multi-headed attention from 'Attention Is All You Need' paper"""
|
| 51 |
-
|
| 52 |
-
def __init__(self, config: GlmConfig, layer_idx: Optional[int] = None):
|
| 53 |
-
super().__init__()
|
| 54 |
-
self.config = config
|
| 55 |
-
self.layer_idx = layer_idx
|
| 56 |
-
self.head_dim = getattr(
|
| 57 |
-
config, "head_dim",
|
| 58 |
-
config.hidden_size // config.num_attention_heads
|
| 59 |
-
)
|
| 60 |
-
self.num_key_value_groups = (
|
| 61 |
-
config.num_attention_heads // config.num_key_value_heads
|
| 62 |
-
)
|
| 63 |
-
self.scaling = self.head_dim**-0.5
|
| 64 |
-
self.attention_dropout = config.attention_dropout
|
| 65 |
-
self.is_causal = True
|
| 66 |
-
|
| 67 |
-
self.q_proj = nn.Linear(
|
| 68 |
-
config.hidden_size,
|
| 69 |
-
config.num_attention_heads * self.head_dim,
|
| 70 |
-
bias=config.attention_bias
|
| 71 |
-
)
|
| 72 |
-
self.k_proj = nn.Linear(
|
| 73 |
-
config.hidden_size,
|
| 74 |
-
config.num_key_value_heads * self.head_dim,
|
| 75 |
-
bias=config.attention_bias
|
| 76 |
-
)
|
| 77 |
-
self.v_proj = nn.Linear(
|
| 78 |
-
config.hidden_size,
|
| 79 |
-
config.num_key_value_heads * self.head_dim,
|
| 80 |
-
bias=config.attention_bias
|
| 81 |
-
)
|
| 82 |
-
self.o_proj = nn.Linear(
|
| 83 |
-
config.num_attention_heads * self.head_dim,
|
| 84 |
-
config.hidden_size,
|
| 85 |
-
bias=False
|
| 86 |
-
)
|
| 87 |
-
|
| 88 |
-
def forward(
|
| 89 |
-
self,
|
| 90 |
-
hidden_states: torch.Tensor,
|
| 91 |
-
position_embeddings: Tuple[torch.Tensor, torch.Tensor],
|
| 92 |
-
attention_mask: Optional[torch.Tensor],
|
| 93 |
-
past_key_value: Optional[Cache] = None,
|
| 94 |
-
cache_position: Optional[torch.LongTensor] = None,
|
| 95 |
-
**kwargs: Unpack[FlashAttentionKwargs],
|
| 96 |
-
) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]:
|
| 97 |
-
input_shape = hidden_states.shape[:-1]
|
| 98 |
-
hidden_shape = (*input_shape, -1, self.head_dim)
|
| 99 |
-
|
| 100 |
-
query_states = self.q_proj(hidden_states).view(hidden_shape).transpose(1, 2)
|
| 101 |
-
key_states = self.k_proj(hidden_states).view(hidden_shape).transpose(1, 2)
|
| 102 |
-
value_states = self.v_proj(hidden_states).view(hidden_shape).transpose(1, 2)
|
| 103 |
-
|
| 104 |
-
cos, sin = position_embeddings
|
| 105 |
-
query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin)
|
| 106 |
-
|
| 107 |
-
if past_key_value is not None:
|
| 108 |
-
cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position}
|
| 109 |
-
key_states, value_states = past_key_value.update(
|
| 110 |
-
key_states, value_states, self.layer_idx, cache_kwargs
|
| 111 |
-
)
|
| 112 |
-
|
| 113 |
-
attention_interface: Callable = eager_attention_forward
|
| 114 |
-
if self.config._attn_implementation != "eager":
|
| 115 |
-
attention_interface = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation]
|
| 116 |
-
|
| 117 |
-
attn_output, attn_weights = attention_interface(
|
| 118 |
-
self, query_states, key_states, value_states,
|
| 119 |
-
attention_mask, dropout=0.0 if not self.training else self.attention_dropout,
|
| 120 |
-
scaling=self.scaling, **kwargs,
|
| 121 |
-
)
|
| 122 |
-
|
| 123 |
-
attn_output = attn_output.reshape(*input_shape, -1).contiguous()
|
| 124 |
-
attn_output = self.o_proj(attn_output)
|
| 125 |
-
return attn_output, attn_weights
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
@use_kernel_forward_from_hub("RMSNorm")
|
| 129 |
-
class GlmRMSNorm(nn.Module):
|
| 130 |
-
def __init__(self, hidden_size, eps=1e-6):
|
| 131 |
-
super().__init__()
|
| 132 |
-
self.weight = nn.Parameter(torch.ones(hidden_size))
|
| 133 |
-
self.variance_epsilon = eps
|
| 134 |
-
|
| 135 |
-
def forward(self, hidden_states):
|
| 136 |
-
input_dtype = hidden_states.dtype
|
| 137 |
-
hidden_states = hidden_states.to(torch.float32)
|
| 138 |
-
variance = hidden_states.pow(2).mean(-1, keepdim=True)
|
| 139 |
-
hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
|
| 140 |
-
return self.weight * hidden_states.to(input_dtype)
|
| 141 |
-
|
| 142 |
-
# ... (many more classes and functions would follow)</code></pre>
|
| 143 |
-
</div>
|
| 144 |
-
</div>
|
| 145 |
-
|
| 146 |
-
<p style="text-align: center; font-style: italic; color: #6c757d; margin-top: 1rem;">
|
| 147 |
-
<strong>Left:</strong> Clean modular definition with inheritance.
|
| 148 |
-
<strong>Right:</strong> Auto-expanded version with all inherited functionality visible.
|
| 149 |
-
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/fragments/memory-profiler.html
DELETED
|
@@ -1,61 +0,0 @@
|
|
| 1 |
-
<div style="border: 1px solid #e2e8f0; border-radius: 8px; background: white; margin: 1.5rem 0;">
|
| 2 |
-
<div style="padding: 1rem; border-bottom: 1px solid #e2e8f0; background: #f8f9fa;">
|
| 3 |
-
<h4 style="margin: 0 0 0.5rem 0; color: #495057;">π Cache Pre-allocator Performance Demo</h4>
|
| 4 |
-
<p style="margin: 0; font-size: 0.9em; color: #6c757d;">
|
| 5 |
-
Compare model loading with and without transformers' caching allocator warmup. This demonstrates the memory efficiency improvements.
|
| 6 |
-
</p>
|
| 7 |
-
</div>
|
| 8 |
-
|
| 9 |
-
<div style="padding: 1rem;">
|
| 10 |
-
<div style="display: grid; grid-template-columns: 1fr auto; gap: 1rem; align-items: end; margin-bottom: 1.5rem;">
|
| 11 |
-
<div>
|
| 12 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Model to Profile:</label>
|
| 13 |
-
<select id=memory-model-select style="width: 100%; padding: 0.5rem; border: 1px solid #d1d5db; border-radius: 6px; background: white;">
|
| 14 |
-
<option value=openai-community/gpt2>openai-community/gpt2</option>
|
| 15 |
-
<option value=google/gemma-2-2b>google/gemma-2-2b</option>
|
| 16 |
-
<option value=microsoft/DialoGPT-small>microsoft/DialoGPT-small</option>
|
| 17 |
-
<option value=facebook/opt-125m>facebook/opt-125m</option>
|
| 18 |
-
</select>
|
| 19 |
-
<div style="font-size: 0.8em; color: #6c757d; margin-top: 0.25rem;">
|
| 20 |
-
Select a model or enter a custom HuggingFace model ID
|
| 21 |
-
</div>
|
| 22 |
-
</div>
|
| 23 |
-
|
| 24 |
-
<div>
|
| 25 |
-
<button id=memory-profile-btn style="padding: 0.75rem 1.5rem; background: #dc2626; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: 500;">
|
| 26 |
-
π₯ Profile Memory
|
| 27 |
-
</button>
|
| 28 |
-
</div>
|
| 29 |
-
</div>
|
| 30 |
-
|
| 31 |
-
<div id=memory-chart-container style="width: 100%; height: 400px; border: 1px solid #e2e8f0; border-radius: 6px; background: #f8f9fa; position: relative;">
|
| 32 |
-
<div id=memory-placeholder style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; color: #6c757d; font-style: italic;">
|
| 33 |
-
Click "Profile Memory" to generate memory allocation timeline
|
| 34 |
-
</div>
|
| 35 |
-
<canvas id=memory-chart width=100% height=400 style="display: none;"></canvas>
|
| 36 |
-
</div>
|
| 37 |
-
|
| 38 |
-
<div id=memory-stats style="margin-top: 1rem; padding: 1rem; background: #f1f5f9; border-radius: 6px; display: none;">
|
| 39 |
-
<h5 style="margin: 0 0 0.5rem 0; color: #374151;">Memory Statistics</h5>
|
| 40 |
-
<div id=memory-results></div>
|
| 41 |
-
</div>
|
| 42 |
-
</div>
|
| 43 |
-
|
| 44 |
-
<div style="padding: 1rem; border-top: 1px solid #e2e8f0; background: #f8f9fa; font-size: 0.9em; color: #6c757d;">
|
| 45 |
-
<strong>Note:</strong> This demo requires GPU access. The warmup feature reduces peak memory usage during model loading.
|
| 46 |
-
In the original app, this uses ZeroGPU to measure actual memory allocation timelines.
|
| 47 |
-
</div>
|
| 48 |
-
</div>
|
| 49 |
-
|
| 50 |
-
<script>document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("memory-model-select"),t=document.getElementById("memory-profile-btn"),l=document.getElementById("memory-chart-container"),o=document.getElementById("memory-placeholder"),n=document.getElementById("memory-chart"),i=document.getElementById("memory-stats"),m=document.getElementById("memory-results");t.addEventListener("click",function(){let d=e.value;t.disabled=!0,t.textContent="Profiling...",o.innerHTML='<div style="color: #6c757d;"><em>Loading model and measuring memory usage...</em><br><div style="margin-top: 0.5rem;">This may take a few moments</div></div>',i.style.display="none",setTimeout(()=>{let e=[],r=[],a=[];for(let t=0;t<=50;t++){let l=.1*t;e.push(l);let o=Math.max(0,500+15*Math.pow(t,1.5)+50*Math.random());r.push(o);let n=Math.max(0,600+18*Math.pow(t,1.8)+80*Math.random());a.push(n)}o.style.display="none",n.style.display="block";let s=n.getContext("2d"),y=n.width=l.offsetWidth-2,f=n.height=400;s.clearRect(0,0,y,f),s.strokeStyle="#d1d5db",s.beginPath(),s.moveTo(50,20),s.lineTo(50,f-50),s.lineTo(y-20,f-50),s.stroke(),s.strokeStyle="#f3f4f6";for(let e=1;e<10;e++){let t=20+(f-70)*e/10;s.beginPath(),s.moveTo(50,t),s.lineTo(y-20,t),s.stroke()}let g=Math.max(...a),c=(e,t)=>{s.strokeStyle=t,s.lineWidth=3,s.beginPath();for(let t=0;t<e.length;t++){let l=50+(y-70)*t/(e.length-1),o=f-50-(f-70)*e[t]/g;0===t?s.moveTo(l,o):s.lineTo(l,o)}s.stroke()};c(a,"#ef4444"),c(r,"#22c55e"),s.fillStyle="#374151",s.font="14px sans-serif",s.fillText("Memory (MiB)",10,f/2),s.fillText("Time (seconds)",y/2-50,f-10),s.fillStyle="#ef4444",s.fillRect(y-200,30,15,15),s.fillStyle="#374151",s.fillText("\uD83D\uDCC8 Warmup OFF (Standard)",y-180,42),s.fillStyle="#22c55e",s.fillRect(y-200,50,15,15),s.fillStyle="#374151",s.fillText("\uD83D\uDE80 Warmup ON (Optimized)",y-180,62);let h=Math.max(...r),u=Math.max(...a),p=(u-h)/u*100;m.innerHTML=`
|
| 51 |
-
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;">
|
| 52 |
-
<div>
|
| 53 |
-
<strong>Peak Memory (Warmup OFF):</strong> ${u.toFixed(0)} MiB<br>
|
| 54 |
-
<strong>Peak Memory (Warmup ON):</strong> ${h.toFixed(0)} MiB
|
| 55 |
-
</div>
|
| 56 |
-
<div>
|
| 57 |
-
<strong>Memory Savings:</strong> ${p.toFixed(1)}%<br>
|
| 58 |
-
<strong>Model:</strong> ${d}
|
| 59 |
-
</div>
|
| 60 |
-
</div>
|
| 61 |
-
`,i.style.display="block",t.disabled=!1,t.textContent="\uD83D\uDD25 Profile Memory"},3e3)})})</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/fragments/terminal.html
DELETED
|
@@ -1,22 +0,0 @@
|
|
| 1 |
-
<div style="background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 8px; padding: 1rem; margin: 1.5rem 0;">
|
| 2 |
-
<h4 style="margin-top: 0; color: #495057;">Interactive Terminal</h4>
|
| 3 |
-
<div style="background: #2d3748; color: #e2e8f0; padding: 1rem; border-radius: 6px; font-family: 'Consolas', 'Monaco', monospace;">
|
| 4 |
-
<div style="margin-bottom: 1rem;">
|
| 5 |
-
<input type=text id=terminal-input placeholder="python -c 'import torch; print(torch.__version__)'" style="width: calc(100% - 80px); padding: 0.5rem; background: #1a202c; border: 1px solid #4a5568; color: #e2e8f0; border-radius: 4px;">
|
| 6 |
-
<button id=terminal-run style="width: 70px; padding: 0.5rem; margin-left: 8px; background: #3182ce; color: white; border: none; border-radius: 4px; cursor: pointer;">Run</button>
|
| 7 |
-
</div>
|
| 8 |
-
<pre id=terminal-output style="background: #1a202c; padding: 1rem; border-radius: 4px; min-height: 100px; margin: 0; overflow-x: auto;">$ Ready to run commands...</pre>
|
| 9 |
-
</div>
|
| 10 |
-
<p style="font-size: 0.9em; color: #6c757d; margin-top: 0.5rem;">
|
| 11 |
-
<em>Note: This is a simulated terminal. In the original Gradio app, this would execute real Python commands with proper security restrictions.</em>
|
| 12 |
-
</p>
|
| 13 |
-
</div>
|
| 14 |
-
|
| 15 |
-
<script>document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("terminal-input"),t=document.getElementById("terminal-run"),n=document.getElementById("terminal-output");function o(){let t=e.value.trim();t&&(n.textContent=`$ ${t}
|
| 16 |
-
Simulated output for: ${t}
|
| 17 |
-
|
| 18 |
-
This would execute the command in the original app.
|
| 19 |
-
Example outputs:
|
| 20 |
-
- torch version: 2.0.1+cu117
|
| 21 |
-
- import checks: Success
|
| 22 |
-
- memory info: Available`)}t.addEventListener("click",o),e.addEventListener("keypress",function(e){"Enter"===e.key&&o()})})</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/index.html
DELETED
|
@@ -1,602 +0,0 @@
|
|
| 1 |
-
<!DOCTYPE html>
|
| 2 |
-
<html>
|
| 3 |
-
<head>
|
| 4 |
-
<script src="distill.bundle.js" type="module" fetchpriority="high" blocking></script>
|
| 5 |
-
<script src="main.bundle.js" type="module" fetchpriority="low" defer></script>
|
| 6 |
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
|
| 7 |
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
|
| 8 |
-
<script src="https://d3js.org/d3.v7.min.js"></script>
|
| 9 |
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 10 |
-
<meta charset="utf8">
|
| 11 |
-
<title>Transformers Feature Showcase</title>
|
| 12 |
-
<link rel="stylesheet" href="style.css">
|
| 13 |
-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css">
|
| 14 |
-
</head>
|
| 15 |
-
<body>
|
| 16 |
-
<d-front-matter>
|
| 17 |
-
<script id='distill-front-matter' type="text/json">{
|
| 18 |
-
"title": "Transformers Feature Showcase",
|
| 19 |
-
"description": "An interactive demonstration of transformers library features and design philosophy.",
|
| 20 |
-
"published": "Aug 21, 2025",
|
| 21 |
-
"authors": [{"author": "Pablo Montalvo", "authorURL": "https://huggingface.co/Molbap"}]
|
| 22 |
-
}</script>
|
| 23 |
-
</d-front-matter>
|
| 24 |
-
<d-title>
|
| 25 |
-
<h1> Onto transformers v5 and beyond</h1>
|
| 26 |
-
<p>An interactive demonstration of transformers library features and design philosophy.</p>
|
| 27 |
-
</d-title>
|
| 28 |
-
<d-byline></d-byline>
|
| 29 |
-
<d-article>
|
| 30 |
-
<d-contents>
|
| 31 |
-
<nav role="navigation" class="l-text figcaption">
|
| 32 |
-
<div class="toc-header"><span class="toc-title">Table of Contents</span></div>
|
| 33 |
-
<div class="toc-content">
|
| 34 |
-
<div><a href="#introduction">Introduction</a></div>
|
| 35 |
-
<div style="margin-left: 1.2em;"><a href="#what-you-will-learn">What you will learn</a></div>
|
| 36 |
-
<div><a href="#source-of-truth">0. Source of truth</a></div>
|
| 37 |
-
<div><a href="#one-model-one-file">1. One model, one file</a></div>
|
| 38 |
-
<div><a href="#code-is-product">2. Code is product</a></div>
|
| 39 |
-
<div><a href="#standardize-dont-abstract">3. Standardize, don't abstract</a></div>
|
| 40 |
-
<div><a href="#do-repeat-yourself">4. DRY* (DO Repeat Yourself)</a></div>
|
| 41 |
-
<div><a href="#minimal-user-api">5. Minimal user API</a></div>
|
| 42 |
-
<div><a href="#backwards-compatibility">6. Backwards compatibility</a></div>
|
| 43 |
-
<div><a href="#consistent-public-surface">7. Consistent public surface</a></div>
|
| 44 |
-
<div><a href="#modular">Going modular</a></div>
|
| 45 |
-
<div><a href="#attention-classes">External Attention classes</a></div>
|
| 46 |
-
<div><a href="#encoders-ftw">Encoders win!</a></div>
|
| 47 |
-
</div>
|
| 48 |
-
</nav>
|
| 49 |
-
</d-contents>
|
| 50 |
-
<!--h1>Digging through tenets and time</h1-->
|
| 51 |
-
<h2>Introduction</h2>
|
| 52 |
-
<p>The <code>transformers</code> library, built with <code>PyTorch</code>, supports all state-of-the-art LLMs, many VLMs, task-specific vision language models, video models, audio models, table models, classical encoders, to a global count of almost 400 models. The name of the library itself is mostly majority driven as many models are not even transformers architectures, like Mamba/RWKV. Regardless, each of these is wrought by the research and engineering team that created them, then harmonized into a now famous interface, and callable with a simple <code>.from_pretrained</code>. Inference and training are supported. The library supports ML courses, cookbooks, and several thousands other open-source libraries depend on it. All models are tested as part of a daily CI ensuring their preservation and reproducibility. Most importantly, it is open-source and has been written by the community for a large part.</p>
|
| 53 |
-
<p>The ML wave has not stopped, thereβs more and more models being added. <code>Transformers</code> is widely used, and we read the feedback that users post. Whether itβs about a function that had 300+ keyword arguments, duplicated code and helpers, and mentions of <code>Copied from ... </code> everywhere, along with optimisation concerns. Text-only models are relatively tamed, but multimodal models remain to be harmonized.</p>
|
| 54 |
-
<p>Here we will dissect what is the design philosophy of transformers, as a continuation from the existing older <a href="https://huggingface.co/docs/transformers/en/philosophy">philosophy</a> page, and an accompanying <a href="https://huggingface.co/blog/transformers-design-philosophy">blog post from 2022</a> . Some time ago I dare not say how long, we discussed with transformers maintainers about the state of things. A lot of recent developments were satisfactory, but if we were only talking about these, self-congratulation would be the only goalpost. Reflecting on this philosophy now, as models pile up, is essential and will drive new developments.</p>
|
| 55 |
-
<h3>What you will learn</h3>
|
| 56 |
-
<p>Every reader, whether an OSS maintainer, power user, or casual fine-tuner, will walk away knowing how to reason about the <code>transformers</code> code base, how to use it better, how to meaningfully contribute to it.
|
| 57 |
-
This will also showcase new features you might have missed so youβll be up-to-date.</p>
|
| 58 |
-
<p>So, what are the principles of <code>transformers</code>? We will try to summarize the foundations on which weβve built everything, and write the βtenetsβ of the library. They behave like <em>software interfaces</em>, hence it is crucial that they are explicitly written down. However opinionated they are, they have evolved over time.</p>
|
| 59 |
-
<ol start="0">
|
| 60 |
-
<li>
|
| 61 |
-
<p><a id="source-of-truth"></a>overarching βGuidelineβ: we should be a source of truth for all model definitions. This is not a tenet, but something that still guides our decisions. Model implementations should be reliable, reproducible, and faithful to the original performances.</p>
|
| 62 |
-
</li>
|
| 63 |
-
<li>
|
| 64 |
-
<p><a id="one-model-one-file"></a> One model, one file: all inference (and most of training, loss is separate, not a part of model) logic visible, topβtoβbottom.</p>
|
| 65 |
-
</li>
|
| 66 |
-
<li>
|
| 67 |
-
<p><a id="code-is-product"></a>Code is the product: optimize for reading, diffing, and tweaking, our users are power users. Variables can be explicit, full words, even several words, readability is primordial.</p>
|
| 68 |
-
</li>
|
| 69 |
-
<li>
|
| 70 |
-
<p><a id="standardize-dont-abstract"></a>Standardize, donβt abstract: if itβs model behavior, keep it in the file; abstractions only for generic infra.</p>
|
| 71 |
-
</li>
|
| 72 |
-
<li>
|
| 73 |
-
<p>###TOCHANGE <a id="do-repeat-yourself"></a>DRY* (DO Repeat Yourself) via the copy mechanism: copy when it helps users; keep successors in sync without centralizing behavior.
|
| 74 |
-
-We amend this tenet. With the introduction and global adoption of <a href="#modular"><code>modular</code></a> transformers, we do not repeat any logic in the <code>modular</code> files, but end user files remain faithful to the original tenet.</p>
|
| 75 |
-
</li>
|
| 76 |
-
<li>
|
| 77 |
-
<p><a id="minimal-user-api"></a>Minimal user API: config, model, preprocessing; from_pretrained, save_pretrained, push_to_hub. We want the least amount of codepaths. Reading should be obvious, configurations should be obvious.</p>
|
| 78 |
-
</li>
|
| 79 |
-
<li>
|
| 80 |
-
<p><a id="backwards-compatibility"></a>Backwards compatibility first: evolve by additive standardization, <strong>never</strong> break public APIs.</p>
|
| 81 |
-
<ul>
|
| 82 |
-
<li>Some models are showing almost no use, we also stopped adding new features for non-<code>torch</code> frameworks. Still, we adapt to models existing on the hub.</li>
|
| 83 |
-
</ul>
|
| 84 |
-
</li>
|
| 85 |
-
<li>
|
| 86 |
-
<p>###TOCHANGE <a id="consistent-public-surface"></a>Consistent public surface, enforced by tests: same argument names, same outputs, hidden states and attentions exposed.</p>
|
| 87 |
-
</li>
|
| 88 |
-
<li>
|
| 89 |
-
<p>###TOCHANGE We are not a modular toolbox. Components should be separable and users encouraged to use PyTorch directly for further usage.</p>
|
| 90 |
-
</li>
|
| 91 |
-
</ol>
|
| 92 |
-
<ul>
|
| 93 |
-
<li>This is the largest change. We ARE a toolbox. What we are not is a framework: you should not be FORCED to rewrite every modeling, but it is <em>better</em> for your model to be able to inherit from PreTrainedModel and have enabled TensorParallel, from_pretrained, sharding, push_to_hub, loss, as well as PEFT/TRL/SGLang/vLLM.</li>
|
| 94 |
-
</ul>
|
| 95 |
-
<p>When a PR is merged, it is because the contribution is worthwhile, and that the <code>transformers</code> team finds the design of the contribution to be aligned with what is above.</p>
|
| 96 |
-
<p>Does all the code in the library follow strictly these tenets? No. The library is a gigantic house with connected nooks, corridors, crannies everywhere built by thousands of different workers. We <em>try</em> to make it so all the code added is inline, lest we break <a href="#backwards-compatibility">backwards compatibility</a>.</p>
|
| 97 |
-
<p>For instance, one function essential to the implementation of <a href="https://huggingface.co/papers/2104.09864">Rotary Positional Embeddings</a> is identical in 70 <code>modeling_<file>.py</code> across <code>src/transformers/models/.</code> Why keep it? Because removing it would make those files unloadable checkpoints rather than self-contained blueprints. We <a href="#do-repeat-yourself">do repeat ourselves</a>.</p>
|
| 98 |
-
<pre><code class="language-python">def rotate_half(x):
|
| 99 |
-
"""Rotates half the hidden dims of the input."""
|
| 100 |
-
x1 = x[..., : x.shape[-1] // 2]
|
| 101 |
-
x2 = x[..., x.shape[-1] // 2 :]
|
| 102 |
-
return torch.cat((-x2, x1), dim=-1)
|
| 103 |
-
</code></pre>
|
| 104 |
-
<p>You can use a script such as [[top_methods.py]] to look at all methods of a given name across your codebase and look at their differences and similarities, thatβs what I did (+ a hash to avoid quadraticity).</p>
|
| 105 |
-
<p>Soβ¦ why keep it in all modeling files? Because if we were to remove it, the model would not work anymore. Think of the modeling files as a car (I know, what a novel metaphor! But, it works out.). All manual transmission cars have a clutch, but we want each <em>view</em> of one of our cars to be able to function. Remove the clutch, you canβt drive. Remove the doors, might be uncomfortable but youβll get there. So doors can go, but you <em>have</em> to keep the clutch, even though you know perfectly how it works.</p>
|
| 106 |
-
<p>As I was looking for things to improve and make better, itβs one of the iterations I attempted: a function is almost everywhere the same, letβs import it from some common file? But no! Goes against</p>
|
| 107 |
-
<h2><a id="modular"></a> Going modular</h2>
|
| 108 |
-
<p>However, both of these works were already pointing at some drawbacks, which have been iteratively addressed. <a href="https://huggingface.co/docs/transformers/en/modular_transformers">Transformers has gone modular</a> , allowing a form of inheritance without breaking <a href="#one-model-one-file">One model, One file</a>. If youβre familiar with this, you can <a href="#%5Eattention-classes">skip this section</a> and go to the next one.</p>
|
| 109 |
-
<p>We amended the principle of <a href="#do-repeat-yourself">DRY*</a> by removing progressively
|
| 110 |
-
It is explained in details in the documentation above, but overall it works like this, you define a <code>modular_</code> file that can inherit from <em>any function across all other modeling, configuration and processor files</em>:</p>
|
| 111 |
-
<summary>Auto-generated modeling code</summary>
|
| 112 |
-
<p><div class=code-compare style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.5rem 0;">
|
| 113 |
-
<div class=code-column style="border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;">
|
| 114 |
-
<div class=code-header style="background: #f8f9fa; padding: 0.75rem 1rem; font-weight: 600; color: #495057; border-bottom: 1px solid #e2e8f0;">
|
| 115 |
-
modular_glm.py
|
| 116 |
-
</div>
|
| 117 |
-
<pre style="margin: 0; padding: 1rem; background: #ffffff; overflow-x: auto; font-size: 0.9em;"><code class=language-python>class GlmMLP(Phi3MLP):
|
| 118 |
-
pass
|
| 119 |
-
|
| 120 |
-
class GlmAttention(LlamaAttention):
|
| 121 |
-
def __init__(self, config, layer_idx=None):
|
| 122 |
-
super().__init__(config, layer_idx)
|
| 123 |
-
self.o_proj = nn.Linear(
|
| 124 |
-
config.num_attention_heads * self.head_dim,
|
| 125 |
-
config.hidden_size,
|
| 126 |
-
bias=False
|
| 127 |
-
)
|
| 128 |
-
|
| 129 |
-
class GlmForCausalLM(LlamaForCausalLM):
|
| 130 |
-
pass</code></pre>
|
| 131 |
-
</div>
|
| 132 |
-
|
| 133 |
-
<div class=code-column style="border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;">
|
| 134 |
-
<div class=code-header style="background: #f8f9fa; padding: 0.75rem 1rem; font-weight: 600; color: #495057; border-bottom: 1px solid #e2e8f0;">
|
| 135 |
-
modeling_glm.py (auto-expanded)
|
| 136 |
-
</div>
|
| 137 |
-
<pre style="margin: 0; padding: 1rem; background: #ffffff; overflow-x: auto; font-size: 0.9em; max-height: 400px;"><code class=language-python>class GlmMLP(nn.Module):
|
| 138 |
-
def __init__(self, config):
|
| 139 |
-
super().__init__()
|
| 140 |
-
self.config = config
|
| 141 |
-
self.gate_up_proj = nn.Linear(
|
| 142 |
-
config.hidden_size,
|
| 143 |
-
2 * config.intermediate_size,
|
| 144 |
-
bias=False
|
| 145 |
-
)
|
| 146 |
-
self.down_proj = nn.Linear(
|
| 147 |
-
config.intermediate_size,
|
| 148 |
-
config.hidden_size,
|
| 149 |
-
bias=False
|
| 150 |
-
)
|
| 151 |
-
self.activation_fn = ACT2FN[config.hidden_act]
|
| 152 |
-
|
| 153 |
-
def forward(self, hidden_states: torch.FloatTensor) -> torch.FloatTensor:
|
| 154 |
-
up_states = self.gate_up_proj(hidden_states)
|
| 155 |
-
gate, up_states = up_states.chunk(2, dim=-1)
|
| 156 |
-
up_states = up_states * self.activation_fn(gate)
|
| 157 |
-
return self.down_proj(up_states)
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
class GlmAttention(nn.Module):
|
| 161 |
-
"""Multi-headed attention from 'Attention Is All You Need' paper"""
|
| 162 |
-
|
| 163 |
-
def __init__(self, config: GlmConfig, layer_idx: Optional[int] = None):
|
| 164 |
-
super().__init__()
|
| 165 |
-
self.config = config
|
| 166 |
-
self.layer_idx = layer_idx
|
| 167 |
-
self.head_dim = getattr(
|
| 168 |
-
config, "head_dim",
|
| 169 |
-
config.hidden_size // config.num_attention_heads
|
| 170 |
-
)
|
| 171 |
-
self.num_key_value_groups = (
|
| 172 |
-
config.num_attention_heads // config.num_key_value_heads
|
| 173 |
-
)
|
| 174 |
-
self.scaling = self.head_dim**-0.5
|
| 175 |
-
self.attention_dropout = config.attention_dropout
|
| 176 |
-
self.is_causal = True
|
| 177 |
-
|
| 178 |
-
self.q_proj = nn.Linear(
|
| 179 |
-
config.hidden_size,
|
| 180 |
-
config.num_attention_heads * self.head_dim,
|
| 181 |
-
bias=config.attention_bias
|
| 182 |
-
)
|
| 183 |
-
self.k_proj = nn.Linear(
|
| 184 |
-
config.hidden_size,
|
| 185 |
-
config.num_key_value_heads * self.head_dim,
|
| 186 |
-
bias=config.attention_bias
|
| 187 |
-
)
|
| 188 |
-
self.v_proj = nn.Linear(
|
| 189 |
-
config.hidden_size,
|
| 190 |
-
config.num_key_value_heads * self.head_dim,
|
| 191 |
-
bias=config.attention_bias
|
| 192 |
-
)
|
| 193 |
-
self.o_proj = nn.Linear(
|
| 194 |
-
config.num_attention_heads * self.head_dim,
|
| 195 |
-
config.hidden_size,
|
| 196 |
-
bias=False
|
| 197 |
-
)
|
| 198 |
-
|
| 199 |
-
def forward(
|
| 200 |
-
self,
|
| 201 |
-
hidden_states: torch.Tensor,
|
| 202 |
-
position_embeddings: Tuple[torch.Tensor, torch.Tensor],
|
| 203 |
-
attention_mask: Optional[torch.Tensor],
|
| 204 |
-
past_key_value: Optional[Cache] = None,
|
| 205 |
-
cache_position: Optional[torch.LongTensor] = None,
|
| 206 |
-
**kwargs: Unpack[FlashAttentionKwargs],
|
| 207 |
-
) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]:
|
| 208 |
-
input_shape = hidden_states.shape[:-1]
|
| 209 |
-
hidden_shape = (*input_shape, -1, self.head_dim)
|
| 210 |
-
|
| 211 |
-
query_states = self.q_proj(hidden_states).view(hidden_shape).transpose(1, 2)
|
| 212 |
-
key_states = self.k_proj(hidden_states).view(hidden_shape).transpose(1, 2)
|
| 213 |
-
value_states = self.v_proj(hidden_states).view(hidden_shape).transpose(1, 2)
|
| 214 |
-
|
| 215 |
-
cos, sin = position_embeddings
|
| 216 |
-
query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin)
|
| 217 |
-
|
| 218 |
-
if past_key_value is not None:
|
| 219 |
-
cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position}
|
| 220 |
-
key_states, value_states = past_key_value.update(
|
| 221 |
-
key_states, value_states, self.layer_idx, cache_kwargs
|
| 222 |
-
)
|
| 223 |
-
|
| 224 |
-
attention_interface: Callable = eager_attention_forward
|
| 225 |
-
if self.config._attn_implementation != "eager":
|
| 226 |
-
attention_interface = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation]
|
| 227 |
-
|
| 228 |
-
attn_output, attn_weights = attention_interface(
|
| 229 |
-
self, query_states, key_states, value_states,
|
| 230 |
-
attention_mask, dropout=0.0 if not self.training else self.attention_dropout,
|
| 231 |
-
scaling=self.scaling, **kwargs,
|
| 232 |
-
)
|
| 233 |
-
|
| 234 |
-
attn_output = attn_output.reshape(*input_shape, -1).contiguous()
|
| 235 |
-
attn_output = self.o_proj(attn_output)
|
| 236 |
-
return attn_output, attn_weights
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
@use_kernel_forward_from_hub("RMSNorm")
|
| 240 |
-
class GlmRMSNorm(nn.Module):
|
| 241 |
-
def __init__(self, hidden_size, eps=1e-6):
|
| 242 |
-
super().__init__()
|
| 243 |
-
self.weight = nn.Parameter(torch.ones(hidden_size))
|
| 244 |
-
self.variance_epsilon = eps
|
| 245 |
-
|
| 246 |
-
def forward(self, hidden_states):
|
| 247 |
-
input_dtype = hidden_states.dtype
|
| 248 |
-
hidden_states = hidden_states.to(torch.float32)
|
| 249 |
-
variance = hidden_states.pow(2).mean(-1, keepdim=True)
|
| 250 |
-
hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
|
| 251 |
-
return self.weight * hidden_states.to(input_dtype)
|
| 252 |
-
|
| 253 |
-
# ... (many more classes and functions would follow)</code></pre>
|
| 254 |
-
</div>
|
| 255 |
-
</div>
|
| 256 |
-
|
| 257 |
-
<p style="text-align: center; font-style: italic; color: #6c757d; margin-top: 1rem;">
|
| 258 |
-
<strong>Left:</strong> Clean modular definition with inheritance.
|
| 259 |
-
<strong>Right:</strong> Auto-expanded version with all inherited functionality visible.
|
| 260 |
-
</p></p>
|
| 261 |
-
<h2><a id="attention-classes"></a> External Attention classes</h2>
|
| 262 |
-
<p>A chronological iteration over <a href="#modular">modular</a>, and a big improvement in terms of readabilty, was to remove the various attention-backend-specific attention classes across the repository. Before, we were adding specific torch operations for each backend (sdpa, flash-attention iterations, flex attention) but it wasnβt a <a href="#minimal-user-api">minimal user api</a>.</p>
|
| 263 |
-
<p>What will forever stay in the modeling code is the <code>eager_attention_forward</code> because it is a core part of the modeling,</p>
|
| 264 |
-
<pre><code class="language-python">attention_interface: Callable = eager_attention_forward
|
| 265 |
-
if self.config._attn_implementation != "eager":
|
| 266 |
-
attention_interface = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation]
|
| 267 |
-
</code></pre>
|
| 268 |
-
<p>We often read and understand that <code>kwargs</code> are criticized, and we are typing them however we can, but we cannot enforce them all the time because other libraries such as vLLM donβ't use the same kwargs.</p>
|
| 269 |
-
<p>It is a strength of the new attention interface, where it can be plugged in various backends, because most of the signature is not enforced. We INFORM but do not ENFORCE. That way, the current system is a <a href="#minimal-user-api">minimal user api</a>.</p>
|
| 270 |
-
<p>For a better <em>information</em>, we plan to use <code>python</code>features such as <code>Annoted</code> for example, to inform users of what we expect typically in an argument. That way, higher-level information could be included directly in the type annotations, telling for instance the expected dimensions and contents of a tensor. </p>
|
| 271 |
-
|
| 272 |
-
<h2><a id="simpler-tensor-parallelism"></a> Simpler Tensor Parallelism </h2>
|
| 273 |
-
|
| 274 |
-
We want to touch minimally to the modeling code, and only modify it when _architectural changes_ are involved. For instance, for tensor parallelism, we instead now specify a simple `tp_plan`.
|
| 275 |
-
|
| 276 |
-
<h2><a id="layers-attentions-caches"></a> Layers, attentions and caches </h2>
|
| 277 |
-
With th
|
| 278 |
-
|
| 279 |
-
<h2><a id="community-kernels"></a>Community Kernels</h2>
|
| 280 |
-
<p>The same principle extends to normalization, activation, and other hot paths. The model defines <strong>semantics</strong>; a kernel defines <strong>how</strong> to execute them faster. We annotate the module to borrow a communityβprovided forward, keeping a <a href="#consistent-public-surface">consistent public surface</a></p>
|
| 281 |
-
<pre><code class="language-python">@use_kernel_forward_from_hub("RMSNorm")
|
| 282 |
-
class GlmRMSNorm(nn.Module):
|
| 283 |
-
...
|
| 284 |
-
</code></pre>
|
| 285 |
-
<p>Plus, this opened another angle of contribution for the community. People who are GPU whisperersYou can check on the <a href="https://huggingface.co/blog/hello-hf-kernels">kernel community blog post</a> to learn more about it!</p>
|
| 286 |
-
<h2>The good modularity</h2>
|
| 287 |
-
<p>Now, we have a form of inheritance in our codebase. Some models become standards, and model contributors are given the opportunity to <em>define standards</em>. Pushing the boundaries of scientific knowledge can translate into the boundaries of engineering if this effort is made, and weβre striving for it.</p>
|
| 288 |
-
<p>My capacity for abstraction is not that great, compared to other computer scientists and engineers: I need to look at little doodles and drawings, especially when components pile up.</p>
|
| 289 |
-
<p>So I wanted to take a look at the current <strong>state of modularity</strong> across the repository. How many models are defined using components of others?</p>
|
| 290 |
-
<p>To get this graph, I used the heuristic of modular inheritance.</p>
|
| 291 |
-
<ol>
|
| 292 |
-
<li>Does this model have a <code>modular</code> file?</li>
|
| 293 |
-
<li>In this <code>modular</code> file, what models, configurations and processings are imported?</li>
|
| 294 |
-
<li>Recurse through the model list that way.</li>
|
| 295 |
-
</ol>
|
| 296 |
-
<p>So what do we see? Llama is a basis for many models, and it shows.
|
| 297 |
-
Radically different architectures such as mamba have spawned their own dependency subgraph.
|
| 298 |
-
<div class=interactive-demo>
|
| 299 |
-
<div class=demo-header>
|
| 300 |
-
<h3>π Model Dependency Graph</h3>
|
| 301 |
-
</div>
|
| 302 |
-
<div class=demo-content>
|
| 303 |
-
<iframe src=static/d3_dependency_graph.html width=100% height=600px frameborder=0 style="border-radius: 8px; background: white;"></iframe>
|
| 304 |
-
</div>
|
| 305 |
-
<div class=demo-footer>
|
| 306 |
-
Interactive dependency graph showing real relationships between Transformers models. π‘ Base models (HuggingFace logo), π΅ Derived modular models. Click and drag to explore!
|
| 307 |
-
</div>
|
| 308 |
-
</div>
|
| 309 |
-
|
| 310 |
-
</p>
|
| 311 |
-
<p><img src="static/graph_modular_related_models.png" alt="Graph showing modular related models"></p>
|
| 312 |
-
<p>But there is no similar miracle for VLMs across the board.
|
| 313 |
-
As you can see, there is a small DETR island, a little llava pocket, and so on, but itβs not comparable to the centrality observed.</p>
|
| 314 |
-
<p>One problem is, this is only for <code>modular</code> models. Several models do NOT have a modular file. In other words, we have a big βhidden space here.β</p>
|
| 315 |
-
<h2>Too many models, yet not enough, are alike</h2>
|
| 316 |
-
<p>So I looked into Jaccard similarity, which we use to measure set differences. I know that code is more than a set of characters stringed together, but it is a correct proxy for now. You can check out [[find_dependencies.py]] .</p>
|
| 317 |
-
<p><div style="background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 8px; padding: 1rem; margin: 1.5rem 0;">
|
| 318 |
-
<h4 style="margin-top: 0; color: #495057;">Interactive Terminal</h4>
|
| 319 |
-
<div style="background: #2d3748; color: #e2e8f0; padding: 1rem; border-radius: 6px; font-family: 'Consolas', 'Monaco', monospace;">
|
| 320 |
-
<div style="margin-bottom: 1rem;">
|
| 321 |
-
<input type=text id=terminal-input placeholder="python -c 'import torch; print(torch.__version__)'" style="width: calc(100% - 80px); padding: 0.5rem; background: #1a202c; border: 1px solid #4a5568; color: #e2e8f0; border-radius: 4px;">
|
| 322 |
-
<button id=terminal-run style="width: 70px; padding: 0.5rem; margin-left: 8px; background: #3182ce; color: white; border: none; border-radius: 4px; cursor: pointer;">Run</button>
|
| 323 |
-
</div>
|
| 324 |
-
<pre id=terminal-output style="background: #1a202c; padding: 1rem; border-radius: 4px; min-height: 100px; margin: 0; overflow-x: auto;">$ Ready to run commands...</pre>
|
| 325 |
-
</div>
|
| 326 |
-
<p style="font-size: 0.9em; color: #6c757d; margin-top: 0.5rem;">
|
| 327 |
-
<em>Note: This is a simulated terminal. In the original Gradio app, this would execute real Python commands with proper security restrictions.</em>
|
| 328 |
-
</p>
|
| 329 |
-
</div>
|
| 330 |
-
|
| 331 |
-
<script>document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("terminal-input"),t=document.getElementById("terminal-run"),n=document.getElementById("terminal-output");function o(){let t=e.value.trim();t&&(n.textContent=`$ ${t}
|
| 332 |
-
Simulated output for: ${t}
|
| 333 |
-
|
| 334 |
-
This would execute the command in the original app.
|
| 335 |
-
Example outputs:
|
| 336 |
-
- torch version: 2.0.1+cu117
|
| 337 |
-
- import checks: Success
|
| 338 |
-
- memory info: Available`)}t.addEventListener("click",o),e.addEventListener("keypress",function(e){"Enter"===e.key&&o()})})</script></p>
|
| 339 |
-
<p><img src="static/Jaccard_similarity_plot.png" alt="Jaccard similarity plot showing model relationships"></p>
|
| 340 |
-
<p>The yellow areas are places where models are very different to each other. We can see islands here and there corresponding to model families. Llava goes with Llava-onevision, LlavaNext, LlavaNext-video, etc.</p>
|
| 341 |
-
<h2>VLM improvements, avoiding abstraction</h2>
|
| 342 |
-
<p>We donβt have cookbook for common VLM patterns (image token scatter, multiβtower encoders, crossβattn bridges). This is one of the main improvement points where we can work.</p>
|
| 343 |
-
<p>So initially I thought of abstracting away the mixing of <code>inputs_embeds</code>, the tensor fed into an llm decoder in 95% of the existing VLMs. It would have looked like something like</p>
|
| 344 |
-
<pre><code class="language-python">class InputsEmbeddingMixerMixin(nn.Module):
|
| 345 |
-
#
|
| 346 |
-
</code></pre>
|
| 347 |
-
<p>But this is breaking <a href="#standardize-dont-abstract">Standardize, donβt abstract</a>. Embedding mixin is part of the model, removing it would break it. A user opening <code>modeling_qwen2.5_vl</code> should not have to go to another file.</p>
|
| 348 |
-
<p>This is the current state of abstractions across a modeling file:</p>
|
| 349 |
-
<p><img src="static/Bloatedness_visualizer.png" alt="Bloatedness visualizer showing abstraction levels"></p>
|
| 350 |
-
<p>The following <a href="https://github.com/huggingface/transformers/pull/39777">Pull request to standardize placeholder masking</a> is a good example of what kind of changes are acceptable. In a VLM, we always need to insert embeddings from various encoders at various positions, so we can have a function to do it. For Qwen2 VL, for instance, it will look like this:</p>
|
| 351 |
-
<pre><code class="language-python"> def get_placeholder_mask(
|
| 352 |
-
self,
|
| 353 |
-
input_ids: torch.LongTensor,
|
| 354 |
-
inputs_embeds: torch.FloatTensor,
|
| 355 |
-
image_features: torch.FloatTensor = None,
|
| 356 |
-
video_features: torch.FloatTensor = None,
|
| 357 |
-
):
|
| 358 |
-
"""
|
| 359 |
-
Obtains multimodal placeholdr mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
|
| 360 |
-
equal to the length of multimodal features. If the lengths are different, an error is raised.
|
| 361 |
-
"""
|
| 362 |
-
if input_ids is None:
|
| 363 |
-
special_image_mask = inputs_embeds == self.get_input_embeddings()(
|
| 364 |
-
torch.tensor(self.config.image_token_id, dtype=torch.long, device=inputs_embeds.device)
|
| 365 |
-
)
|
| 366 |
-
special_image_mask = special_image_mask.all(-1)
|
| 367 |
-
special_video_mask = inputs_embeds == self.get_input_embeddings()(
|
| 368 |
-
torch.tensor(self.config.video_token_id, dtype=torch.long, device=inputs_embeds.device)
|
| 369 |
-
)
|
| 370 |
-
special_video_mask = special_video_mask.all(-1)
|
| 371 |
-
else:
|
| 372 |
-
special_image_mask = input_ids == self.config.image_token_id
|
| 373 |
-
special_video_mask = input_ids == self.config.video_token_id
|
| 374 |
-
|
| 375 |
-
n_image_tokens = special_image_mask.sum()
|
| 376 |
-
special_image_mask = special_image_mask.unsqueeze(-1).expand_as(inputs_embeds).to(inputs_embeds.device)
|
| 377 |
-
if image_features is not None and inputs_embeds[special_image_mask].numel() != image_features.numel():
|
| 378 |
-
raise ValueError(
|
| 379 |
-
f"Image features and image tokens do not match: tokens: {n_image_tokens}, features {image_features.shape[0]}"
|
| 380 |
-
)
|
| 381 |
-
|
| 382 |
-
n_video_tokens = special_video_mask.sum()
|
| 383 |
-
special_video_mask = special_video_mask.unsqueeze(-1).expand_as(inputs_embeds).to(inputs_embeds.device)
|
| 384 |
-
if video_features is not None and inputs_embeds[special_video_mask].numel() != video_features.numel():
|
| 385 |
-
raise ValueError(
|
| 386 |
-
f"Videos features and video tokens do not match: tokens: {n_video_tokens}, features {video_features.shape[0]}"
|
| 387 |
-
)
|
| 388 |
-
|
| 389 |
-
return special_image_mask, special_video_mask
|
| 390 |
-
</code></pre>
|
| 391 |
-
<p>But this is <em>within</em> the modeling file, not in the <code>PreTrainedModel</code> base class. It will not move away from it, because itβd break the self-contained logic of the model.</p>
|
| 392 |
-
<h2>Modularity candidates</h2>
|
| 393 |
-
<p>So the question abounds naturally: How can we modularize more?
|
| 394 |
-
I took again a similarity measure and looked at the existing graphs. The tool is available on this <a href="https://huggingface.co/spaces/Molbap/transformers-modular-refactor">ZeroGPU-enabled Space</a>. It scans the whole transformers repository, and outputs a graph of candidates across models, using either a Jaccard similarity index (simple) or a SentenceTransformers embedding model. It is understandable that <a href="#encoders-ftw">encoder models still have a lionβs share of the game.</a> See also <a href="https://huggingface.co/blog/train-sparse-encoder">Tom Aarsen and Arhur Bresnuβs great blog post on the topic of sparse embeddings.</a>.</p>
|
| 395 |
-
<p><img src="static/modular_candidates.png" alt="Modular candidates analysis"></p>
|
| 396 |
-
<h2><a id="encoders-ftw"></a> Encoders win !</h2>
|
| 397 |
-
<p>Models popularity speaks for itself! This is because the usage of encoders lies in embeddings obviously. So we have to keep the encoders part viable, usable, fine-tune-able.</p>
|
| 398 |
-
<p><img src="static/popular_models_barplot.png" alt="Popular models bar plot"></p>
|
| 399 |
-
<h2>On image processing and processors</h2>
|
| 400 |
-
<p>Choosing to be a <code>torch</code>-first software meant relieving a tremendous amount of support from <code>jax </code> and <code>TensorFlow</code> , and it also meant that we could be more lenient into the amount of torch-dependent utilities that we were able to add. One of these is the <em>fast processing</em> of images. Where they were before assumed to be minimal ndarrays, making stronger assumptions and enforcing <code>torch</code> and <code>torchvision</code>native inputs allowed up to speed up massively the processing time for each model.</p>
|
| 401 |
-
<p>The gains in performance are immense, up to 20x speed for most models when compiled torchvision ops.</p>
|
| 402 |
-
<h2>Reduce barrier to entry/contribution</h2>
|
| 403 |
-
<p>This is an overall objective, no transformers without community.</p>
|
| 404 |
-
<p>We didnβt want to make a toolbox, old tenet, because <em>having a framework means forcing users into it</em>. It restrains flexibility and creativity, which are the fertile soil for new ideas to grow.
|
| 405 |
-
Among the most valuable contributions to <code>transformers</code>is of course the addition of new models.</p>
|
| 406 |
-
<h2>A surgical toolbox for model development</h2>
|
| 407 |
-
<h3>Attention visualisation</h3>
|
| 408 |
-
<p>If all models have the same API internally for attention computation, it allows us to build cool tools to visualize the inner workings of the attention mechanism. One particular piece of
|
| 409 |
-
machinery is the <code>attention mask</code>, cause of confusion. Thankfully, we can fix it.</p>
|
| 410 |
-
<p><div style="border: 1px solid #e2e8f0; border-radius: 8px; background: white; margin: 1.5rem 0;">
|
| 411 |
-
<div style="padding: 1rem; border-bottom: 1px solid #e2e8f0; background: #f8f9fa;">
|
| 412 |
-
<h4 style="margin: 0 0 0.5rem 0; color: #495057;">π Attention Mask Visualizer</h4>
|
| 413 |
-
<p style="margin: 0; font-size: 0.9em; color: #6c757d;">
|
| 414 |
-
Visualize attention patterns in transformer models. This helps debug attention mask issues.
|
| 415 |
-
</p>
|
| 416 |
-
</div>
|
| 417 |
-
|
| 418 |
-
<div style="padding: 1rem;">
|
| 419 |
-
<div style="display: grid; grid-template-columns: 1fr auto; gap: 1rem; align-items: start; margin-bottom: 1rem;">
|
| 420 |
-
<div>
|
| 421 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Model:</label>
|
| 422 |
-
<select id=model-select style="width: 100%; padding: 0.5rem; border: 1px solid #d1d5db; border-radius: 6px; background: white;">
|
| 423 |
-
<option value=openai-community/gpt2>openai-community/gpt2</option>
|
| 424 |
-
<option value=google/gemma-2-2b>google/gemma-2-2b</option>
|
| 425 |
-
<option value=microsoft/DialoGPT-small>microsoft/DialoGPT-small</option>
|
| 426 |
-
</select>
|
| 427 |
-
</div>
|
| 428 |
-
|
| 429 |
-
<div>
|
| 430 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Action:</label>
|
| 431 |
-
<button id=visualize-btn style="padding: 0.5rem 1rem; background: #3b82f6; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: 500;">
|
| 432 |
-
π Visualize
|
| 433 |
-
</button>
|
| 434 |
-
</div>
|
| 435 |
-
</div>
|
| 436 |
-
|
| 437 |
-
<div style="margin-bottom: 1rem;">
|
| 438 |
-
<label style="display: block; font-weight: 600; margin-bottom: 0.5rem; color: #374151;">Prompt:</label>
|
| 439 |
-
<textarea id=prompt-input style="width: 100%; padding: 0.75rem; border: 1px solid #d1d5db; border-radius: 6px; resize: vertical; font-family: monospace; font-size: 0.9em;" rows=3 placeholder="You are an assistant. Make sure you print me."></textarea>
|
| 440 |
-
</div>
|
| 441 |
-
|
| 442 |
-
<div id=attention-output style="min-height: 200px; background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 6px; padding: 1rem;">
|
| 443 |
-
<div style="text-align: center; color: #6c757d; font-style: italic;">
|
| 444 |
-
Click "Visualize" to generate attention visualization
|
| 445 |
-
</div>
|
| 446 |
-
</div>
|
| 447 |
-
</div>
|
| 448 |
-
|
| 449 |
-
<div style="padding: 1rem; border-top: 1px solid #e2e8f0; background: #f8f9fa; font-size: 0.9em; color: #6c757d;">
|
| 450 |
-
<strong>Note:</strong> This is a demonstration. In the original Gradio app, this would use GPU processing with ZeroGPU
|
| 451 |
-
to generate real attention visualizations from transformer models.
|
| 452 |
-
</div>
|
| 453 |
-
</div>
|
| 454 |
-
|
| 455 |
-
<script>document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("model-select"),t=document.getElementById("prompt-input"),n=document.getElementById("visualize-btn"),i=document.getElementById("attention-output");t.value="You are an assistant. Make sure you print me.",n.addEventListener("click",function(){let o=e.value,r=t.value.trim();if(!r){i.innerHTML='<div style="color: #e53e3e;">Please enter a prompt</div>';return}n.disabled=!0,n.textContent="Processing...",i.innerHTML='<div style="text-align: center; color: #6c757d;"><em>Generating attention visualization...</em></div>',setTimeout(()=>{let e=r.split(" ").slice(0,8),t='<div style="margin-bottom: 1rem;"><strong>Model:</strong> '+o+"</div>";t+='<div style="margin-bottom: 1rem;"><strong>Tokens:</strong> '+e.join(" β’ ")+'</div><div><strong>Attention Matrix (Layer 0, Head 0):</strong></div><table style="margin-top: 0.5rem; border-collapse: collapse; font-family: monospace; font-size: 0.8em;">';for(let n=0;n<e.length;n++){t+="<tr>";for(let n=0;n<e.length;n++){let e=Math.random(),n=`rgba(59, 130, 246, ${e})`;t+=`<td style="border: 1px solid #ddd; padding: 4px; background: ${n}; text-align: center; min-width: 40px;">${e.toFixed(2)}</td>`}t+="</tr>"}i.innerHTML=t+='</table><div style="margin-top: 1rem; font-size: 0.9em; color: #6c757d;"><em>Darker blue = higher attention weight</em></div>',n.disabled=!1,n.textContent="\uD83D\uDE80 Visualize"},2e3)})})</script></p>
|
| 456 |
-
<p>Because it is all PyTorch (and it is even more now that we support only PyTorch), we can easily debug any model when we want to add it to transformers. We now have a power-user tool for porting or adding models, that wraps a forward pass, intercepts every submodule call, and logs shapes, dtypes, and sample statistics of inputs/outputs to nested JSON.</p>
|
| 457 |
-
<p>It just works with PyTorch models and is especially useful when aligning outputs with a reference implementation, aligned with our core guideline, <a href="#source-of-truth">source of truth for model definitions</a>.</p>
|
| 458 |
-
<p><img src="static/model_debugger.png" alt="Model debugger interface"></p>
|
| 459 |
-
<h3>Transformers-serve</h3>
|
| 460 |
-
<p>Having all these models readily available allows to use all of them with transformers-serve, and enable interfacing with them with an Open API-like pattern.</p>
|
| 461 |
-
<p>####Β add example</p>
|
| 462 |
-
<h2>Community reusability</h2>
|
| 463 |
-
<p>Adding a model to transformers means:</p>
|
| 464 |
-
<ul>
|
| 465 |
-
<li>having it immediately available to the community</li>
|
| 466 |
-
<li>usable in vLLM, SGLang, and so on without additional code.</li>
|
| 467 |
-
</ul>
|
| 468 |
-
<p>##Β Inner cooking: CUDA Warmup</p>
|
| 469 |
-
<p>Having a clean <em>external</em> API allows us to work on the true inner workings of transformers. One of the few recent additions was the <em>CUDA warmup</em> via <code>caching_allocator_warmup</code> which improved massively the loading time by pre-allocating GPU memory to avoid malloc bottlenecks during model loading.</p>
|
| 470 |
-
<div class=interactive-demo>
|
| 471 |
-
<div class=demo-header>
|
| 472 |
-
<h3>π CUDA Warmup Efficiency Benchmark</h3>
|
| 473 |
-
</div>
|
| 474 |
-
<div class=demo-content>
|
| 475 |
-
<iframe src=https://molbap-cuda-warmup-transformers.hf.space width=100% height=800px frameborder=0 style="border-radius: 8px; background: white;"></iframe>
|
| 476 |
-
</div>
|
| 477 |
-
<div class=demo-footer>
|
| 478 |
-
Real CUDA warmup benchmarking with actual Transformers models. Measure the performance impact of the <code>caching_allocator_warmup</code> function at <code>transformers/src/transformers/modeling_utils.py:6186</code>. This interactive tool loads models twice - once with warmup disabled and once with warmup enabled - to demonstrate the significant loading time improvements.
|
| 479 |
-
</div>
|
| 480 |
-
</div>
|
| 481 |
-
|
| 482 |
-
|
| 483 |
-
|
| 484 |
-
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
<h3>Linkedin post (to remove)</h3>
|
| 493 |
-
<p>Linkedin post for videos:</p>
|
| 494 |
-
<p>In transformers, how do we deal with cross-model dependencies, while supporting ~400 models? Maybe youβve seen the same 200-lines functions in too many <em>modeling_file.py</em>? Duplication isnβt inevitable.</p>
|
| 495 |
-
<p>The βoneβmodel/oneβfileβ rule keeps every model readable and runnable. It also means identical code is copied hundreds of times. Maintenance hurts, contributor PRs snowball, and visionβlanguage models especially end up in siloed forks.</p>
|
| 496 |
-
<p>modular_*.py fixes the tradeβoff, by auto-generating the modeling file from a modular file, which can use inheritance.</p>
|
| 497 |
-
<p>With a small analyser Iβve mapped which models already share modular pieces and which 100βplus still repeat themselves. Red nodes in the graph = lowestβhanging fruit for refactor; blue = already modular.</p>
|
| 498 |
-
<p>The result: contributors can focus on novel layers instead of boilerplate, reviews shrink from βnew file diffβ to βdoes this override make sense?β, and the codebase stays something you can actually open and read.</p>
|
| 499 |
-
<p>If you maintain or ship models on top of Transformers, take a look at modular, in 2025 itβs how we keep shipping breadth without the bloat. </p>
|
| 500 |
-
|
| 501 |
-
</d-article>
|
| 502 |
-
|
| 503 |
-
<script>
|
| 504 |
-
function initializeTOC() {
|
| 505 |
-
const article = document.querySelector('d-article');
|
| 506 |
-
const toc = document.querySelector('d-contents');
|
| 507 |
-
if (toc) {
|
| 508 |
-
const headings = article.querySelectorAll('h1, h2, h3, h4');
|
| 509 |
-
let ToC = '<nav role="navigation" class="l-text figcaption">';
|
| 510 |
-
ToC += '<div class="toc-header"><span class="toc-title">Table of Contents</span></div>';
|
| 511 |
-
ToC += '<div class="toc-content">';
|
| 512 |
-
|
| 513 |
-
headings.forEach((heading, index) => {
|
| 514 |
-
const id = heading.id || 'heading-' + index;
|
| 515 |
-
if (!heading.id) heading.id = id;
|
| 516 |
-
const level = parseInt(heading.tagName.charAt(1));
|
| 517 |
-
const indent = level === 1 ? '' : 'style="margin-left: ' + ((level - 1) * 1.2) + 'em;"';
|
| 518 |
-
ToC += '<div ' + indent + '><a href="#' + id + '">' + heading.textContent + '</a></div>';
|
| 519 |
-
});
|
| 520 |
-
|
| 521 |
-
ToC += '</div></nav>';
|
| 522 |
-
toc.innerHTML = ToC;
|
| 523 |
-
toc.setAttribute('prerendered', 'true');
|
| 524 |
-
|
| 525 |
-
// Extract tenet text for tooltips
|
| 526 |
-
const tenetTooltips = {
|
| 527 |
-
'source-of-truth': 'We should be a source of truth for all model definitions. Model implementations should be reliable, reproducible, and faithful to the original performances.',
|
| 528 |
-
'one-model-one-file': 'All inference (and most of training, loss is separate, not a part of model) logic visible, topβtoβbottom.',
|
| 529 |
-
'code-is-product': 'Optimize for reading, diffing, and tweaking, our users are power users. Variables can be explicit, full words, even several words, readability is primordial.',
|
| 530 |
-
'standardize-dont-abstract': 'If it\'s model behavior, keep it in the file; abstractions only for generic infra.',
|
| 531 |
-
'do-repeat-yourself': 'Copy when it helps users; keep successors in sync without centralizing behavior.',
|
| 532 |
-
'minimal-user-api': 'Config, model, preprocessing; from_pretrained, save_pretrained, push_to_hub. We want the least amount of codepaths.',
|
| 533 |
-
'backwards-compatibility': 'Evolve by additive standardization, never break public APIs.',
|
| 534 |
-
'consistent-public-surface': 'Same argument names, same outputs, hidden states and attentions exposed.',
|
| 535 |
-
};
|
| 536 |
-
|
| 537 |
-
// Add smooth scrolling and active state
|
| 538 |
-
const tocLinks = document.querySelectorAll('d-contents a');
|
| 539 |
-
tocLinks.forEach(link => {
|
| 540 |
-
const href = link.getAttribute('href');
|
| 541 |
-
const anchor = href ? href.substring(1) : '';
|
| 542 |
-
|
| 543 |
-
// Add tooltip if this is a tenet link
|
| 544 |
-
if (tenetTooltips[anchor]) {
|
| 545 |
-
link.setAttribute('title', tenetTooltips[anchor]);
|
| 546 |
-
link.style.position = 'relative';
|
| 547 |
-
}
|
| 548 |
-
|
| 549 |
-
link.addEventListener('click', function(e) {
|
| 550 |
-
e.preventDefault();
|
| 551 |
-
const target = document.querySelector(this.getAttribute('href'));
|
| 552 |
-
if (target) {
|
| 553 |
-
target.scrollIntoView({ behavior: 'smooth' });
|
| 554 |
-
}
|
| 555 |
-
});
|
| 556 |
-
});
|
| 557 |
-
|
| 558 |
-
// Update active state on scroll
|
| 559 |
-
window.addEventListener('scroll', function() {
|
| 560 |
-
const scrollPos = window.scrollY + 100;
|
| 561 |
-
headings.forEach((heading) => {
|
| 562 |
-
const link = document.querySelector('d-contents a[href="#' + heading.id + '"]');
|
| 563 |
-
if (link) {
|
| 564 |
-
if (heading.offsetTop <= scrollPos &&
|
| 565 |
-
heading.offsetTop + heading.offsetHeight > scrollPos) {
|
| 566 |
-
link.classList.add('active');
|
| 567 |
-
} else {
|
| 568 |
-
link.classList.remove('active');
|
| 569 |
-
}
|
| 570 |
-
}
|
| 571 |
-
});
|
| 572 |
-
});
|
| 573 |
-
}
|
| 574 |
-
}
|
| 575 |
-
|
| 576 |
-
// Initialize Prism syntax highlighting
|
| 577 |
-
function initializeSyntaxHighlighting() {
|
| 578 |
-
if (typeof Prism !== 'undefined') {
|
| 579 |
-
Prism.highlightAll();
|
| 580 |
-
}
|
| 581 |
-
}
|
| 582 |
-
|
| 583 |
-
// Try multiple times to ensure it runs after distill.js
|
| 584 |
-
document.addEventListener('DOMContentLoaded', function() {
|
| 585 |
-
initializeTOC();
|
| 586 |
-
initializeSyntaxHighlighting();
|
| 587 |
-
});
|
| 588 |
-
setTimeout(function() {
|
| 589 |
-
initializeTOC();
|
| 590 |
-
initializeSyntaxHighlighting();
|
| 591 |
-
}, 100);
|
| 592 |
-
setTimeout(function() {
|
| 593 |
-
initializeTOC();
|
| 594 |
-
initializeSyntaxHighlighting();
|
| 595 |
-
}, 500);
|
| 596 |
-
setTimeout(function() {
|
| 597 |
-
initializeTOC();
|
| 598 |
-
initializeSyntaxHighlighting();
|
| 599 |
-
}, 1000);
|
| 600 |
-
</script>
|
| 601 |
-
</body>
|
| 602 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/main.bundle.js
DELETED
|
@@ -1,1867 +0,0 @@
|
|
| 1 |
-
/******/ (() => { // webpackBootstrap
|
| 2 |
-
/******/ "use strict";
|
| 3 |
-
/******/ var __webpack_modules__ = ({
|
| 4 |
-
|
| 5 |
-
/***/ 56:
|
| 6 |
-
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
/* istanbul ignore next */
|
| 11 |
-
function setAttributesWithoutAttributes(styleElement) {
|
| 12 |
-
var nonce = true ? __webpack_require__.nc : 0;
|
| 13 |
-
if (nonce) {
|
| 14 |
-
styleElement.setAttribute("nonce", nonce);
|
| 15 |
-
}
|
| 16 |
-
}
|
| 17 |
-
module.exports = setAttributesWithoutAttributes;
|
| 18 |
-
|
| 19 |
-
/***/ }),
|
| 20 |
-
|
| 21 |
-
/***/ 72:
|
| 22 |
-
/***/ ((module) => {
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
var stylesInDOM = [];
|
| 27 |
-
function getIndexByIdentifier(identifier) {
|
| 28 |
-
var result = -1;
|
| 29 |
-
for (var i = 0; i < stylesInDOM.length; i++) {
|
| 30 |
-
if (stylesInDOM[i].identifier === identifier) {
|
| 31 |
-
result = i;
|
| 32 |
-
break;
|
| 33 |
-
}
|
| 34 |
-
}
|
| 35 |
-
return result;
|
| 36 |
-
}
|
| 37 |
-
function modulesToDom(list, options) {
|
| 38 |
-
var idCountMap = {};
|
| 39 |
-
var identifiers = [];
|
| 40 |
-
for (var i = 0; i < list.length; i++) {
|
| 41 |
-
var item = list[i];
|
| 42 |
-
var id = options.base ? item[0] + options.base : item[0];
|
| 43 |
-
var count = idCountMap[id] || 0;
|
| 44 |
-
var identifier = "".concat(id, " ").concat(count);
|
| 45 |
-
idCountMap[id] = count + 1;
|
| 46 |
-
var indexByIdentifier = getIndexByIdentifier(identifier);
|
| 47 |
-
var obj = {
|
| 48 |
-
css: item[1],
|
| 49 |
-
media: item[2],
|
| 50 |
-
sourceMap: item[3],
|
| 51 |
-
supports: item[4],
|
| 52 |
-
layer: item[5]
|
| 53 |
-
};
|
| 54 |
-
if (indexByIdentifier !== -1) {
|
| 55 |
-
stylesInDOM[indexByIdentifier].references++;
|
| 56 |
-
stylesInDOM[indexByIdentifier].updater(obj);
|
| 57 |
-
} else {
|
| 58 |
-
var updater = addElementStyle(obj, options);
|
| 59 |
-
options.byIndex = i;
|
| 60 |
-
stylesInDOM.splice(i, 0, {
|
| 61 |
-
identifier: identifier,
|
| 62 |
-
updater: updater,
|
| 63 |
-
references: 1
|
| 64 |
-
});
|
| 65 |
-
}
|
| 66 |
-
identifiers.push(identifier);
|
| 67 |
-
}
|
| 68 |
-
return identifiers;
|
| 69 |
-
}
|
| 70 |
-
function addElementStyle(obj, options) {
|
| 71 |
-
var api = options.domAPI(options);
|
| 72 |
-
api.update(obj);
|
| 73 |
-
var updater = function updater(newObj) {
|
| 74 |
-
if (newObj) {
|
| 75 |
-
if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
|
| 76 |
-
return;
|
| 77 |
-
}
|
| 78 |
-
api.update(obj = newObj);
|
| 79 |
-
} else {
|
| 80 |
-
api.remove();
|
| 81 |
-
}
|
| 82 |
-
};
|
| 83 |
-
return updater;
|
| 84 |
-
}
|
| 85 |
-
module.exports = function (list, options) {
|
| 86 |
-
options = options || {};
|
| 87 |
-
list = list || [];
|
| 88 |
-
var lastIdentifiers = modulesToDom(list, options);
|
| 89 |
-
return function update(newList) {
|
| 90 |
-
newList = newList || [];
|
| 91 |
-
for (var i = 0; i < lastIdentifiers.length; i++) {
|
| 92 |
-
var identifier = lastIdentifiers[i];
|
| 93 |
-
var index = getIndexByIdentifier(identifier);
|
| 94 |
-
stylesInDOM[index].references--;
|
| 95 |
-
}
|
| 96 |
-
var newLastIdentifiers = modulesToDom(newList, options);
|
| 97 |
-
for (var _i = 0; _i < lastIdentifiers.length; _i++) {
|
| 98 |
-
var _identifier = lastIdentifiers[_i];
|
| 99 |
-
var _index = getIndexByIdentifier(_identifier);
|
| 100 |
-
if (stylesInDOM[_index].references === 0) {
|
| 101 |
-
stylesInDOM[_index].updater();
|
| 102 |
-
stylesInDOM.splice(_index, 1);
|
| 103 |
-
}
|
| 104 |
-
}
|
| 105 |
-
lastIdentifiers = newLastIdentifiers;
|
| 106 |
-
};
|
| 107 |
-
};
|
| 108 |
-
|
| 109 |
-
/***/ }),
|
| 110 |
-
|
| 111 |
-
/***/ 113:
|
| 112 |
-
/***/ ((module) => {
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
/* istanbul ignore next */
|
| 117 |
-
function styleTagTransform(css, styleElement) {
|
| 118 |
-
if (styleElement.styleSheet) {
|
| 119 |
-
styleElement.styleSheet.cssText = css;
|
| 120 |
-
} else {
|
| 121 |
-
while (styleElement.firstChild) {
|
| 122 |
-
styleElement.removeChild(styleElement.firstChild);
|
| 123 |
-
}
|
| 124 |
-
styleElement.appendChild(document.createTextNode(css));
|
| 125 |
-
}
|
| 126 |
-
}
|
| 127 |
-
module.exports = styleTagTransform;
|
| 128 |
-
|
| 129 |
-
/***/ }),
|
| 130 |
-
|
| 131 |
-
/***/ 208:
|
| 132 |
-
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
| 133 |
-
|
| 134 |
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
| 135 |
-
/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
|
| 136 |
-
/* harmony export */ });
|
| 137 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);
|
| 138 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
| 139 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
|
| 140 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
| 141 |
-
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_transformers_custom_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(995);
|
| 142 |
-
// Imports
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
| 147 |
-
___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_transformers_custom_css__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A);
|
| 148 |
-
// Module
|
| 149 |
-
___CSS_LOADER_EXPORT___.push([module.id, `/* style.css - Transformers Playthrough */
|
| 150 |
-
|
| 151 |
-
/* Import ultrascale-playbook base styles and add transformers-specific styling */
|
| 152 |
-
/* Define colors */
|
| 153 |
-
:root {
|
| 154 |
-
--distill-gray: rgb(107, 114, 128);
|
| 155 |
-
--distill-gray-light: rgb(185, 185, 185);
|
| 156 |
-
--distill-gray-lighter: rgb(228, 228, 228);
|
| 157 |
-
--distill-gray-lightest: rgb(245, 245, 245);
|
| 158 |
-
--distill-blue: #007BFF;
|
| 159 |
-
}
|
| 160 |
-
|
| 161 |
-
/* Container for the controls */
|
| 162 |
-
[id^="plot-"] {
|
| 163 |
-
display: flex;
|
| 164 |
-
flex-direction: column;
|
| 165 |
-
align-items: center;
|
| 166 |
-
gap: 15px; /* Adjust the gap between controls as needed */
|
| 167 |
-
}
|
| 168 |
-
[id^="plot-"] figure {
|
| 169 |
-
margin-bottom: 0px;
|
| 170 |
-
margin-top: 0px;
|
| 171 |
-
padding: 0px;
|
| 172 |
-
}
|
| 173 |
-
.plotly_caption {
|
| 174 |
-
font-style: italic;
|
| 175 |
-
margin-top: 10px;
|
| 176 |
-
}
|
| 177 |
-
|
| 178 |
-
.plotly_controls {
|
| 179 |
-
display: flex;
|
| 180 |
-
flex-wrap: wrap;
|
| 181 |
-
flex-direction: row;
|
| 182 |
-
justify-content: center;
|
| 183 |
-
align-items: flex-start;
|
| 184 |
-
gap: 30px;
|
| 185 |
-
}
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
.plotly_input_container {
|
| 189 |
-
display: flex;
|
| 190 |
-
align-items: center;
|
| 191 |
-
flex-direction: column;
|
| 192 |
-
gap: 10px;
|
| 193 |
-
}
|
| 194 |
-
|
| 195 |
-
/* Style for the select dropdown */
|
| 196 |
-
.plotly_input_container > select {
|
| 197 |
-
padding: 2px 4px;
|
| 198 |
-
/* border: 1px solid #ccc; */
|
| 199 |
-
line-height: 1.5em;
|
| 200 |
-
text-align: center;
|
| 201 |
-
border-radius: 4px;
|
| 202 |
-
font-size: 12px;
|
| 203 |
-
background-color: var(--distill-gray-lightest);
|
| 204 |
-
outline: none;
|
| 205 |
-
}
|
| 206 |
-
|
| 207 |
-
/* Style for the range input */
|
| 208 |
-
|
| 209 |
-
.plotly_slider {
|
| 210 |
-
display: flex;
|
| 211 |
-
align-items: center;
|
| 212 |
-
gap: 10px;
|
| 213 |
-
}
|
| 214 |
-
|
| 215 |
-
.plotly_slider > input[type="range"] {
|
| 216 |
-
-webkit-appearance: none;
|
| 217 |
-
height: 2px;
|
| 218 |
-
background: var(--distill-gray-light);
|
| 219 |
-
border-radius: 5px;
|
| 220 |
-
outline: none;
|
| 221 |
-
}
|
| 222 |
-
|
| 223 |
-
.plotly_slider > span {
|
| 224 |
-
font-size: 14px;
|
| 225 |
-
line-height: 1.6em;
|
| 226 |
-
min-width: 16px;
|
| 227 |
-
}
|
| 228 |
-
|
| 229 |
-
.plotly_slider > input[type="range"]::-webkit-slider-thumb {
|
| 230 |
-
-webkit-appearance: none;
|
| 231 |
-
appearance: none;
|
| 232 |
-
width: 18px;
|
| 233 |
-
height: 18px;
|
| 234 |
-
border-radius: 50%;
|
| 235 |
-
background: var(--distill-blue);
|
| 236 |
-
cursor: pointer;
|
| 237 |
-
}
|
| 238 |
-
|
| 239 |
-
.plotly_slider > input[type="range"]::-moz-range-thumb {
|
| 240 |
-
width: 18px;
|
| 241 |
-
height: 18px;
|
| 242 |
-
border-radius: 50%;
|
| 243 |
-
background: var(--distill-blue);
|
| 244 |
-
cursor: pointer;
|
| 245 |
-
}
|
| 246 |
-
|
| 247 |
-
/* Style for the labels */
|
| 248 |
-
.plotly_input_container > label {
|
| 249 |
-
font-size: 14px;
|
| 250 |
-
font-weight: bold;
|
| 251 |
-
}
|
| 252 |
-
|
| 253 |
-
.main-plot-container {
|
| 254 |
-
margin-top: 21px;
|
| 255 |
-
margin-bottom: 35px;
|
| 256 |
-
}
|
| 257 |
-
|
| 258 |
-
.main-plot-container > figure {
|
| 259 |
-
display: block !important;
|
| 260 |
-
/* Let this be handled by graph-container */
|
| 261 |
-
margin-bottom: 0px;
|
| 262 |
-
margin-top: 0px;
|
| 263 |
-
}
|
| 264 |
-
.main-plot-container > div {
|
| 265 |
-
display: none !important;
|
| 266 |
-
}
|
| 267 |
-
|
| 268 |
-
|
| 269 |
-
@media (min-width: 768px) {
|
| 270 |
-
.main-plot-container > figure {
|
| 271 |
-
display: none !important;
|
| 272 |
-
}
|
| 273 |
-
.main-plot-container > div {
|
| 274 |
-
display: flex !important;
|
| 275 |
-
}
|
| 276 |
-
}
|
| 277 |
-
|
| 278 |
-
d-byline .byline {
|
| 279 |
-
grid-template-columns: 1fr;
|
| 280 |
-
grid-column: text;
|
| 281 |
-
font-size: 0.9rem;
|
| 282 |
-
line-height: 1.8em;
|
| 283 |
-
}
|
| 284 |
-
|
| 285 |
-
@media (min-width: 768px) {
|
| 286 |
-
d-byline .byline {
|
| 287 |
-
grid-template-columns: 5fr 1fr 1fr;
|
| 288 |
-
}
|
| 289 |
-
}
|
| 290 |
-
|
| 291 |
-
#title-plot {
|
| 292 |
-
margin-top: 0px;
|
| 293 |
-
margin-bottom: 0px;
|
| 294 |
-
}
|
| 295 |
-
|
| 296 |
-
d-contents > nav a.active {
|
| 297 |
-
text-decoration: underline;
|
| 298 |
-
}
|
| 299 |
-
|
| 300 |
-
@media (max-width: 1199px) {
|
| 301 |
-
d-contents {
|
| 302 |
-
display: none;
|
| 303 |
-
background: white;
|
| 304 |
-
justify-self: start;
|
| 305 |
-
align-self: start;
|
| 306 |
-
padding-bottom: 0.5em;
|
| 307 |
-
margin-bottom: 1em;
|
| 308 |
-
padding-left: 0.25em;
|
| 309 |
-
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
| 310 |
-
border-bottom-width: 1px;
|
| 311 |
-
border-bottom-style: solid;
|
| 312 |
-
border-bottom-color: rgba(0, 0, 0, 0.1);
|
| 313 |
-
overflow-y: scroll;
|
| 314 |
-
height: calc(100vh - 40px);
|
| 315 |
-
scrollbar-width: none;
|
| 316 |
-
z-index: -100;
|
| 317 |
-
}
|
| 318 |
-
}
|
| 319 |
-
|
| 320 |
-
d-contents a:hover {
|
| 321 |
-
border-bottom: none;
|
| 322 |
-
}
|
| 323 |
-
|
| 324 |
-
toc-title {
|
| 325 |
-
font-weight: bold;
|
| 326 |
-
font-size: 1.2em;
|
| 327 |
-
color: #333;
|
| 328 |
-
}
|
| 329 |
-
|
| 330 |
-
toggle-icon {
|
| 331 |
-
transition: transform 0.3s;
|
| 332 |
-
}
|
| 333 |
-
|
| 334 |
-
toggle-icon.collapsed {
|
| 335 |
-
transform: rotate(90deg);
|
| 336 |
-
}
|
| 337 |
-
|
| 338 |
-
.toc-content {
|
| 339 |
-
margin-top: 15px;
|
| 340 |
-
overflow: hidden;
|
| 341 |
-
/* max-height: 1000px; */
|
| 342 |
-
transition: max-height 0.3s ease-out;
|
| 343 |
-
}
|
| 344 |
-
|
| 345 |
-
.toc-content.collapsed {
|
| 346 |
-
max-height: 0;
|
| 347 |
-
margin-top: 0;
|
| 348 |
-
}
|
| 349 |
-
|
| 350 |
-
@media (min-width: 1200px) {
|
| 351 |
-
d-article {
|
| 352 |
-
/* Ensure d-article does not prevent sticky positioning */
|
| 353 |
-
overflow: visible;
|
| 354 |
-
}
|
| 355 |
-
|
| 356 |
-
d-contents {
|
| 357 |
-
align-self: start;
|
| 358 |
-
background: white;
|
| 359 |
-
grid-column-start: 1 !important;
|
| 360 |
-
grid-column-end: 4 !important;
|
| 361 |
-
grid-row: auto / span 6;
|
| 362 |
-
justify-self: end;
|
| 363 |
-
margin-top: 0em;
|
| 364 |
-
padding-right: 3em;
|
| 365 |
-
padding-left: 2em;
|
| 366 |
-
/* border-right: 1px solid rgba(0, 0, 0, 0.1);
|
| 367 |
-
border-right-width: 1px;
|
| 368 |
-
border-right-style: solid;
|
| 369 |
-
border-right-color: rgba(0, 0, 0, 0.1); */
|
| 370 |
-
position: -webkit-sticky; /* For Safari */
|
| 371 |
-
position: sticky;
|
| 372 |
-
top: 10px; /* Adjust this value if needed */
|
| 373 |
-
overflow-y: auto;
|
| 374 |
-
height: calc(100vh - 40px);
|
| 375 |
-
scrollbar-width: none;
|
| 376 |
-
transition: max-height 0.3s ease-out;
|
| 377 |
-
z-index: -100;
|
| 378 |
-
}
|
| 379 |
-
}
|
| 380 |
-
|
| 381 |
-
d-contents nav h3 {
|
| 382 |
-
margin-top: 0;
|
| 383 |
-
margin-bottom: 1em;
|
| 384 |
-
}
|
| 385 |
-
|
| 386 |
-
d-contents nav div div {
|
| 387 |
-
color: rgba(0, 0, 0, 0.8);
|
| 388 |
-
font-weight: bold;
|
| 389 |
-
}
|
| 390 |
-
|
| 391 |
-
d-contents nav a {
|
| 392 |
-
color: rgba(0, 0, 0, 0.8);
|
| 393 |
-
border-bottom: none;
|
| 394 |
-
text-decoration: none;
|
| 395 |
-
}
|
| 396 |
-
|
| 397 |
-
d-contents li {
|
| 398 |
-
list-style-type: none;
|
| 399 |
-
}
|
| 400 |
-
|
| 401 |
-
d-contents ul, d-article d-contents ul {
|
| 402 |
-
padding-left: 1em;
|
| 403 |
-
}
|
| 404 |
-
|
| 405 |
-
d-contents nav ul li {
|
| 406 |
-
margin-bottom: .25em;
|
| 407 |
-
}
|
| 408 |
-
|
| 409 |
-
d-contents nav a:hover {
|
| 410 |
-
text-decoration: underline solid rgba(0, 0, 0, 0.6);
|
| 411 |
-
}
|
| 412 |
-
|
| 413 |
-
d-contents nav ul {
|
| 414 |
-
margin-top: 0;
|
| 415 |
-
margin-bottom: 6px;
|
| 416 |
-
}
|
| 417 |
-
|
| 418 |
-
|
| 419 |
-
d-contents nav > div {
|
| 420 |
-
display: block;
|
| 421 |
-
outline: none;
|
| 422 |
-
margin-bottom: 0.5em;
|
| 423 |
-
}
|
| 424 |
-
|
| 425 |
-
d-contents nav > div > a {
|
| 426 |
-
font-size: 13px;
|
| 427 |
-
font-weight: 600;
|
| 428 |
-
}
|
| 429 |
-
|
| 430 |
-
d-article aside {
|
| 431 |
-
margin-bottom: 1em;
|
| 432 |
-
}
|
| 433 |
-
|
| 434 |
-
d-article img {
|
| 435 |
-
max-width: 100%;
|
| 436 |
-
}
|
| 437 |
-
|
| 438 |
-
@media (min-width: 768px) {
|
| 439 |
-
d-article aside {
|
| 440 |
-
margin-bottom: 0;
|
| 441 |
-
}
|
| 442 |
-
}
|
| 443 |
-
|
| 444 |
-
d-contents nav > div > a:hover,
|
| 445 |
-
d-contents nav > ul > li > a:hover {
|
| 446 |
-
text-decoration: none;
|
| 447 |
-
}
|
| 448 |
-
|
| 449 |
-
.note-box {
|
| 450 |
-
background-color: #f6f8fa;
|
| 451 |
-
border-left: 4px solid #444444;
|
| 452 |
-
padding: 1rem;
|
| 453 |
-
margin: 1rem 0; /* Keep this modest margin */
|
| 454 |
-
border-radius: 6px;
|
| 455 |
-
/* Add this to ensure the box only takes up needed space */
|
| 456 |
-
display: inline-block;
|
| 457 |
-
}
|
| 458 |
-
|
| 459 |
-
.note-box-title {
|
| 460 |
-
margin: 0;
|
| 461 |
-
color: #444444;
|
| 462 |
-
font-weight: 600;
|
| 463 |
-
font-size: 1em;
|
| 464 |
-
}
|
| 465 |
-
|
| 466 |
-
.note-box-content {
|
| 467 |
-
margin-top: 0.5rem;
|
| 468 |
-
margin-bottom: 0; /* Ensure no bottom margin */
|
| 469 |
-
color: #24292f;
|
| 470 |
-
font-size: 0.9em;
|
| 471 |
-
line-height: 1.5em;
|
| 472 |
-
}
|
| 473 |
-
|
| 474 |
-
/* For dark mode support */
|
| 475 |
-
@media (prefers-color-scheme: dark) {
|
| 476 |
-
.note-box {
|
| 477 |
-
background-color: #1c1c1c;
|
| 478 |
-
border-left-color: #888888;
|
| 479 |
-
}
|
| 480 |
-
.note-box-title {
|
| 481 |
-
color: #888888;
|
| 482 |
-
}
|
| 483 |
-
.note-box-content {
|
| 484 |
-
color: #d4d4d4;
|
| 485 |
-
}
|
| 486 |
-
}
|
| 487 |
-
|
| 488 |
-
d-article {
|
| 489 |
-
font-size: 1.0em;
|
| 490 |
-
}
|
| 491 |
-
|
| 492 |
-
.figure-legend {
|
| 493 |
-
font-size: 0.9em;
|
| 494 |
-
font-style: italic;
|
| 495 |
-
color: var(--distill-gray);
|
| 496 |
-
line-height: 1.5em;
|
| 497 |
-
}
|
| 498 |
-
|
| 499 |
-
d-code {
|
| 500 |
-
font-size: 12px;
|
| 501 |
-
}
|
| 502 |
-
|
| 503 |
-
.large-image-background {
|
| 504 |
-
width: 100vw;
|
| 505 |
-
padding-top: 10px;
|
| 506 |
-
padding-bottom: 10px;
|
| 507 |
-
margin-left: calc(-50vw + 50%);
|
| 508 |
-
margin-right: calc(-50vw + 50%);
|
| 509 |
-
background: white;
|
| 510 |
-
height: fit-content; /* This will make it match the image height */
|
| 511 |
-
display: flex;
|
| 512 |
-
justify-content: center; /* This will center your image */
|
| 513 |
-
}
|
| 514 |
-
|
| 515 |
-
.large-image-background-transparent {
|
| 516 |
-
/* width: 100vw; */
|
| 517 |
-
padding-top: 10px;
|
| 518 |
-
padding-bottom: 10px;
|
| 519 |
-
/* margin-left: calc(-50vw + 50%); */
|
| 520 |
-
margin-left:-100px;
|
| 521 |
-
margin-right: -100px;
|
| 522 |
-
/* margin-right: calc(-50vw + 50%); */
|
| 523 |
-
/* background: white; */
|
| 524 |
-
height: fit-content; /* This will make it match the image height */
|
| 525 |
-
display: flex;
|
| 526 |
-
justify-content: center; /* This will center your image */
|
| 527 |
-
}
|
| 528 |
-
|
| 529 |
-
.boxed-image {
|
| 530 |
-
padding: 0.5rem;
|
| 531 |
-
background: white;
|
| 532 |
-
border-radius: 12px;
|
| 533 |
-
border: 1px solid #e5e7eb;
|
| 534 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 535 |
-
}
|
| 536 |
-
|
| 537 |
-
d-article li {
|
| 538 |
-
margin-bottom: 0.0em;
|
| 539 |
-
}
|
| 540 |
-
|
| 541 |
-
d-article ul ul {
|
| 542 |
-
margin-bottom: 0.0em;
|
| 543 |
-
}
|
| 544 |
-
|
| 545 |
-
d-article ol ol {
|
| 546 |
-
margin-bottom: 0.0em;
|
| 547 |
-
}
|
| 548 |
-
|
| 549 |
-
d-article hr {
|
| 550 |
-
grid-column: text;
|
| 551 |
-
}
|
| 552 |
-
|
| 553 |
-
/* Memory visualization */
|
| 554 |
-
#graph-all {
|
| 555 |
-
min-width: 500px;
|
| 556 |
-
margin-right: 10px;
|
| 557 |
-
margin-bottom: 2rem;
|
| 558 |
-
padding: 0.5rem;
|
| 559 |
-
background: #f9fafb;
|
| 560 |
-
border-radius: 12px;
|
| 561 |
-
border: 1px solid #e5e7eb;
|
| 562 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 563 |
-
}
|
| 564 |
-
|
| 565 |
-
|
| 566 |
-
/* Main container styles */
|
| 567 |
-
#controls {
|
| 568 |
-
max-width: 1200px;
|
| 569 |
-
/* margin: 2rem auto; */
|
| 570 |
-
margin-bottom: 2rem;
|
| 571 |
-
margin-left: 10px;
|
| 572 |
-
padding: 0.6rem;
|
| 573 |
-
background: #f9fafb;
|
| 574 |
-
border-radius: 12px;
|
| 575 |
-
border: 1px solid #e5e7eb;
|
| 576 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 577 |
-
}
|
| 578 |
-
|
| 579 |
-
/* Grid layout */
|
| 580 |
-
#controls {
|
| 581 |
-
display: grid;
|
| 582 |
-
grid-template-columns: 1fr 1fr;
|
| 583 |
-
/* gap: 2rem; */
|
| 584 |
-
}
|
| 585 |
-
|
| 586 |
-
/* Cell styles */
|
| 587 |
-
.cell {
|
| 588 |
-
margin-bottom: 0.2rem;
|
| 589 |
-
}
|
| 590 |
-
|
| 591 |
-
/* Label styles */
|
| 592 |
-
label {
|
| 593 |
-
display: block;
|
| 594 |
-
/* margin-bottom: 0.5rem; */
|
| 595 |
-
font-size: 0.8rem;
|
| 596 |
-
font-weight: 500;
|
| 597 |
-
color: #374151;
|
| 598 |
-
}
|
| 599 |
-
|
| 600 |
-
/* Input container for range + number combination */
|
| 601 |
-
.input-container {
|
| 602 |
-
display: flex;
|
| 603 |
-
gap: 1rem;
|
| 604 |
-
align-items: center;
|
| 605 |
-
}
|
| 606 |
-
|
| 607 |
-
/* Range input styling */
|
| 608 |
-
input[type="range"] {
|
| 609 |
-
flex: 1;
|
| 610 |
-
height: 6px;
|
| 611 |
-
background: #e5e7eb;
|
| 612 |
-
border-radius: 3px;
|
| 613 |
-
appearance: none;
|
| 614 |
-
outline: none;
|
| 615 |
-
}
|
| 616 |
-
|
| 617 |
-
input[type="range"]::-webkit-slider-thumb {
|
| 618 |
-
appearance: none;
|
| 619 |
-
width: 16px;
|
| 620 |
-
height: 16px;
|
| 621 |
-
background: #3b82f6;
|
| 622 |
-
border-radius: 50%;
|
| 623 |
-
cursor: pointer;
|
| 624 |
-
transition: background 0.15s ease;
|
| 625 |
-
}
|
| 626 |
-
|
| 627 |
-
input[type="range"]::-webkit-slider-thumb:hover {
|
| 628 |
-
background: #2563eb;
|
| 629 |
-
}
|
| 630 |
-
|
| 631 |
-
/* Number input styling */
|
| 632 |
-
input[type="number"] {
|
| 633 |
-
width: 80px;
|
| 634 |
-
padding: 0.5rem;
|
| 635 |
-
border: 1px solid #e5e7eb;
|
| 636 |
-
border-radius: 6px;
|
| 637 |
-
font-size: 0.9rem;
|
| 638 |
-
color: #374151;
|
| 639 |
-
}
|
| 640 |
-
|
| 641 |
-
/* Select styling */
|
| 642 |
-
select {
|
| 643 |
-
width: 100%;
|
| 644 |
-
padding: 0.5rem;
|
| 645 |
-
border: 1px solid #e5e7eb;
|
| 646 |
-
border-radius: 6px;
|
| 647 |
-
background: white;
|
| 648 |
-
font-size: 0.9rem;
|
| 649 |
-
color: #374151;
|
| 650 |
-
cursor: pointer;
|
| 651 |
-
}
|
| 652 |
-
|
| 653 |
-
/* Checkbox styling */
|
| 654 |
-
input[type="checkbox"] {
|
| 655 |
-
width: 1.2rem;
|
| 656 |
-
height: 1.2rem;
|
| 657 |
-
margin-right: 0.5rem;
|
| 658 |
-
border: 2px solid #e5e7eb;
|
| 659 |
-
border-radius: 4px;
|
| 660 |
-
cursor: pointer;
|
| 661 |
-
}
|
| 662 |
-
|
| 663 |
-
/* Column specific styles */
|
| 664 |
-
.column-1 {
|
| 665 |
-
padding-right: 0.5rem;
|
| 666 |
-
}
|
| 667 |
-
|
| 668 |
-
.column-2 {
|
| 669 |
-
padding-left: 0.5rem;
|
| 670 |
-
}
|
| 671 |
-
|
| 672 |
-
/* Checkbox container */
|
| 673 |
-
.checkbox-container {
|
| 674 |
-
display: flex;
|
| 675 |
-
align-items: center;
|
| 676 |
-
margin-bottom: 1rem;
|
| 677 |
-
}
|
| 678 |
-
|
| 679 |
-
/* Memory visualization styles */
|
| 680 |
-
.memory-block {
|
| 681 |
-
background: #fff;
|
| 682 |
-
border-radius: 8px;
|
| 683 |
-
padding: 1rem;
|
| 684 |
-
margin-bottom: 1rem;
|
| 685 |
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
| 686 |
-
}
|
| 687 |
-
|
| 688 |
-
.memory-title {
|
| 689 |
-
font-size: 1.1rem;
|
| 690 |
-
font-weight: 500;
|
| 691 |
-
color: #374151;
|
| 692 |
-
margin-bottom: 0.5rem;
|
| 693 |
-
}
|
| 694 |
-
|
| 695 |
-
.memory-value {
|
| 696 |
-
font-size: 1.5rem;
|
| 697 |
-
font-weight: 600;
|
| 698 |
-
color: #3b82f6;
|
| 699 |
-
}
|
| 700 |
-
|
| 701 |
-
/* Responsive adjustments */
|
| 702 |
-
@media (max-width: 768px) {
|
| 703 |
-
#controls {
|
| 704 |
-
grid-template-columns: 1fr;
|
| 705 |
-
padding: 1rem;
|
| 706 |
-
}
|
| 707 |
-
|
| 708 |
-
.column-1, .column-2 {
|
| 709 |
-
padding: 0;
|
| 710 |
-
}
|
| 711 |
-
}
|
| 712 |
-
|
| 713 |
-
/* Hover states and transitions */
|
| 714 |
-
input:hover, select:hover {
|
| 715 |
-
border-color: #3b82f6;
|
| 716 |
-
}
|
| 717 |
-
|
| 718 |
-
input:focus, select:focus {
|
| 719 |
-
border-color: #2563eb;
|
| 720 |
-
outline: none;
|
| 721 |
-
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
|
| 722 |
-
}
|
| 723 |
-
|
| 724 |
-
/* Add smooth transitions */
|
| 725 |
-
input, select, button {
|
| 726 |
-
transition: all 0.15s ease;
|
| 727 |
-
}
|
| 728 |
-
|
| 729 |
-
/* Preset dropdown special styling */
|
| 730 |
-
select[name="presets"] {
|
| 731 |
-
background-color: #f3f4f6;
|
| 732 |
-
font-weight: 500;
|
| 733 |
-
}
|
| 734 |
-
|
| 735 |
-
/* Memory graph enhancements */
|
| 736 |
-
.activation-memory {
|
| 737 |
-
background: #dbeafe;
|
| 738 |
-
padding: 1rem;
|
| 739 |
-
border-radius: 8px;
|
| 740 |
-
margin-bottom: 1rem;
|
| 741 |
-
}
|
| 742 |
-
|
| 743 |
-
.gradient-memory {
|
| 744 |
-
background: #ede9fe;
|
| 745 |
-
padding: 1rem;
|
| 746 |
-
border-radius: 8px;
|
| 747 |
-
}
|
| 748 |
-
|
| 749 |
-
.order-button-second {
|
| 750 |
-
background: linear-gradient(135deg, #6DB4C4, #D4A5B8);
|
| 751 |
-
color: white;
|
| 752 |
-
font-size: 18px;
|
| 753 |
-
font-weight: 600;
|
| 754 |
-
padding: 20px 20px;
|
| 755 |
-
border: none;
|
| 756 |
-
border-radius: 12px;
|
| 757 |
-
cursor: pointer;
|
| 758 |
-
text-transform: uppercase;
|
| 759 |
-
letter-spacing: 1px;
|
| 760 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
| 761 |
-
transition: all 0.3s ease;
|
| 762 |
-
position: relative;
|
| 763 |
-
overflow: hidden;
|
| 764 |
-
}
|
| 765 |
-
.order-button-second:hover {
|
| 766 |
-
transform: translateY(-2px);
|
| 767 |
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
|
| 768 |
-
}
|
| 769 |
-
|
| 770 |
-
.order-button:active {
|
| 771 |
-
transform: translateY(0);
|
| 772 |
-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
| 773 |
-
}
|
| 774 |
-
|
| 775 |
-
.order-button-second::before {
|
| 776 |
-
content: '';
|
| 777 |
-
position: absolute;
|
| 778 |
-
top: 0;
|
| 779 |
-
left: -100%;
|
| 780 |
-
width: 100%;
|
| 781 |
-
height: 100%;
|
| 782 |
-
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));
|
| 783 |
-
transition: left 0.5s ease;
|
| 784 |
-
}
|
| 785 |
-
|
| 786 |
-
.order-button-second:hover::before {
|
| 787 |
-
left: 100%;
|
| 788 |
-
}
|
| 789 |
-
|
| 790 |
-
.order-button {
|
| 791 |
-
background: linear-gradient(135deg, #6DB4C4, #D4A5B8);
|
| 792 |
-
color: white;
|
| 793 |
-
font-size: 18px;
|
| 794 |
-
font-weight: 600;
|
| 795 |
-
padding: 16px 32px;
|
| 796 |
-
border: none;
|
| 797 |
-
border-radius: 12px;
|
| 798 |
-
cursor: pointer;
|
| 799 |
-
text-transform: uppercase;
|
| 800 |
-
letter-spacing: 1px;
|
| 801 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
| 802 |
-
transition: all 0.3s ease;
|
| 803 |
-
position: relative;
|
| 804 |
-
overflow: hidden;
|
| 805 |
-
}
|
| 806 |
-
|
| 807 |
-
.order-button:hover {
|
| 808 |
-
transform: translateY(-2px);
|
| 809 |
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
|
| 810 |
-
}
|
| 811 |
-
|
| 812 |
-
.order-button:active {
|
| 813 |
-
transform: translateY(0);
|
| 814 |
-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
| 815 |
-
}
|
| 816 |
-
|
| 817 |
-
.order-button::before {
|
| 818 |
-
content: '';
|
| 819 |
-
position: absolute;
|
| 820 |
-
top: 0;
|
| 821 |
-
left: -100%;
|
| 822 |
-
width: 100%;
|
| 823 |
-
height: 100%;
|
| 824 |
-
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));
|
| 825 |
-
transition: left 0.5s ease;
|
| 826 |
-
}
|
| 827 |
-
|
| 828 |
-
.order-button:hover::before {
|
| 829 |
-
left: 100%;
|
| 830 |
-
}
|
| 831 |
-
.order-button-container-second {
|
| 832 |
-
/* display: flex; */
|
| 833 |
-
justify-content: center;
|
| 834 |
-
margin: 0px 0;
|
| 835 |
-
}
|
| 836 |
-
|
| 837 |
-
.order-button-container {
|
| 838 |
-
display: flex;
|
| 839 |
-
justify-content: center;
|
| 840 |
-
margin: 0px 0 40px 0;
|
| 841 |
-
}
|
| 842 |
-
|
| 843 |
-
d-article img {
|
| 844 |
-
width: 100%!important;
|
| 845 |
-
}
|
| 846 |
-
|
| 847 |
-
|
| 848 |
-
iframe, .js-plotly-plot {
|
| 849 |
-
width: 100%!important;
|
| 850 |
-
margin-bottom: 20px;
|
| 851 |
-
}
|
| 852 |
-
|
| 853 |
-
.modebar-container {
|
| 854 |
-
display: none;
|
| 855 |
-
}
|
| 856 |
-
|
| 857 |
-
#graph-container {
|
| 858 |
-
display: grid; grid-template-columns: 1fr 1fr; align-items: center;
|
| 859 |
-
}
|
| 860 |
-
|
| 861 |
-
@media (max-width: 768px) {
|
| 862 |
-
#graph-container {
|
| 863 |
-
grid-template-columns: 1fr;
|
| 864 |
-
}
|
| 865 |
-
}
|
| 866 |
-
|
| 867 |
-
@media (max-width: 1024px) {
|
| 868 |
-
#graph-container {
|
| 869 |
-
grid-template-columns: 1fr;
|
| 870 |
-
}
|
| 871 |
-
#graph-all {
|
| 872 |
-
margin-right: 0px;
|
| 873 |
-
}
|
| 874 |
-
#controls {
|
| 875 |
-
margin-left: 0px;
|
| 876 |
-
}
|
| 877 |
-
}
|
| 878 |
-
|
| 879 |
-
.main-plot-container svg {
|
| 880 |
-
background: transparent !important;
|
| 881 |
-
}
|
| 882 |
-
|
| 883 |
-
.large-image-background-transparent {
|
| 884 |
-
margin-left: 0px;
|
| 885 |
-
margin-right: 0px;
|
| 886 |
-
}
|
| 887 |
-
|
| 888 |
-
/* Import transformers-specific styles */`, "",{"version":3,"sources":["webpack://./src/style.css"],"names":[],"mappings":"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","sourcesContent":["/* style.css - Transformers Playthrough */\n\n/* Import ultrascale-playbook base styles and add transformers-specific styling */\n/* Define colors */\n:root {\n --distill-gray: rgb(107, 114, 128);\n --distill-gray-light: rgb(185, 185, 185);\n --distill-gray-lighter: rgb(228, 228, 228);\n --distill-gray-lightest: rgb(245, 245, 245);\n --distill-blue: #007BFF;\n}\n\n/* Container for the controls */\n[id^=\"plot-\"] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 15px; /* Adjust the gap between controls as needed */\n}\n[id^=\"plot-\"] figure {\n margin-bottom: 0px;\n margin-top: 0px;\n padding: 0px;\n}\n.plotly_caption {\n font-style: italic;\n margin-top: 10px;\n}\n\n.plotly_controls {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: flex-start;\n gap: 30px;\n}\n\n\n.plotly_input_container {\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: 10px;\n}\n\n/* Style for the select dropdown */\n.plotly_input_container > select {\n padding: 2px 4px;\n /* border: 1px solid #ccc; */\n line-height: 1.5em;\n text-align: center;\n border-radius: 4px;\n font-size: 12px;\n background-color: var(--distill-gray-lightest);\n outline: none;\n}\n\n/* Style for the range input */\n\n.plotly_slider {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.plotly_slider > input[type=\"range\"] {\n -webkit-appearance: none;\n height: 2px;\n background: var(--distill-gray-light);\n border-radius: 5px;\n outline: none;\n}\n\n.plotly_slider > span {\n font-size: 14px;\n line-height: 1.6em;\n min-width: 16px;\n}\n\n.plotly_slider > input[type=\"range\"]::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--distill-blue);\n cursor: pointer;\n}\n\n.plotly_slider > input[type=\"range\"]::-moz-range-thumb {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--distill-blue);\n cursor: pointer;\n}\n\n/* Style for the labels */\n.plotly_input_container > label {\n font-size: 14px;\n font-weight: bold;\n}\n\n.main-plot-container {\n margin-top: 21px;\n margin-bottom: 35px;\n}\n\n.main-plot-container > figure {\n display: block !important;\n /* Let this be handled by graph-container */\n margin-bottom: 0px;\n margin-top: 0px;\n}\n.main-plot-container > div {\n display: none !important;\n}\n\n\n@media (min-width: 768px) {\n .main-plot-container > figure {\n display: none !important;\n }\n .main-plot-container > div {\n display: flex !important;\n }\n}\n\nd-byline .byline {\n grid-template-columns: 1fr;\n grid-column: text;\n font-size: 0.9rem;\n line-height: 1.8em;\n}\n\n@media (min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 5fr 1fr 1fr;\n }\n}\n\n#title-plot {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n\nd-contents > nav a.active {\n text-decoration: underline;\n}\n\n@media (max-width: 1199px) {\n d-contents {\n display: none;\n background: white;\n justify-self: start;\n align-self: start;\n padding-bottom: 0.5em;\n margin-bottom: 1em;\n padding-left: 0.25em;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n border-bottom-width: 1px;\n border-bottom-style: solid;\n border-bottom-color: rgba(0, 0, 0, 0.1);\n overflow-y: scroll;\n height: calc(100vh - 40px);\n scrollbar-width: none;\n z-index: -100;\n }\n}\n\nd-contents a:hover {\n border-bottom: none;\n}\n\ntoc-title {\n font-weight: bold;\n font-size: 1.2em;\n color: #333;\n}\n\ntoggle-icon {\n transition: transform 0.3s;\n}\n\ntoggle-icon.collapsed {\n transform: rotate(90deg);\n}\n\n.toc-content {\n margin-top: 15px;\n overflow: hidden;\n /* max-height: 1000px; */\n transition: max-height 0.3s ease-out;\n}\n\n.toc-content.collapsed {\n max-height: 0;\n margin-top: 0;\n}\n\n@media (min-width: 1200px) {\n d-article {\n /* Ensure d-article does not prevent sticky positioning */\n overflow: visible;\n }\n\n d-contents {\n align-self: start;\n background: white;\n grid-column-start: 1 !important;\n grid-column-end: 4 !important;\n grid-row: auto / span 6;\n justify-self: end;\n margin-top: 0em;\n padding-right: 3em;\n padding-left: 2em;\n /* border-right: 1px solid rgba(0, 0, 0, 0.1);\n border-right-width: 1px;\n border-right-style: solid;\n border-right-color: rgba(0, 0, 0, 0.1); */\n position: -webkit-sticky; /* For Safari */\n position: sticky;\n top: 10px; /* Adjust this value if needed */\n overflow-y: auto;\n height: calc(100vh - 40px);\n scrollbar-width: none;\n transition: max-height 0.3s ease-out;\n z-index: -100;\n }\n}\n\nd-contents nav h3 {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nd-contents nav div div {\n color: rgba(0, 0, 0, 0.8);\n font-weight: bold;\n}\n\nd-contents nav a {\n color: rgba(0, 0, 0, 0.8);\n border-bottom: none;\n text-decoration: none;\n}\n\nd-contents li {\n list-style-type: none;\n}\n\nd-contents ul, d-article d-contents ul {\n padding-left: 1em;\n}\n\nd-contents nav ul li {\n margin-bottom: .25em;\n}\n\nd-contents nav a:hover {\n text-decoration: underline solid rgba(0, 0, 0, 0.6);\n}\n\nd-contents nav ul {\n margin-top: 0;\n margin-bottom: 6px;\n}\n\n\nd-contents nav > div {\n display: block;\n outline: none;\n margin-bottom: 0.5em;\n}\n\nd-contents nav > div > a {\n font-size: 13px;\n font-weight: 600;\n}\n\nd-article aside {\n margin-bottom: 1em;\n}\n\nd-article img {\n max-width: 100%;\n}\n\n@media (min-width: 768px) {\n d-article aside {\n margin-bottom: 0;\n }\n}\n\nd-contents nav > div > a:hover,\nd-contents nav > ul > li > a:hover {\n text-decoration: none;\n}\n\n.note-box {\n background-color: #f6f8fa;\n border-left: 4px solid #444444;\n padding: 1rem;\n margin: 1rem 0; /* Keep this modest margin */\n border-radius: 6px;\n /* Add this to ensure the box only takes up needed space */\n display: inline-block;\n}\n\n.note-box-title {\n margin: 0;\n color: #444444;\n font-weight: 600;\n font-size: 1em;\n}\n\n.note-box-content {\n margin-top: 0.5rem;\n margin-bottom: 0; /* Ensure no bottom margin */\n color: #24292f;\n font-size: 0.9em;\n line-height: 1.5em;\n}\n\n/* For dark mode support */\n@media (prefers-color-scheme: dark) {\n .note-box {\n background-color: #1c1c1c;\n border-left-color: #888888;\n }\n .note-box-title {\n color: #888888;\n }\n .note-box-content {\n color: #d4d4d4;\n }\n}\n\nd-article {\n font-size: 1.0em;\n}\n\n.figure-legend {\n font-size: 0.9em;\n font-style: italic;\n color: var(--distill-gray);\n line-height: 1.5em;\n}\n\nd-code {\n font-size: 12px;\n}\n\n.large-image-background {\n width: 100vw;\n padding-top: 10px;\n padding-bottom: 10px;\n margin-left: calc(-50vw + 50%);\n margin-right: calc(-50vw + 50%);\n background: white;\n height: fit-content; /* This will make it match the image height */\n display: flex;\n justify-content: center; /* This will center your image */\n}\n\n.large-image-background-transparent {\n /* width: 100vw; */\n padding-top: 10px;\n padding-bottom: 10px;\n /* margin-left: calc(-50vw + 50%); */\n margin-left:-100px;\n margin-right: -100px;\n /* margin-right: calc(-50vw + 50%); */\n /* background: white; */\n height: fit-content; /* This will make it match the image height */\n display: flex;\n justify-content: center; /* This will center your image */\n}\n\n.boxed-image {\n padding: 0.5rem;\n background: white;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n\nd-article li {\n margin-bottom: 0.0em;\n}\n\nd-article ul ul {\n margin-bottom: 0.0em;\n}\n\nd-article ol ol {\n margin-bottom: 0.0em;\n}\n\nd-article hr {\n grid-column: text;\n}\n\n/* Memory visualization */\n#graph-all {\n min-width: 500px;\n margin-right: 10px;\n margin-bottom: 2rem;\n padding: 0.5rem;\n background: #f9fafb;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n\n\n/* Main container styles */\n#controls {\n max-width: 1200px;\n /* margin: 2rem auto; */\n margin-bottom: 2rem;\n margin-left: 10px;\n padding: 0.6rem;\n background: #f9fafb;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n\n/* Grid layout */\n#controls {\n display: grid;\n grid-template-columns: 1fr 1fr;\n /* gap: 2rem; */\n}\n\n/* Cell styles */\n.cell {\n margin-bottom: 0.2rem;\n}\n\n/* Label styles */\nlabel {\n display: block;\n /* margin-bottom: 0.5rem; */\n font-size: 0.8rem;\n font-weight: 500;\n color: #374151;\n}\n\n/* Input container for range + number combination */\n.input-container {\n display: flex;\n gap: 1rem;\n align-items: center;\n}\n\n/* Range input styling */\ninput[type=\"range\"] {\n flex: 1;\n height: 6px;\n background: #e5e7eb;\n border-radius: 3px;\n appearance: none;\n outline: none;\n}\n\ninput[type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n width: 16px;\n height: 16px;\n background: #3b82f6;\n border-radius: 50%;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\ninput[type=\"range\"]::-webkit-slider-thumb:hover {\n background: #2563eb;\n}\n\n/* Number input styling */\ninput[type=\"number\"] {\n width: 80px;\n padding: 0.5rem;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 0.9rem;\n color: #374151;\n}\n\n/* Select styling */\nselect {\n width: 100%;\n padding: 0.5rem;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n background: white;\n font-size: 0.9rem;\n color: #374151;\n cursor: pointer;\n}\n\n/* Checkbox styling */\ninput[type=\"checkbox\"] {\n width: 1.2rem;\n height: 1.2rem;\n margin-right: 0.5rem;\n border: 2px solid #e5e7eb;\n border-radius: 4px;\n cursor: pointer;\n}\n\n/* Column specific styles */\n.column-1 {\n padding-right: 0.5rem;\n}\n\n.column-2 {\n padding-left: 0.5rem;\n}\n\n/* Checkbox container */\n.checkbox-container {\n display: flex;\n align-items: center;\n margin-bottom: 1rem;\n}\n\n/* Memory visualization styles */\n.memory-block {\n background: #fff;\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n}\n\n.memory-title {\n font-size: 1.1rem;\n font-weight: 500;\n color: #374151;\n margin-bottom: 0.5rem;\n}\n\n.memory-value {\n font-size: 1.5rem;\n font-weight: 600;\n color: #3b82f6;\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n #controls {\n grid-template-columns: 1fr;\n padding: 1rem;\n }\n\n .column-1, .column-2 {\n padding: 0;\n }\n}\n\n/* Hover states and transitions */\ninput:hover, select:hover {\n border-color: #3b82f6;\n}\n\ninput:focus, select:focus {\n border-color: #2563eb;\n outline: none;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n}\n\n/* Add smooth transitions */\ninput, select, button {\n transition: all 0.15s ease;\n}\n\n/* Preset dropdown special styling */\nselect[name=\"presets\"] {\n background-color: #f3f4f6;\n font-weight: 500;\n}\n\n/* Memory graph enhancements */\n.activation-memory {\n background: #dbeafe;\n padding: 1rem;\n border-radius: 8px;\n margin-bottom: 1rem;\n}\n\n.gradient-memory {\n background: #ede9fe;\n padding: 1rem;\n border-radius: 8px;\n}\n\n.order-button-second {\n background: linear-gradient(135deg, #6DB4C4, #D4A5B8);\n color: white;\n font-size: 18px;\n font-weight: 600;\n padding: 20px 20px;\n border: none;\n border-radius: 12px;\n cursor: pointer;\n text-transform: uppercase;\n letter-spacing: 1px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);\n transition: all 0.3s ease;\n position: relative;\n overflow: hidden;\n }\n.order-button-second:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);\n}\n\n.order-button:active {\n transform: translateY(0);\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n}\n\n.order-button-second::before {\n content: '';\n position: absolute;\n top: 0;\n left: -100%;\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));\n transition: left 0.5s ease;\n}\n\n.order-button-second:hover::before {\n left: 100%;\n}\n\n.order-button {\n background: linear-gradient(135deg, #6DB4C4, #D4A5B8);\n color: white;\n font-size: 18px;\n font-weight: 600;\n padding: 16px 32px;\n border: none;\n border-radius: 12px;\n cursor: pointer;\n text-transform: uppercase;\n letter-spacing: 1px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);\n transition: all 0.3s ease;\n position: relative;\n overflow: hidden;\n }\n\n.order-button:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);\n}\n\n.order-button:active {\n transform: translateY(0);\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n}\n\n.order-button::before {\n content: '';\n position: absolute;\n top: 0;\n left: -100%;\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));\n transition: left 0.5s ease;\n}\n\n.order-button:hover::before {\n left: 100%;\n}\n.order-button-container-second {\n /* display: flex; */\n justify-content: center;\n margin: 0px 0;\n}\n\n.order-button-container {\n display: flex;\n justify-content: center;\n margin: 0px 0 40px 0;\n}\n\nd-article img {\n width: 100%!important;\n}\n\n\niframe, .js-plotly-plot {\n width: 100%!important;\n margin-bottom: 20px;\n}\n\n.modebar-container {\n display: none;\n}\n\n#graph-container {\n display: grid; grid-template-columns: 1fr 1fr; align-items: center;\n}\n\n@media (max-width: 768px) {\n #graph-container {\n grid-template-columns: 1fr;\n }\n}\n\n@media (max-width: 1024px) {\n #graph-container {\n grid-template-columns: 1fr;\n }\n #graph-all {\n margin-right: 0px;\n }\n #controls {\n margin-left: 0px;\n }\n}\n\n.main-plot-container svg {\n background: transparent !important;\n}\n\n.large-image-background-transparent {\n margin-left: 0px;\n margin-right: 0px;\n}\n\n/* Import transformers-specific styles */\n@import url('./transformers-custom.css');"],"sourceRoot":""}]);
|
| 889 |
-
// Exports
|
| 890 |
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
| 891 |
-
|
| 892 |
-
|
| 893 |
-
/***/ }),
|
| 894 |
-
|
| 895 |
-
/***/ 314:
|
| 896 |
-
/***/ ((module) => {
|
| 897 |
-
|
| 898 |
-
|
| 899 |
-
|
| 900 |
-
/*
|
| 901 |
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
| 902 |
-
Author Tobias Koppers @sokra
|
| 903 |
-
*/
|
| 904 |
-
module.exports = function (cssWithMappingToString) {
|
| 905 |
-
var list = [];
|
| 906 |
-
|
| 907 |
-
// return the list of modules as css string
|
| 908 |
-
list.toString = function toString() {
|
| 909 |
-
return this.map(function (item) {
|
| 910 |
-
var content = "";
|
| 911 |
-
var needLayer = typeof item[5] !== "undefined";
|
| 912 |
-
if (item[4]) {
|
| 913 |
-
content += "@supports (".concat(item[4], ") {");
|
| 914 |
-
}
|
| 915 |
-
if (item[2]) {
|
| 916 |
-
content += "@media ".concat(item[2], " {");
|
| 917 |
-
}
|
| 918 |
-
if (needLayer) {
|
| 919 |
-
content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
|
| 920 |
-
}
|
| 921 |
-
content += cssWithMappingToString(item);
|
| 922 |
-
if (needLayer) {
|
| 923 |
-
content += "}";
|
| 924 |
-
}
|
| 925 |
-
if (item[2]) {
|
| 926 |
-
content += "}";
|
| 927 |
-
}
|
| 928 |
-
if (item[4]) {
|
| 929 |
-
content += "}";
|
| 930 |
-
}
|
| 931 |
-
return content;
|
| 932 |
-
}).join("");
|
| 933 |
-
};
|
| 934 |
-
|
| 935 |
-
// import a list of modules into the list
|
| 936 |
-
list.i = function i(modules, media, dedupe, supports, layer) {
|
| 937 |
-
if (typeof modules === "string") {
|
| 938 |
-
modules = [[null, modules, undefined]];
|
| 939 |
-
}
|
| 940 |
-
var alreadyImportedModules = {};
|
| 941 |
-
if (dedupe) {
|
| 942 |
-
for (var k = 0; k < this.length; k++) {
|
| 943 |
-
var id = this[k][0];
|
| 944 |
-
if (id != null) {
|
| 945 |
-
alreadyImportedModules[id] = true;
|
| 946 |
-
}
|
| 947 |
-
}
|
| 948 |
-
}
|
| 949 |
-
for (var _k = 0; _k < modules.length; _k++) {
|
| 950 |
-
var item = [].concat(modules[_k]);
|
| 951 |
-
if (dedupe && alreadyImportedModules[item[0]]) {
|
| 952 |
-
continue;
|
| 953 |
-
}
|
| 954 |
-
if (typeof layer !== "undefined") {
|
| 955 |
-
if (typeof item[5] === "undefined") {
|
| 956 |
-
item[5] = layer;
|
| 957 |
-
} else {
|
| 958 |
-
item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
|
| 959 |
-
item[5] = layer;
|
| 960 |
-
}
|
| 961 |
-
}
|
| 962 |
-
if (media) {
|
| 963 |
-
if (!item[2]) {
|
| 964 |
-
item[2] = media;
|
| 965 |
-
} else {
|
| 966 |
-
item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
|
| 967 |
-
item[2] = media;
|
| 968 |
-
}
|
| 969 |
-
}
|
| 970 |
-
if (supports) {
|
| 971 |
-
if (!item[4]) {
|
| 972 |
-
item[4] = "".concat(supports);
|
| 973 |
-
} else {
|
| 974 |
-
item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
|
| 975 |
-
item[4] = supports;
|
| 976 |
-
}
|
| 977 |
-
}
|
| 978 |
-
list.push(item);
|
| 979 |
-
}
|
| 980 |
-
};
|
| 981 |
-
return list;
|
| 982 |
-
};
|
| 983 |
-
|
| 984 |
-
/***/ }),
|
| 985 |
-
|
| 986 |
-
/***/ 354:
|
| 987 |
-
/***/ ((module) => {
|
| 988 |
-
|
| 989 |
-
|
| 990 |
-
|
| 991 |
-
module.exports = function (item) {
|
| 992 |
-
var content = item[1];
|
| 993 |
-
var cssMapping = item[3];
|
| 994 |
-
if (!cssMapping) {
|
| 995 |
-
return content;
|
| 996 |
-
}
|
| 997 |
-
if (typeof btoa === "function") {
|
| 998 |
-
var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
|
| 999 |
-
var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
|
| 1000 |
-
var sourceMapping = "/*# ".concat(data, " */");
|
| 1001 |
-
return [content].concat([sourceMapping]).join("\n");
|
| 1002 |
-
}
|
| 1003 |
-
return [content].join("\n");
|
| 1004 |
-
};
|
| 1005 |
-
|
| 1006 |
-
/***/ }),
|
| 1007 |
-
|
| 1008 |
-
/***/ 540:
|
| 1009 |
-
/***/ ((module) => {
|
| 1010 |
-
|
| 1011 |
-
|
| 1012 |
-
|
| 1013 |
-
/* istanbul ignore next */
|
| 1014 |
-
function insertStyleElement(options) {
|
| 1015 |
-
var element = document.createElement("style");
|
| 1016 |
-
options.setAttributes(element, options.attributes);
|
| 1017 |
-
options.insert(element, options.options);
|
| 1018 |
-
return element;
|
| 1019 |
-
}
|
| 1020 |
-
module.exports = insertStyleElement;
|
| 1021 |
-
|
| 1022 |
-
/***/ }),
|
| 1023 |
-
|
| 1024 |
-
/***/ 659:
|
| 1025 |
-
/***/ ((module) => {
|
| 1026 |
-
|
| 1027 |
-
|
| 1028 |
-
|
| 1029 |
-
var memo = {};
|
| 1030 |
-
|
| 1031 |
-
/* istanbul ignore next */
|
| 1032 |
-
function getTarget(target) {
|
| 1033 |
-
if (typeof memo[target] === "undefined") {
|
| 1034 |
-
var styleTarget = document.querySelector(target);
|
| 1035 |
-
|
| 1036 |
-
// Special case to return head of iframe instead of iframe itself
|
| 1037 |
-
if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
|
| 1038 |
-
try {
|
| 1039 |
-
// This will throw an exception if access to iframe is blocked
|
| 1040 |
-
// due to cross-origin restrictions
|
| 1041 |
-
styleTarget = styleTarget.contentDocument.head;
|
| 1042 |
-
} catch (e) {
|
| 1043 |
-
// istanbul ignore next
|
| 1044 |
-
styleTarget = null;
|
| 1045 |
-
}
|
| 1046 |
-
}
|
| 1047 |
-
memo[target] = styleTarget;
|
| 1048 |
-
}
|
| 1049 |
-
return memo[target];
|
| 1050 |
-
}
|
| 1051 |
-
|
| 1052 |
-
/* istanbul ignore next */
|
| 1053 |
-
function insertBySelector(insert, style) {
|
| 1054 |
-
var target = getTarget(insert);
|
| 1055 |
-
if (!target) {
|
| 1056 |
-
throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
|
| 1057 |
-
}
|
| 1058 |
-
target.appendChild(style);
|
| 1059 |
-
}
|
| 1060 |
-
module.exports = insertBySelector;
|
| 1061 |
-
|
| 1062 |
-
/***/ }),
|
| 1063 |
-
|
| 1064 |
-
/***/ 825:
|
| 1065 |
-
/***/ ((module) => {
|
| 1066 |
-
|
| 1067 |
-
|
| 1068 |
-
|
| 1069 |
-
/* istanbul ignore next */
|
| 1070 |
-
function apply(styleElement, options, obj) {
|
| 1071 |
-
var css = "";
|
| 1072 |
-
if (obj.supports) {
|
| 1073 |
-
css += "@supports (".concat(obj.supports, ") {");
|
| 1074 |
-
}
|
| 1075 |
-
if (obj.media) {
|
| 1076 |
-
css += "@media ".concat(obj.media, " {");
|
| 1077 |
-
}
|
| 1078 |
-
var needLayer = typeof obj.layer !== "undefined";
|
| 1079 |
-
if (needLayer) {
|
| 1080 |
-
css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
|
| 1081 |
-
}
|
| 1082 |
-
css += obj.css;
|
| 1083 |
-
if (needLayer) {
|
| 1084 |
-
css += "}";
|
| 1085 |
-
}
|
| 1086 |
-
if (obj.media) {
|
| 1087 |
-
css += "}";
|
| 1088 |
-
}
|
| 1089 |
-
if (obj.supports) {
|
| 1090 |
-
css += "}";
|
| 1091 |
-
}
|
| 1092 |
-
var sourceMap = obj.sourceMap;
|
| 1093 |
-
if (sourceMap && typeof btoa !== "undefined") {
|
| 1094 |
-
css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
|
| 1095 |
-
}
|
| 1096 |
-
|
| 1097 |
-
// For old IE
|
| 1098 |
-
/* istanbul ignore if */
|
| 1099 |
-
options.styleTagTransform(css, styleElement, options.options);
|
| 1100 |
-
}
|
| 1101 |
-
function removeStyleElement(styleElement) {
|
| 1102 |
-
// istanbul ignore if
|
| 1103 |
-
if (styleElement.parentNode === null) {
|
| 1104 |
-
return false;
|
| 1105 |
-
}
|
| 1106 |
-
styleElement.parentNode.removeChild(styleElement);
|
| 1107 |
-
}
|
| 1108 |
-
|
| 1109 |
-
/* istanbul ignore next */
|
| 1110 |
-
function domAPI(options) {
|
| 1111 |
-
if (typeof document === "undefined") {
|
| 1112 |
-
return {
|
| 1113 |
-
update: function update() {},
|
| 1114 |
-
remove: function remove() {}
|
| 1115 |
-
};
|
| 1116 |
-
}
|
| 1117 |
-
var styleElement = options.insertStyleElement(options);
|
| 1118 |
-
return {
|
| 1119 |
-
update: function update(obj) {
|
| 1120 |
-
apply(styleElement, options, obj);
|
| 1121 |
-
},
|
| 1122 |
-
remove: function remove() {
|
| 1123 |
-
removeStyleElement(styleElement);
|
| 1124 |
-
}
|
| 1125 |
-
};
|
| 1126 |
-
}
|
| 1127 |
-
module.exports = domAPI;
|
| 1128 |
-
|
| 1129 |
-
/***/ }),
|
| 1130 |
-
|
| 1131 |
-
/***/ 995:
|
| 1132 |
-
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
| 1133 |
-
|
| 1134 |
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
| 1135 |
-
/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
|
| 1136 |
-
/* harmony export */ });
|
| 1137 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);
|
| 1138 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
| 1139 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
|
| 1140 |
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
| 1141 |
-
// Imports
|
| 1142 |
-
|
| 1143 |
-
|
| 1144 |
-
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
| 1145 |
-
// Module
|
| 1146 |
-
___CSS_LOADER_EXPORT___.push([module.id, `/* Transformers-specific styling additions */
|
| 1147 |
-
|
| 1148 |
-
/* Code comparison layout */
|
| 1149 |
-
.code-compare {
|
| 1150 |
-
display: grid;
|
| 1151 |
-
grid-template-columns: 1fr 1fr;
|
| 1152 |
-
gap: 1.5rem;
|
| 1153 |
-
margin: 2rem 0;
|
| 1154 |
-
align-items: start;
|
| 1155 |
-
}
|
| 1156 |
-
|
| 1157 |
-
.code-compare .code-column {
|
| 1158 |
-
background: #ffffff;
|
| 1159 |
-
border: 1px solid #e2e8f0;
|
| 1160 |
-
border-radius: 8px;
|
| 1161 |
-
overflow: hidden;
|
| 1162 |
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
| 1163 |
-
}
|
| 1164 |
-
|
| 1165 |
-
.code-compare .code-header {
|
| 1166 |
-
background: #f8f9fa;
|
| 1167 |
-
padding: 0.75rem 1rem;
|
| 1168 |
-
font-weight: 600;
|
| 1169 |
-
color: #495057;
|
| 1170 |
-
border-bottom: 1px solid #e2e8f0;
|
| 1171 |
-
font-size: 0.9em;
|
| 1172 |
-
}
|
| 1173 |
-
|
| 1174 |
-
.code-compare pre {
|
| 1175 |
-
margin: 0;
|
| 1176 |
-
padding: 1rem;
|
| 1177 |
-
background: #ffffff;
|
| 1178 |
-
overflow-x: auto;
|
| 1179 |
-
font-size: 0.85em;
|
| 1180 |
-
line-height: 1.4;
|
| 1181 |
-
}
|
| 1182 |
-
|
| 1183 |
-
.code-compare pre code {
|
| 1184 |
-
color: #374151;
|
| 1185 |
-
}
|
| 1186 |
-
|
| 1187 |
-
/* Mobile responsiveness for code comparison */
|
| 1188 |
-
@media (max-width: 768px) {
|
| 1189 |
-
.code-compare {
|
| 1190 |
-
grid-template-columns: 1fr;
|
| 1191 |
-
gap: 1rem;
|
| 1192 |
-
}
|
| 1193 |
-
}
|
| 1194 |
-
|
| 1195 |
-
/* Tenet styling - special highlighting for design principles */
|
| 1196 |
-
.tenet-list {
|
| 1197 |
-
margin: 3rem 0;
|
| 1198 |
-
}
|
| 1199 |
-
|
| 1200 |
-
.tenet-list ol {
|
| 1201 |
-
counter-reset: tenet-counter -1; /* Start from 0 */
|
| 1202 |
-
list-style: none;
|
| 1203 |
-
padding-left: 0;
|
| 1204 |
-
display: flex;
|
| 1205 |
-
flex-direction: column;
|
| 1206 |
-
gap: 2rem;
|
| 1207 |
-
}
|
| 1208 |
-
|
| 1209 |
-
.tenet-list li.tenet {
|
| 1210 |
-
counter-increment: tenet-counter;
|
| 1211 |
-
background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
|
| 1212 |
-
border: 2px solid transparent;
|
| 1213 |
-
border-radius: 16px;
|
| 1214 |
-
padding: 2rem 2rem 2rem 4rem;
|
| 1215 |
-
margin: 0;
|
| 1216 |
-
position: relative;
|
| 1217 |
-
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08);
|
| 1218 |
-
transition: all 0.3s ease;
|
| 1219 |
-
cursor: pointer;
|
| 1220 |
-
}
|
| 1221 |
-
|
| 1222 |
-
.tenet-list li.tenet:hover {
|
| 1223 |
-
transform: translateY(-8px) scale(1.02);
|
| 1224 |
-
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);
|
| 1225 |
-
border-color: rgba(0, 123, 255, 0.5);
|
| 1226 |
-
background: linear-gradient(135deg, #ffffff 0%, #f0f8ff 100%);
|
| 1227 |
-
}
|
| 1228 |
-
|
| 1229 |
-
/* Colorful numbering system */
|
| 1230 |
-
.tenet-list li.tenet:nth-child(1):before { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); }
|
| 1231 |
-
.tenet-list li.tenet:nth-child(2):before { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); }
|
| 1232 |
-
.tenet-list li.tenet:nth-child(3):before { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); }
|
| 1233 |
-
.tenet-list li.tenet:nth-child(4):before { background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); }
|
| 1234 |
-
.tenet-list li.tenet:nth-child(5):before { background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); }
|
| 1235 |
-
.tenet-list li.tenet:nth-child(6):before { background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); }
|
| 1236 |
-
.tenet-list li.tenet:nth-child(7):before { background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%); }
|
| 1237 |
-
.tenet-list li.tenet:nth-child(8):before { background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%); }
|
| 1238 |
-
.tenet-list li.tenet:nth-child(9):before { background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%); }
|
| 1239 |
-
|
| 1240 |
-
.tenet-list li.tenet:before {
|
| 1241 |
-
content: counter(tenet-counter);
|
| 1242 |
-
position: absolute;
|
| 1243 |
-
top: -12px;
|
| 1244 |
-
left: -12px;
|
| 1245 |
-
color: white;
|
| 1246 |
-
width: 48px;
|
| 1247 |
-
height: 48px;
|
| 1248 |
-
border-radius: 50%;
|
| 1249 |
-
display: flex;
|
| 1250 |
-
align-items: center;
|
| 1251 |
-
justify-content: center;
|
| 1252 |
-
font-size: 1.2em;
|
| 1253 |
-
font-weight: bold;
|
| 1254 |
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
| 1255 |
-
border: 3px solid white;
|
| 1256 |
-
}
|
| 1257 |
-
|
| 1258 |
-
.tenet-list li.tenet strong {
|
| 1259 |
-
color: #1a202c;
|
| 1260 |
-
font-size: 1.1em;
|
| 1261 |
-
display: block;
|
| 1262 |
-
margin-bottom: 0.5rem;
|
| 1263 |
-
}
|
| 1264 |
-
|
| 1265 |
-
.tenet-list li.tenet em {
|
| 1266 |
-
color: #4a5568;
|
| 1267 |
-
font-size: 0.95em;
|
| 1268 |
-
font-style: italic;
|
| 1269 |
-
display: block;
|
| 1270 |
-
margin-top: 0.75rem;
|
| 1271 |
-
padding: 1rem;
|
| 1272 |
-
background: rgba(0, 0, 0, 0.03);
|
| 1273 |
-
border-radius: 8px;
|
| 1274 |
-
border-left: 3px solid #e2e8f0;
|
| 1275 |
-
}
|
| 1276 |
-
|
| 1277 |
-
.tenet-list li.tenet p {
|
| 1278 |
-
color: #2d3748;
|
| 1279 |
-
line-height: 1.6;
|
| 1280 |
-
margin: 0.5rem 0;
|
| 1281 |
-
}
|
| 1282 |
-
|
| 1283 |
-
/* Add a subtle pulse animation for the numbers */
|
| 1284 |
-
@keyframes pulse-glow {
|
| 1285 |
-
0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }
|
| 1286 |
-
50% { box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25); }
|
| 1287 |
-
100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }
|
| 1288 |
-
}
|
| 1289 |
-
|
| 1290 |
-
.tenet-list li.tenet:hover:before {
|
| 1291 |
-
animation: pulse-glow 2s ease-in-out infinite;
|
| 1292 |
-
}
|
| 1293 |
-
|
| 1294 |
-
/* Interactive component styling */
|
| 1295 |
-
.interactive-demo {
|
| 1296 |
-
border: 1px solid #e2e8f0;
|
| 1297 |
-
border-radius: 12px;
|
| 1298 |
-
background: #ffffff;
|
| 1299 |
-
margin: 2rem 0;
|
| 1300 |
-
overflow: hidden;
|
| 1301 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07);
|
| 1302 |
-
}
|
| 1303 |
-
|
| 1304 |
-
.interactive-demo .demo-header {
|
| 1305 |
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 1306 |
-
color: white;
|
| 1307 |
-
padding: 1rem 1.5rem;
|
| 1308 |
-
font-weight: 600;
|
| 1309 |
-
}
|
| 1310 |
-
|
| 1311 |
-
.interactive-demo .demo-content {
|
| 1312 |
-
padding: 1.5rem;
|
| 1313 |
-
}
|
| 1314 |
-
|
| 1315 |
-
.interactive-demo .demo-footer {
|
| 1316 |
-
background: #f8f9fa;
|
| 1317 |
-
padding: 1rem 1.5rem;
|
| 1318 |
-
border-top: 1px solid #e2e8f0;
|
| 1319 |
-
color: #6c757d;
|
| 1320 |
-
font-size: 0.9em;
|
| 1321 |
-
}
|
| 1322 |
-
|
| 1323 |
-
/* Button styling for interactive elements */
|
| 1324 |
-
.btn-primary {
|
| 1325 |
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 1326 |
-
border: none;
|
| 1327 |
-
color: white;
|
| 1328 |
-
padding: 0.75rem 1.5rem;
|
| 1329 |
-
border-radius: 6px;
|
| 1330 |
-
font-weight: 500;
|
| 1331 |
-
cursor: pointer;
|
| 1332 |
-
transition: transform 0.2s, box-shadow 0.2s;
|
| 1333 |
-
}
|
| 1334 |
-
|
| 1335 |
-
.btn-primary:hover {
|
| 1336 |
-
transform: translateY(-1px);
|
| 1337 |
-
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
|
| 1338 |
-
}
|
| 1339 |
-
|
| 1340 |
-
.btn-primary:disabled {
|
| 1341 |
-
opacity: 0.6;
|
| 1342 |
-
cursor: not-allowed;
|
| 1343 |
-
transform: none;
|
| 1344 |
-
box-shadow: none;
|
| 1345 |
-
}
|
| 1346 |
-
|
| 1347 |
-
/* Terminal styling */
|
| 1348 |
-
.terminal-container {
|
| 1349 |
-
background: #1a202c;
|
| 1350 |
-
border-radius: 8px;
|
| 1351 |
-
padding: 1rem;
|
| 1352 |
-
color: #e2e8f0;
|
| 1353 |
-
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
| 1354 |
-
font-size: 0.9em;
|
| 1355 |
-
}
|
| 1356 |
-
|
| 1357 |
-
.terminal-input {
|
| 1358 |
-
background: #2d3748;
|
| 1359 |
-
border: 1px solid #4a5568;
|
| 1360 |
-
color: #e2e8f0;
|
| 1361 |
-
padding: 0.5rem;
|
| 1362 |
-
border-radius: 4px;
|
| 1363 |
-
width: 100%;
|
| 1364 |
-
font-family: inherit;
|
| 1365 |
-
}
|
| 1366 |
-
|
| 1367 |
-
.terminal-output {
|
| 1368 |
-
background: #0a0e1a;
|
| 1369 |
-
padding: 1rem;
|
| 1370 |
-
border-radius: 4px;
|
| 1371 |
-
white-space: pre-wrap;
|
| 1372 |
-
word-break: break-all;
|
| 1373 |
-
min-height: 100px;
|
| 1374 |
-
max-height: 300px;
|
| 1375 |
-
overflow-y: auto;
|
| 1376 |
-
}
|
| 1377 |
-
|
| 1378 |
-
/* Attention visualization styling */
|
| 1379 |
-
.attention-matrix {
|
| 1380 |
-
font-family: monospace;
|
| 1381 |
-
font-size: 0.8em;
|
| 1382 |
-
border-collapse: collapse;
|
| 1383 |
-
margin: 1rem 0;
|
| 1384 |
-
}
|
| 1385 |
-
|
| 1386 |
-
.attention-matrix td {
|
| 1387 |
-
border: 1px solid #ddd;
|
| 1388 |
-
padding: 4px 8px;
|
| 1389 |
-
text-align: center;
|
| 1390 |
-
min-width: 50px;
|
| 1391 |
-
}
|
| 1392 |
-
|
| 1393 |
-
/* Memory chart styling */
|
| 1394 |
-
.memory-chart-container {
|
| 1395 |
-
background: #f8f9fa;
|
| 1396 |
-
border: 2px solid #e9ecef;
|
| 1397 |
-
border-radius: 8px;
|
| 1398 |
-
padding: 1rem;
|
| 1399 |
-
margin: 1rem 0;
|
| 1400 |
-
}
|
| 1401 |
-
|
| 1402 |
-
/* Image styling improvements */
|
| 1403 |
-
img {
|
| 1404 |
-
max-width: 100%;
|
| 1405 |
-
height: auto;
|
| 1406 |
-
border-radius: 8px;
|
| 1407 |
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
| 1408 |
-
margin: 1.5rem 0;
|
| 1409 |
-
}
|
| 1410 |
-
|
| 1411 |
-
/* Table of contents styling - Fixed positioning like ultrascale */
|
| 1412 |
-
@media (min-width: 1200px) {
|
| 1413 |
-
d-article {
|
| 1414 |
-
overflow: visible !important;
|
| 1415 |
-
}
|
| 1416 |
-
|
| 1417 |
-
d-contents {
|
| 1418 |
-
align-self: start !important;
|
| 1419 |
-
background: white !important;
|
| 1420 |
-
grid-column-start: 1 !important;
|
| 1421 |
-
grid-column-end: 4 !important;
|
| 1422 |
-
grid-row: auto / span 6 !important;
|
| 1423 |
-
justify-self: end !important;
|
| 1424 |
-
margin-top: 0em !important;
|
| 1425 |
-
padding-right: 3em !important;
|
| 1426 |
-
padding-left: 2em !important;
|
| 1427 |
-
position: -webkit-sticky !important; /* For Safari */
|
| 1428 |
-
position: sticky !important;
|
| 1429 |
-
top: 10px !important;
|
| 1430 |
-
overflow-y: auto !important;
|
| 1431 |
-
height: calc(100vh - 40px) !important;
|
| 1432 |
-
scrollbar-width: none !important;
|
| 1433 |
-
transition: max-height 0.3s ease-out !important;
|
| 1434 |
-
z-index: -100 !important;
|
| 1435 |
-
display: block !important;
|
| 1436 |
-
visibility: visible !important;
|
| 1437 |
-
}
|
| 1438 |
-
}
|
| 1439 |
-
|
| 1440 |
-
@media (max-width: 1199px) {
|
| 1441 |
-
d-contents {
|
| 1442 |
-
display: none !important;
|
| 1443 |
-
background: white !important;
|
| 1444 |
-
justify-self: start !important;
|
| 1445 |
-
align-self: start !important;
|
| 1446 |
-
padding-bottom: 0.5em !important;
|
| 1447 |
-
margin-bottom: 1em !important;
|
| 1448 |
-
padding-left: 0.25em !important;
|
| 1449 |
-
border-bottom: 1px solid rgba(0, 0, 0, 0.1) !important;
|
| 1450 |
-
overflow-y: scroll !important;
|
| 1451 |
-
height: calc(100vh - 40px) !important;
|
| 1452 |
-
scrollbar-width: none !important;
|
| 1453 |
-
z-index: -100 !important;
|
| 1454 |
-
}
|
| 1455 |
-
}
|
| 1456 |
-
|
| 1457 |
-
/* Force TOC to be visible and override distill defaults */
|
| 1458 |
-
d-contents {
|
| 1459 |
-
display: block !important;
|
| 1460 |
-
visibility: visible !important;
|
| 1461 |
-
opacity: 1 !important;
|
| 1462 |
-
}
|
| 1463 |
-
|
| 1464 |
-
/* TOC Navigation styling */
|
| 1465 |
-
d-contents .toc-header {
|
| 1466 |
-
margin-bottom: 1.5rem;
|
| 1467 |
-
border-bottom: 2px solid #007bff;
|
| 1468 |
-
padding-bottom: 0.5rem;
|
| 1469 |
-
}
|
| 1470 |
-
|
| 1471 |
-
d-contents .toc-title {
|
| 1472 |
-
font-weight: bold;
|
| 1473 |
-
font-size: 1.2em;
|
| 1474 |
-
color: #333;
|
| 1475 |
-
}
|
| 1476 |
-
|
| 1477 |
-
d-contents nav a {
|
| 1478 |
-
color: rgba(0, 0, 0, 0.7);
|
| 1479 |
-
text-decoration: none;
|
| 1480 |
-
border-bottom: none;
|
| 1481 |
-
display: block;
|
| 1482 |
-
padding: 0.3rem 0;
|
| 1483 |
-
font-size: 0.9em;
|
| 1484 |
-
line-height: 1.4;
|
| 1485 |
-
transition: color 0.2s ease;
|
| 1486 |
-
}
|
| 1487 |
-
|
| 1488 |
-
d-contents nav a:hover {
|
| 1489 |
-
color: #007bff;
|
| 1490 |
-
text-decoration: none;
|
| 1491 |
-
}
|
| 1492 |
-
|
| 1493 |
-
d-contents nav a.active {
|
| 1494 |
-
color: #007bff;
|
| 1495 |
-
font-weight: 600;
|
| 1496 |
-
}
|
| 1497 |
-
|
| 1498 |
-
d-contents nav div {
|
| 1499 |
-
margin-bottom: 0.2rem;
|
| 1500 |
-
}
|
| 1501 |
-
|
| 1502 |
-
/* Smooth scrollbar */
|
| 1503 |
-
d-contents {
|
| 1504 |
-
scrollbar-width: thin;
|
| 1505 |
-
scrollbar-color: rgba(0, 123, 255, 0.3) transparent;
|
| 1506 |
-
}
|
| 1507 |
-
|
| 1508 |
-
d-contents::-webkit-scrollbar {
|
| 1509 |
-
width: 6px;
|
| 1510 |
-
}
|
| 1511 |
-
|
| 1512 |
-
d-contents::-webkit-scrollbar-track {
|
| 1513 |
-
background: transparent;
|
| 1514 |
-
}
|
| 1515 |
-
|
| 1516 |
-
d-contents::-webkit-scrollbar-thumb {
|
| 1517 |
-
background: rgba(0, 123, 255, 0.3);
|
| 1518 |
-
border-radius: 3px;
|
| 1519 |
-
}
|
| 1520 |
-
|
| 1521 |
-
d-contents::-webkit-scrollbar-thumb:hover {
|
| 1522 |
-
background: rgba(0, 123, 255, 0.5);
|
| 1523 |
-
}
|
| 1524 |
-
|
| 1525 |
-
/* Custom tooltip styling for tenet links */
|
| 1526 |
-
d-contents nav a[title] {
|
| 1527 |
-
position: relative;
|
| 1528 |
-
cursor: help;
|
| 1529 |
-
}
|
| 1530 |
-
|
| 1531 |
-
d-contents nav a[title]:hover {
|
| 1532 |
-
color: #667eea;
|
| 1533 |
-
}
|
| 1534 |
-
|
| 1535 |
-
/* Enhanced tooltip using CSS (fallback for title attribute) */
|
| 1536 |
-
d-contents nav a[title]:after {
|
| 1537 |
-
content: attr(title);
|
| 1538 |
-
position: absolute;
|
| 1539 |
-
left: 100%;
|
| 1540 |
-
top: 50%;
|
| 1541 |
-
transform: translateY(-50%);
|
| 1542 |
-
background: #1a202c;
|
| 1543 |
-
color: white;
|
| 1544 |
-
padding: 0.75rem 1rem;
|
| 1545 |
-
border-radius: 8px;
|
| 1546 |
-
font-size: 0.85em;
|
| 1547 |
-
white-space: normal;
|
| 1548 |
-
width: 300px;
|
| 1549 |
-
line-height: 1.4;
|
| 1550 |
-
z-index: 1001;
|
| 1551 |
-
opacity: 0;
|
| 1552 |
-
visibility: hidden;
|
| 1553 |
-
transition: opacity 0.3s ease, visibility 0.3s ease;
|
| 1554 |
-
pointer-events: none;
|
| 1555 |
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
| 1556 |
-
}
|
| 1557 |
-
|
| 1558 |
-
d-contents nav a[title]:before {
|
| 1559 |
-
content: '';
|
| 1560 |
-
position: absolute;
|
| 1561 |
-
left: 100%;
|
| 1562 |
-
top: 50%;
|
| 1563 |
-
transform: translate(-8px, -50%);
|
| 1564 |
-
border: 8px solid transparent;
|
| 1565 |
-
border-right-color: #1a202c;
|
| 1566 |
-
z-index: 1002;
|
| 1567 |
-
opacity: 0;
|
| 1568 |
-
visibility: hidden;
|
| 1569 |
-
transition: opacity 0.3s ease, visibility 0.3s ease;
|
| 1570 |
-
}
|
| 1571 |
-
|
| 1572 |
-
d-contents nav a[title]:hover:after,
|
| 1573 |
-
d-contents nav a[title]:hover:before {
|
| 1574 |
-
opacity: 1;
|
| 1575 |
-
visibility: visible;
|
| 1576 |
-
}
|
| 1577 |
-
|
| 1578 |
-
/* Adjust for smaller screens */
|
| 1579 |
-
@media (max-width: 1400px) {
|
| 1580 |
-
d-contents nav a[title]:after {
|
| 1581 |
-
left: auto;
|
| 1582 |
-
right: 100%;
|
| 1583 |
-
margin-right: 1rem;
|
| 1584 |
-
width: 250px;
|
| 1585 |
-
}
|
| 1586 |
-
|
| 1587 |
-
d-contents nav a[title]:before {
|
| 1588 |
-
left: auto;
|
| 1589 |
-
right: 100%;
|
| 1590 |
-
transform: translate(8px, -50%);
|
| 1591 |
-
border-right-color: transparent;
|
| 1592 |
-
border-left-color: #1a202c;
|
| 1593 |
-
}
|
| 1594 |
-
}
|
| 1595 |
-
|
| 1596 |
-
/* Improve code syntax highlighting with Prism */
|
| 1597 |
-
pre[class*="language-"] {
|
| 1598 |
-
background: #f8f9fa !important;
|
| 1599 |
-
border: 1px solid #e9ecef !important;
|
| 1600 |
-
border-radius: 8px !important;
|
| 1601 |
-
padding: 1.5rem !important;
|
| 1602 |
-
margin: 1.5rem 0 !important;
|
| 1603 |
-
overflow-x: auto !important;
|
| 1604 |
-
font-size: 0.9em !important;
|
| 1605 |
-
line-height: 1.5 !important;
|
| 1606 |
-
}
|
| 1607 |
-
|
| 1608 |
-
code[class*="language-"] {
|
| 1609 |
-
background: none !important;
|
| 1610 |
-
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Courier New', monospace !important;
|
| 1611 |
-
color: #383a42 !important;
|
| 1612 |
-
}
|
| 1613 |
-
|
| 1614 |
-
/* Inline code */
|
| 1615 |
-
p code, li code {
|
| 1616 |
-
background: #f1f3f4 !important;
|
| 1617 |
-
padding: 0.2em 0.4em !important;
|
| 1618 |
-
border-radius: 3px !important;
|
| 1619 |
-
font-size: 0.9em !important;
|
| 1620 |
-
color: #d73a49 !important;
|
| 1621 |
-
}
|
| 1622 |
-
|
| 1623 |
-
/* Distill article improvements */
|
| 1624 |
-
d-article {
|
| 1625 |
-
max-width: none;
|
| 1626 |
-
font-size: 18px; /* Increased from default ~16px */
|
| 1627 |
-
line-height: 1.7;
|
| 1628 |
-
}
|
| 1629 |
-
|
| 1630 |
-
d-article > * {
|
| 1631 |
-
max-width: 900px;
|
| 1632 |
-
margin-left: auto;
|
| 1633 |
-
margin-right: auto;
|
| 1634 |
-
}
|
| 1635 |
-
|
| 1636 |
-
/* Improve paragraph readability */
|
| 1637 |
-
d-article p {
|
| 1638 |
-
font-size: 18px;
|
| 1639 |
-
line-height: 1.8;
|
| 1640 |
-
margin-bottom: 1.5rem;
|
| 1641 |
-
color: #2d3748;
|
| 1642 |
-
}
|
| 1643 |
-
|
| 1644 |
-
/* Improve heading sizes */
|
| 1645 |
-
d-article h1 {
|
| 1646 |
-
font-size: 3rem;
|
| 1647 |
-
line-height: 1.2;
|
| 1648 |
-
margin: 3rem 0 2rem 0;
|
| 1649 |
-
color: #1a202c;
|
| 1650 |
-
font-weight: 700;
|
| 1651 |
-
}
|
| 1652 |
-
|
| 1653 |
-
d-article h2 {
|
| 1654 |
-
font-size: 2.5rem;
|
| 1655 |
-
line-height: 1.3;
|
| 1656 |
-
margin: 2.5rem 0 1.5rem 0;
|
| 1657 |
-
color: #1a202c;
|
| 1658 |
-
font-weight: 650;
|
| 1659 |
-
}
|
| 1660 |
-
|
| 1661 |
-
d-article h3 {
|
| 1662 |
-
font-size: 2rem;
|
| 1663 |
-
line-height: 1.4;
|
| 1664 |
-
margin: 2rem 0 1rem 0;
|
| 1665 |
-
color: #1a202c;
|
| 1666 |
-
font-weight: 600;
|
| 1667 |
-
}
|
| 1668 |
-
|
| 1669 |
-
d-article h4 {
|
| 1670 |
-
font-size: 1.5rem;
|
| 1671 |
-
line-height: 1.4;
|
| 1672 |
-
margin: 1.5rem 0 1rem 0;
|
| 1673 |
-
color: #2d3748;
|
| 1674 |
-
font-weight: 600;
|
| 1675 |
-
}
|
| 1676 |
-
|
| 1677 |
-
/* Improve list readability */
|
| 1678 |
-
d-article ul li,
|
| 1679 |
-
d-article ol li {
|
| 1680 |
-
font-size: 18px;
|
| 1681 |
-
line-height: 1.7;
|
| 1682 |
-
margin-bottom: 0.5rem;
|
| 1683 |
-
}
|
| 1684 |
-
|
| 1685 |
-
/* Improve blockquote styling */
|
| 1686 |
-
d-article blockquote {
|
| 1687 |
-
font-size: 19px;
|
| 1688 |
-
line-height: 1.8;
|
| 1689 |
-
padding: 1.5rem 2rem;
|
| 1690 |
-
margin: 2rem 0;
|
| 1691 |
-
border-left: 4px solid #667eea;
|
| 1692 |
-
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 50%);
|
| 1693 |
-
border-radius: 0 8px 8px 0;
|
| 1694 |
-
font-style: italic;
|
| 1695 |
-
color: #4a5568;
|
| 1696 |
-
}
|
| 1697 |
-
|
| 1698 |
-
/* Full width elements */
|
| 1699 |
-
d-article .code-compare,
|
| 1700 |
-
d-article .interactive-demo,
|
| 1701 |
-
d-article .memory-chart-container {
|
| 1702 |
-
max-width: none;
|
| 1703 |
-
width: 100%;
|
| 1704 |
-
margin-left: 0;
|
| 1705 |
-
margin-right: 0;
|
| 1706 |
-
}
|
| 1707 |
-
|
| 1708 |
-
/* Responsive design improvements */
|
| 1709 |
-
@media (max-width: 1200px) {
|
| 1710 |
-
d-article .code-compare,
|
| 1711 |
-
d-article .interactive-demo {
|
| 1712 |
-
max-width: 95%;
|
| 1713 |
-
margin-left: auto;
|
| 1714 |
-
margin-right: auto;
|
| 1715 |
-
}
|
| 1716 |
-
}
|
| 1717 |
-
|
| 1718 |
-
@media (max-width: 768px) {
|
| 1719 |
-
.tenet-list li.tenet {
|
| 1720 |
-
padding: 1rem;
|
| 1721 |
-
}
|
| 1722 |
-
|
| 1723 |
-
.interactive-demo .demo-content {
|
| 1724 |
-
padding: 1rem;
|
| 1725 |
-
}
|
| 1726 |
-
}`, "",{"version":3,"sources":["webpack://./src/transformers-custom.css"],"names":[],"mappings":"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","sourcesContent":["/* Transformers-specific styling additions */\n\n/* Code comparison layout */\n.code-compare {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n margin: 2rem 0;\n align-items: start;\n}\n\n.code-compare .code-column {\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.code-compare .code-header {\n background: #f8f9fa;\n padding: 0.75rem 1rem;\n font-weight: 600;\n color: #495057;\n border-bottom: 1px solid #e2e8f0;\n font-size: 0.9em;\n}\n\n.code-compare pre {\n margin: 0;\n padding: 1rem;\n background: #ffffff;\n overflow-x: auto;\n font-size: 0.85em;\n line-height: 1.4;\n}\n\n.code-compare pre code {\n color: #374151;\n}\n\n/* Mobile responsiveness for code comparison */\n@media (max-width: 768px) {\n .code-compare {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n}\n\n/* Tenet styling - special highlighting for design principles */\n.tenet-list {\n margin: 3rem 0;\n}\n\n.tenet-list ol {\n counter-reset: tenet-counter -1; /* Start from 0 */\n list-style: none;\n padding-left: 0;\n display: flex;\n flex-direction: column;\n gap: 2rem;\n}\n\n.tenet-list li.tenet {\n counter-increment: tenet-counter;\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border: 2px solid transparent;\n border-radius: 16px;\n padding: 2rem 2rem 2rem 4rem;\n margin: 0;\n position: relative;\n box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08);\n transition: all 0.3s ease;\n cursor: pointer;\n}\n\n.tenet-list li.tenet:hover {\n transform: translateY(-8px) scale(1.02);\n box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 123, 255, 0.5);\n background: linear-gradient(135deg, #ffffff 0%, #f0f8ff 100%);\n}\n\n/* Colorful numbering system */\n.tenet-list li.tenet:nth-child(1):before { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); }\n.tenet-list li.tenet:nth-child(2):before { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); }\n.tenet-list li.tenet:nth-child(3):before { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); }\n.tenet-list li.tenet:nth-child(4):before { background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); }\n.tenet-list li.tenet:nth-child(5):before { background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); }\n.tenet-list li.tenet:nth-child(6):before { background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); }\n.tenet-list li.tenet:nth-child(7):before { background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%); }\n.tenet-list li.tenet:nth-child(8):before { background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%); }\n.tenet-list li.tenet:nth-child(9):before { background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%); }\n\n.tenet-list li.tenet:before {\n content: counter(tenet-counter);\n position: absolute;\n top: -12px;\n left: -12px;\n color: white;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2em;\n font-weight: bold;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n border: 3px solid white;\n}\n\n.tenet-list li.tenet strong {\n color: #1a202c;\n font-size: 1.1em;\n display: block;\n margin-bottom: 0.5rem;\n}\n\n.tenet-list li.tenet em {\n color: #4a5568;\n font-size: 0.95em;\n font-style: italic;\n display: block;\n margin-top: 0.75rem;\n padding: 1rem;\n background: rgba(0, 0, 0, 0.03);\n border-radius: 8px;\n border-left: 3px solid #e2e8f0;\n}\n\n.tenet-list li.tenet p {\n color: #2d3748;\n line-height: 1.6;\n margin: 0.5rem 0;\n}\n\n/* Add a subtle pulse animation for the numbers */\n@keyframes pulse-glow {\n 0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }\n 50% { box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25); }\n 100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }\n}\n\n.tenet-list li.tenet:hover:before {\n animation: pulse-glow 2s ease-in-out infinite;\n}\n\n/* Interactive component styling */\n.interactive-demo {\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n background: #ffffff;\n margin: 2rem 0;\n overflow: hidden;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07);\n}\n\n.interactive-demo .demo-header {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 1rem 1.5rem;\n font-weight: 600;\n}\n\n.interactive-demo .demo-content {\n padding: 1.5rem;\n}\n\n.interactive-demo .demo-footer {\n background: #f8f9fa;\n padding: 1rem 1.5rem;\n border-top: 1px solid #e2e8f0;\n color: #6c757d;\n font-size: 0.9em;\n}\n\n/* Button styling for interactive elements */\n.btn-primary {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border: none;\n color: white;\n padding: 0.75rem 1.5rem;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);\n}\n\n.btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n box-shadow: none;\n}\n\n/* Terminal styling */\n.terminal-container {\n background: #1a202c;\n border-radius: 8px;\n padding: 1rem;\n color: #e2e8f0;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 0.9em;\n}\n\n.terminal-input {\n background: #2d3748;\n border: 1px solid #4a5568;\n color: #e2e8f0;\n padding: 0.5rem;\n border-radius: 4px;\n width: 100%;\n font-family: inherit;\n}\n\n.terminal-output {\n background: #0a0e1a;\n padding: 1rem;\n border-radius: 4px;\n white-space: pre-wrap;\n word-break: break-all;\n min-height: 100px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n/* Attention visualization styling */\n.attention-matrix {\n font-family: monospace;\n font-size: 0.8em;\n border-collapse: collapse;\n margin: 1rem 0;\n}\n\n.attention-matrix td {\n border: 1px solid #ddd;\n padding: 4px 8px;\n text-align: center;\n min-width: 50px;\n}\n\n/* Memory chart styling */\n.memory-chart-container {\n background: #f8f9fa;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 1rem;\n margin: 1rem 0;\n}\n\n/* Image styling improvements */\nimg {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n margin: 1.5rem 0;\n}\n\n/* Table of contents styling - Fixed positioning like ultrascale */\n@media (min-width: 1200px) {\n d-article {\n overflow: visible !important;\n }\n \n d-contents {\n align-self: start !important;\n background: white !important;\n grid-column-start: 1 !important;\n grid-column-end: 4 !important;\n grid-row: auto / span 6 !important;\n justify-self: end !important;\n margin-top: 0em !important;\n padding-right: 3em !important;\n padding-left: 2em !important;\n position: -webkit-sticky !important; /* For Safari */\n position: sticky !important;\n top: 10px !important;\n overflow-y: auto !important;\n height: calc(100vh - 40px) !important;\n scrollbar-width: none !important;\n transition: max-height 0.3s ease-out !important;\n z-index: -100 !important;\n display: block !important;\n visibility: visible !important;\n }\n}\n\n@media (max-width: 1199px) {\n d-contents {\n display: none !important;\n background: white !important;\n justify-self: start !important;\n align-self: start !important;\n padding-bottom: 0.5em !important;\n margin-bottom: 1em !important;\n padding-left: 0.25em !important;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1) !important;\n overflow-y: scroll !important;\n height: calc(100vh - 40px) !important;\n scrollbar-width: none !important;\n z-index: -100 !important;\n }\n}\n\n/* Force TOC to be visible and override distill defaults */\nd-contents {\n display: block !important;\n visibility: visible !important;\n opacity: 1 !important;\n}\n\n/* TOC Navigation styling */\nd-contents .toc-header {\n margin-bottom: 1.5rem;\n border-bottom: 2px solid #007bff;\n padding-bottom: 0.5rem;\n}\n\nd-contents .toc-title {\n font-weight: bold;\n font-size: 1.2em;\n color: #333;\n}\n\nd-contents nav a {\n color: rgba(0, 0, 0, 0.7);\n text-decoration: none;\n border-bottom: none;\n display: block;\n padding: 0.3rem 0;\n font-size: 0.9em;\n line-height: 1.4;\n transition: color 0.2s ease;\n}\n\nd-contents nav a:hover {\n color: #007bff;\n text-decoration: none;\n}\n\nd-contents nav a.active {\n color: #007bff;\n font-weight: 600;\n}\n\nd-contents nav div {\n margin-bottom: 0.2rem;\n}\n\n/* Smooth scrollbar */\nd-contents {\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 123, 255, 0.3) transparent;\n}\n\nd-contents::-webkit-scrollbar {\n width: 6px;\n}\n\nd-contents::-webkit-scrollbar-track {\n background: transparent;\n}\n\nd-contents::-webkit-scrollbar-thumb {\n background: rgba(0, 123, 255, 0.3);\n border-radius: 3px;\n}\n\nd-contents::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 123, 255, 0.5);\n}\n\n/* Custom tooltip styling for tenet links */\nd-contents nav a[title] {\n position: relative;\n cursor: help;\n}\n\nd-contents nav a[title]:hover {\n color: #667eea;\n}\n\n/* Enhanced tooltip using CSS (fallback for title attribute) */\nd-contents nav a[title]:after {\n content: attr(title);\n position: absolute;\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n background: #1a202c;\n color: white;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n font-size: 0.85em;\n white-space: normal;\n width: 300px;\n line-height: 1.4;\n z-index: 1001;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n pointer-events: none;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n}\n\nd-contents nav a[title]:before {\n content: '';\n position: absolute;\n left: 100%;\n top: 50%;\n transform: translate(-8px, -50%);\n border: 8px solid transparent;\n border-right-color: #1a202c;\n z-index: 1002;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n}\n\nd-contents nav a[title]:hover:after,\nd-contents nav a[title]:hover:before {\n opacity: 1;\n visibility: visible;\n}\n\n/* Adjust for smaller screens */\n@media (max-width: 1400px) {\n d-contents nav a[title]:after {\n left: auto;\n right: 100%;\n margin-right: 1rem;\n width: 250px;\n }\n \n d-contents nav a[title]:before {\n left: auto;\n right: 100%;\n transform: translate(8px, -50%);\n border-right-color: transparent;\n border-left-color: #1a202c;\n }\n}\n\n/* Improve code syntax highlighting with Prism */\npre[class*=\"language-\"] {\n background: #f8f9fa !important;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n padding: 1.5rem !important;\n margin: 1.5rem 0 !important;\n overflow-x: auto !important;\n font-size: 0.9em !important;\n line-height: 1.5 !important;\n}\n\ncode[class*=\"language-\"] {\n background: none !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Courier New', monospace !important;\n color: #383a42 !important;\n}\n\n/* Inline code */\np code, li code {\n background: #f1f3f4 !important;\n padding: 0.2em 0.4em !important;\n border-radius: 3px !important;\n font-size: 0.9em !important;\n color: #d73a49 !important;\n}\n\n/* Distill article improvements */\nd-article {\n max-width: none;\n font-size: 18px; /* Increased from default ~16px */\n line-height: 1.7;\n}\n\nd-article > * {\n max-width: 900px;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Improve paragraph readability */\nd-article p {\n font-size: 18px;\n line-height: 1.8;\n margin-bottom: 1.5rem;\n color: #2d3748;\n}\n\n/* Improve heading sizes */\nd-article h1 {\n font-size: 3rem;\n line-height: 1.2;\n margin: 3rem 0 2rem 0;\n color: #1a202c;\n font-weight: 700;\n}\n\nd-article h2 {\n font-size: 2.5rem;\n line-height: 1.3;\n margin: 2.5rem 0 1.5rem 0;\n color: #1a202c;\n font-weight: 650;\n}\n\nd-article h3 {\n font-size: 2rem;\n line-height: 1.4;\n margin: 2rem 0 1rem 0;\n color: #1a202c;\n font-weight: 600;\n}\n\nd-article h4 {\n font-size: 1.5rem;\n line-height: 1.4;\n margin: 1.5rem 0 1rem 0;\n color: #2d3748;\n font-weight: 600;\n}\n\n/* Improve list readability */\nd-article ul li,\nd-article ol li {\n font-size: 18px;\n line-height: 1.7;\n margin-bottom: 0.5rem;\n}\n\n/* Improve blockquote styling */\nd-article blockquote {\n font-size: 19px;\n line-height: 1.8;\n padding: 1.5rem 2rem;\n margin: 2rem 0;\n border-left: 4px solid #667eea;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 50%);\n border-radius: 0 8px 8px 0;\n font-style: italic;\n color: #4a5568;\n}\n\n/* Full width elements */\nd-article .code-compare,\nd-article .interactive-demo,\nd-article .memory-chart-container {\n max-width: none;\n width: 100%;\n margin-left: 0;\n margin-right: 0;\n}\n\n/* Responsive design improvements */\n@media (max-width: 1200px) {\n d-article .code-compare,\n d-article .interactive-demo {\n max-width: 95%;\n margin-left: auto;\n margin-right: auto;\n }\n}\n\n@media (max-width: 768px) {\n .tenet-list li.tenet {\n padding: 1rem;\n }\n \n .interactive-demo .demo-content {\n padding: 1rem;\n }\n}"],"sourceRoot":""}]);
|
| 1727 |
-
// Exports
|
| 1728 |
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
| 1729 |
-
|
| 1730 |
-
|
| 1731 |
-
/***/ })
|
| 1732 |
-
|
| 1733 |
-
/******/ });
|
| 1734 |
-
/************************************************************************/
|
| 1735 |
-
/******/ // The module cache
|
| 1736 |
-
/******/ var __webpack_module_cache__ = {};
|
| 1737 |
-
/******/
|
| 1738 |
-
/******/ // The require function
|
| 1739 |
-
/******/ function __webpack_require__(moduleId) {
|
| 1740 |
-
/******/ // Check if module is in cache
|
| 1741 |
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
| 1742 |
-
/******/ if (cachedModule !== undefined) {
|
| 1743 |
-
/******/ return cachedModule.exports;
|
| 1744 |
-
/******/ }
|
| 1745 |
-
/******/ // Create a new module (and put it into the cache)
|
| 1746 |
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
| 1747 |
-
/******/ id: moduleId,
|
| 1748 |
-
/******/ // no module.loaded needed
|
| 1749 |
-
/******/ exports: {}
|
| 1750 |
-
/******/ };
|
| 1751 |
-
/******/
|
| 1752 |
-
/******/ // Execute the module function
|
| 1753 |
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
| 1754 |
-
/******/
|
| 1755 |
-
/******/ // Return the exports of the module
|
| 1756 |
-
/******/ return module.exports;
|
| 1757 |
-
/******/ }
|
| 1758 |
-
/******/
|
| 1759 |
-
/************************************************************************/
|
| 1760 |
-
/******/ /* webpack/runtime/compat get default export */
|
| 1761 |
-
/******/ (() => {
|
| 1762 |
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
| 1763 |
-
/******/ __webpack_require__.n = (module) => {
|
| 1764 |
-
/******/ var getter = module && module.__esModule ?
|
| 1765 |
-
/******/ () => (module['default']) :
|
| 1766 |
-
/******/ () => (module);
|
| 1767 |
-
/******/ __webpack_require__.d(getter, { a: getter });
|
| 1768 |
-
/******/ return getter;
|
| 1769 |
-
/******/ };
|
| 1770 |
-
/******/ })();
|
| 1771 |
-
/******/
|
| 1772 |
-
/******/ /* webpack/runtime/define property getters */
|
| 1773 |
-
/******/ (() => {
|
| 1774 |
-
/******/ // define getter functions for harmony exports
|
| 1775 |
-
/******/ __webpack_require__.d = (exports, definition) => {
|
| 1776 |
-
/******/ for(var key in definition) {
|
| 1777 |
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
| 1778 |
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
| 1779 |
-
/******/ }
|
| 1780 |
-
/******/ }
|
| 1781 |
-
/******/ };
|
| 1782 |
-
/******/ })();
|
| 1783 |
-
/******/
|
| 1784 |
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
| 1785 |
-
/******/ (() => {
|
| 1786 |
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
| 1787 |
-
/******/ })();
|
| 1788 |
-
/******/
|
| 1789 |
-
/******/ /* webpack/runtime/nonce */
|
| 1790 |
-
/******/ (() => {
|
| 1791 |
-
/******/ __webpack_require__.nc = undefined;
|
| 1792 |
-
/******/ })();
|
| 1793 |
-
/******/
|
| 1794 |
-
/************************************************************************/
|
| 1795 |
-
var __webpack_exports__ = {};
|
| 1796 |
-
|
| 1797 |
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js
|
| 1798 |
-
var injectStylesIntoStyleTag = __webpack_require__(72);
|
| 1799 |
-
var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);
|
| 1800 |
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js
|
| 1801 |
-
var styleDomAPI = __webpack_require__(825);
|
| 1802 |
-
var styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);
|
| 1803 |
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js
|
| 1804 |
-
var insertBySelector = __webpack_require__(659);
|
| 1805 |
-
var insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);
|
| 1806 |
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js
|
| 1807 |
-
var setAttributesWithoutAttributes = __webpack_require__(56);
|
| 1808 |
-
var setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);
|
| 1809 |
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js
|
| 1810 |
-
var insertStyleElement = __webpack_require__(540);
|
| 1811 |
-
var insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);
|
| 1812 |
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js
|
| 1813 |
-
var styleTagTransform = __webpack_require__(113);
|
| 1814 |
-
var styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);
|
| 1815 |
-
// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/style.css
|
| 1816 |
-
var style = __webpack_require__(208);
|
| 1817 |
-
;// ./src/style.css
|
| 1818 |
-
|
| 1819 |
-
|
| 1820 |
-
|
| 1821 |
-
|
| 1822 |
-
|
| 1823 |
-
|
| 1824 |
-
|
| 1825 |
-
|
| 1826 |
-
|
| 1827 |
-
|
| 1828 |
-
|
| 1829 |
-
var options = {};
|
| 1830 |
-
|
| 1831 |
-
options.styleTagTransform = (styleTagTransform_default());
|
| 1832 |
-
options.setAttributes = (setAttributesWithoutAttributes_default());
|
| 1833 |
-
options.insert = insertBySelector_default().bind(null, "head");
|
| 1834 |
-
options.domAPI = (styleDomAPI_default());
|
| 1835 |
-
options.insertStyleElement = (insertStyleElement_default());
|
| 1836 |
-
|
| 1837 |
-
var update = injectStylesIntoStyleTag_default()(style/* default */.A, options);
|
| 1838 |
-
|
| 1839 |
-
|
| 1840 |
-
|
| 1841 |
-
|
| 1842 |
-
/* harmony default export */ const src_style = (style/* default */.A && style/* default */.A.locals ? style/* default */.A.locals : undefined);
|
| 1843 |
-
|
| 1844 |
-
;// ./src/index.js
|
| 1845 |
-
// Main JavaScript file for transformers playthrough
|
| 1846 |
-
|
| 1847 |
-
|
| 1848 |
-
// Import any additional functionality
|
| 1849 |
-
console.log('Transformers Playthrough loaded');
|
| 1850 |
-
|
| 1851 |
-
// Add any custom JavaScript functionality here
|
| 1852 |
-
document.addEventListener('DOMContentLoaded', function () {
|
| 1853 |
-
// Initialize syntax highlighting for code blocks
|
| 1854 |
-
if (window.hljs) {
|
| 1855 |
-
hljs.highlightAll();
|
| 1856 |
-
}
|
| 1857 |
-
|
| 1858 |
-
// Initialize any interactive components
|
| 1859 |
-
initializeInteractiveComponents();
|
| 1860 |
-
});
|
| 1861 |
-
function initializeInteractiveComponents() {
|
| 1862 |
-
// This will be expanded as we add interactive components
|
| 1863 |
-
console.log('Interactive components initialized');
|
| 1864 |
-
}
|
| 1865 |
-
/******/ })()
|
| 1866 |
-
;
|
| 1867 |
-
//# sourceMappingURL=main.bundle.js.map
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/main.bundle.js.map
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
dist/static/Bloatedness_visualizer.png
DELETED
Git LFS Details
|
dist/static/Jaccard_similarity_plot.png
DELETED
Git LFS Details
|
dist/static/d3_dependency_graph.html
DELETED
|
@@ -1,1895 +0,0 @@
|
|
| 1 |
-
|
| 2 |
-
<!DOCTYPE html>
|
| 3 |
-
<html lang="en">
|
| 4 |
-
<head>
|
| 5 |
-
<meta charset="UTF-8">
|
| 6 |
-
<title>TransformersΒ ModularΒ ModelΒ Dependencies</title>
|
| 7 |
-
<style>
|
| 8 |
-
/* Googleβfont β small fallback cost & optional */
|
| 9 |
-
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap');
|
| 10 |
-
|
| 11 |
-
:root {
|
| 12 |
-
--baseβsize: 60px; /* icon radius helper */
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
body {
|
| 16 |
-
font-family: 'Inter', Arial, sans-serif;
|
| 17 |
-
margin: 0;
|
| 18 |
-
overflow: hidden;
|
| 19 |
-
background-color: transparent; /* requested transparency */
|
| 20 |
-
}
|
| 21 |
-
|
| 22 |
-
svg {
|
| 23 |
-
width: 100vw;
|
| 24 |
-
height: 100vh;
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
.link {
|
| 28 |
-
stroke: #999;
|
| 29 |
-
stroke-opacity: 0.6;
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
.node-label {
|
| 33 |
-
fill: #333;
|
| 34 |
-
pointer-events: none;
|
| 35 |
-
text-anchor: middle;
|
| 36 |
-
font-weight: 600;
|
| 37 |
-
}
|
| 38 |
-
|
| 39 |
-
.link-label {
|
| 40 |
-
fill: #555;
|
| 41 |
-
font-size: 10px;
|
| 42 |
-
pointer-events: none;
|
| 43 |
-
text-anchor: middle;
|
| 44 |
-
}
|
| 45 |
-
|
| 46 |
-
.node.base path { fill: #ffbe0b; }
|
| 47 |
-
.node.derived circle { fill: #1f77b4; }
|
| 48 |
-
|
| 49 |
-
/* Legend styling */
|
| 50 |
-
#legend {
|
| 51 |
-
position: fixed;
|
| 52 |
-
top: 18px;
|
| 53 |
-
left: 18px;
|
| 54 |
-
font-size: 20px;
|
| 55 |
-
background: rgba(255,255,255,0.92);
|
| 56 |
-
padding: 18px 28px;
|
| 57 |
-
border-radius: 10px;
|
| 58 |
-
border: 1.5px solid #bbb;
|
| 59 |
-
font-family: 'Inter', Arial, sans-serif;
|
| 60 |
-
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
|
| 61 |
-
z-index: 1000;
|
| 62 |
-
}
|
| 63 |
-
</style>
|
| 64 |
-
</head>
|
| 65 |
-
<body>
|
| 66 |
-
<div id="legend">π‘ baseΒ model (HF icon)<br>π΅ derived modularΒ model<br>EdgeΒ label: #classes imported</div>
|
| 67 |
-
<svg id="dependency-graph"></svg>
|
| 68 |
-
<script src="https://d3js.org/d3.v7.min.js"></script>
|
| 69 |
-
<script>
|
| 70 |
-
const graphData = {
|
| 71 |
-
"nodes": [
|
| 72 |
-
{
|
| 73 |
-
"id": "aimv2",
|
| 74 |
-
"is_base": false,
|
| 75 |
-
"size": 1.146341463414634
|
| 76 |
-
},
|
| 77 |
-
{
|
| 78 |
-
"id": "arcee",
|
| 79 |
-
"is_base": false,
|
| 80 |
-
"size": 1.0975609756097562
|
| 81 |
-
},
|
| 82 |
-
{
|
| 83 |
-
"id": "aria",
|
| 84 |
-
"is_base": false,
|
| 85 |
-
"size": 1.146341463414634
|
| 86 |
-
},
|
| 87 |
-
{
|
| 88 |
-
"id": "auto",
|
| 89 |
-
"is_base": true,
|
| 90 |
-
"size": 1.0975609756097562
|
| 91 |
-
},
|
| 92 |
-
{
|
| 93 |
-
"id": "aya_vision",
|
| 94 |
-
"is_base": false,
|
| 95 |
-
"size": 1.048780487804878
|
| 96 |
-
},
|
| 97 |
-
{
|
| 98 |
-
"id": "bamba",
|
| 99 |
-
"is_base": false,
|
| 100 |
-
"size": 1.2439024390243902
|
| 101 |
-
},
|
| 102 |
-
{
|
| 103 |
-
"id": "bart",
|
| 104 |
-
"is_base": true,
|
| 105 |
-
"size": 1.146341463414634
|
| 106 |
-
},
|
| 107 |
-
{
|
| 108 |
-
"id": "beit",
|
| 109 |
-
"is_base": true,
|
| 110 |
-
"size": 1.048780487804878
|
| 111 |
-
},
|
| 112 |
-
{
|
| 113 |
-
"id": "bigbird_pegasus",
|
| 114 |
-
"is_base": true,
|
| 115 |
-
"size": 1.048780487804878
|
| 116 |
-
},
|
| 117 |
-
{
|
| 118 |
-
"id": "biogpt",
|
| 119 |
-
"is_base": false,
|
| 120 |
-
"size": 1.0975609756097562
|
| 121 |
-
},
|
| 122 |
-
{
|
| 123 |
-
"id": "bitnet",
|
| 124 |
-
"is_base": false,
|
| 125 |
-
"size": 1.0975609756097562
|
| 126 |
-
},
|
| 127 |
-
{
|
| 128 |
-
"id": "blip",
|
| 129 |
-
"is_base": true,
|
| 130 |
-
"size": 1.048780487804878
|
| 131 |
-
},
|
| 132 |
-
{
|
| 133 |
-
"id": "blip_2",
|
| 134 |
-
"is_base": true,
|
| 135 |
-
"size": 1.048780487804878
|
| 136 |
-
},
|
| 137 |
-
{
|
| 138 |
-
"id": "chameleon",
|
| 139 |
-
"is_base": true,
|
| 140 |
-
"size": 1.0975609756097562
|
| 141 |
-
},
|
| 142 |
-
{
|
| 143 |
-
"id": "clip",
|
| 144 |
-
"is_base": true,
|
| 145 |
-
"size": 1.2439024390243902
|
| 146 |
-
},
|
| 147 |
-
{
|
| 148 |
-
"id": "cohere",
|
| 149 |
-
"is_base": false,
|
| 150 |
-
"size": 1.1951219512195121
|
| 151 |
-
},
|
| 152 |
-
{
|
| 153 |
-
"id": "cohere2",
|
| 154 |
-
"is_base": false,
|
| 155 |
-
"size": 1.0975609756097562
|
| 156 |
-
},
|
| 157 |
-
{
|
| 158 |
-
"id": "colpali",
|
| 159 |
-
"is_base": false,
|
| 160 |
-
"size": 1.0975609756097562
|
| 161 |
-
},
|
| 162 |
-
{
|
| 163 |
-
"id": "colqwen2",
|
| 164 |
-
"is_base": false,
|
| 165 |
-
"size": 1.048780487804878
|
| 166 |
-
},
|
| 167 |
-
{
|
| 168 |
-
"id": "conditional_detr",
|
| 169 |
-
"is_base": false,
|
| 170 |
-
"size": 1.048780487804878
|
| 171 |
-
},
|
| 172 |
-
{
|
| 173 |
-
"id": "csm",
|
| 174 |
-
"is_base": false,
|
| 175 |
-
"size": 1.048780487804878
|
| 176 |
-
},
|
| 177 |
-
{
|
| 178 |
-
"id": "d_fine",
|
| 179 |
-
"is_base": false,
|
| 180 |
-
"size": 1.0975609756097562
|
| 181 |
-
},
|
| 182 |
-
{
|
| 183 |
-
"id": "data2vec",
|
| 184 |
-
"is_base": false,
|
| 185 |
-
"size": 1.048780487804878
|
| 186 |
-
},
|
| 187 |
-
{
|
| 188 |
-
"id": "deepseek_v2",
|
| 189 |
-
"is_base": false,
|
| 190 |
-
"size": 1.0975609756097562
|
| 191 |
-
},
|
| 192 |
-
{
|
| 193 |
-
"id": "deepseek_v3",
|
| 194 |
-
"is_base": false,
|
| 195 |
-
"size": 1.146341463414634
|
| 196 |
-
},
|
| 197 |
-
{
|
| 198 |
-
"id": "deepseek_vl",
|
| 199 |
-
"is_base": false,
|
| 200 |
-
"size": 1.146341463414634
|
| 201 |
-
},
|
| 202 |
-
{
|
| 203 |
-
"id": "deepseek_vl_hybrid",
|
| 204 |
-
"is_base": false,
|
| 205 |
-
"size": 1.146341463414634
|
| 206 |
-
},
|
| 207 |
-
{
|
| 208 |
-
"id": "deformable_detr",
|
| 209 |
-
"is_base": false,
|
| 210 |
-
"size": 1.048780487804878
|
| 211 |
-
},
|
| 212 |
-
{
|
| 213 |
-
"id": "depth_anything",
|
| 214 |
-
"is_base": true,
|
| 215 |
-
"size": 1.048780487804878
|
| 216 |
-
},
|
| 217 |
-
{
|
| 218 |
-
"id": "detr",
|
| 219 |
-
"is_base": true,
|
| 220 |
-
"size": 1.2439024390243902
|
| 221 |
-
},
|
| 222 |
-
{
|
| 223 |
-
"id": "dia",
|
| 224 |
-
"is_base": false,
|
| 225 |
-
"size": 1.0975609756097562
|
| 226 |
-
},
|
| 227 |
-
{
|
| 228 |
-
"id": "diffllama",
|
| 229 |
-
"is_base": false,
|
| 230 |
-
"size": 1.146341463414634
|
| 231 |
-
},
|
| 232 |
-
{
|
| 233 |
-
"id": "dinov2",
|
| 234 |
-
"is_base": true,
|
| 235 |
-
"size": 1.0975609756097562
|
| 236 |
-
},
|
| 237 |
-
{
|
| 238 |
-
"id": "dinov2_with_registers",
|
| 239 |
-
"is_base": false,
|
| 240 |
-
"size": 1.048780487804878
|
| 241 |
-
},
|
| 242 |
-
{
|
| 243 |
-
"id": "doge",
|
| 244 |
-
"is_base": false,
|
| 245 |
-
"size": 1.0975609756097562
|
| 246 |
-
},
|
| 247 |
-
{
|
| 248 |
-
"id": "dots1",
|
| 249 |
-
"is_base": false,
|
| 250 |
-
"size": 1.0975609756097562
|
| 251 |
-
},
|
| 252 |
-
{
|
| 253 |
-
"id": "dpt",
|
| 254 |
-
"is_base": false,
|
| 255 |
-
"size": 1.0975609756097562
|
| 256 |
-
},
|
| 257 |
-
{
|
| 258 |
-
"id": "emu3",
|
| 259 |
-
"is_base": false,
|
| 260 |
-
"size": 1.146341463414634
|
| 261 |
-
},
|
| 262 |
-
{
|
| 263 |
-
"id": "eomt",
|
| 264 |
-
"is_base": false,
|
| 265 |
-
"size": 1.1951219512195121
|
| 266 |
-
},
|
| 267 |
-
{
|
| 268 |
-
"id": "ernie4_5",
|
| 269 |
-
"is_base": false,
|
| 270 |
-
"size": 1.146341463414634
|
| 271 |
-
},
|
| 272 |
-
{
|
| 273 |
-
"id": "ernie4_5_moe",
|
| 274 |
-
"is_base": false,
|
| 275 |
-
"size": 1.1951219512195121
|
| 276 |
-
},
|
| 277 |
-
{
|
| 278 |
-
"id": "esm",
|
| 279 |
-
"is_base": true,
|
| 280 |
-
"size": 1.048780487804878
|
| 281 |
-
},
|
| 282 |
-
{
|
| 283 |
-
"id": "evolla",
|
| 284 |
-
"is_base": false,
|
| 285 |
-
"size": 1.0975609756097562
|
| 286 |
-
},
|
| 287 |
-
{
|
| 288 |
-
"id": "exaone4",
|
| 289 |
-
"is_base": false,
|
| 290 |
-
"size": 1.0975609756097562
|
| 291 |
-
},
|
| 292 |
-
{
|
| 293 |
-
"id": "falcon_h1",
|
| 294 |
-
"is_base": false,
|
| 295 |
-
"size": 1.146341463414634
|
| 296 |
-
},
|
| 297 |
-
{
|
| 298 |
-
"id": "falcon_mamba",
|
| 299 |
-
"is_base": false,
|
| 300 |
-
"size": 1.048780487804878
|
| 301 |
-
},
|
| 302 |
-
{
|
| 303 |
-
"id": "gemma",
|
| 304 |
-
"is_base": false,
|
| 305 |
-
"size": 1.3414634146341464
|
| 306 |
-
},
|
| 307 |
-
{
|
| 308 |
-
"id": "gemma2",
|
| 309 |
-
"is_base": false,
|
| 310 |
-
"size": 1.2439024390243902
|
| 311 |
-
},
|
| 312 |
-
{
|
| 313 |
-
"id": "gemma3",
|
| 314 |
-
"is_base": false,
|
| 315 |
-
"size": 1.146341463414634
|
| 316 |
-
},
|
| 317 |
-
{
|
| 318 |
-
"id": "gemma3n",
|
| 319 |
-
"is_base": false,
|
| 320 |
-
"size": 1.1951219512195121
|
| 321 |
-
},
|
| 322 |
-
{
|
| 323 |
-
"id": "glm",
|
| 324 |
-
"is_base": false,
|
| 325 |
-
"size": 1.2439024390243902
|
| 326 |
-
},
|
| 327 |
-
{
|
| 328 |
-
"id": "glm4",
|
| 329 |
-
"is_base": false,
|
| 330 |
-
"size": 1.146341463414634
|
| 331 |
-
},
|
| 332 |
-
{
|
| 333 |
-
"id": "glm4_moe",
|
| 334 |
-
"is_base": false,
|
| 335 |
-
"size": 1.146341463414634
|
| 336 |
-
},
|
| 337 |
-
{
|
| 338 |
-
"id": "glm4v",
|
| 339 |
-
"is_base": false,
|
| 340 |
-
"size": 1.0975609756097562
|
| 341 |
-
},
|
| 342 |
-
{
|
| 343 |
-
"id": "got_ocr2",
|
| 344 |
-
"is_base": false,
|
| 345 |
-
"size": 1.0975609756097562
|
| 346 |
-
},
|
| 347 |
-
{
|
| 348 |
-
"id": "gpt_neox",
|
| 349 |
-
"is_base": false,
|
| 350 |
-
"size": 1.0975609756097562
|
| 351 |
-
},
|
| 352 |
-
{
|
| 353 |
-
"id": "granite",
|
| 354 |
-
"is_base": false,
|
| 355 |
-
"size": 1.0975609756097562
|
| 356 |
-
},
|
| 357 |
-
{
|
| 358 |
-
"id": "granitemoe",
|
| 359 |
-
"is_base": true,
|
| 360 |
-
"size": 1.048780487804878
|
| 361 |
-
},
|
| 362 |
-
{
|
| 363 |
-
"id": "granitemoehybrid",
|
| 364 |
-
"is_base": false,
|
| 365 |
-
"size": 1.0975609756097562
|
| 366 |
-
},
|
| 367 |
-
{
|
| 368 |
-
"id": "granitemoeshared",
|
| 369 |
-
"is_base": false,
|
| 370 |
-
"size": 1.0975609756097562
|
| 371 |
-
},
|
| 372 |
-
{
|
| 373 |
-
"id": "grounding_dino",
|
| 374 |
-
"is_base": false,
|
| 375 |
-
"size": 1.048780487804878
|
| 376 |
-
},
|
| 377 |
-
{
|
| 378 |
-
"id": "helium",
|
| 379 |
-
"is_base": false,
|
| 380 |
-
"size": 1.146341463414634
|
| 381 |
-
},
|
| 382 |
-
{
|
| 383 |
-
"id": "hgnet_v2",
|
| 384 |
-
"is_base": false,
|
| 385 |
-
"size": 1.048780487804878
|
| 386 |
-
},
|
| 387 |
-
{
|
| 388 |
-
"id": "hubert",
|
| 389 |
-
"is_base": false,
|
| 390 |
-
"size": 1.048780487804878
|
| 391 |
-
},
|
| 392 |
-
{
|
| 393 |
-
"id": "idefics",
|
| 394 |
-
"is_base": true,
|
| 395 |
-
"size": 1.146341463414634
|
| 396 |
-
},
|
| 397 |
-
{
|
| 398 |
-
"id": "idefics3",
|
| 399 |
-
"is_base": true,
|
| 400 |
-
"size": 1.048780487804878
|
| 401 |
-
},
|
| 402 |
-
{
|
| 403 |
-
"id": "ijepa",
|
| 404 |
-
"is_base": false,
|
| 405 |
-
"size": 1.048780487804878
|
| 406 |
-
},
|
| 407 |
-
{
|
| 408 |
-
"id": "image_processing_base",
|
| 409 |
-
"is_base": true,
|
| 410 |
-
"size": 1.048780487804878
|
| 411 |
-
},
|
| 412 |
-
{
|
| 413 |
-
"id": "informer",
|
| 414 |
-
"is_base": false,
|
| 415 |
-
"size": 1.0975609756097562
|
| 416 |
-
},
|
| 417 |
-
{
|
| 418 |
-
"id": "instructblip",
|
| 419 |
-
"is_base": true,
|
| 420 |
-
"size": 1.048780487804878
|
| 421 |
-
},
|
| 422 |
-
{
|
| 423 |
-
"id": "instructblipvideo",
|
| 424 |
-
"is_base": false,
|
| 425 |
-
"size": 1.0975609756097562
|
| 426 |
-
},
|
| 427 |
-
{
|
| 428 |
-
"id": "internvl",
|
| 429 |
-
"is_base": false,
|
| 430 |
-
"size": 1.1951219512195121
|
| 431 |
-
},
|
| 432 |
-
{
|
| 433 |
-
"id": "jamba",
|
| 434 |
-
"is_base": true,
|
| 435 |
-
"size": 1.0975609756097562
|
| 436 |
-
},
|
| 437 |
-
{
|
| 438 |
-
"id": "janus",
|
| 439 |
-
"is_base": false,
|
| 440 |
-
"size": 1.3902439024390243
|
| 441 |
-
},
|
| 442 |
-
{
|
| 443 |
-
"id": "kyutai_speech_to_text",
|
| 444 |
-
"is_base": false,
|
| 445 |
-
"size": 1.146341463414634
|
| 446 |
-
},
|
| 447 |
-
{
|
| 448 |
-
"id": "lfm2",
|
| 449 |
-
"is_base": false,
|
| 450 |
-
"size": 1.0975609756097562
|
| 451 |
-
},
|
| 452 |
-
{
|
| 453 |
-
"id": "lightglue",
|
| 454 |
-
"is_base": false,
|
| 455 |
-
"size": 1.2439024390243902
|
| 456 |
-
},
|
| 457 |
-
{
|
| 458 |
-
"id": "llama",
|
| 459 |
-
"is_base": true,
|
| 460 |
-
"size": 3.0
|
| 461 |
-
},
|
| 462 |
-
{
|
| 463 |
-
"id": "llama4",
|
| 464 |
-
"is_base": true,
|
| 465 |
-
"size": 1.048780487804878
|
| 466 |
-
},
|
| 467 |
-
{
|
| 468 |
-
"id": "llava",
|
| 469 |
-
"is_base": true,
|
| 470 |
-
"size": 1.3414634146341464
|
| 471 |
-
},
|
| 472 |
-
{
|
| 473 |
-
"id": "llava_next",
|
| 474 |
-
"is_base": true,
|
| 475 |
-
"size": 1.146341463414634
|
| 476 |
-
},
|
| 477 |
-
{
|
| 478 |
-
"id": "llava_next_video",
|
| 479 |
-
"is_base": false,
|
| 480 |
-
"size": 1.0975609756097562
|
| 481 |
-
},
|
| 482 |
-
{
|
| 483 |
-
"id": "llava_onevision",
|
| 484 |
-
"is_base": false,
|
| 485 |
-
"size": 1.0975609756097562
|
| 486 |
-
},
|
| 487 |
-
{
|
| 488 |
-
"id": "mamba",
|
| 489 |
-
"is_base": true,
|
| 490 |
-
"size": 1.048780487804878
|
| 491 |
-
},
|
| 492 |
-
{
|
| 493 |
-
"id": "mamba2",
|
| 494 |
-
"is_base": true,
|
| 495 |
-
"size": 1.146341463414634
|
| 496 |
-
},
|
| 497 |
-
{
|
| 498 |
-
"id": "mask2former",
|
| 499 |
-
"is_base": false,
|
| 500 |
-
"size": 1.0975609756097562
|
| 501 |
-
},
|
| 502 |
-
{
|
| 503 |
-
"id": "maskformer",
|
| 504 |
-
"is_base": true,
|
| 505 |
-
"size": 1.048780487804878
|
| 506 |
-
},
|
| 507 |
-
{
|
| 508 |
-
"id": "mbart",
|
| 509 |
-
"is_base": true,
|
| 510 |
-
"size": 1.048780487804878
|
| 511 |
-
},
|
| 512 |
-
{
|
| 513 |
-
"id": "mimi",
|
| 514 |
-
"is_base": true,
|
| 515 |
-
"size": 1.048780487804878
|
| 516 |
-
},
|
| 517 |
-
{
|
| 518 |
-
"id": "minimax",
|
| 519 |
-
"is_base": false,
|
| 520 |
-
"size": 1.048780487804878
|
| 521 |
-
},
|
| 522 |
-
{
|
| 523 |
-
"id": "mistral",
|
| 524 |
-
"is_base": false,
|
| 525 |
-
"size": 1.3414634146341464
|
| 526 |
-
},
|
| 527 |
-
{
|
| 528 |
-
"id": "mistral3",
|
| 529 |
-
"is_base": false,
|
| 530 |
-
"size": 1.0975609756097562
|
| 531 |
-
},
|
| 532 |
-
{
|
| 533 |
-
"id": "mixtral",
|
| 534 |
-
"is_base": false,
|
| 535 |
-
"size": 1.2439024390243902
|
| 536 |
-
},
|
| 537 |
-
{
|
| 538 |
-
"id": "mlcd",
|
| 539 |
-
"is_base": false,
|
| 540 |
-
"size": 1.146341463414634
|
| 541 |
-
},
|
| 542 |
-
{
|
| 543 |
-
"id": "modeling_outputs",
|
| 544 |
-
"is_base": true,
|
| 545 |
-
"size": 1.048780487804878
|
| 546 |
-
},
|
| 547 |
-
{
|
| 548 |
-
"id": "modernbert",
|
| 549 |
-
"is_base": false,
|
| 550 |
-
"size": 1.0975609756097562
|
| 551 |
-
},
|
| 552 |
-
{
|
| 553 |
-
"id": "modernbert_decoder",
|
| 554 |
-
"is_base": false,
|
| 555 |
-
"size": 1.048780487804878
|
| 556 |
-
},
|
| 557 |
-
{
|
| 558 |
-
"id": "moonshine",
|
| 559 |
-
"is_base": false,
|
| 560 |
-
"size": 1.146341463414634
|
| 561 |
-
},
|
| 562 |
-
{
|
| 563 |
-
"id": "moshi",
|
| 564 |
-
"is_base": true,
|
| 565 |
-
"size": 1.048780487804878
|
| 566 |
-
},
|
| 567 |
-
{
|
| 568 |
-
"id": "nemotron",
|
| 569 |
-
"is_base": true,
|
| 570 |
-
"size": 1.048780487804878
|
| 571 |
-
},
|
| 572 |
-
{
|
| 573 |
-
"id": "olmo",
|
| 574 |
-
"is_base": false,
|
| 575 |
-
"size": 1.0975609756097562
|
| 576 |
-
},
|
| 577 |
-
{
|
| 578 |
-
"id": "olmo2",
|
| 579 |
-
"is_base": false,
|
| 580 |
-
"size": 1.146341463414634
|
| 581 |
-
},
|
| 582 |
-
{
|
| 583 |
-
"id": "opt",
|
| 584 |
-
"is_base": true,
|
| 585 |
-
"size": 1.048780487804878
|
| 586 |
-
},
|
| 587 |
-
{
|
| 588 |
-
"id": "owlv2",
|
| 589 |
-
"is_base": false,
|
| 590 |
-
"size": 1.048780487804878
|
| 591 |
-
},
|
| 592 |
-
{
|
| 593 |
-
"id": "owlvit",
|
| 594 |
-
"is_base": true,
|
| 595 |
-
"size": 1.048780487804878
|
| 596 |
-
},
|
| 597 |
-
{
|
| 598 |
-
"id": "paligemma",
|
| 599 |
-
"is_base": true,
|
| 600 |
-
"size": 1.146341463414634
|
| 601 |
-
},
|
| 602 |
-
{
|
| 603 |
-
"id": "perception_lm",
|
| 604 |
-
"is_base": false,
|
| 605 |
-
"size": 1.048780487804878
|
| 606 |
-
},
|
| 607 |
-
{
|
| 608 |
-
"id": "phi",
|
| 609 |
-
"is_base": false,
|
| 610 |
-
"size": 1.0975609756097562
|
| 611 |
-
},
|
| 612 |
-
{
|
| 613 |
-
"id": "phi3",
|
| 614 |
-
"is_base": false,
|
| 615 |
-
"size": 1.2439024390243902
|
| 616 |
-
},
|
| 617 |
-
{
|
| 618 |
-
"id": "phi4_multimodal",
|
| 619 |
-
"is_base": false,
|
| 620 |
-
"size": 1.146341463414634
|
| 621 |
-
},
|
| 622 |
-
{
|
| 623 |
-
"id": "plbart",
|
| 624 |
-
"is_base": false,
|
| 625 |
-
"size": 1.146341463414634
|
| 626 |
-
},
|
| 627 |
-
{
|
| 628 |
-
"id": "prompt_depth_anything",
|
| 629 |
-
"is_base": false,
|
| 630 |
-
"size": 1.048780487804878
|
| 631 |
-
},
|
| 632 |
-
{
|
| 633 |
-
"id": "qwen2",
|
| 634 |
-
"is_base": false,
|
| 635 |
-
"size": 1.1951219512195121
|
| 636 |
-
},
|
| 637 |
-
{
|
| 638 |
-
"id": "qwen2_5_omni",
|
| 639 |
-
"is_base": false,
|
| 640 |
-
"size": 1.1951219512195121
|
| 641 |
-
},
|
| 642 |
-
{
|
| 643 |
-
"id": "qwen2_5_vl",
|
| 644 |
-
"is_base": false,
|
| 645 |
-
"size": 1.146341463414634
|
| 646 |
-
},
|
| 647 |
-
{
|
| 648 |
-
"id": "qwen2_audio",
|
| 649 |
-
"is_base": true,
|
| 650 |
-
"size": 1.0975609756097562
|
| 651 |
-
},
|
| 652 |
-
{
|
| 653 |
-
"id": "qwen2_moe",
|
| 654 |
-
"is_base": true,
|
| 655 |
-
"size": 1.048780487804878
|
| 656 |
-
},
|
| 657 |
-
{
|
| 658 |
-
"id": "qwen2_vl",
|
| 659 |
-
"is_base": true,
|
| 660 |
-
"size": 1.146341463414634
|
| 661 |
-
},
|
| 662 |
-
{
|
| 663 |
-
"id": "qwen3",
|
| 664 |
-
"is_base": false,
|
| 665 |
-
"size": 1.2439024390243902
|
| 666 |
-
},
|
| 667 |
-
{
|
| 668 |
-
"id": "qwen3_moe",
|
| 669 |
-
"is_base": false,
|
| 670 |
-
"size": 1.2439024390243902
|
| 671 |
-
},
|
| 672 |
-
{
|
| 673 |
-
"id": "rt_detr",
|
| 674 |
-
"is_base": false,
|
| 675 |
-
"size": 1.1951219512195121
|
| 676 |
-
},
|
| 677 |
-
{
|
| 678 |
-
"id": "rt_detr_v2",
|
| 679 |
-
"is_base": false,
|
| 680 |
-
"size": 1.0975609756097562
|
| 681 |
-
},
|
| 682 |
-
{
|
| 683 |
-
"id": "sam",
|
| 684 |
-
"is_base": true,
|
| 685 |
-
"size": 1.146341463414634
|
| 686 |
-
},
|
| 687 |
-
{
|
| 688 |
-
"id": "sam_hq",
|
| 689 |
-
"is_base": false,
|
| 690 |
-
"size": 1.0975609756097562
|
| 691 |
-
},
|
| 692 |
-
{
|
| 693 |
-
"id": "sew",
|
| 694 |
-
"is_base": false,
|
| 695 |
-
"size": 1.048780487804878
|
| 696 |
-
},
|
| 697 |
-
{
|
| 698 |
-
"id": "siglip",
|
| 699 |
-
"is_base": true,
|
| 700 |
-
"size": 1.2926829268292683
|
| 701 |
-
},
|
| 702 |
-
{
|
| 703 |
-
"id": "siglip2",
|
| 704 |
-
"is_base": false,
|
| 705 |
-
"size": 1.048780487804878
|
| 706 |
-
},
|
| 707 |
-
{
|
| 708 |
-
"id": "smollm3",
|
| 709 |
-
"is_base": false,
|
| 710 |
-
"size": 1.0975609756097562
|
| 711 |
-
},
|
| 712 |
-
{
|
| 713 |
-
"id": "smolvlm",
|
| 714 |
-
"is_base": false,
|
| 715 |
-
"size": 1.048780487804878
|
| 716 |
-
},
|
| 717 |
-
{
|
| 718 |
-
"id": "starcoder2",
|
| 719 |
-
"is_base": false,
|
| 720 |
-
"size": 1.048780487804878
|
| 721 |
-
},
|
| 722 |
-
{
|
| 723 |
-
"id": "superglue",
|
| 724 |
-
"is_base": true,
|
| 725 |
-
"size": 1.048780487804878
|
| 726 |
-
},
|
| 727 |
-
{
|
| 728 |
-
"id": "t5gemma",
|
| 729 |
-
"is_base": false,
|
| 730 |
-
"size": 1.048780487804878
|
| 731 |
-
},
|
| 732 |
-
{
|
| 733 |
-
"id": "time_series_transformer",
|
| 734 |
-
"is_base": true,
|
| 735 |
-
"size": 1.048780487804878
|
| 736 |
-
},
|
| 737 |
-
{
|
| 738 |
-
"id": "timesfm",
|
| 739 |
-
"is_base": false,
|
| 740 |
-
"size": 1.0975609756097562
|
| 741 |
-
},
|
| 742 |
-
{
|
| 743 |
-
"id": "timm_wrapper",
|
| 744 |
-
"is_base": true,
|
| 745 |
-
"size": 1.048780487804878
|
| 746 |
-
},
|
| 747 |
-
{
|
| 748 |
-
"id": "unispeech",
|
| 749 |
-
"is_base": false,
|
| 750 |
-
"size": 1.048780487804878
|
| 751 |
-
},
|
| 752 |
-
{
|
| 753 |
-
"id": "unispeech_sat",
|
| 754 |
-
"is_base": false,
|
| 755 |
-
"size": 1.048780487804878
|
| 756 |
-
},
|
| 757 |
-
{
|
| 758 |
-
"id": "vipllava",
|
| 759 |
-
"is_base": false,
|
| 760 |
-
"size": 1.048780487804878
|
| 761 |
-
},
|
| 762 |
-
{
|
| 763 |
-
"id": "vit",
|
| 764 |
-
"is_base": true,
|
| 765 |
-
"size": 1.0975609756097562
|
| 766 |
-
},
|
| 767 |
-
{
|
| 768 |
-
"id": "voxtral",
|
| 769 |
-
"is_base": false,
|
| 770 |
-
"size": 1.048780487804878
|
| 771 |
-
},
|
| 772 |
-
{
|
| 773 |
-
"id": "wav2vec2",
|
| 774 |
-
"is_base": true,
|
| 775 |
-
"size": 1.3902439024390243
|
| 776 |
-
},
|
| 777 |
-
{
|
| 778 |
-
"id": "wav2vec2_bert",
|
| 779 |
-
"is_base": false,
|
| 780 |
-
"size": 1.0975609756097562
|
| 781 |
-
},
|
| 782 |
-
{
|
| 783 |
-
"id": "wav2vec2_conformer",
|
| 784 |
-
"is_base": false,
|
| 785 |
-
"size": 1.0975609756097562
|
| 786 |
-
},
|
| 787 |
-
{
|
| 788 |
-
"id": "wavlm",
|
| 789 |
-
"is_base": false,
|
| 790 |
-
"size": 1.048780487804878
|
| 791 |
-
},
|
| 792 |
-
{
|
| 793 |
-
"id": "whisper",
|
| 794 |
-
"is_base": true,
|
| 795 |
-
"size": 1.048780487804878
|
| 796 |
-
},
|
| 797 |
-
{
|
| 798 |
-
"id": "yolos",
|
| 799 |
-
"is_base": false,
|
| 800 |
-
"size": 1.048780487804878
|
| 801 |
-
},
|
| 802 |
-
{
|
| 803 |
-
"id": "zamba",
|
| 804 |
-
"is_base": true,
|
| 805 |
-
"size": 1.048780487804878
|
| 806 |
-
},
|
| 807 |
-
{
|
| 808 |
-
"id": "zamba2",
|
| 809 |
-
"is_base": false,
|
| 810 |
-
"size": 1.146341463414634
|
| 811 |
-
}
|
| 812 |
-
],
|
| 813 |
-
"links": [
|
| 814 |
-
{
|
| 815 |
-
"source": "llama",
|
| 816 |
-
"target": "doge",
|
| 817 |
-
"label": "8 classes"
|
| 818 |
-
},
|
| 819 |
-
{
|
| 820 |
-
"source": "mixtral",
|
| 821 |
-
"target": "doge",
|
| 822 |
-
"label": "2 classes"
|
| 823 |
-
},
|
| 824 |
-
{
|
| 825 |
-
"source": "mixtral",
|
| 826 |
-
"target": "minimax",
|
| 827 |
-
"label": "11 classes"
|
| 828 |
-
},
|
| 829 |
-
{
|
| 830 |
-
"source": "clip",
|
| 831 |
-
"target": "phi",
|
| 832 |
-
"label": "1 classes"
|
| 833 |
-
},
|
| 834 |
-
{
|
| 835 |
-
"source": "llama",
|
| 836 |
-
"target": "phi",
|
| 837 |
-
"label": "8 classes"
|
| 838 |
-
},
|
| 839 |
-
{
|
| 840 |
-
"source": "qwen2_vl",
|
| 841 |
-
"target": "qwen2_5_vl",
|
| 842 |
-
"label": "15 classes"
|
| 843 |
-
},
|
| 844 |
-
{
|
| 845 |
-
"source": "ernie4_5",
|
| 846 |
-
"target": "ernie4_5_moe",
|
| 847 |
-
"label": "3 classes"
|
| 848 |
-
},
|
| 849 |
-
{
|
| 850 |
-
"source": "llama",
|
| 851 |
-
"target": "ernie4_5_moe",
|
| 852 |
-
"label": "2 classes"
|
| 853 |
-
},
|
| 854 |
-
{
|
| 855 |
-
"source": "mixtral",
|
| 856 |
-
"target": "ernie4_5_moe",
|
| 857 |
-
"label": "2 classes"
|
| 858 |
-
},
|
| 859 |
-
{
|
| 860 |
-
"source": "qwen3_moe",
|
| 861 |
-
"target": "ernie4_5_moe",
|
| 862 |
-
"label": "2 classes"
|
| 863 |
-
},
|
| 864 |
-
{
|
| 865 |
-
"source": "llama",
|
| 866 |
-
"target": "mistral",
|
| 867 |
-
"label": "10 classes"
|
| 868 |
-
},
|
| 869 |
-
{
|
| 870 |
-
"source": "llama",
|
| 871 |
-
"target": "gpt_neox",
|
| 872 |
-
"label": "4 classes"
|
| 873 |
-
},
|
| 874 |
-
{
|
| 875 |
-
"source": "mistral",
|
| 876 |
-
"target": "phi3",
|
| 877 |
-
"label": "7 classes"
|
| 878 |
-
},
|
| 879 |
-
{
|
| 880 |
-
"source": "wav2vec2",
|
| 881 |
-
"target": "unispeech",
|
| 882 |
-
"label": "9 classes"
|
| 883 |
-
},
|
| 884 |
-
{
|
| 885 |
-
"source": "llama",
|
| 886 |
-
"target": "olmo",
|
| 887 |
-
"label": "8 classes"
|
| 888 |
-
},
|
| 889 |
-
{
|
| 890 |
-
"source": "gemma",
|
| 891 |
-
"target": "helium",
|
| 892 |
-
"label": "3 classes"
|
| 893 |
-
},
|
| 894 |
-
{
|
| 895 |
-
"source": "granite",
|
| 896 |
-
"target": "helium",
|
| 897 |
-
"label": "1 classes"
|
| 898 |
-
},
|
| 899 |
-
{
|
| 900 |
-
"source": "llama",
|
| 901 |
-
"target": "helium",
|
| 902 |
-
"label": "5 classes"
|
| 903 |
-
},
|
| 904 |
-
{
|
| 905 |
-
"source": "gemma",
|
| 906 |
-
"target": "bitnet",
|
| 907 |
-
"label": "1 classes"
|
| 908 |
-
},
|
| 909 |
-
{
|
| 910 |
-
"source": "llama",
|
| 911 |
-
"target": "bitnet",
|
| 912 |
-
"label": "7 classes"
|
| 913 |
-
},
|
| 914 |
-
{
|
| 915 |
-
"source": "maskformer",
|
| 916 |
-
"target": "mask2former",
|
| 917 |
-
"label": "1 classes"
|
| 918 |
-
},
|
| 919 |
-
{
|
| 920 |
-
"source": "jamba",
|
| 921 |
-
"target": "falcon_h1",
|
| 922 |
-
"label": "1 classes"
|
| 923 |
-
},
|
| 924 |
-
{
|
| 925 |
-
"source": "llama",
|
| 926 |
-
"target": "falcon_h1",
|
| 927 |
-
"label": "7 classes"
|
| 928 |
-
},
|
| 929 |
-
{
|
| 930 |
-
"source": "mamba2",
|
| 931 |
-
"target": "falcon_h1",
|
| 932 |
-
"label": "4 classes"
|
| 933 |
-
},
|
| 934 |
-
{
|
| 935 |
-
"source": "llava",
|
| 936 |
-
"target": "got_ocr2",
|
| 937 |
-
"label": "6 classes"
|
| 938 |
-
},
|
| 939 |
-
{
|
| 940 |
-
"source": "sam",
|
| 941 |
-
"target": "got_ocr2",
|
| 942 |
-
"label": "5 classes"
|
| 943 |
-
},
|
| 944 |
-
{
|
| 945 |
-
"source": "esm",
|
| 946 |
-
"target": "evolla",
|
| 947 |
-
"label": "9 classes"
|
| 948 |
-
},
|
| 949 |
-
{
|
| 950 |
-
"source": "llama",
|
| 951 |
-
"target": "evolla",
|
| 952 |
-
"label": "6 classes"
|
| 953 |
-
},
|
| 954 |
-
{
|
| 955 |
-
"source": "gemma2",
|
| 956 |
-
"target": "gemma3n",
|
| 957 |
-
"label": "6 classes"
|
| 958 |
-
},
|
| 959 |
-
{
|
| 960 |
-
"source": "gemma3",
|
| 961 |
-
"target": "gemma3n",
|
| 962 |
-
"label": "6 classes"
|
| 963 |
-
},
|
| 964 |
-
{
|
| 965 |
-
"source": "paligemma",
|
| 966 |
-
"target": "gemma3n",
|
| 967 |
-
"label": "4 classes"
|
| 968 |
-
},
|
| 969 |
-
{
|
| 970 |
-
"source": "timm_wrapper",
|
| 971 |
-
"target": "gemma3n",
|
| 972 |
-
"label": "1 classes"
|
| 973 |
-
},
|
| 974 |
-
{
|
| 975 |
-
"source": "llama",
|
| 976 |
-
"target": "csm",
|
| 977 |
-
"label": "8 classes"
|
| 978 |
-
},
|
| 979 |
-
{
|
| 980 |
-
"source": "owlvit",
|
| 981 |
-
"target": "owlv2",
|
| 982 |
-
"label": "1 classes"
|
| 983 |
-
},
|
| 984 |
-
{
|
| 985 |
-
"source": "llama",
|
| 986 |
-
"target": "zamba2",
|
| 987 |
-
"label": "2 classes"
|
| 988 |
-
},
|
| 989 |
-
{
|
| 990 |
-
"source": "mamba2",
|
| 991 |
-
"target": "zamba2",
|
| 992 |
-
"label": "3 classes"
|
| 993 |
-
},
|
| 994 |
-
{
|
| 995 |
-
"source": "zamba",
|
| 996 |
-
"target": "zamba2",
|
| 997 |
-
"label": "10 classes"
|
| 998 |
-
},
|
| 999 |
-
{
|
| 1000 |
-
"source": "blip",
|
| 1001 |
-
"target": "janus",
|
| 1002 |
-
"label": "1 classes"
|
| 1003 |
-
},
|
| 1004 |
-
{
|
| 1005 |
-
"source": "blip_2",
|
| 1006 |
-
"target": "janus",
|
| 1007 |
-
"label": "1 classes"
|
| 1008 |
-
},
|
| 1009 |
-
{
|
| 1010 |
-
"source": "chameleon",
|
| 1011 |
-
"target": "janus",
|
| 1012 |
-
"label": "6 classes"
|
| 1013 |
-
},
|
| 1014 |
-
{
|
| 1015 |
-
"source": "idefics",
|
| 1016 |
-
"target": "janus",
|
| 1017 |
-
"label": "2 classes"
|
| 1018 |
-
},
|
| 1019 |
-
{
|
| 1020 |
-
"source": "llama",
|
| 1021 |
-
"target": "janus",
|
| 1022 |
-
"label": "1 classes"
|
| 1023 |
-
},
|
| 1024 |
-
{
|
| 1025 |
-
"source": "siglip",
|
| 1026 |
-
"target": "janus",
|
| 1027 |
-
"label": "4 classes"
|
| 1028 |
-
},
|
| 1029 |
-
{
|
| 1030 |
-
"source": "wav2vec2",
|
| 1031 |
-
"target": "wav2vec2_conformer",
|
| 1032 |
-
"label": "13 classes"
|
| 1033 |
-
},
|
| 1034 |
-
{
|
| 1035 |
-
"source": "clip",
|
| 1036 |
-
"target": "mlcd",
|
| 1037 |
-
"label": "7 classes"
|
| 1038 |
-
},
|
| 1039 |
-
{
|
| 1040 |
-
"source": "llama",
|
| 1041 |
-
"target": "mlcd",
|
| 1042 |
-
"label": "1 classes"
|
| 1043 |
-
},
|
| 1044 |
-
{
|
| 1045 |
-
"source": "qwen2_vl",
|
| 1046 |
-
"target": "mlcd",
|
| 1047 |
-
"label": "2 classes"
|
| 1048 |
-
},
|
| 1049 |
-
{
|
| 1050 |
-
"source": "gemma2",
|
| 1051 |
-
"target": "gemma3",
|
| 1052 |
-
"label": "10 classes"
|
| 1053 |
-
},
|
| 1054 |
-
{
|
| 1055 |
-
"source": "paligemma",
|
| 1056 |
-
"target": "gemma3",
|
| 1057 |
-
"label": "4 classes"
|
| 1058 |
-
},
|
| 1059 |
-
{
|
| 1060 |
-
"source": "instructblip",
|
| 1061 |
-
"target": "instructblipvideo",
|
| 1062 |
-
"label": "9 classes"
|
| 1063 |
-
},
|
| 1064 |
-
{
|
| 1065 |
-
"source": "auto",
|
| 1066 |
-
"target": "instructblipvideo",
|
| 1067 |
-
"label": "1 classes"
|
| 1068 |
-
},
|
| 1069 |
-
{
|
| 1070 |
-
"source": "glm4",
|
| 1071 |
-
"target": "glm4v",
|
| 1072 |
-
"label": "3 classes"
|
| 1073 |
-
},
|
| 1074 |
-
{
|
| 1075 |
-
"source": "qwen2_5_vl",
|
| 1076 |
-
"target": "glm4v",
|
| 1077 |
-
"label": "16 classes"
|
| 1078 |
-
},
|
| 1079 |
-
{
|
| 1080 |
-
"source": "llama",
|
| 1081 |
-
"target": "exaone4",
|
| 1082 |
-
"label": "10 classes"
|
| 1083 |
-
},
|
| 1084 |
-
{
|
| 1085 |
-
"source": "olmo2",
|
| 1086 |
-
"target": "exaone4",
|
| 1087 |
-
"label": "2 classes"
|
| 1088 |
-
},
|
| 1089 |
-
{
|
| 1090 |
-
"source": "cohere",
|
| 1091 |
-
"target": "glm4_moe",
|
| 1092 |
-
"label": "1 classes"
|
| 1093 |
-
},
|
| 1094 |
-
{
|
| 1095 |
-
"source": "deepseek_v3",
|
| 1096 |
-
"target": "glm4_moe",
|
| 1097 |
-
"label": "7 classes"
|
| 1098 |
-
},
|
| 1099 |
-
{
|
| 1100 |
-
"source": "gpt_neox",
|
| 1101 |
-
"target": "glm4_moe",
|
| 1102 |
-
"label": "1 classes"
|
| 1103 |
-
},
|
| 1104 |
-
{
|
| 1105 |
-
"source": "detr",
|
| 1106 |
-
"target": "conditional_detr",
|
| 1107 |
-
"label": "1 classes"
|
| 1108 |
-
},
|
| 1109 |
-
{
|
| 1110 |
-
"source": "detr",
|
| 1111 |
-
"target": "grounding_dino",
|
| 1112 |
-
"label": "1 classes"
|
| 1113 |
-
},
|
| 1114 |
-
{
|
| 1115 |
-
"source": "gemma",
|
| 1116 |
-
"target": "qwen3",
|
| 1117 |
-
"label": "1 classes"
|
| 1118 |
-
},
|
| 1119 |
-
{
|
| 1120 |
-
"source": "llama",
|
| 1121 |
-
"target": "qwen3",
|
| 1122 |
-
"label": "1 classes"
|
| 1123 |
-
},
|
| 1124 |
-
{
|
| 1125 |
-
"source": "qwen2",
|
| 1126 |
-
"target": "qwen3",
|
| 1127 |
-
"label": "10 classes"
|
| 1128 |
-
},
|
| 1129 |
-
{
|
| 1130 |
-
"source": "llava_next",
|
| 1131 |
-
"target": "llava_onevision",
|
| 1132 |
-
"label": "1 classes"
|
| 1133 |
-
},
|
| 1134 |
-
{
|
| 1135 |
-
"source": "llava_next_video",
|
| 1136 |
-
"target": "llava_onevision",
|
| 1137 |
-
"label": "9 classes"
|
| 1138 |
-
},
|
| 1139 |
-
{
|
| 1140 |
-
"source": "llava",
|
| 1141 |
-
"target": "vipllava",
|
| 1142 |
-
"label": "5 classes"
|
| 1143 |
-
},
|
| 1144 |
-
{
|
| 1145 |
-
"source": "detr",
|
| 1146 |
-
"target": "deformable_detr",
|
| 1147 |
-
"label": "1 classes"
|
| 1148 |
-
},
|
| 1149 |
-
{
|
| 1150 |
-
"source": "llava",
|
| 1151 |
-
"target": "perception_lm",
|
| 1152 |
-
"label": "5 classes"
|
| 1153 |
-
},
|
| 1154 |
-
{
|
| 1155 |
-
"source": "wav2vec2",
|
| 1156 |
-
"target": "wavlm",
|
| 1157 |
-
"label": "9 classes"
|
| 1158 |
-
},
|
| 1159 |
-
{
|
| 1160 |
-
"source": "llama",
|
| 1161 |
-
"target": "glm",
|
| 1162 |
-
"label": "4 classes"
|
| 1163 |
-
},
|
| 1164 |
-
{
|
| 1165 |
-
"source": "phi3",
|
| 1166 |
-
"target": "glm",
|
| 1167 |
-
"label": "1 classes"
|
| 1168 |
-
},
|
| 1169 |
-
{
|
| 1170 |
-
"source": "llama",
|
| 1171 |
-
"target": "timesfm",
|
| 1172 |
-
"label": "1 classes"
|
| 1173 |
-
},
|
| 1174 |
-
{
|
| 1175 |
-
"source": "phi4_multimodal",
|
| 1176 |
-
"target": "timesfm",
|
| 1177 |
-
"label": "1 classes"
|
| 1178 |
-
},
|
| 1179 |
-
{
|
| 1180 |
-
"source": "image_processing_base",
|
| 1181 |
-
"target": "dpt",
|
| 1182 |
-
"label": "1 classes"
|
| 1183 |
-
},
|
| 1184 |
-
{
|
| 1185 |
-
"source": "beit",
|
| 1186 |
-
"target": "dpt",
|
| 1187 |
-
"label": "1 classes"
|
| 1188 |
-
},
|
| 1189 |
-
{
|
| 1190 |
-
"source": "llama",
|
| 1191 |
-
"target": "gemma",
|
| 1192 |
-
"label": "5 classes"
|
| 1193 |
-
},
|
| 1194 |
-
{
|
| 1195 |
-
"source": "llama",
|
| 1196 |
-
"target": "kyutai_speech_to_text",
|
| 1197 |
-
"label": "1 classes"
|
| 1198 |
-
},
|
| 1199 |
-
{
|
| 1200 |
-
"source": "mimi",
|
| 1201 |
-
"target": "kyutai_speech_to_text",
|
| 1202 |
-
"label": "1 classes"
|
| 1203 |
-
},
|
| 1204 |
-
{
|
| 1205 |
-
"source": "moshi",
|
| 1206 |
-
"target": "kyutai_speech_to_text",
|
| 1207 |
-
"label": "2 classes"
|
| 1208 |
-
},
|
| 1209 |
-
{
|
| 1210 |
-
"source": "llama",
|
| 1211 |
-
"target": "granite",
|
| 1212 |
-
"label": "5 classes"
|
| 1213 |
-
},
|
| 1214 |
-
{
|
| 1215 |
-
"source": "idefics3",
|
| 1216 |
-
"target": "smolvlm",
|
| 1217 |
-
"label": "9 classes"
|
| 1218 |
-
},
|
| 1219 |
-
{
|
| 1220 |
-
"source": "granitemoe",
|
| 1221 |
-
"target": "granitemoeshared",
|
| 1222 |
-
"label": "4 classes"
|
| 1223 |
-
},
|
| 1224 |
-
{
|
| 1225 |
-
"source": "glm",
|
| 1226 |
-
"target": "moonshine",
|
| 1227 |
-
"label": "3 classes"
|
| 1228 |
-
},
|
| 1229 |
-
{
|
| 1230 |
-
"source": "llama",
|
| 1231 |
-
"target": "moonshine",
|
| 1232 |
-
"label": "3 classes"
|
| 1233 |
-
},
|
| 1234 |
-
{
|
| 1235 |
-
"source": "whisper",
|
| 1236 |
-
"target": "moonshine",
|
| 1237 |
-
"label": "2 classes"
|
| 1238 |
-
},
|
| 1239 |
-
{
|
| 1240 |
-
"source": "llava",
|
| 1241 |
-
"target": "aya_vision",
|
| 1242 |
-
"label": "6 classes"
|
| 1243 |
-
},
|
| 1244 |
-
{
|
| 1245 |
-
"source": "deepseek_v3",
|
| 1246 |
-
"target": "dots1",
|
| 1247 |
-
"label": "5 classes"
|
| 1248 |
-
},
|
| 1249 |
-
{
|
| 1250 |
-
"source": "qwen3",
|
| 1251 |
-
"target": "dots1",
|
| 1252 |
-
"label": "6 classes"
|
| 1253 |
-
},
|
| 1254 |
-
{
|
| 1255 |
-
"source": "mistral",
|
| 1256 |
-
"target": "starcoder2",
|
| 1257 |
-
"label": "9 classes"
|
| 1258 |
-
},
|
| 1259 |
-
{
|
| 1260 |
-
"source": "modeling_outputs",
|
| 1261 |
-
"target": "sam_hq",
|
| 1262 |
-
"label": "1 classes"
|
| 1263 |
-
},
|
| 1264 |
-
{
|
| 1265 |
-
"source": "sam",
|
| 1266 |
-
"target": "sam_hq",
|
| 1267 |
-
"label": "15 classes"
|
| 1268 |
-
},
|
| 1269 |
-
{
|
| 1270 |
-
"source": "wav2vec2",
|
| 1271 |
-
"target": "wav2vec2_bert",
|
| 1272 |
-
"label": "3 classes"
|
| 1273 |
-
},
|
| 1274 |
-
{
|
| 1275 |
-
"source": "wav2vec2_conformer",
|
| 1276 |
-
"target": "wav2vec2_bert",
|
| 1277 |
-
"label": "6 classes"
|
| 1278 |
-
},
|
| 1279 |
-
{
|
| 1280 |
-
"source": "mistral",
|
| 1281 |
-
"target": "mixtral",
|
| 1282 |
-
"label": "9 classes"
|
| 1283 |
-
},
|
| 1284 |
-
{
|
| 1285 |
-
"source": "chameleon",
|
| 1286 |
-
"target": "emu3",
|
| 1287 |
-
"label": "2 classes"
|
| 1288 |
-
},
|
| 1289 |
-
{
|
| 1290 |
-
"source": "llama",
|
| 1291 |
-
"target": "emu3",
|
| 1292 |
-
"label": "5 classes"
|
| 1293 |
-
},
|
| 1294 |
-
{
|
| 1295 |
-
"source": "siglip",
|
| 1296 |
-
"target": "emu3",
|
| 1297 |
-
"label": "1 classes"
|
| 1298 |
-
},
|
| 1299 |
-
{
|
| 1300 |
-
"source": "paligemma",
|
| 1301 |
-
"target": "colpali",
|
| 1302 |
-
"label": "3 classes"
|
| 1303 |
-
},
|
| 1304 |
-
{
|
| 1305 |
-
"source": "phi3",
|
| 1306 |
-
"target": "phi4_multimodal",
|
| 1307 |
-
"label": "7 classes"
|
| 1308 |
-
},
|
| 1309 |
-
{
|
| 1310 |
-
"source": "siglip",
|
| 1311 |
-
"target": "phi4_multimodal",
|
| 1312 |
-
"label": "9 classes"
|
| 1313 |
-
},
|
| 1314 |
-
{
|
| 1315 |
-
"source": "qwen2_audio",
|
| 1316 |
-
"target": "voxtral",
|
| 1317 |
-
"label": "4 classes"
|
| 1318 |
-
},
|
| 1319 |
-
{
|
| 1320 |
-
"source": "idefics",
|
| 1321 |
-
"target": "deepseek_vl",
|
| 1322 |
-
"label": "2 classes"
|
| 1323 |
-
},
|
| 1324 |
-
{
|
| 1325 |
-
"source": "janus",
|
| 1326 |
-
"target": "deepseek_vl",
|
| 1327 |
-
"label": "4 classes"
|
| 1328 |
-
},
|
| 1329 |
-
{
|
| 1330 |
-
"source": "glm",
|
| 1331 |
-
"target": "glm4",
|
| 1332 |
-
"label": "4 classes"
|
| 1333 |
-
},
|
| 1334 |
-
{
|
| 1335 |
-
"source": "phi3",
|
| 1336 |
-
"target": "glm4",
|
| 1337 |
-
"label": "1 classes"
|
| 1338 |
-
},
|
| 1339 |
-
{
|
| 1340 |
-
"source": "gemma2",
|
| 1341 |
-
"target": "t5gemma",
|
| 1342 |
-
"label": "9 classes"
|
| 1343 |
-
},
|
| 1344 |
-
{
|
| 1345 |
-
"source": "auto",
|
| 1346 |
-
"target": "lightglue",
|
| 1347 |
-
"label": "1 classes"
|
| 1348 |
-
},
|
| 1349 |
-
{
|
| 1350 |
-
"source": "clip",
|
| 1351 |
-
"target": "lightglue",
|
| 1352 |
-
"label": "1 classes"
|
| 1353 |
-
},
|
| 1354 |
-
{
|
| 1355 |
-
"source": "cohere",
|
| 1356 |
-
"target": "lightglue",
|
| 1357 |
-
"label": "1 classes"
|
| 1358 |
-
},
|
| 1359 |
-
{
|
| 1360 |
-
"source": "llama",
|
| 1361 |
-
"target": "lightglue",
|
| 1362 |
-
"label": "2 classes"
|
| 1363 |
-
},
|
| 1364 |
-
{
|
| 1365 |
-
"source": "superglue",
|
| 1366 |
-
"target": "lightglue",
|
| 1367 |
-
"label": "2 classes"
|
| 1368 |
-
},
|
| 1369 |
-
{
|
| 1370 |
-
"source": "llava_next",
|
| 1371 |
-
"target": "llava_next_video",
|
| 1372 |
-
"label": "7 classes"
|
| 1373 |
-
},
|
| 1374 |
-
{
|
| 1375 |
-
"source": "rt_detr",
|
| 1376 |
-
"target": "hgnet_v2",
|
| 1377 |
-
"label": "1 classes"
|
| 1378 |
-
},
|
| 1379 |
-
{
|
| 1380 |
-
"source": "deepseek_vl",
|
| 1381 |
-
"target": "deepseek_vl_hybrid",
|
| 1382 |
-
"label": "7 classes"
|
| 1383 |
-
},
|
| 1384 |
-
{
|
| 1385 |
-
"source": "idefics",
|
| 1386 |
-
"target": "deepseek_vl_hybrid",
|
| 1387 |
-
"label": "2 classes"
|
| 1388 |
-
},
|
| 1389 |
-
{
|
| 1390 |
-
"source": "sam",
|
| 1391 |
-
"target": "deepseek_vl_hybrid",
|
| 1392 |
-
"label": "2 classes"
|
| 1393 |
-
},
|
| 1394 |
-
{
|
| 1395 |
-
"source": "wav2vec2",
|
| 1396 |
-
"target": "data2vec",
|
| 1397 |
-
"label": "11 classes"
|
| 1398 |
-
},
|
| 1399 |
-
{
|
| 1400 |
-
"source": "depth_anything",
|
| 1401 |
-
"target": "prompt_depth_anything",
|
| 1402 |
-
"label": "7 classes"
|
| 1403 |
-
},
|
| 1404 |
-
{
|
| 1405 |
-
"source": "gemma",
|
| 1406 |
-
"target": "modernbert",
|
| 1407 |
-
"label": "2 classes"
|
| 1408 |
-
},
|
| 1409 |
-
{
|
| 1410 |
-
"source": "bamba",
|
| 1411 |
-
"target": "lfm2",
|
| 1412 |
-
"label": "1 classes"
|
| 1413 |
-
},
|
| 1414 |
-
{
|
| 1415 |
-
"source": "llama",
|
| 1416 |
-
"target": "lfm2",
|
| 1417 |
-
"label": "8 classes"
|
| 1418 |
-
},
|
| 1419 |
-
{
|
| 1420 |
-
"source": "wav2vec2",
|
| 1421 |
-
"target": "sew",
|
| 1422 |
-
"label": "11 classes"
|
| 1423 |
-
},
|
| 1424 |
-
{
|
| 1425 |
-
"source": "wav2vec2",
|
| 1426 |
-
"target": "hubert",
|
| 1427 |
-
"label": "7 classes"
|
| 1428 |
-
},
|
| 1429 |
-
{
|
| 1430 |
-
"source": "gemma",
|
| 1431 |
-
"target": "gemma2",
|
| 1432 |
-
"label": "9 classes"
|
| 1433 |
-
},
|
| 1434 |
-
{
|
| 1435 |
-
"source": "detr",
|
| 1436 |
-
"target": "rt_detr",
|
| 1437 |
-
"label": "2 classes"
|
| 1438 |
-
},
|
| 1439 |
-
{
|
| 1440 |
-
"source": "rt_detr",
|
| 1441 |
-
"target": "d_fine",
|
| 1442 |
-
"label": "12 classes"
|
| 1443 |
-
},
|
| 1444 |
-
{
|
| 1445 |
-
"source": "rt_detr_v2",
|
| 1446 |
-
"target": "d_fine",
|
| 1447 |
-
"label": "1 classes"
|
| 1448 |
-
},
|
| 1449 |
-
{
|
| 1450 |
-
"source": "llava",
|
| 1451 |
-
"target": "mistral3",
|
| 1452 |
-
"label": "6 classes"
|
| 1453 |
-
},
|
| 1454 |
-
{
|
| 1455 |
-
"source": "mistral",
|
| 1456 |
-
"target": "mistral3",
|
| 1457 |
-
"label": "1 classes"
|
| 1458 |
-
},
|
| 1459 |
-
{
|
| 1460 |
-
"source": "modernbert",
|
| 1461 |
-
"target": "modernbert_decoder",
|
| 1462 |
-
"label": "6 classes"
|
| 1463 |
-
},
|
| 1464 |
-
{
|
| 1465 |
-
"source": "llama",
|
| 1466 |
-
"target": "aria",
|
| 1467 |
-
"label": "8 classes"
|
| 1468 |
-
},
|
| 1469 |
-
{
|
| 1470 |
-
"source": "llava",
|
| 1471 |
-
"target": "aria",
|
| 1472 |
-
"label": "4 classes"
|
| 1473 |
-
},
|
| 1474 |
-
{
|
| 1475 |
-
"source": "llava_next",
|
| 1476 |
-
"target": "aria",
|
| 1477 |
-
"label": "1 classes"
|
| 1478 |
-
},
|
| 1479 |
-
{
|
| 1480 |
-
"source": "siglip",
|
| 1481 |
-
"target": "siglip2",
|
| 1482 |
-
"label": "16 classes"
|
| 1483 |
-
},
|
| 1484 |
-
{
|
| 1485 |
-
"source": "llama",
|
| 1486 |
-
"target": "arcee",
|
| 1487 |
-
"label": "5 classes"
|
| 1488 |
-
},
|
| 1489 |
-
{
|
| 1490 |
-
"source": "nemotron",
|
| 1491 |
-
"target": "arcee",
|
| 1492 |
-
"label": "1 classes"
|
| 1493 |
-
},
|
| 1494 |
-
{
|
| 1495 |
-
"source": "mamba",
|
| 1496 |
-
"target": "falcon_mamba",
|
| 1497 |
-
"label": "10 classes"
|
| 1498 |
-
},
|
| 1499 |
-
{
|
| 1500 |
-
"source": "llama",
|
| 1501 |
-
"target": "deepseek_v2",
|
| 1502 |
-
"label": "9 classes"
|
| 1503 |
-
},
|
| 1504 |
-
{
|
| 1505 |
-
"source": "llama4",
|
| 1506 |
-
"target": "deepseek_v2",
|
| 1507 |
-
"label": "1 classes"
|
| 1508 |
-
},
|
| 1509 |
-
{
|
| 1510 |
-
"source": "bart",
|
| 1511 |
-
"target": "informer",
|
| 1512 |
-
"label": "1 classes"
|
| 1513 |
-
},
|
| 1514 |
-
{
|
| 1515 |
-
"source": "time_series_transformer",
|
| 1516 |
-
"target": "informer",
|
| 1517 |
-
"label": "12 classes"
|
| 1518 |
-
},
|
| 1519 |
-
{
|
| 1520 |
-
"source": "colpali",
|
| 1521 |
-
"target": "colqwen2",
|
| 1522 |
-
"label": "3 classes"
|
| 1523 |
-
},
|
| 1524 |
-
{
|
| 1525 |
-
"source": "bamba",
|
| 1526 |
-
"target": "granitemoehybrid",
|
| 1527 |
-
"label": "4 classes"
|
| 1528 |
-
},
|
| 1529 |
-
{
|
| 1530 |
-
"source": "granitemoeshared",
|
| 1531 |
-
"target": "granitemoehybrid",
|
| 1532 |
-
"label": "7 classes"
|
| 1533 |
-
},
|
| 1534 |
-
{
|
| 1535 |
-
"source": "bart",
|
| 1536 |
-
"target": "plbart",
|
| 1537 |
-
"label": "5 classes"
|
| 1538 |
-
},
|
| 1539 |
-
{
|
| 1540 |
-
"source": "bigbird_pegasus",
|
| 1541 |
-
"target": "plbart",
|
| 1542 |
-
"label": "1 classes"
|
| 1543 |
-
},
|
| 1544 |
-
{
|
| 1545 |
-
"source": "mbart",
|
| 1546 |
-
"target": "plbart",
|
| 1547 |
-
"label": "1 classes"
|
| 1548 |
-
},
|
| 1549 |
-
{
|
| 1550 |
-
"source": "llama",
|
| 1551 |
-
"target": "qwen3_moe",
|
| 1552 |
-
"label": "4 classes"
|
| 1553 |
-
},
|
| 1554 |
-
{
|
| 1555 |
-
"source": "mixtral",
|
| 1556 |
-
"target": "qwen3_moe",
|
| 1557 |
-
"label": "3 classes"
|
| 1558 |
-
},
|
| 1559 |
-
{
|
| 1560 |
-
"source": "qwen2_moe",
|
| 1561 |
-
"target": "qwen3_moe",
|
| 1562 |
-
"label": "1 classes"
|
| 1563 |
-
},
|
| 1564 |
-
{
|
| 1565 |
-
"source": "qwen3",
|
| 1566 |
-
"target": "qwen3_moe",
|
| 1567 |
-
"label": "1 classes"
|
| 1568 |
-
},
|
| 1569 |
-
{
|
| 1570 |
-
"source": "clip",
|
| 1571 |
-
"target": "internvl",
|
| 1572 |
-
"label": "1 classes"
|
| 1573 |
-
},
|
| 1574 |
-
{
|
| 1575 |
-
"source": "janus",
|
| 1576 |
-
"target": "internvl",
|
| 1577 |
-
"label": "1 classes"
|
| 1578 |
-
},
|
| 1579 |
-
{
|
| 1580 |
-
"source": "llama",
|
| 1581 |
-
"target": "internvl",
|
| 1582 |
-
"label": "1 classes"
|
| 1583 |
-
},
|
| 1584 |
-
{
|
| 1585 |
-
"source": "llava",
|
| 1586 |
-
"target": "internvl",
|
| 1587 |
-
"label": "5 classes"
|
| 1588 |
-
},
|
| 1589 |
-
{
|
| 1590 |
-
"source": "glm",
|
| 1591 |
-
"target": "ernie4_5",
|
| 1592 |
-
"label": "1 classes"
|
| 1593 |
-
},
|
| 1594 |
-
{
|
| 1595 |
-
"source": "llama",
|
| 1596 |
-
"target": "ernie4_5",
|
| 1597 |
-
"label": "4 classes"
|
| 1598 |
-
},
|
| 1599 |
-
{
|
| 1600 |
-
"source": "dinov2",
|
| 1601 |
-
"target": "eomt",
|
| 1602 |
-
"label": "4 classes"
|
| 1603 |
-
},
|
| 1604 |
-
{
|
| 1605 |
-
"source": "mask2former",
|
| 1606 |
-
"target": "eomt",
|
| 1607 |
-
"label": "2 classes"
|
| 1608 |
-
},
|
| 1609 |
-
{
|
| 1610 |
-
"source": "siglip",
|
| 1611 |
-
"target": "eomt",
|
| 1612 |
-
"label": "1 classes"
|
| 1613 |
-
},
|
| 1614 |
-
{
|
| 1615 |
-
"source": "vit",
|
| 1616 |
-
"target": "eomt",
|
| 1617 |
-
"label": "1 classes"
|
| 1618 |
-
},
|
| 1619 |
-
{
|
| 1620 |
-
"source": "llama",
|
| 1621 |
-
"target": "dia",
|
| 1622 |
-
"label": "4 classes"
|
| 1623 |
-
},
|
| 1624 |
-
{
|
| 1625 |
-
"source": "phi3",
|
| 1626 |
-
"target": "dia",
|
| 1627 |
-
"label": "1 classes"
|
| 1628 |
-
},
|
| 1629 |
-
{
|
| 1630 |
-
"source": "llama",
|
| 1631 |
-
"target": "deepseek_v3",
|
| 1632 |
-
"label": "9 classes"
|
| 1633 |
-
},
|
| 1634 |
-
{
|
| 1635 |
-
"source": "jamba",
|
| 1636 |
-
"target": "bamba",
|
| 1637 |
-
"label": "2 classes"
|
| 1638 |
-
},
|
| 1639 |
-
{
|
| 1640 |
-
"source": "llama",
|
| 1641 |
-
"target": "bamba",
|
| 1642 |
-
"label": "6 classes"
|
| 1643 |
-
},
|
| 1644 |
-
{
|
| 1645 |
-
"source": "mamba2",
|
| 1646 |
-
"target": "bamba",
|
| 1647 |
-
"label": "4 classes"
|
| 1648 |
-
},
|
| 1649 |
-
{
|
| 1650 |
-
"source": "llama",
|
| 1651 |
-
"target": "olmo2",
|
| 1652 |
-
"label": "3 classes"
|
| 1653 |
-
},
|
| 1654 |
-
{
|
| 1655 |
-
"source": "olmo",
|
| 1656 |
-
"target": "olmo2",
|
| 1657 |
-
"label": "7 classes"
|
| 1658 |
-
},
|
| 1659 |
-
{
|
| 1660 |
-
"source": "clip",
|
| 1661 |
-
"target": "aimv2",
|
| 1662 |
-
"label": "3 classes"
|
| 1663 |
-
},
|
| 1664 |
-
{
|
| 1665 |
-
"source": "llama",
|
| 1666 |
-
"target": "aimv2",
|
| 1667 |
-
"label": "2 classes"
|
| 1668 |
-
},
|
| 1669 |
-
{
|
| 1670 |
-
"source": "siglip",
|
| 1671 |
-
"target": "aimv2",
|
| 1672 |
-
"label": "6 classes"
|
| 1673 |
-
},
|
| 1674 |
-
{
|
| 1675 |
-
"source": "gemma",
|
| 1676 |
-
"target": "diffllama",
|
| 1677 |
-
"label": "1 classes"
|
| 1678 |
-
},
|
| 1679 |
-
{
|
| 1680 |
-
"source": "llama",
|
| 1681 |
-
"target": "diffllama",
|
| 1682 |
-
"label": "8 classes"
|
| 1683 |
-
},
|
| 1684 |
-
{
|
| 1685 |
-
"source": "mistral",
|
| 1686 |
-
"target": "diffllama",
|
| 1687 |
-
"label": "1 classes"
|
| 1688 |
-
},
|
| 1689 |
-
{
|
| 1690 |
-
"source": "rt_detr",
|
| 1691 |
-
"target": "rt_detr_v2",
|
| 1692 |
-
"label": "6 classes"
|
| 1693 |
-
},
|
| 1694 |
-
{
|
| 1695 |
-
"source": "vit",
|
| 1696 |
-
"target": "ijepa",
|
| 1697 |
-
"label": "3 classes"
|
| 1698 |
-
},
|
| 1699 |
-
{
|
| 1700 |
-
"source": "llama",
|
| 1701 |
-
"target": "smollm3",
|
| 1702 |
-
"label": "9 classes"
|
| 1703 |
-
},
|
| 1704 |
-
{
|
| 1705 |
-
"source": "qwen2",
|
| 1706 |
-
"target": "smollm3",
|
| 1707 |
-
"label": "1 classes"
|
| 1708 |
-
},
|
| 1709 |
-
{
|
| 1710 |
-
"source": "cohere",
|
| 1711 |
-
"target": "cohere2",
|
| 1712 |
-
"label": "8 classes"
|
| 1713 |
-
},
|
| 1714 |
-
{
|
| 1715 |
-
"source": "gemma2",
|
| 1716 |
-
"target": "cohere2",
|
| 1717 |
-
"label": "1 classes"
|
| 1718 |
-
},
|
| 1719 |
-
{
|
| 1720 |
-
"source": "bart",
|
| 1721 |
-
"target": "biogpt",
|
| 1722 |
-
"label": "3 classes"
|
| 1723 |
-
},
|
| 1724 |
-
{
|
| 1725 |
-
"source": "opt",
|
| 1726 |
-
"target": "biogpt",
|
| 1727 |
-
"label": "1 classes"
|
| 1728 |
-
},
|
| 1729 |
-
{
|
| 1730 |
-
"source": "detr",
|
| 1731 |
-
"target": "yolos",
|
| 1732 |
-
"label": "1 classes"
|
| 1733 |
-
},
|
| 1734 |
-
{
|
| 1735 |
-
"source": "wav2vec2",
|
| 1736 |
-
"target": "unispeech_sat",
|
| 1737 |
-
"label": "11 classes"
|
| 1738 |
-
},
|
| 1739 |
-
{
|
| 1740 |
-
"source": "llama",
|
| 1741 |
-
"target": "qwen2",
|
| 1742 |
-
"label": "10 classes"
|
| 1743 |
-
},
|
| 1744 |
-
{
|
| 1745 |
-
"source": "mistral",
|
| 1746 |
-
"target": "qwen2",
|
| 1747 |
-
"label": "1 classes"
|
| 1748 |
-
},
|
| 1749 |
-
{
|
| 1750 |
-
"source": "llama",
|
| 1751 |
-
"target": "cohere",
|
| 1752 |
-
"label": "6 classes"
|
| 1753 |
-
},
|
| 1754 |
-
{
|
| 1755 |
-
"source": "llama",
|
| 1756 |
-
"target": "qwen2_5_omni",
|
| 1757 |
-
"label": "1 classes"
|
| 1758 |
-
},
|
| 1759 |
-
{
|
| 1760 |
-
"source": "qwen2_5_vl",
|
| 1761 |
-
"target": "qwen2_5_omni",
|
| 1762 |
-
"label": "8 classes"
|
| 1763 |
-
},
|
| 1764 |
-
{
|
| 1765 |
-
"source": "qwen2_audio",
|
| 1766 |
-
"target": "qwen2_5_omni",
|
| 1767 |
-
"label": "2 classes"
|
| 1768 |
-
},
|
| 1769 |
-
{
|
| 1770 |
-
"source": "qwen2_vl",
|
| 1771 |
-
"target": "qwen2_5_omni",
|
| 1772 |
-
"label": "1 classes"
|
| 1773 |
-
},
|
| 1774 |
-
{
|
| 1775 |
-
"source": "dinov2",
|
| 1776 |
-
"target": "dinov2_with_registers",
|
| 1777 |
-
"label": "6 classes"
|
| 1778 |
-
}
|
| 1779 |
-
]
|
| 1780 |
-
};
|
| 1781 |
-
const hfLogoPath = "M21.2,6.7c-0.2-0.2-0.5-0.3-0.8-0.3H3.6C3.3,6.4,3,6.5,2.8,6.7s-0.3,0.5-0.3,0.8v10.8c0,0.3,0.1,0.5,0.3,0.8 c0.2,0.2,0.5,0.3,0.8,0.3h16.8c0.3,0,0.5-0.1,0.8-0.3c0.2-0.2,0.3-0.5,0.3-0.8V7.5C21.5,7.2,21.4,6.9,21.2,6.7z M12,17.8L5.9,9.4h3.1 V8.3h6v1.1h3.1L12,17.8z"; // kept for potential future use
|
| 1782 |
-
|
| 1783 |
-
const width = window.innerWidth;
|
| 1784 |
-
const height = window.innerHeight;
|
| 1785 |
-
|
| 1786 |
-
const svg = d3.select('#dependency-graph')
|
| 1787 |
-
.call(
|
| 1788 |
-
d3.zoom().on('zoom', (event) => {
|
| 1789 |
-
g.attr('transform', event.transform);
|
| 1790 |
-
})
|
| 1791 |
-
);
|
| 1792 |
-
|
| 1793 |
-
const g = svg.append('g');
|
| 1794 |
-
|
| 1795 |
-
// Forces β tweaked for tighter graph
|
| 1796 |
-
const simulation = d3.forceSimulation(graphData.nodes)
|
| 1797 |
-
.force('link', d3.forceLink(graphData.links).id(d => d.id).distance(500))
|
| 1798 |
-
.force('charge', d3.forceManyBody().strength(-500))
|
| 1799 |
-
.force('center', d3.forceCenter(width / 2, height / 2))
|
| 1800 |
-
.force('collide', d3.forceCollide(0.01 * parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseβsize'))));
|
| 1801 |
-
|
| 1802 |
-
// Links
|
| 1803 |
-
const link = g.append('g')
|
| 1804 |
-
.selectAll('line')
|
| 1805 |
-
.data(graphData.links)
|
| 1806 |
-
.join('line')
|
| 1807 |
-
.attr('class', 'link')
|
| 1808 |
-
.attr('stroke-width', 1.5);
|
| 1809 |
-
|
| 1810 |
-
// Linkβlabels (#classes)
|
| 1811 |
-
const linkLabel = g.append('g')
|
| 1812 |
-
.selectAll('text')
|
| 1813 |
-
.data(graphData.links)
|
| 1814 |
-
.join('text')
|
| 1815 |
-
.attr('class', 'link-label')
|
| 1816 |
-
.text(d => d.label);
|
| 1817 |
-
|
| 1818 |
-
// Nodes (base vs derived)
|
| 1819 |
-
const node = g.append('g')
|
| 1820 |
-
.selectAll('g')
|
| 1821 |
-
.data(graphData.nodes)
|
| 1822 |
-
.join('g')
|
| 1823 |
-
.attr('class', d => d.is_base ? 'node base' : 'node derived')
|
| 1824 |
-
.call(d3.drag()
|
| 1825 |
-
.on('start', dragstarted)
|
| 1826 |
-
.on('drag', dragged)
|
| 1827 |
-
.on('end', dragended)
|
| 1828 |
-
);
|
| 1829 |
-
|
| 1830 |
-
// Baseβmodel icon (HF logo)
|
| 1831 |
-
node.filter(d => d.is_base)
|
| 1832 |
-
.append('image')
|
| 1833 |
-
.attr('xlink:href', 'hf-logo.svg')
|
| 1834 |
-
.attr('x', -parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseβsize')) / 2)
|
| 1835 |
-
.attr('y', -parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseβsize')) / 2)
|
| 1836 |
-
.attr('width', parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseβsize')))
|
| 1837 |
-
.attr('height', parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseβsize')));
|
| 1838 |
-
|
| 1839 |
-
// Baseβmodel label (below icon)
|
| 1840 |
-
node.filter(d => d.is_base)
|
| 1841 |
-
.append('text')
|
| 1842 |
-
.attr('class', 'node-label')
|
| 1843 |
-
.attr('y', parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseβsize')) / 2 + 8)
|
| 1844 |
-
.style('font-size', '40px')
|
| 1845 |
-
.text(d => d.id);
|
| 1846 |
-
|
| 1847 |
-
// Derivedβmodel circle + label w/ background rect
|
| 1848 |
-
const derived = node.filter(d => !d.is_base);
|
| 1849 |
-
|
| 1850 |
-
derived.append('circle')
|
| 1851 |
-
.attr('r', d => 20 * d.size); // scaled
|
| 1852 |
-
|
| 1853 |
-
const labelGroup = derived.append('g').attr('class', 'label-group');
|
| 1854 |
-
labelGroup.append('rect')
|
| 1855 |
-
.attr('x', -45)
|
| 1856 |
-
.attr('y', -18)
|
| 1857 |
-
.attr('width', 90)
|
| 1858 |
-
.attr('height', 36)
|
| 1859 |
-
.attr('rx', 8)
|
| 1860 |
-
.attr('fill', '#fffbe6')
|
| 1861 |
-
.attr('stroke', '#ccc');
|
| 1862 |
-
labelGroup.append('text')
|
| 1863 |
-
.attr('class', 'node-label')
|
| 1864 |
-
.attr('dy', '0.35em')
|
| 1865 |
-
.style('font-size', '18px')
|
| 1866 |
-
.text(d => d.id);
|
| 1867 |
-
|
| 1868 |
-
// Tick
|
| 1869 |
-
simulation.on('tick', () => {
|
| 1870 |
-
link.attr('x1', d => d.source.x)
|
| 1871 |
-
.attr('y1', d => d.source.y)
|
| 1872 |
-
.attr('x2', d => d.target.x)
|
| 1873 |
-
.attr('y2', d => d.target.y);
|
| 1874 |
-
|
| 1875 |
-
linkLabel.attr('x', d => (d.source.x + d.target.x) / 2)
|
| 1876 |
-
.attr('y', d => (d.source.y + d.target.y) / 2);
|
| 1877 |
-
|
| 1878 |
-
node.attr('transform', d => `translate(${d.x}, ${d.y})`);
|
| 1879 |
-
});
|
| 1880 |
-
|
| 1881 |
-
// Drag helpers
|
| 1882 |
-
function dragstarted(event, d) {
|
| 1883 |
-
if (!event.active) simulation.alphaTarget(0.3).restart();
|
| 1884 |
-
d.fx = d.x; d.fy = d.y;
|
| 1885 |
-
}
|
| 1886 |
-
function dragged(event, d) {
|
| 1887 |
-
d.fx = event.x; d.fy = event.y;
|
| 1888 |
-
}
|
| 1889 |
-
function dragended(event, d) {
|
| 1890 |
-
if (!event.active) simulation.alphaTarget(0);
|
| 1891 |
-
d.fx = null; d.fy = null;
|
| 1892 |
-
}
|
| 1893 |
-
</script>
|
| 1894 |
-
</body>
|
| 1895 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dist/static/graph_modular_related_models.png
DELETED
Git LFS Details
|
dist/static/hf-logo.svg
DELETED
dist/static/model_debugger.png
DELETED
Git LFS Details
|
dist/static/modular_candidates.png
DELETED
Git LFS Details
|
dist/static/popular_models_barplot.png
DELETED
Git LFS Details
|
dist/style.css
DELETED
|
@@ -1,741 +0,0 @@
|
|
| 1 |
-
/* style.css - Transformers Playthrough */
|
| 2 |
-
|
| 3 |
-
/* Import ultrascale-playbook base styles and add transformers-specific styling */
|
| 4 |
-
/* Define colors */
|
| 5 |
-
:root {
|
| 6 |
-
--distill-gray: rgb(107, 114, 128);
|
| 7 |
-
--distill-gray-light: rgb(185, 185, 185);
|
| 8 |
-
--distill-gray-lighter: rgb(228, 228, 228);
|
| 9 |
-
--distill-gray-lightest: rgb(245, 245, 245);
|
| 10 |
-
--distill-blue: #007BFF;
|
| 11 |
-
}
|
| 12 |
-
|
| 13 |
-
/* Container for the controls */
|
| 14 |
-
[id^="plot-"] {
|
| 15 |
-
display: flex;
|
| 16 |
-
flex-direction: column;
|
| 17 |
-
align-items: center;
|
| 18 |
-
gap: 15px; /* Adjust the gap between controls as needed */
|
| 19 |
-
}
|
| 20 |
-
[id^="plot-"] figure {
|
| 21 |
-
margin-bottom: 0px;
|
| 22 |
-
margin-top: 0px;
|
| 23 |
-
padding: 0px;
|
| 24 |
-
}
|
| 25 |
-
.plotly_caption {
|
| 26 |
-
font-style: italic;
|
| 27 |
-
margin-top: 10px;
|
| 28 |
-
}
|
| 29 |
-
|
| 30 |
-
.plotly_controls {
|
| 31 |
-
display: flex;
|
| 32 |
-
flex-wrap: wrap;
|
| 33 |
-
flex-direction: row;
|
| 34 |
-
justify-content: center;
|
| 35 |
-
align-items: flex-start;
|
| 36 |
-
gap: 30px;
|
| 37 |
-
}
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
.plotly_input_container {
|
| 41 |
-
display: flex;
|
| 42 |
-
align-items: center;
|
| 43 |
-
flex-direction: column;
|
| 44 |
-
gap: 10px;
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
/* Style for the select dropdown */
|
| 48 |
-
.plotly_input_container > select {
|
| 49 |
-
padding: 2px 4px;
|
| 50 |
-
/* border: 1px solid #ccc; */
|
| 51 |
-
line-height: 1.5em;
|
| 52 |
-
text-align: center;
|
| 53 |
-
border-radius: 4px;
|
| 54 |
-
font-size: 12px;
|
| 55 |
-
background-color: var(--distill-gray-lightest);
|
| 56 |
-
outline: none;
|
| 57 |
-
}
|
| 58 |
-
|
| 59 |
-
/* Style for the range input */
|
| 60 |
-
|
| 61 |
-
.plotly_slider {
|
| 62 |
-
display: flex;
|
| 63 |
-
align-items: center;
|
| 64 |
-
gap: 10px;
|
| 65 |
-
}
|
| 66 |
-
|
| 67 |
-
.plotly_slider > input[type="range"] {
|
| 68 |
-
-webkit-appearance: none;
|
| 69 |
-
height: 2px;
|
| 70 |
-
background: var(--distill-gray-light);
|
| 71 |
-
border-radius: 5px;
|
| 72 |
-
outline: none;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
.plotly_slider > span {
|
| 76 |
-
font-size: 14px;
|
| 77 |
-
line-height: 1.6em;
|
| 78 |
-
min-width: 16px;
|
| 79 |
-
}
|
| 80 |
-
|
| 81 |
-
.plotly_slider > input[type="range"]::-webkit-slider-thumb {
|
| 82 |
-
-webkit-appearance: none;
|
| 83 |
-
appearance: none;
|
| 84 |
-
width: 18px;
|
| 85 |
-
height: 18px;
|
| 86 |
-
border-radius: 50%;
|
| 87 |
-
background: var(--distill-blue);
|
| 88 |
-
cursor: pointer;
|
| 89 |
-
}
|
| 90 |
-
|
| 91 |
-
.plotly_slider > input[type="range"]::-moz-range-thumb {
|
| 92 |
-
width: 18px;
|
| 93 |
-
height: 18px;
|
| 94 |
-
border-radius: 50%;
|
| 95 |
-
background: var(--distill-blue);
|
| 96 |
-
cursor: pointer;
|
| 97 |
-
}
|
| 98 |
-
|
| 99 |
-
/* Style for the labels */
|
| 100 |
-
.plotly_input_container > label {
|
| 101 |
-
font-size: 14px;
|
| 102 |
-
font-weight: bold;
|
| 103 |
-
}
|
| 104 |
-
|
| 105 |
-
.main-plot-container {
|
| 106 |
-
margin-top: 21px;
|
| 107 |
-
margin-bottom: 35px;
|
| 108 |
-
}
|
| 109 |
-
|
| 110 |
-
.main-plot-container > figure {
|
| 111 |
-
display: block !important;
|
| 112 |
-
/* Let this be handled by graph-container */
|
| 113 |
-
margin-bottom: 0px;
|
| 114 |
-
margin-top: 0px;
|
| 115 |
-
}
|
| 116 |
-
.main-plot-container > div {
|
| 117 |
-
display: none !important;
|
| 118 |
-
}
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
@media (min-width: 768px) {
|
| 122 |
-
.main-plot-container > figure {
|
| 123 |
-
display: none !important;
|
| 124 |
-
}
|
| 125 |
-
.main-plot-container > div {
|
| 126 |
-
display: flex !important;
|
| 127 |
-
}
|
| 128 |
-
}
|
| 129 |
-
|
| 130 |
-
d-byline .byline {
|
| 131 |
-
grid-template-columns: 1fr;
|
| 132 |
-
grid-column: text;
|
| 133 |
-
font-size: 0.9rem;
|
| 134 |
-
line-height: 1.8em;
|
| 135 |
-
}
|
| 136 |
-
|
| 137 |
-
@media (min-width: 768px) {
|
| 138 |
-
d-byline .byline {
|
| 139 |
-
grid-template-columns: 5fr 1fr 1fr;
|
| 140 |
-
}
|
| 141 |
-
}
|
| 142 |
-
|
| 143 |
-
#title-plot {
|
| 144 |
-
margin-top: 0px;
|
| 145 |
-
margin-bottom: 0px;
|
| 146 |
-
}
|
| 147 |
-
|
| 148 |
-
d-contents > nav a.active {
|
| 149 |
-
text-decoration: underline;
|
| 150 |
-
}
|
| 151 |
-
|
| 152 |
-
@media (max-width: 1199px) {
|
| 153 |
-
d-contents {
|
| 154 |
-
display: none;
|
| 155 |
-
background: white;
|
| 156 |
-
justify-self: start;
|
| 157 |
-
align-self: start;
|
| 158 |
-
padding-bottom: 0.5em;
|
| 159 |
-
margin-bottom: 1em;
|
| 160 |
-
padding-left: 0.25em;
|
| 161 |
-
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
| 162 |
-
border-bottom-width: 1px;
|
| 163 |
-
border-bottom-style: solid;
|
| 164 |
-
border-bottom-color: rgba(0, 0, 0, 0.1);
|
| 165 |
-
overflow-y: scroll;
|
| 166 |
-
height: calc(100vh - 40px);
|
| 167 |
-
scrollbar-width: none;
|
| 168 |
-
z-index: -100;
|
| 169 |
-
}
|
| 170 |
-
}
|
| 171 |
-
|
| 172 |
-
d-contents a:hover {
|
| 173 |
-
border-bottom: none;
|
| 174 |
-
}
|
| 175 |
-
|
| 176 |
-
toc-title {
|
| 177 |
-
font-weight: bold;
|
| 178 |
-
font-size: 1.2em;
|
| 179 |
-
color: #333;
|
| 180 |
-
}
|
| 181 |
-
|
| 182 |
-
toggle-icon {
|
| 183 |
-
transition: transform 0.3s;
|
| 184 |
-
}
|
| 185 |
-
|
| 186 |
-
toggle-icon.collapsed {
|
| 187 |
-
transform: rotate(90deg);
|
| 188 |
-
}
|
| 189 |
-
|
| 190 |
-
.toc-content {
|
| 191 |
-
margin-top: 15px;
|
| 192 |
-
overflow: hidden;
|
| 193 |
-
/* max-height: 1000px; */
|
| 194 |
-
transition: max-height 0.3s ease-out;
|
| 195 |
-
}
|
| 196 |
-
|
| 197 |
-
.toc-content.collapsed {
|
| 198 |
-
max-height: 0;
|
| 199 |
-
margin-top: 0;
|
| 200 |
-
}
|
| 201 |
-
|
| 202 |
-
@media (min-width: 1200px) {
|
| 203 |
-
d-article {
|
| 204 |
-
/* Ensure d-article does not prevent sticky positioning */
|
| 205 |
-
overflow: visible;
|
| 206 |
-
}
|
| 207 |
-
|
| 208 |
-
d-contents {
|
| 209 |
-
align-self: start;
|
| 210 |
-
background: white;
|
| 211 |
-
grid-column-start: 1 !important;
|
| 212 |
-
grid-column-end: 4 !important;
|
| 213 |
-
grid-row: auto / span 6;
|
| 214 |
-
justify-self: end;
|
| 215 |
-
margin-top: 0em;
|
| 216 |
-
padding-right: 3em;
|
| 217 |
-
padding-left: 2em;
|
| 218 |
-
/* border-right: 1px solid rgba(0, 0, 0, 0.1);
|
| 219 |
-
border-right-width: 1px;
|
| 220 |
-
border-right-style: solid;
|
| 221 |
-
border-right-color: rgba(0, 0, 0, 0.1); */
|
| 222 |
-
position: -webkit-sticky; /* For Safari */
|
| 223 |
-
position: sticky;
|
| 224 |
-
top: 10px; /* Adjust this value if needed */
|
| 225 |
-
overflow-y: auto;
|
| 226 |
-
height: calc(100vh - 40px);
|
| 227 |
-
scrollbar-width: none;
|
| 228 |
-
transition: max-height 0.3s ease-out;
|
| 229 |
-
z-index: -100;
|
| 230 |
-
}
|
| 231 |
-
}
|
| 232 |
-
|
| 233 |
-
d-contents nav h3 {
|
| 234 |
-
margin-top: 0;
|
| 235 |
-
margin-bottom: 1em;
|
| 236 |
-
}
|
| 237 |
-
|
| 238 |
-
d-contents nav div div {
|
| 239 |
-
color: rgba(0, 0, 0, 0.8);
|
| 240 |
-
font-weight: bold;
|
| 241 |
-
}
|
| 242 |
-
|
| 243 |
-
d-contents nav a {
|
| 244 |
-
color: rgba(0, 0, 0, 0.8);
|
| 245 |
-
border-bottom: none;
|
| 246 |
-
text-decoration: none;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
d-contents li {
|
| 250 |
-
list-style-type: none;
|
| 251 |
-
}
|
| 252 |
-
|
| 253 |
-
d-contents ul, d-article d-contents ul {
|
| 254 |
-
padding-left: 1em;
|
| 255 |
-
}
|
| 256 |
-
|
| 257 |
-
d-contents nav ul li {
|
| 258 |
-
margin-bottom: .25em;
|
| 259 |
-
}
|
| 260 |
-
|
| 261 |
-
d-contents nav a:hover {
|
| 262 |
-
text-decoration: underline solid rgba(0, 0, 0, 0.6);
|
| 263 |
-
}
|
| 264 |
-
|
| 265 |
-
d-contents nav ul {
|
| 266 |
-
margin-top: 0;
|
| 267 |
-
margin-bottom: 6px;
|
| 268 |
-
}
|
| 269 |
-
|
| 270 |
-
|
| 271 |
-
d-contents nav > div {
|
| 272 |
-
display: block;
|
| 273 |
-
outline: none;
|
| 274 |
-
margin-bottom: 0.5em;
|
| 275 |
-
}
|
| 276 |
-
|
| 277 |
-
d-contents nav > div > a {
|
| 278 |
-
font-size: 13px;
|
| 279 |
-
font-weight: 600;
|
| 280 |
-
}
|
| 281 |
-
|
| 282 |
-
d-article aside {
|
| 283 |
-
margin-bottom: 1em;
|
| 284 |
-
}
|
| 285 |
-
|
| 286 |
-
d-article img {
|
| 287 |
-
max-width: 100%;
|
| 288 |
-
}
|
| 289 |
-
|
| 290 |
-
@media (min-width: 768px) {
|
| 291 |
-
d-article aside {
|
| 292 |
-
margin-bottom: 0;
|
| 293 |
-
}
|
| 294 |
-
}
|
| 295 |
-
|
| 296 |
-
d-contents nav > div > a:hover,
|
| 297 |
-
d-contents nav > ul > li > a:hover {
|
| 298 |
-
text-decoration: none;
|
| 299 |
-
}
|
| 300 |
-
|
| 301 |
-
.note-box {
|
| 302 |
-
background-color: #f6f8fa;
|
| 303 |
-
border-left: 4px solid #444444;
|
| 304 |
-
padding: 1rem;
|
| 305 |
-
margin: 1rem 0; /* Keep this modest margin */
|
| 306 |
-
border-radius: 6px;
|
| 307 |
-
/* Add this to ensure the box only takes up needed space */
|
| 308 |
-
display: inline-block;
|
| 309 |
-
}
|
| 310 |
-
|
| 311 |
-
.note-box-title {
|
| 312 |
-
margin: 0;
|
| 313 |
-
color: #444444;
|
| 314 |
-
font-weight: 600;
|
| 315 |
-
font-size: 1em;
|
| 316 |
-
}
|
| 317 |
-
|
| 318 |
-
.note-box-content {
|
| 319 |
-
margin-top: 0.5rem;
|
| 320 |
-
margin-bottom: 0; /* Ensure no bottom margin */
|
| 321 |
-
color: #24292f;
|
| 322 |
-
font-size: 0.9em;
|
| 323 |
-
line-height: 1.5em;
|
| 324 |
-
}
|
| 325 |
-
|
| 326 |
-
/* For dark mode support */
|
| 327 |
-
@media (prefers-color-scheme: dark) {
|
| 328 |
-
.note-box {
|
| 329 |
-
background-color: #1c1c1c;
|
| 330 |
-
border-left-color: #888888;
|
| 331 |
-
}
|
| 332 |
-
.note-box-title {
|
| 333 |
-
color: #888888;
|
| 334 |
-
}
|
| 335 |
-
.note-box-content {
|
| 336 |
-
color: #d4d4d4;
|
| 337 |
-
}
|
| 338 |
-
}
|
| 339 |
-
|
| 340 |
-
d-article {
|
| 341 |
-
font-size: 1.0em;
|
| 342 |
-
}
|
| 343 |
-
|
| 344 |
-
.figure-legend {
|
| 345 |
-
font-size: 0.9em;
|
| 346 |
-
font-style: italic;
|
| 347 |
-
color: var(--distill-gray);
|
| 348 |
-
line-height: 1.5em;
|
| 349 |
-
}
|
| 350 |
-
|
| 351 |
-
d-code {
|
| 352 |
-
font-size: 12px;
|
| 353 |
-
}
|
| 354 |
-
|
| 355 |
-
.large-image-background {
|
| 356 |
-
width: 100vw;
|
| 357 |
-
padding-top: 10px;
|
| 358 |
-
padding-bottom: 10px;
|
| 359 |
-
margin-left: calc(-50vw + 50%);
|
| 360 |
-
margin-right: calc(-50vw + 50%);
|
| 361 |
-
background: white;
|
| 362 |
-
height: fit-content; /* This will make it match the image height */
|
| 363 |
-
display: flex;
|
| 364 |
-
justify-content: center; /* This will center your image */
|
| 365 |
-
}
|
| 366 |
-
|
| 367 |
-
.large-image-background-transparent {
|
| 368 |
-
/* width: 100vw; */
|
| 369 |
-
padding-top: 10px;
|
| 370 |
-
padding-bottom: 10px;
|
| 371 |
-
/* margin-left: calc(-50vw + 50%); */
|
| 372 |
-
margin-left:-100px;
|
| 373 |
-
margin-right: -100px;
|
| 374 |
-
/* margin-right: calc(-50vw + 50%); */
|
| 375 |
-
/* background: white; */
|
| 376 |
-
height: fit-content; /* This will make it match the image height */
|
| 377 |
-
display: flex;
|
| 378 |
-
justify-content: center; /* This will center your image */
|
| 379 |
-
}
|
| 380 |
-
|
| 381 |
-
.boxed-image {
|
| 382 |
-
padding: 0.5rem;
|
| 383 |
-
background: white;
|
| 384 |
-
border-radius: 12px;
|
| 385 |
-
border: 1px solid #e5e7eb;
|
| 386 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 387 |
-
}
|
| 388 |
-
|
| 389 |
-
d-article li {
|
| 390 |
-
margin-bottom: 0.0em;
|
| 391 |
-
}
|
| 392 |
-
|
| 393 |
-
d-article ul ul {
|
| 394 |
-
margin-bottom: 0.0em;
|
| 395 |
-
}
|
| 396 |
-
|
| 397 |
-
d-article ol ol {
|
| 398 |
-
margin-bottom: 0.0em;
|
| 399 |
-
}
|
| 400 |
-
|
| 401 |
-
d-article hr {
|
| 402 |
-
grid-column: text;
|
| 403 |
-
}
|
| 404 |
-
|
| 405 |
-
/* Memory visualization */
|
| 406 |
-
#graph-all {
|
| 407 |
-
min-width: 500px;
|
| 408 |
-
margin-right: 10px;
|
| 409 |
-
margin-bottom: 2rem;
|
| 410 |
-
padding: 0.5rem;
|
| 411 |
-
background: #f9fafb;
|
| 412 |
-
border-radius: 12px;
|
| 413 |
-
border: 1px solid #e5e7eb;
|
| 414 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 415 |
-
}
|
| 416 |
-
|
| 417 |
-
|
| 418 |
-
/* Main container styles */
|
| 419 |
-
#controls {
|
| 420 |
-
max-width: 1200px;
|
| 421 |
-
/* margin: 2rem auto; */
|
| 422 |
-
margin-bottom: 2rem;
|
| 423 |
-
margin-left: 10px;
|
| 424 |
-
padding: 0.6rem;
|
| 425 |
-
background: #f9fafb;
|
| 426 |
-
border-radius: 12px;
|
| 427 |
-
border: 1px solid #e5e7eb;
|
| 428 |
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 429 |
-
}
|
| 430 |
-
|
| 431 |
-
/* Grid layout */
|
| 432 |
-
#controls {
|
| 433 |
-
display: grid;
|
| 434 |
-
grid-template-columns: 1fr 1fr;
|
| 435 |
-
/* gap: 2rem; */
|
| 436 |
-
}
|
| 437 |
-
|
| 438 |
-
/* Cell styles */
|
| 439 |
-
.cell {
|
| 440 |
-
margin-bottom: 0.2rem;
|
| 441 |
-
}
|
| 442 |
-
|
| 443 |
-
/* Label styles */
|
| 444 |
-
label {
|
| 445 |
-
display: block;
|
| 446 |
-
/* margin-bottom: 0.5rem; */
|
| 447 |
-
font-size: 0.8rem;
|
| 448 |
-
font-weight: 500;
|
| 449 |
-
color: #374151;
|
| 450 |
-
}
|
| 451 |
-
|
| 452 |
-
/* Input container for range + number combination */
|
| 453 |
-
.input-container {
|
| 454 |
-
display: flex;
|
| 455 |
-
gap: 1rem;
|
| 456 |
-
align-items: center;
|
| 457 |
-
}
|
| 458 |
-
|
| 459 |
-
/* Range input styling */
|
| 460 |
-
input[type="range"] {
|
| 461 |
-
flex: 1;
|
| 462 |
-
height: 6px;
|
| 463 |
-
background: #e5e7eb;
|
| 464 |
-
border-radius: 3px;
|
| 465 |
-
appearance: none;
|
| 466 |
-
outline: none;
|
| 467 |
-
}
|
| 468 |
-
|
| 469 |
-
input[type="range"]::-webkit-slider-thumb {
|
| 470 |
-
appearance: none;
|
| 471 |
-
width: 16px;
|
| 472 |
-
height: 16px;
|
| 473 |
-
background: #3b82f6;
|
| 474 |
-
border-radius: 50%;
|
| 475 |
-
cursor: pointer;
|
| 476 |
-
transition: background 0.15s ease;
|
| 477 |
-
}
|
| 478 |
-
|
| 479 |
-
input[type="range"]::-webkit-slider-thumb:hover {
|
| 480 |
-
background: #2563eb;
|
| 481 |
-
}
|
| 482 |
-
|
| 483 |
-
/* Number input styling */
|
| 484 |
-
input[type="number"] {
|
| 485 |
-
width: 80px;
|
| 486 |
-
padding: 0.5rem;
|
| 487 |
-
border: 1px solid #e5e7eb;
|
| 488 |
-
border-radius: 6px;
|
| 489 |
-
font-size: 0.9rem;
|
| 490 |
-
color: #374151;
|
| 491 |
-
}
|
| 492 |
-
|
| 493 |
-
/* Select styling */
|
| 494 |
-
select {
|
| 495 |
-
width: 100%;
|
| 496 |
-
padding: 0.5rem;
|
| 497 |
-
border: 1px solid #e5e7eb;
|
| 498 |
-
border-radius: 6px;
|
| 499 |
-
background: white;
|
| 500 |
-
font-size: 0.9rem;
|
| 501 |
-
color: #374151;
|
| 502 |
-
cursor: pointer;
|
| 503 |
-
}
|
| 504 |
-
|
| 505 |
-
/* Checkbox styling */
|
| 506 |
-
input[type="checkbox"] {
|
| 507 |
-
width: 1.2rem;
|
| 508 |
-
height: 1.2rem;
|
| 509 |
-
margin-right: 0.5rem;
|
| 510 |
-
border: 2px solid #e5e7eb;
|
| 511 |
-
border-radius: 4px;
|
| 512 |
-
cursor: pointer;
|
| 513 |
-
}
|
| 514 |
-
|
| 515 |
-
/* Column specific styles */
|
| 516 |
-
.column-1 {
|
| 517 |
-
padding-right: 0.5rem;
|
| 518 |
-
}
|
| 519 |
-
|
| 520 |
-
.column-2 {
|
| 521 |
-
padding-left: 0.5rem;
|
| 522 |
-
}
|
| 523 |
-
|
| 524 |
-
/* Checkbox container */
|
| 525 |
-
.checkbox-container {
|
| 526 |
-
display: flex;
|
| 527 |
-
align-items: center;
|
| 528 |
-
margin-bottom: 1rem;
|
| 529 |
-
}
|
| 530 |
-
|
| 531 |
-
/* Memory visualization styles */
|
| 532 |
-
.memory-block {
|
| 533 |
-
background: #fff;
|
| 534 |
-
border-radius: 8px;
|
| 535 |
-
padding: 1rem;
|
| 536 |
-
margin-bottom: 1rem;
|
| 537 |
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
| 538 |
-
}
|
| 539 |
-
|
| 540 |
-
.memory-title {
|
| 541 |
-
font-size: 1.1rem;
|
| 542 |
-
font-weight: 500;
|
| 543 |
-
color: #374151;
|
| 544 |
-
margin-bottom: 0.5rem;
|
| 545 |
-
}
|
| 546 |
-
|
| 547 |
-
.memory-value {
|
| 548 |
-
font-size: 1.5rem;
|
| 549 |
-
font-weight: 600;
|
| 550 |
-
color: #3b82f6;
|
| 551 |
-
}
|
| 552 |
-
|
| 553 |
-
/* Responsive adjustments */
|
| 554 |
-
@media (max-width: 768px) {
|
| 555 |
-
#controls {
|
| 556 |
-
grid-template-columns: 1fr;
|
| 557 |
-
padding: 1rem;
|
| 558 |
-
}
|
| 559 |
-
|
| 560 |
-
.column-1, .column-2 {
|
| 561 |
-
padding: 0;
|
| 562 |
-
}
|
| 563 |
-
}
|
| 564 |
-
|
| 565 |
-
/* Hover states and transitions */
|
| 566 |
-
input:hover, select:hover {
|
| 567 |
-
border-color: #3b82f6;
|
| 568 |
-
}
|
| 569 |
-
|
| 570 |
-
input:focus, select:focus {
|
| 571 |
-
border-color: #2563eb;
|
| 572 |
-
outline: none;
|
| 573 |
-
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
|
| 574 |
-
}
|
| 575 |
-
|
| 576 |
-
/* Add smooth transitions */
|
| 577 |
-
input, select, button {
|
| 578 |
-
transition: all 0.15s ease;
|
| 579 |
-
}
|
| 580 |
-
|
| 581 |
-
/* Preset dropdown special styling */
|
| 582 |
-
select[name="presets"] {
|
| 583 |
-
background-color: #f3f4f6;
|
| 584 |
-
font-weight: 500;
|
| 585 |
-
}
|
| 586 |
-
|
| 587 |
-
/* Memory graph enhancements */
|
| 588 |
-
.activation-memory {
|
| 589 |
-
background: #dbeafe;
|
| 590 |
-
padding: 1rem;
|
| 591 |
-
border-radius: 8px;
|
| 592 |
-
margin-bottom: 1rem;
|
| 593 |
-
}
|
| 594 |
-
|
| 595 |
-
.gradient-memory {
|
| 596 |
-
background: #ede9fe;
|
| 597 |
-
padding: 1rem;
|
| 598 |
-
border-radius: 8px;
|
| 599 |
-
}
|
| 600 |
-
|
| 601 |
-
.order-button-second {
|
| 602 |
-
background: linear-gradient(135deg, #6DB4C4, #D4A5B8);
|
| 603 |
-
color: white;
|
| 604 |
-
font-size: 18px;
|
| 605 |
-
font-weight: 600;
|
| 606 |
-
padding: 20px 20px;
|
| 607 |
-
border: none;
|
| 608 |
-
border-radius: 12px;
|
| 609 |
-
cursor: pointer;
|
| 610 |
-
text-transform: uppercase;
|
| 611 |
-
letter-spacing: 1px;
|
| 612 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
| 613 |
-
transition: all 0.3s ease;
|
| 614 |
-
position: relative;
|
| 615 |
-
overflow: hidden;
|
| 616 |
-
}
|
| 617 |
-
.order-button-second:hover {
|
| 618 |
-
transform: translateY(-2px);
|
| 619 |
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
|
| 620 |
-
}
|
| 621 |
-
|
| 622 |
-
.order-button:active {
|
| 623 |
-
transform: translateY(0);
|
| 624 |
-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
| 625 |
-
}
|
| 626 |
-
|
| 627 |
-
.order-button-second::before {
|
| 628 |
-
content: '';
|
| 629 |
-
position: absolute;
|
| 630 |
-
top: 0;
|
| 631 |
-
left: -100%;
|
| 632 |
-
width: 100%;
|
| 633 |
-
height: 100%;
|
| 634 |
-
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));
|
| 635 |
-
transition: left 0.5s ease;
|
| 636 |
-
}
|
| 637 |
-
|
| 638 |
-
.order-button-second:hover::before {
|
| 639 |
-
left: 100%;
|
| 640 |
-
}
|
| 641 |
-
|
| 642 |
-
.order-button {
|
| 643 |
-
background: linear-gradient(135deg, #6DB4C4, #D4A5B8);
|
| 644 |
-
color: white;
|
| 645 |
-
font-size: 18px;
|
| 646 |
-
font-weight: 600;
|
| 647 |
-
padding: 16px 32px;
|
| 648 |
-
border: none;
|
| 649 |
-
border-radius: 12px;
|
| 650 |
-
cursor: pointer;
|
| 651 |
-
text-transform: uppercase;
|
| 652 |
-
letter-spacing: 1px;
|
| 653 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
| 654 |
-
transition: all 0.3s ease;
|
| 655 |
-
position: relative;
|
| 656 |
-
overflow: hidden;
|
| 657 |
-
}
|
| 658 |
-
|
| 659 |
-
.order-button:hover {
|
| 660 |
-
transform: translateY(-2px);
|
| 661 |
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
|
| 662 |
-
}
|
| 663 |
-
|
| 664 |
-
.order-button:active {
|
| 665 |
-
transform: translateY(0);
|
| 666 |
-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
| 667 |
-
}
|
| 668 |
-
|
| 669 |
-
.order-button::before {
|
| 670 |
-
content: '';
|
| 671 |
-
position: absolute;
|
| 672 |
-
top: 0;
|
| 673 |
-
left: -100%;
|
| 674 |
-
width: 100%;
|
| 675 |
-
height: 100%;
|
| 676 |
-
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));
|
| 677 |
-
transition: left 0.5s ease;
|
| 678 |
-
}
|
| 679 |
-
|
| 680 |
-
.order-button:hover::before {
|
| 681 |
-
left: 100%;
|
| 682 |
-
}
|
| 683 |
-
.order-button-container-second {
|
| 684 |
-
/* display: flex; */
|
| 685 |
-
justify-content: center;
|
| 686 |
-
margin: 0px 0;
|
| 687 |
-
}
|
| 688 |
-
|
| 689 |
-
.order-button-container {
|
| 690 |
-
display: flex;
|
| 691 |
-
justify-content: center;
|
| 692 |
-
margin: 0px 0 40px 0;
|
| 693 |
-
}
|
| 694 |
-
|
| 695 |
-
d-article img {
|
| 696 |
-
width: 100%!important;
|
| 697 |
-
}
|
| 698 |
-
|
| 699 |
-
|
| 700 |
-
iframe, .js-plotly-plot {
|
| 701 |
-
width: 100%!important;
|
| 702 |
-
margin-bottom: 20px;
|
| 703 |
-
}
|
| 704 |
-
|
| 705 |
-
.modebar-container {
|
| 706 |
-
display: none;
|
| 707 |
-
}
|
| 708 |
-
|
| 709 |
-
#graph-container {
|
| 710 |
-
display: grid; grid-template-columns: 1fr 1fr; align-items: center;
|
| 711 |
-
}
|
| 712 |
-
|
| 713 |
-
@media (max-width: 768px) {
|
| 714 |
-
#graph-container {
|
| 715 |
-
grid-template-columns: 1fr;
|
| 716 |
-
}
|
| 717 |
-
}
|
| 718 |
-
|
| 719 |
-
@media (max-width: 1024px) {
|
| 720 |
-
#graph-container {
|
| 721 |
-
grid-template-columns: 1fr;
|
| 722 |
-
}
|
| 723 |
-
#graph-all {
|
| 724 |
-
margin-right: 0px;
|
| 725 |
-
}
|
| 726 |
-
#controls {
|
| 727 |
-
margin-left: 0px;
|
| 728 |
-
}
|
| 729 |
-
}
|
| 730 |
-
|
| 731 |
-
.main-plot-container svg {
|
| 732 |
-
background: transparent !important;
|
| 733 |
-
}
|
| 734 |
-
|
| 735 |
-
.large-image-background-transparent {
|
| 736 |
-
margin-left: 0px;
|
| 737 |
-
margin-right: 0px;
|
| 738 |
-
}
|
| 739 |
-
|
| 740 |
-
/* Import transformers-specific styles */
|
| 741 |
-
@import url('./transformers-custom.css');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|