|
|
<div class="d3-prompt-evolution"> |
|
|
<svg viewBox="0 0 900 370" xmlns="http://www.w3.org/2000/svg"> |
|
|
<defs> |
|
|
<marker id="arrowhead-prompt" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto"> |
|
|
<polygon points="0 0, 10 3, 0 6" fill="currentColor" /> |
|
|
</marker> |
|
|
</defs> |
|
|
|
|
|
|
|
|
<g class="stage"> |
|
|
<rect x="30" y="40" width="240" height="140" rx="8" class="stage-box stage-1"/> |
|
|
<text x="150" y="65" text-anchor="middle" class="stage-title">Raw Text</text> |
|
|
<text x="150" y="85" text-anchor="middle" class="stage-subtitle">Early Models (before 2022)</text> |
|
|
|
|
|
<foreignObject x="45" y="95" width="210" height="80"> |
|
|
<div xmlns="http://www.w3.org/1999/xhtml" class="code-example"> |
|
|
<div class="code-line">Translate to French:</div> |
|
|
<div class="code-line">Hello world</div> |
|
|
</div> |
|
|
</foreignObject> |
|
|
</g> |
|
|
|
|
|
|
|
|
<path d="M 270 110 L 320 110" class="arrow" marker-end="url(#arrowhead-prompt)"/> |
|
|
<text x="295" y="100" text-anchor="middle" class="arrow-label">Evolution</text> |
|
|
|
|
|
|
|
|
<g class="stage"> |
|
|
<rect x="320" y="20" width="260" height="180" rx="8" class="stage-box stage-2"/> |
|
|
<text x="450" y="45" text-anchor="middle" class="stage-title">Chat Templates (in JSON)</text> |
|
|
<text x="450" y="65" text-anchor="middle" class="stage-subtitle">Chat Models (2022-2025)</text> |
|
|
|
|
|
<foreignObject x="335" y="75" width="230" height="120"> |
|
|
<div xmlns="http://www.w3.org/1999/xhtml" class="code-example"> |
|
|
<div class="code-line json-brace">{</div> |
|
|
<div class="code-line indent">"role": "system",</div> |
|
|
<div class="code-line indent">"content": "You are..."</div> |
|
|
<div class="code-line json-brace">},</div> |
|
|
<div class="code-line json-brace">{</div> |
|
|
<div class="code-line indent">"role": "user",</div> |
|
|
<div class="code-line indent">"content": "Hello"</div> |
|
|
<div class="code-line json-brace">}</div> |
|
|
</div> |
|
|
</foreignObject> |
|
|
</g> |
|
|
|
|
|
|
|
|
<path d="M 580 110 L 630 110" class="arrow" marker-end="url(#arrowhead-prompt)"/> |
|
|
<text x="605" y="100" text-anchor="middle" class="arrow-label">Evolution</text> |
|
|
|
|
|
|
|
|
<g class="stage"> |
|
|
<rect x="630" y="10" width="240" height="200" rx="8" class="stage-box stage-3"/> |
|
|
<text x="750" y="35" text-anchor="middle" class="stage-title">JSON + XML</text> |
|
|
<text x="750" y="55" text-anchor="middle" class="stage-subtitle">Reasoning Models (2025+)</text> |
|
|
|
|
|
<foreignObject x="645" y="65" width="210" height="140"> |
|
|
<div xmlns="http://www.w3.org/1999/xhtml" class="code-example"> |
|
|
<div class="code-line json-brace">{</div> |
|
|
<div class="code-line indent">"role": "assistant",</div> |
|
|
<div class="code-line indent">"content": [</div> |
|
|
<div class="code-line indent2 xml-tag"><thinking></div> |
|
|
<div class="code-line indent2">reasoning...</div> |
|
|
<div class="code-line indent2 xml-tag"></thinking></div> |
|
|
<div class="code-line indent2 xml-tag"><output></div> |
|
|
<div class="code-line indent2">response</div> |
|
|
<div class="code-line indent2 xml-tag"></output></div> |
|
|
<div class="code-line indent">]</div> |
|
|
<div class="code-line json-brace">}</div> |
|
|
</div> |
|
|
</foreignObject> |
|
|
</g> |
|
|
|
|
|
|
|
|
<g class="features"> |
|
|
<text x="150" y="200" text-anchor="middle" class="feature-label">• Simple prompts</text> |
|
|
<text x="150" y="220" text-anchor="middle" class="feature-label">• Generally no structure</text> |
|
|
<text x="150" y="240" text-anchor="middle" class="feature-label">• Completion-based</text> |
|
|
</g> |
|
|
|
|
|
<g class="features"> |
|
|
<text x="450" y="220" text-anchor="middle" class="feature-label">• Role separation</text> |
|
|
<text x="450" y="240" text-anchor="middle" class="feature-label">• Chat/Turn-based</text> |
|
|
</g> |
|
|
|
|
|
<g class="features"> |
|
|
<text x="750" y="230" text-anchor="middle" class="feature-label">• Chat/Turn-based</text> |
|
|
<text x="750" y="250" text-anchor="middle" class="feature-label">with added tags for control</text> |
|
|
</g> |
|
|
|
|
|
|
|
|
<line x1="50" y1="320" x2="850" y2="320" class="timeline"/> |
|
|
<circle cx="150" cy="320" r="6" class="timeline-dot"/> |
|
|
<circle cx="450" cy="320" r="6" class="timeline-dot"/> |
|
|
<circle cx="750" cy="320" r="6" class="timeline-dot"/> |
|
|
|
|
|
<text x="150" y="345" text-anchor="middle" class="timeline-label">Before 2022</text> |
|
|
<text x="450" y="345" text-anchor="middle" class="timeline-label">2022-2025</text> |
|
|
<text x="750" y="345" text-anchor="middle" class="timeline-label">2025+</text> |
|
|
</svg> |
|
|
</div> |
|
|
<style> |
|
|
.d3-prompt-evolution { |
|
|
position: relative; |
|
|
width: 100%; |
|
|
} |
|
|
.d3-prompt-evolution svg { |
|
|
display: block; |
|
|
width: 100%; |
|
|
height: auto; |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .stage-box { |
|
|
stroke-width: 2; |
|
|
} |
|
|
.d3-prompt-evolution .stage-1 { |
|
|
fill: #e3f2fd; |
|
|
stroke: #1976d2; |
|
|
} |
|
|
.d3-prompt-evolution .stage-2 { |
|
|
fill: #f3e5f5; |
|
|
stroke: #7b1fa2; |
|
|
} |
|
|
.d3-prompt-evolution .stage-3 { |
|
|
fill: #e8f5e9; |
|
|
stroke: #388e3c; |
|
|
} |
|
|
|
|
|
[data-theme="dark"] .d3-prompt-evolution .stage-1 { |
|
|
fill: rgba(25, 118, 210, 0.15); |
|
|
} |
|
|
[data-theme="dark"] .d3-prompt-evolution .stage-2 { |
|
|
fill: rgba(123, 31, 162, 0.15); |
|
|
} |
|
|
[data-theme="dark"] .d3-prompt-evolution .stage-3 { |
|
|
fill: rgba(56, 142, 60, 0.15); |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .stage-title { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 16px; |
|
|
font-weight: 700; |
|
|
fill: var(--text-color, #333); |
|
|
} |
|
|
.d3-prompt-evolution .stage-subtitle { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 11px; |
|
|
fill: var(--muted-color, #666); |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .code-example { |
|
|
font-family: 'Monaco', 'Courier New', monospace; |
|
|
font-size: 9px; |
|
|
line-height: 1.4; |
|
|
color: var(--text-color, #333); |
|
|
padding: 4px; |
|
|
} |
|
|
.d3-prompt-evolution .code-line { |
|
|
margin: 1px 0; |
|
|
} |
|
|
.d3-prompt-evolution .indent { |
|
|
padding-left: 12px; |
|
|
} |
|
|
.d3-prompt-evolution .indent2 { |
|
|
padding-left: 24px; |
|
|
} |
|
|
.d3-prompt-evolution .json-brace { |
|
|
color: var(--primary-color, #1976d2); |
|
|
font-weight: 600; |
|
|
} |
|
|
.d3-prompt-evolution .xml-tag { |
|
|
color: #d32f2f; |
|
|
font-weight: 600; |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .arrow { |
|
|
fill: none; |
|
|
stroke: var(--muted-color, #999); |
|
|
stroke-width: 2; |
|
|
color: var(--muted-color, #999); |
|
|
} |
|
|
.d3-prompt-evolution .arrow-label { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 10px; |
|
|
font-style: italic; |
|
|
fill: var(--muted-color, #666); |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .feature-label { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 11px; |
|
|
fill: var(--text-color, #555); |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .timeline { |
|
|
stroke: var(--border-color, #ddd); |
|
|
stroke-width: 2; |
|
|
} |
|
|
.d3-prompt-evolution .timeline-dot { |
|
|
fill: var(--primary-color, #1976d2); |
|
|
} |
|
|
.d3-prompt-evolution .timeline-label { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 12px; |
|
|
font-weight: 600; |
|
|
fill: var(--text-color, #333); |
|
|
} |
|
|
.d3-prompt-evolution .model-example { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 11px; |
|
|
font-style: italic; |
|
|
fill: var(--muted-color, #666); |
|
|
} |
|
|
|
|
|
|
|
|
.d3-prompt-evolution .benefits-box { |
|
|
fill: var(--surface-bg, #fafafa); |
|
|
stroke: var(--border-color, #e0e0e0); |
|
|
stroke-width: 1.5; |
|
|
} |
|
|
.d3-prompt-evolution .benefits-title { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 13px; |
|
|
font-weight: 700; |
|
|
fill: var(--text-color, #333); |
|
|
} |
|
|
.d3-prompt-evolution .benefit-text { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
font-size: 11px; |
|
|
fill: var(--text-color, #555); |
|
|
} |
|
|
|
|
|
[data-theme="dark"] .d3-prompt-evolution .benefits-box { |
|
|
fill: rgba(255, 255, 255, 0.05); |
|
|
} |
|
|
</style> |
|
|
<script> |
|
|
(() => { |
|
|
const bootstrap = () => { |
|
|
const scriptEl = document.currentScript; |
|
|
let container = scriptEl ? scriptEl.previousElementSibling : null; |
|
|
if (!(container && container.classList && container.classList.contains('d3-prompt-evolution'))) { |
|
|
const candidates = Array.from(document.querySelectorAll('.d3-prompt-evolution')) |
|
|
.filter((el) => !(el.dataset && el.dataset.mounted === 'true')); |
|
|
container = candidates[candidates.length - 1] || null; |
|
|
} |
|
|
if (!container) return; |
|
|
if (container.dataset) { |
|
|
if (container.dataset.mounted === 'true') return; |
|
|
container.dataset.mounted = 'true'; |
|
|
} |
|
|
}; |
|
|
|
|
|
if (document.readyState === 'loading') { |
|
|
document.addEventListener('DOMContentLoaded', bootstrap, { once: true }); |
|
|
} else { |
|
|
bootstrap(); |
|
|
} |
|
|
})(); |
|
|
</script> |