From 7a9f907661a9753e3b149042d0d26e3cae25b887 Mon Sep 17 00:00:00 2001 From: Aidan Date: Fri, 22 Aug 2025 01:28:36 -0400 Subject: [PATCH] add ai pages, cc usage --- app/ai/claude/page.tsx | 337 ++++++++++++++++++++ app/ai/components/AIStack.tsx | 73 +++++ app/ai/components/FavoriteModels.tsx | 39 +++ app/ai/components/ToolReviews.tsx | 54 ++++ app/ai/components/TopPick.tsx | 49 +++ app/ai/data.tsx | 125 ++++++++ app/ai/page.tsx | 40 +++ app/ai/types.ts | 24 ++ components/Header.tsx | 4 +- package.json | 1 + public/data/cc.json | 459 +++++++++++++++++++++++++++ 11 files changed, 1204 insertions(+), 1 deletion(-) create mode 100644 app/ai/claude/page.tsx create mode 100644 app/ai/components/AIStack.tsx create mode 100644 app/ai/components/FavoriteModels.tsx create mode 100644 app/ai/components/ToolReviews.tsx create mode 100644 app/ai/components/TopPick.tsx create mode 100644 app/ai/data.tsx create mode 100644 app/ai/page.tsx create mode 100644 app/ai/types.ts create mode 100644 public/data/cc.json diff --git a/app/ai/claude/page.tsx b/app/ai/claude/page.tsx new file mode 100644 index 0000000..cafdc55 --- /dev/null +++ b/app/ai/claude/page.tsx @@ -0,0 +1,337 @@ +"use client" + +import Header from '@/components/Header' +import Footer from '@/components/Footer' +import { useState, useEffect } from 'react' +import { SiClaude } from 'react-icons/si' +import { + Line, + BarChart, + Bar, + PieChart, + Pie, + Cell, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + Legend, + ResponsiveContainer, + Area, + AreaChart, + ComposedChart, +} from 'recharts' + +interface ModelBreakdown { + modelName: string + inputTokens: number + outputTokens: number + cacheCreationTokens: number + cacheReadTokens: number + cost: number +} + +interface DailyData { + date: string + inputTokens: number + outputTokens: number + cacheCreationTokens: number + cacheReadTokens: number + totalTokens: number + totalCost: number + modelsUsed: string[] + modelBreakdowns: ModelBreakdown[] +} + +interface CCData { + daily: DailyData[] + totals: { + inputTokens: number + outputTokens: number + cacheCreationTokens: number + cacheReadTokens: number + totalCost: number + totalTokens: number + } +} + +const COLORS = ['#c15f3c', '#b1ada1', '#f4f3ee', '#c15f3c', '#b1ada1', '#f4f3ee'] + +export default function AI() { + const [data, setData] = useState(null) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + const [selectedMetric, setSelectedMetric] = useState<'cost' | 'tokens'>('cost') + + useEffect(() => { + fetch('/data/cc.json') + .then(res => { + if (!res.ok) throw new Error('Failed to fetch data') + return res.json() + }) + .then(data => { + setData(data) + setLoading(false) + }) + .catch(err => { + setError(err.message) + setLoading(false) + }) + }, []) + + if (loading) { + return ( +
+
+
+
Loading Claude metrics...
+
+
+
+ ) + } + + if (error || !data) { + return ( +
+
+
+
Error loading data: {error}
+
+
+
+ ) + } + + const modelUsageData = data.daily.reduce((acc, day) => { + day.modelBreakdowns.forEach(model => { + const existing = acc.find(m => m.name === model.modelName) + if (existing) { + existing.value += model.cost + } else { + acc.push({ name: model.modelName, value: model.cost }) + } + }) + return acc + }, [] as { name: string; value: number }[]) + + const tokenTypeData = [ + { name: 'Input', value: data.totals.inputTokens }, + { name: 'Output', value: data.totals.outputTokens }, + { name: 'Cache Creation', value: data.totals.cacheCreationTokens }, + { name: 'Cache Read', value: data.totals.cacheReadTokens }, + ] + + const dailyTrendData = data.daily.map(day => ({ + date: new Date(day.date).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }), + cost: day.totalCost, + tokens: day.totalTokens / 1000000, + inputTokens: day.inputTokens / 1000, + outputTokens: day.outputTokens / 1000, + cacheTokens: (day.cacheCreationTokens + day.cacheReadTokens) / 1000000, + })) + + const formatCurrency = (value: number) => `$${value.toFixed(2)}` + const formatTokens = (value: number) => `${value.toFixed(1)}M` + + return ( +
+
+
+
+
+ +
+

Claude Code Usage

+

How much I use Claude Code!

+
+ +
+
+

Total Cost

+

${data.totals.totalCost.toFixed(2)}

+
+
+

Total Tokens

+

{(data.totals.totalTokens / 1000000).toFixed(1)}M

+
+
+

Days Active

+

{data.daily.length}

+
+
+

Avg Daily Cost

+

${(data.totals.totalCost / data.daily.length).toFixed(2)}

+
+
+ +
+
+

Daily Usage Trend

+
+ + +
+ + + + + + selectedMetric === 'cost' ? formatCurrency(value) : formatTokens(value)} + /> + + + +
+ +
+

Model Usage Distribution

+
+ + + + {modelUsageData.map((entry, index) => ( + + ))} + + formatCurrency(value)} + /> + + +
+ {modelUsageData.map((model, index) => { + const percentage = ((model.value / data.totals.totalCost) * 100).toFixed(1) + return ( +
+
+
+ {model.name} +
+
+ {percentage}% + ${model.value.toFixed(2)} +
+
+ ) + })} +
+
+ Total Models Used + {modelUsageData.length} +
+
+ Most Used + + {modelUsageData[0]?.name} + +
+
+
+
+
+ +
+

Token Type Breakdown

+ + + + + `${(value / 1000000).toFixed(0)}M`} /> + `${(value / 1000000).toFixed(2)}M tokens`} + /> + + + +
+ +
+

Daily Token Composition

+ + + + + `${value}K`} /> + `${value.toFixed(1)}K tokens`} + /> + + + + + + +
+
+ +
+
+

Recent Sessions

+
+ + + + + + + + + + + {data.daily.slice(-5).reverse().map((day, index) => ( + + + + + + + ))} + +
DateModels UsedTotal TokensCost
{new Date(day.date).toLocaleDateString()} + {day.modelsUsed.join(', ')} + {(day.totalTokens / 1000000).toFixed(2)}M${day.totalCost.toFixed(2)}
+
+
+
+
+
+
+ ) +} \ No newline at end of file diff --git a/app/ai/components/AIStack.tsx b/app/ai/components/AIStack.tsx new file mode 100644 index 0000000..c24cd91 --- /dev/null +++ b/app/ai/components/AIStack.tsx @@ -0,0 +1,73 @@ +import { Bot } from 'lucide-react' +import Link from '@/components/objects/Link' +import type { AITool } from '../types' + +interface AIStackProps { + tools: AITool[] +} + +export default function AIStack({ tools }: AIStackProps) { + const getStatusColor = (status: string) => { + switch(status) { + case 'primary': return 'text-green-400 border-green-400 bg-green-400/10' + case 'active': return 'text-blue-400 border-blue-400 bg-blue-400/10' + case 'occasional': return 'text-yellow-400 border-yellow-400 bg-yellow-400/10' + default: return 'text-gray-400 border-gray-400' + } + } + + const getStatusLabel = (status: string) => { + switch(status) { + case 'primary': return 'Primary' + case 'active': return 'Active Use' + case 'occasional': return 'Occasional Use' + default: return status + } + } + + return ( +
+

+ + My AI Stack +

+
+ {tools.map((tool, index) => ( +
+
+
+ {tool.icon && } + {tool.svg && ( +
+ {tool.svg} +
+ )} +
+

{tool.name}

+

{tool.description}

+
+
+
+
+ + {getStatusLabel(tool.status)} + + + {tool.link && ( + + View → + + )} + {tool.usage && ( + + Usage → + + )} + +
+
+ ))} +
+
+ ) +} \ No newline at end of file diff --git a/app/ai/components/FavoriteModels.tsx b/app/ai/components/FavoriteModels.tsx new file mode 100644 index 0000000..9212d0d --- /dev/null +++ b/app/ai/components/FavoriteModels.tsx @@ -0,0 +1,39 @@ +import { Star } from 'lucide-react' +import type { FavoriteModel } from '../types' + +interface FavoriteModelsProps { + models: FavoriteModel[] +} + +export default function FavoriteModels({ models }: FavoriteModelsProps) { + return ( +
+

+ + Favorite Models +

+
+ {models.map((model, index) => ( +
+
+
+

{model.name}

+

{model.provider}

+
+
+ {[...Array(5)].map((_, i) => ( + + ))} +
+
+

{model.review}

+
+ ))} +
+
+ ) +} \ No newline at end of file diff --git a/app/ai/components/ToolReviews.tsx b/app/ai/components/ToolReviews.tsx new file mode 100644 index 0000000..2dff2f4 --- /dev/null +++ b/app/ai/components/ToolReviews.tsx @@ -0,0 +1,54 @@ +import { MessageSquare, Star } from 'lucide-react' +import type { AIReview } from '../types' + +interface ToolReviewsProps { + reviews: AIReview[] +} + +export default function ToolReviews({ reviews }: ToolReviewsProps) { + return ( +
+

+ + Tool Reviews +

+
+ {reviews.map((review, index) => ( +
+
+

{review.tool}

+
+ {[...Array(5)].map((_, i) => ( + + ))} +
+
+
+
+

Pros:

+
    + {review.pros.map((pro, i) => ( +
  • • {pro}
  • + ))} +
+
+
+

Cons:

+
    + {review.cons.map((con, i) => ( +
  • • {con}
  • + ))} +
+
+
+

{review.verdict}

+
+ ))} +
+
+ ) +} \ No newline at end of file diff --git a/app/ai/components/TopPick.tsx b/app/ai/components/TopPick.tsx new file mode 100644 index 0000000..0ec8dd2 --- /dev/null +++ b/app/ai/components/TopPick.tsx @@ -0,0 +1,49 @@ +import { Trophy, ChevronRight } from 'lucide-react' +import { SiClaude } from 'react-icons/si' +import Link from '@/components/objects/Link' + +export default function TopPick() { + return ( +
+

+ + Top Pick of 2025 +

+
+
+
+ +
+

Claude

+

by Anthropic

+
+ + View My Usage + +
+
+
+
+

+ Claude has become my go-to AI assistant for coding, writing, and learning very quickly. + I believe their Max 5x ($100/mo) is the best value for budget-conscious consumers like myself. +

+
+
+ Claude Code + Best Tool Calling + High Value in Max Plan + Quite Fast Interface +
+
+ + Top Overall Pick + +
+
+
+
+
+
+ ) +} \ No newline at end of file diff --git a/app/ai/data.tsx b/app/ai/data.tsx new file mode 100644 index 0000000..1e121be --- /dev/null +++ b/app/ai/data.tsx @@ -0,0 +1,125 @@ +import { + SiClaude, + SiGithubcopilot, + SiGooglegemini +} from 'react-icons/si' +import type { AITool, FavoriteModel, AIReview } from './types' + +export const aiTools: AITool[] = [ + { + name: "Claude Max 5x", + icon: SiClaude, + description: "My favorite model provider for general use and coding", + status: "primary", + usage: "/ai/claude", + link: "https://claude.ai/" + }, + { + name: "GitHub Copilot Pro", + icon: SiGithubcopilot, + description: "Random edits when I don't want to start a Claude session", + status: "active", + link: "https://github.com/features/copilot" + }, + { + name: "Gemini Pro", + icon: SiGooglegemini, + description: "Chatting, asking questions, and image generation", + status: "occasional", + link: "https://gemini.google.com/" + }, + { + name: "v0 Free", + svg: v0, + description: "Generating boilerplate UIs", + status: "occasional", + link: "https://v0.dev/" + }, + { + name: "Qwen", + svg: ( + + + + + + + + + + + + + + + + ), + description: "My favorite open source LLM for chatting", + status: "occasional", + link: "https://chat.qwen.ai/" + }, +] + +export const favoriteModels: FavoriteModel[] = [ + { + name: "Claude 4 Sonnet", + provider: "Anthropic", + review: "The perfect balance of capability, speed, and price. Perfect for development with React.", + rating: 5 + }, + { + name: "Claude 4.1 Opus", + provider: "Anthropic", + review: "Amazing planner, useful for Plan Mode in Claude Code. Useful in code generation too.", + rating: 5 + }, + { + name: "Qwen3-235B-A22B", + provider: "Alibaba", + review: "The OG thinking model. Amazing, funny, and smart for chats. Surprisingly good at coding too.", + rating: 5 + }, + { + name: "Gemini 2.5 Pro", + provider: "Google", + review: "Amazing for Deep Research and reasoning tasks. I hate it for coding.", + rating: 4 + }, + { + name: "gemma3 27B", + provider: "Google", + review: "My favorite for playing around with AI or creating a project. Easy to run locally and open weight!", + rating: 4 + }, +] + +export const aiReviews: AIReview[] = [ + { + tool: "Claude Code", + rating: 5, + pros: ["Flagship models", "High usage limits", "Exceptional Claude integration"], + cons: ["Can be slow", "High investment cost to get value"], + verdict: "Best overall for Claude lovers" + }, + { + tool: "Cursor", + rating: 4, + pros: ["Works like magic", "Lots of model support", "Huge ecosystem and community"], + cons: ["Expensive", "Hype around it is dying", "Unclear/manipulative pricing"], + verdict: "Great all-rounder, slowly dying" + }, + { + tool: "Trae", + rating: 4, + pros: ["Good UI/UX", "Very budget-friendly", "Fantastic premium usage limits"], + cons: ["No thinking", "Occasional parsing issues"], + verdict: "Essential for productivity" + }, + { + tool: "GitHub Copilot", + rating: 3, + pros: ["Latest models", "Great autocomplete", "Budget-friendly subscription price"], + cons: ["No thinking", "Low quality output", "Bad support for other IDEs"], + verdict: "Good for casual use" + }, +] \ No newline at end of file diff --git a/app/ai/page.tsx b/app/ai/page.tsx new file mode 100644 index 0000000..077b779 --- /dev/null +++ b/app/ai/page.tsx @@ -0,0 +1,40 @@ +"use client" + +import Header from '@/components/Header' +import Footer from '@/components/Footer' +import { Brain } from 'lucide-react' +import TopPick from './components/TopPick' +import AIStack from './components/AIStack' +import FavoriteModels from './components/FavoriteModels' +import ToolReviews from './components/ToolReviews' +import { aiTools, favoriteModels, aiReviews } from './data' + +export default function AI() { + + return ( +
+
+
+
+
+ +
+

AI

+

My journey with using LLMs

+
+ + + +
+ +
+ +
+ + +
+
+
+
+ ) +} \ No newline at end of file diff --git a/app/ai/types.ts b/app/ai/types.ts new file mode 100644 index 0000000..034db85 --- /dev/null +++ b/app/ai/types.ts @@ -0,0 +1,24 @@ +export interface AITool { + name: string; + icon?: React.ElementType; + svg?: React.ReactNode; + description: string; + status: 'primary' | 'active' | 'occasional' | string; + link?: string; + usage?: string; +} + +export interface FavoriteModel { + name: string; + provider: string; + review: string; + rating: number; +} + +export interface AIReview { + tool: string; + rating: number; + pros: string[]; + cons: string[]; + verdict: string; +} \ No newline at end of file diff --git a/components/Header.tsx b/components/Header.tsx index 68cc54e..11eb756 100644 --- a/components/Header.tsx +++ b/components/Header.tsx @@ -12,7 +12,8 @@ import { X, Menu, Globe, - ChevronDown + ChevronDown, + Brain } from 'lucide-react' import { useTranslation } from 'react-i18next' @@ -145,6 +146,7 @@ export default function Header() {
    Home About + AI Contact Domains Manifesto diff --git a/package.json b/package.json index cab8a2b..5aea997 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "react-dom": "^19.1.1", "react-i18next": "^15.7.1", "react-icons": "^5.5.0", + "recharts": "^3.1.2", "tailwind-merge": "^3.3.1", "tailwindcss-animate": "^1.0.7", "tw-animate-css": "^1.3.7" diff --git a/public/data/cc.json b/public/data/cc.json new file mode 100644 index 0000000..87d27ab --- /dev/null +++ b/public/data/cc.json @@ -0,0 +1,459 @@ +{ + "daily": [ + { + "date": "2025-08-08", + "inputTokens": 14919, + "outputTokens": 23378, + "cacheCreationTokens": 480031, + "cacheReadTokens": 11034031, + "totalTokens": 11552359, + "totalCost": 6.777273749999996, + "modelsUsed": [ + "claude-opus-4-1-20250805", + "claude-sonnet-4-20250514" + ], + "modelBreakdowns": [ + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 4837, + "outputTokens": 20788, + "cacheCreationTokens": 443453, + "cacheReadTokens": 10661975, + "cost": 5.18787225 + }, + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 10082, + "outputTokens": 2590, + "cacheCreationTokens": 36578, + "cacheReadTokens": 372056, + "cost": 1.5894014999999997 + } + ] + }, + { + "date": "2025-08-09", + "inputTokens": 3142, + "outputTokens": 20594, + "cacheCreationTokens": 513312, + "cacheReadTokens": 13270007, + "totalTokens": 13807055, + "totalCost": 20.561232300000007, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 373, + "outputTokens": 10485, + "cacheCreationTokens": 294339, + "cacheReadTokens": 7740261, + "cost": 17.92121775 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 2769, + "outputTokens": 10109, + "cacheCreationTokens": 218973, + "cacheReadTokens": 5529746, + "cost": 2.640014549999999 + } + ] + }, + { + "date": "2025-08-10", + "inputTokens": 2384, + "outputTokens": 33087, + "cacheCreationTokens": 752268, + "cacheReadTokens": 12833548, + "totalTokens": 13621287, + "totalCost": 24.83825640000001, + "modelsUsed": [ + "claude-opus-4-1-20250805", + "claude-sonnet-4-20250514" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 983, + "outputTokens": 24065, + "cacheCreationTokens": 320876, + "cacheReadTokens": 9495745, + "cost": 22.079662499999998 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 1401, + "outputTokens": 9022, + "cacheCreationTokens": 431392, + "cacheReadTokens": 3337803, + "cost": 2.7585938999999993 + } + ] + }, + { + "date": "2025-08-11", + "inputTokens": 1127, + "outputTokens": 23663, + "cacheCreationTokens": 746606, + "cacheReadTokens": 10310633, + "totalTokens": 11082029, + "totalCost": 31.256441999999993, + "modelsUsed": [ + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 1127, + "outputTokens": 23663, + "cacheCreationTokens": 746606, + "cacheReadTokens": 10310633, + "cost": 31.256441999999993 + } + ] + }, + { + "date": "2025-08-12", + "inputTokens": 17245, + "outputTokens": 164864, + "cacheCreationTokens": 2646250, + "cacheReadTokens": 49767559, + "totalTokens": 52595918, + "totalCost": 85.49760780000005, + "modelsUsed": [ + "claude-opus-4-1-20250805", + "claude-sonnet-4-20250514" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 13710, + "outputTokens": 77330, + "cacheCreationTokens": 1413354, + "cacheReadTokens": 26762148, + "cost": 72.64900950000008 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 3535, + "outputTokens": 87534, + "cacheCreationTokens": 1232896, + "cacheReadTokens": 23005411, + "cost": 12.848598300000004 + } + ] + }, + { + "date": "2025-08-13", + "inputTokens": 29365, + "outputTokens": 23237, + "cacheCreationTokens": 1034891, + "cacheReadTokens": 7332169, + "totalTokens": 8419662, + "totalCost": 9.039594749999997, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 24909, + "outputTokens": 18462, + "cacheCreationTokens": 935307, + "cacheReadTokens": 6758235, + "cost": 5.886528749999999 + }, + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 4456, + "outputTokens": 4775, + "cacheCreationTokens": 99584, + "cacheReadTokens": 573934, + "cost": 3.1530659999999995 + } + ] + }, + { + "date": "2025-08-14", + "inputTokens": 4984, + "outputTokens": 20654, + "cacheCreationTokens": 676409, + "cacheReadTokens": 8769252, + "totalTokens": 9471299, + "totalCost": 13.503454350000002, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 282, + "outputTokens": 6364, + "cacheCreationTokens": 260989, + "cacheReadTokens": 3092770, + "cost": 10.014228749999996 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 4702, + "outputTokens": 14290, + "cacheCreationTokens": 415420, + "cacheReadTokens": 5676482, + "cost": 3.489225600000001 + } + ] + }, + { + "date": "2025-08-15", + "inputTokens": 6744, + "outputTokens": 53509, + "cacheCreationTokens": 1315474, + "cacheReadTokens": 18699807, + "totalTokens": 20075534, + "totalCost": 37.771287000000015, + "modelsUsed": [ + "claude-opus-4-1-20250805", + "claude-sonnet-4-20250514" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 3739, + "outputTokens": 36231, + "cacheCreationTokens": 818888, + "cacheReadTokens": 9919502, + "cost": 33.00681300000001 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 3005, + "outputTokens": 17278, + "cacheCreationTokens": 496586, + "cacheReadTokens": 8780305, + "cost": 4.764474 + } + ] + }, + { + "date": "2025-08-16", + "inputTokens": 67226, + "outputTokens": 230912, + "cacheCreationTokens": 4693459, + "cacheReadTokens": 126251857, + "totalTokens": 131243454, + "totalCost": 67.51195695000014, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 66858, + "outputTokens": 225159, + "cacheCreationTokens": 4442992, + "cacheReadTokens": 122698549, + "cost": 57.048743700000024 + }, + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 368, + "outputTokens": 5753, + "cacheCreationTokens": 250467, + "cacheReadTokens": 3553308, + "cost": 10.463213249999994 + } + ] + }, + { + "date": "2025-08-17", + "inputTokens": 5258, + "outputTokens": 107279, + "cacheCreationTokens": 2065168, + "cacheReadTokens": 40221095, + "totalTokens": 42398800, + "totalCost": 46.292036099999905, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 1306, + "outputTokens": 37998, + "cacheCreationTokens": 568961, + "cacheReadTokens": 11688668, + "cost": 31.07046074999999 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 3952, + "outputTokens": 69281, + "cacheCreationTokens": 1496207, + "cacheReadTokens": 28532427, + "cost": 15.221575350000005 + } + ] + }, + { + "date": "2025-08-18", + "inputTokens": 26822, + "outputTokens": 158126, + "cacheCreationTokens": 4162794, + "cacheReadTokens": 85133032, + "totalTokens": 89480774, + "totalCost": 98.36223149999994, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 1334, + "outputTokens": 59577, + "cacheCreationTokens": 1226868, + "cacheReadTokens": 27304867, + "cost": 68.4493605 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 25488, + "outputTokens": 98549, + "cacheCreationTokens": 2935926, + "cacheReadTokens": 57828165, + "cost": 29.912871000000024 + } + ] + }, + { + "date": "2025-08-19", + "inputTokens": 25035, + "outputTokens": 192422, + "cacheCreationTokens": 2749046, + "cacheReadTokens": 86412205, + "totalTokens": 89378708, + "totalCost": 120.90988019999996, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 6500, + "outputTokens": 120014, + "cacheCreationTokens": 1447294, + "cacheReadTokens": 43939676, + "cost": 102.14482650000001 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 18535, + "outputTokens": 72408, + "cacheCreationTokens": 1301752, + "cacheReadTokens": 42472529, + "cost": 18.76505370000004 + } + ] + }, + { + "date": "2025-08-20", + "inputTokens": 1777, + "outputTokens": 45019, + "cacheCreationTokens": 1288952, + "cacheReadTokens": 18847679, + "totalTokens": 20183427, + "totalCost": 46.130642700000024, + "modelsUsed": [ + "claude-opus-4-1-20250805", + "claude-sonnet-4-20250514" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 1472, + "outputTokens": 29172, + "cacheCreationTokens": 1017913, + "cacheReadTokens": 14937895, + "cost": 43.702691249999994 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 305, + "outputTokens": 15847, + "cacheCreationTokens": 271039, + "cacheReadTokens": 3909784, + "cost": 2.4279514499999997 + } + ] + }, + { + "date": "2025-08-21", + "inputTokens": 81, + "outputTokens": 3400, + "cacheCreationTokens": 57191, + "cacheReadTokens": 406935, + "totalTokens": 467607, + "totalCost": 1.0935505500000002, + "modelsUsed": [ + "claude-sonnet-4-20250514", + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 37, + "outputTokens": 826, + "cacheCreationTokens": 29950, + "cacheReadTokens": 172089, + "cost": 0.882201 + }, + { + "modelName": "claude-sonnet-4-20250514", + "inputTokens": 44, + "outputTokens": 2574, + "cacheCreationTokens": 27241, + "cacheReadTokens": 234846, + "cost": 0.21134955 + } + ] + }, + { + "date": "2025-08-22", + "inputTokens": 201, + "outputTokens": 26357, + "cacheCreationTokens": 182770, + "cacheReadTokens": 1764101, + "totalTokens": 1973429, + "totalCost": 8.052878999999999, + "modelsUsed": [ + "claude-opus-4-1-20250805" + ], + "modelBreakdowns": [ + { + "modelName": "claude-opus-4-1-20250805", + "inputTokens": 201, + "outputTokens": 26357, + "cacheCreationTokens": 182770, + "cacheReadTokens": 1764101, + "cost": 8.052878999999999 + } + ] + } + ], + "totals": { + "inputTokens": 206310, + "outputTokens": 1126501, + "cacheCreationTokens": 23364621, + "cacheReadTokens": 491053910, + "totalCost": 617.5983253500001, + "totalTokens": 515751342 + } +}