"use client"; import { useState, useMemo } from "react"; import { XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend, AreaChart, Area, } from "recharts"; const MODELS = [ { id: "claude-sonnet", label: "Claude Sonnet 4", inputPer1k: 0.003, outputPer1k: 0.015 }, { id: "claude-haiku", label: "Claude Haiku 4", inputPer1k: 0.00025, outputPer1k: 0.00125 }, { id: "gpt-4o-mini", label: "GPT-4o-mini", inputPer1k: 0.00015, outputPer1k: 0.0006 }, { id: "gpt-4o", label: "GPT-4o", inputPer1k: 0.0025, outputPer1k: 0.01 }, ]; export function CostAnalysis() { const [numQueries, setNumQueries] = useState(10000); const [modelIdx, setModelIdx] = useState(0); const model = MODELS[modelIdx]; const baselineAvgTokens = 950; const graphragAvgTokens = 2400; const baselineCostPerQ = (800 / 1000) * model.inputPer1k + (150 / 1000) * model.outputPer1k; const graphragCostPerQ = (2200 / 1000) * model.inputPer1k + (200 / 1000) * model.outputPer1k; const cumulativeData = useMemo(() => { const points: { queries: number; Baseline: number; GraphRAG: number }[] = []; const step = Math.max(Math.floor(numQueries / 50), 1); for (let q = 0; q <= numQueries; q += step) { points.push({ queries: q, Baseline: +(baselineCostPerQ * q).toFixed(4), GraphRAG: +(graphragCostPerQ * q).toFixed(4), }); } return points; }, [numQueries, baselineCostPerQ, graphragCostPerQ]); return (
GraphRAG uses {(graphragAvgTokens / baselineAvgTokens).toFixed(1)}× more tokens per query, but delivers +13% higher F1 on complex multi-hop questions. The Adaptive Router eliminates this overhead for simple queries by routing them to Baseline RAG — achieving the best of both worlds.