botserver/docs/src/assets/technical-specs.svg

147 lines
7.5 KiB
XML
Raw Normal View History

2025-11-25 16:10:50 -03:00
<svg viewBox="0 0 900 450" xmlns="http://www.w3.org/2000/svg" style="background: transparent;">
<style>
/* Ensure transparent background */
svg {
background: transparent !important;
}
/* CSS Custom Properties for theme switching */
:root {
/* Light theme defaults */
--main-text-color: #1a1a1a;
--secondary-text-color: #666;
--border-color: #666;
}
/* Dark theme override */
@media (prefers-color-scheme: dark) {
:root {
--main-text-color: #ffffff;
--secondary-text-color: #b0b0b0;
--border-color: #b0b0b0;
}
}
.main-text { fill: var(--main-text-color); }
.secondary-text { fill: var(--secondary-text-color); }
.border-stroke { stroke: var(--border-color); }
</style>
<!-- Title -->
<text x="450" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold" class="main-text">System Technical Specifications</text>
<!-- Main container -->
<rect x="50" y="50" width="800" height="380" fill="none" class="border-stroke" stroke-width="2" rx="5"/>
<!-- Embedding Section -->
<g transform="translate(70, 80)">
<rect x="0" y="0" width="350" height="150" fill="none" class="border-stroke" stroke-width="1" stroke-dasharray="3,2" opacity="0.8"/>
<text x="175" y="20" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">Embedding Configuration</text>
<text x="10" y="45" font-family="Arial, sans-serif" font-size="11" class="main-text">Model: bge-small-en-v1.5-f32.gguf</text>
<text x="10" y="65" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Dimensions: 384</text>
<text x="10" y="85" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Format: GGUF (quantized)</text>
<text x="10" y="105" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Server: localhost:8082</text>
<text x="10" y="125" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Memory: ~200MB loaded</text>
</g>
<!-- LLM Section -->
<g transform="translate(450, 80)">
<rect x="0" y="0" width="350" height="150" fill="none" class="border-stroke" stroke-width="1" stroke-dasharray="3,2" opacity="0.8"/>
<text x="175" y="20" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">LLM Configuration</text>
<text x="10" y="45" font-family="Arial, sans-serif" font-size="11" class="main-text">Model: DeepSeek-R1-Distill-Qwen-1.5B</text>
<text x="10" y="65" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Context Size: 4096 tokens</text>
<text x="10" y="85" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Max Predict: 1024 tokens</text>
<text x="10" y="105" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Parallel Requests: 6</text>
<text x="10" y="125" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Quantization: Q3_K_M</text>
</g>
<!-- Performance Section -->
<g transform="translate(70, 250)">
<rect x="0" y="0" width="730" height="150" fill="none" class="border-stroke" stroke-width="1" stroke-dasharray="3,2" opacity="0.8"/>
<text x="365" y="20" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">Performance Characteristics</text>
<!-- Left column -->
<text x="10" y="45" font-family="Arial, sans-serif" font-size="11" class="main-text">Vector Index: HNSW Algorithm</text>
<text x="10" y="65" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• M=16, ef_construction=200</text>
<text x="10" y="85" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Distance: Cosine Similarity</text>
<text x="10" y="105" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Build: ~1000 docs/minute</text>
<!-- Middle column -->
<text x="250" y="45" font-family="Arial, sans-serif" font-size="11" class="main-text">Chunking Strategy</text>
<text x="250" y="65" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Chunk Size: 512 tokens</text>
<text x="250" y="85" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Overlap: 50 tokens</text>
<text x="250" y="105" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Prompt Compact: Level 4</text>
<!-- Right column -->
<text x="490" y="45" font-family="Arial, sans-serif" font-size="11" class="main-text">Runtime Metrics</text>
<text x="490" y="65" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Query Latency: &lt;50ms p99</text>
<text x="490" y="85" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Memory: ~1GB/million chunks</text>
<text x="490" y="105" font-family="Arial, sans-serif" font-size="11" class="secondary-text">• Cache TTL: 3600 seconds</text>
</g>
<!-- JavaScript to handle theme switching from parent document -->
<script type="text/javascript">
<![CDATA[
// Function to update CSS variables based on parent theme
function updateTheme() {
try {
// Check if we're in an iframe/object context
const parentDoc = window.parent?.document || window.top?.document;
if (!parentDoc) return;
const rootElement = document.documentElement;
const htmlElement = parentDoc.documentElement;
const bodyElement = parentDoc.body;
// Check for various theme indicators
const isRust = htmlElement.classList.contains('rust') || bodyElement.classList.contains('rust');
const isLight = htmlElement.classList.contains('light') || bodyElement.classList.contains('light');
const isDark = htmlElement.classList.contains('dark') ||
htmlElement.classList.contains('ayu') ||
htmlElement.classList.contains('navy') ||
htmlElement.classList.contains('coal') ||
bodyElement.classList.contains('theme--dark');
// Apply theme-specific CSS variables
if (isRust || isLight) {
// Force black text for Rust/Light themes
rootElement.style.setProperty('--main-text-color', '#1a1a1a');
rootElement.style.setProperty('--secondary-text-color', '#666');
rootElement.style.setProperty('--border-color', '#666');
} else if (isDark) {
// White text for dark themes
rootElement.style.setProperty('--main-text-color', '#ffffff');
rootElement.style.setProperty('--secondary-text-color', '#b0b0b0');
rootElement.style.setProperty('--border-color', '#b0b0b0');
}
} catch (e) {
// Silent fail if we can't access parent document (cross-origin)
}
}
// Update theme on load
updateTheme();
// Listen for theme changes if possible
try {
if (window.parent && window.parent !== window) {
// Try to observe parent document changes
const observer = new MutationObserver(updateTheme);
observer.observe(window.parent.document.documentElement, {
attributes: true,
attributeFilter: ['class']
});
observer.observe(window.parent.document.body, {
attributes: true,
attributeFilter: ['class']
});
}
} catch (e) {
// Silent fail if cross-origin
}
]]>
</script>
</svg>