danielrosehill's picture
Fix: Remove output/input chart from main page
a884f7c
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LLM Tool-Calling Models: Cost & Context Analysis</title>
<link rel="stylesheet" href="style.css">
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation@3.0.1/dist/chartjs-plugin-annotation.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.js"></script>
</head>
<body>
<header>
<h1>Agentic LLM Price Comparison</h1>
<p class="subtitle">Cost-effectiveness analysis of 218 tool-calling models from OpenRouter</p>
<p class="date">Data snapshot: November 8, 2025</p>
<nav class="header-nav">
<a href="output-input-analysis.html">🔢 Output/Input Price Analysis →</a>
</nav>
</header>
<main>
<section class="intro">
<h2>Overview</h2>
<p>This analysis examines LLM models with tool-calling capabilities - essential for agentic AI systems, MCP (Model Context Protocol) implementations, and multi-tool orchestration. Models are evaluated across two key dimensions:</p>
<ul>
<li><strong>Cost per token</strong> - Economic efficiency for production use</li>
<li><strong>Context window size</strong> - Capability for complex, long-form tasks</li>
</ul>
<div class="attribution">
<h3>Methodology</h3>
<p><strong>Quadrant Classification:</strong> Models are categorized into four quadrants based on median values calculated from the dataset:</p>
<ul>
<li><strong>Cost Division:</strong> Median average cost (mean of input + output pricing) = <span id="median-cost-display">calculated from data</span></li>
<li><strong>Context Division:</strong> Median context window size = <span id="median-context-display">calculated from data</span></li>
</ul>
<p>This creates four categories: Low Cost/High Context, High Cost/High Context, Low Cost/Low Context, and High Cost/Low Context.</p>
<h3>Attribution & Data Notes</h3>
<ul>
<li><strong>Data Collection:</strong> <a href="https://danielrosehill.com" target="_blank">Daniel Rosehill</a></li>
<li><strong>Collection Date:</strong> November 8, 2025</li>
<li><strong>Source:</strong> Prices derived from API calls to <a href="https://openrouter.ai/" target="_blank">OpenRouter</a></li>
<li><strong>Pricing Variability:</strong> OpenRouter pricing can fluctuate slightly according to the end inference provider. The same models may have slightly different pricing even at the time of capture.</li>
<li><strong>Data Exclusions:</strong> Free models (cost = $0) were excluded from this analysis</li>
</ul>
</div>
</section>
<section class="stats-grid">
<div class="stat-card">
<div class="stat-number" id="total-models">218</div>
<div class="stat-label">Models Analyzed</div>
</div>
<div class="stat-card">
<div class="stat-number" id="vendors">-</div>
<div class="stat-label">Vendors</div>
</div>
<div class="stat-card">
<div class="stat-number" id="median-input">-</div>
<div class="stat-label">Median Input ($/M)</div>
</div>
<div class="stat-card">
<div class="stat-number" id="median-output">-</div>
<div class="stat-label">Median Output ($/M)</div>
</div>
<div class="stat-card">
<div class="stat-number" id="median-multiple">-</div>
<div class="stat-label">Median Out/In Multiple</div>
</div>
<div class="stat-card">
<div class="stat-number" id="context-range">-</div>
<div class="stat-label">Context Range</div>
</div>
</section>
<div class="tabs">
<button class="tab-button active" data-tab="models">All Models</button>
<button class="tab-button" data-tab="quadrants">Quadrant Analysis</button>
<button class="tab-button" data-tab="analysis">Visual Analysis</button>
</div>
<div class="tab-content active" id="tab-models">
<section class="data-notes">
<h3>Data Notes</h3>
<ul>
<li><strong>Cost Calculation:</strong> Input and output pricing shown separately (per million tokens)</li>
<li><strong>Data Exclusions:</strong> Free models (cost = $0) were excluded from this analysis</li>
<li><strong>Color Coding:</strong> Cells are color-coded by tier - see legend below for ranges</li>
</ul>
</section>
<section class="data-table-section">
<h2>All Models - Comprehensive View</h2>
<p>Complete dataset with color-coded cost and context tiers. Click column headers to sort.</p>
<div class="tier-legends">
<div class="legend-group">
<h4>Cost Tiers ($/M tokens)</h4>
<div class="legend-items">
<div class="legend-item"><span class="tier-indicator cost-very-low"></span> Very Low (&lt; $0.10)</div>
<div class="legend-item"><span class="tier-indicator cost-low"></span> Low ($0.10 - $0.50)</div>
<div class="legend-item"><span class="tier-indicator cost-medium"></span> Medium ($0.50 - $2.00)</div>
<div class="legend-item"><span class="tier-indicator cost-high"></span> High ($2.00 - $5.00)</div>
<div class="legend-item"><span class="tier-indicator cost-very-high"></span> Very High (&gt; $5.00)</div>
</div>
</div>
<div class="legend-group">
<h4>Context Window Tiers</h4>
<div class="legend-items">
<div class="legend-item"><span class="tier-indicator context-small"></span> Small (&lt; 32K)</div>
<div class="legend-item"><span class="tier-indicator context-medium"></span> Medium (32K - 128K)</div>
<div class="legend-item"><span class="tier-indicator context-large"></span> Large (128K - 256K)</div>
<div class="legend-item"><span class="tier-indicator context-very-large"></span> Very Large (256K - 1M)</div>
<div class="legend-item"><span class="tier-indicator context-ultra"></span> Ultra (&gt; 1M)</div>
</div>
</div>
</div>
<div class="table-controls">
<input type="text" id="search" placeholder="Search models..." />
<select id="quadrant-filter">
<option value="">All Quadrants</option>
<option value="Low Cost / High Context">Low Cost / High Context</option>
<option value="High Cost / High Context">High Cost / High Context</option>
<option value="Low Cost / Low Context">Low Cost / Low Context</option>
<option value="High Cost / Low Context">High Cost / Low Context</option>
</select>
</div>
<div class="table-wrapper">
<table id="models-table">
<thead>
<tr>
<th class="sortable" data-sort="model_name">Model Name <span class="sort-indicator"></span></th>
<th class="sortable" data-sort="displayVendor">Vendor <span class="sort-indicator"></span></th>
<th class="sortable" data-sort="context_length">Context <span class="sort-indicator"></span></th>
<th class="sortable" data-sort="input_price_usd_per_m">Input ($/M) <span class="sort-indicator"></span></th>
<th class="sortable" data-sort="output_price_usd_per_m">Output ($/M) <span class="sort-indicator"></span></th>
<th class="sortable" data-sort="output_input_multiple">Out/In Multiple <span class="sort-indicator"></span></th>
<th class="sortable" data-sort="quadrant">Quadrant <span class="sort-indicator"></span></th>
</tr>
</thead>
<tbody id="table-body">
<!-- Populated by JavaScript -->
</tbody>
</table>
</div>
</section>
</div>
<div class="tab-content" id="tab-quadrants">
<section class="data-notes">
<h3>Quadrant Analysis</h3>
<ul>
<li><strong>Overview:</strong> Models divided into four quadrants based on median cost and context values</li>
<li><strong>Green (Low Cost / High Context):</strong> Best value - low prices with large context windows</li>
<li><strong>Blue (High Cost / High Context):</strong> Premium models with extensive context capabilities</li>
<li><strong>Orange (Low Cost / Low Context):</strong> Budget-friendly for simple tasks</li>
<li><strong>Red (High Cost / Low Context):</strong> Specialized models with limited context</li>
</ul>
</section>
<section class="chart-section">
<h2>All Quadrants Overview</h2>
<p>Complete view showing all models across quadrants with median division lines.</p>
<div class="chart-container">
<canvas id="allQuadrantsChart"></canvas>
</div>
</section>
<section class="quadrant-details">
<h2>Individual Quadrant Deep Dive</h2>
<p>Detailed view of each quadrant's models for easier comparison within each category.</p>
<div class="quadrant-grid">
<div class="quadrant-detail">
<h3 style="color: #10b981;">Low Cost / High Context</h3>
<div class="chart-container-small">
<canvas id="quadrant-lchc"></canvas>
</div>
</div>
<div class="quadrant-detail">
<h3 style="color: #2563eb;">High Cost / High Context</h3>
<div class="chart-container-small">
<canvas id="quadrant-hchc"></canvas>
</div>
</div>
<div class="quadrant-detail">
<h3 style="color: #f59e0b;">Low Cost / Low Context</h3>
<div class="chart-container-small">
<canvas id="quadrant-lclc"></canvas>
</div>
</div>
<div class="quadrant-detail">
<h3 style="color: #ef4444;">High Cost / Low Context</h3>
<div class="chart-container-small">
<canvas id="quadrant-hclc"></canvas>
</div>
</div>
</div>
</section>
</div>
<div class="tab-content" id="tab-analysis">
<section class="data-notes">
<h3>Analysis Notes</h3>
<ul>
<li><strong>Quadrant Divisions:</strong> Based on median values for cost and context window size</li>
<li><strong>Logarithmic Scale:</strong> Cost axis uses log scale to better visualize the wide price range</li>
<li><strong>Median Lines:</strong> Dashed lines show median cost and context values across all models</li>
</ul>
</section>
<section class="chart-section">
<h2>Cost vs Context Quadrant Analysis</h2>
<p>Interactive scatter plot showing the relationship between pricing and context window size. Hover over points for detailed model information.</p>
<div class="chart-container">
<canvas id="quadrantChart"></canvas>
</div>
</section>
</div>
</main>
<footer>
<p>Data source: <a href="https://openrouter.ai/" target="_blank">OpenRouter API</a> | Analysis: <a href="https://github.com/danielrosehill/OR-Models-With-Tools-0811" target="_blank">GitHub Repository</a></p>
<p class="disclaimer">Prices are subject to change. For current pricing, always refer to OpenRouter's live API.</p>
</footer>
<script src="app.js"></script>
</body>
</html>