import React from 'react'; import { Card, CardContent, Typography, Box, Grid, Chip, Tooltip, Accordion, AccordionSummary, AccordionDetails, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, } from '@mui/material'; import { ExpandMore } from '@mui/icons-material'; import { motion } from 'framer-motion'; import { Info, DollarSign, Activity, Zap, Search, Image, Code, Database, Globe, FileText, BarChart3 } from 'lucide-react'; // Types import { ProviderBreakdown } from '../../types/billing'; interface ComprehensiveAPIBreakdownProps { providerBreakdown: ProviderBreakdown; totalCost: number; } // Comprehensive API categories and their descriptions const API_CATEGORIES = { llm_models: { title: 'Large Language Models', description: 'AI models for text generation, analysis, and processing', icon: , apis: [ { name: 'Gemini', description: 'Google\'s advanced AI model for complex reasoning and coding', models: ['gemini-2.5-pro', 'gemini-2.5-flash', 'gemini-1.5-pro', 'gemini-1.5-flash'], pricing: 'From $0.10/1M tokens (Flash-Lite) to $15.00/1M tokens (Pro)', use_cases: ['Content generation', 'Code analysis', 'Complex reasoning'] }, { name: 'OpenAI', description: 'GPT models for natural language processing and generation', models: ['gpt-4o', 'gpt-4o-mini', 'gpt-3.5-turbo'], pricing: 'From $0.15/1M tokens (GPT-4o Mini) to $10.00/1M tokens (GPT-4o)', use_cases: ['Chat completion', 'Text analysis', 'Creative writing'] }, { name: 'Anthropic', description: 'Claude models for safe and helpful AI assistance', models: ['claude-3.5-sonnet', 'claude-3-haiku', 'claude-3-opus'], pricing: 'From $3.00/1M tokens (Sonnet) to $15.00/1M tokens (Opus)', use_cases: ['Safe AI assistance', 'Long-form content', 'Analysis tasks'] }, { name: 'Mistral', description: 'European AI models for efficient text processing', models: ['mistral-large', 'mistral-medium', 'mistral-small'], pricing: 'From $2.00/1M tokens (Small) to $8.00/1M tokens (Large)', use_cases: ['Multilingual support', 'Efficient processing', 'European compliance'] } ] }, search_apis: { title: 'Search & Research APIs', description: 'APIs for web search, content discovery, and research', icon: , apis: [ { name: 'Tavily', description: 'AI-powered search for real-time information', models: ['tavily-search'], pricing: '$0.001 per search request', use_cases: ['Real-time search', 'Fact checking', 'Research assistance'] }, { name: 'Serper', description: 'Google Search API for web results', models: ['serper-search'], pricing: '$0.001 per search request', use_cases: ['Web search', 'SEO analysis', 'Content research'] }, { name: 'Metaphor', description: 'Advanced search and content discovery', models: ['metaphor-search'], pricing: '$0.003 per search request', use_cases: ['Content discovery', 'Link analysis', 'Research automation'] } ] }, content_processing: { title: 'Content Processing APIs', description: 'APIs for web scraping, content extraction, and processing', icon: , apis: [ { name: 'Firecrawl', description: 'Web scraping and content extraction service', models: ['firecrawl-extract', 'firecrawl-scrape'], pricing: '$0.002 per page crawled', use_cases: ['Web scraping', 'Content extraction', 'Data collection'] } ] }, image_generation: { title: 'Image Generation APIs', description: 'APIs for creating and processing images', icon: , apis: [ { name: 'Stability AI', description: 'AI-powered image generation and editing', models: ['stable-diffusion-xl', 'stable-diffusion-3'], pricing: '$0.04 per image generated', use_cases: ['Image generation', 'Art creation', 'Visual content'] } ] }, embeddings: { title: 'Embeddings & Vector APIs', description: 'APIs for text embeddings and vector operations', icon: , apis: [ { name: 'Gemini Embeddings', description: 'Text embeddings for semantic search and analysis', models: ['gemini-embedding'], pricing: '$0.15 per 1M input tokens', use_cases: ['Semantic search', 'Text similarity', 'Vector databases'] } ] } }; const ComprehensiveAPIBreakdown: React.FC = ({ providerBreakdown, totalCost }) => { // Get active providers from breakdown const activeProviders = Object.entries(providerBreakdown) .filter(([_, data]) => data.cost > 0) .map(([provider, data]) => ({ provider, ...data })); const getProviderCategory = (providerName: string) => { const provider = providerName.toLowerCase(); if (['gemini', 'openai', 'anthropic', 'mistral'].includes(provider)) { return 'llm_models'; } if (['tavily', 'serper', 'metaphor'].includes(provider)) { return 'search_apis'; } if (['firecrawl'].includes(provider)) { return 'content_processing'; } if (['stability'].includes(provider)) { return 'image_generation'; } return 'llm_models'; // default }; const getCategoryStats = (categoryKey: string) => { const categoryProviders = activeProviders.filter(p => getProviderCategory(p.provider) === categoryKey ); return { count: categoryProviders.length, totalCost: categoryProviders.reduce((sum, p) => sum + p.cost, 0), totalCalls: categoryProviders.reduce((sum, p) => sum + p.calls, 0), totalTokens: categoryProviders.reduce((sum, p) => sum + p.tokens, 0) }; }; return ( {/* Header */} Comprehensive API Breakdown {/* Summary Stats */} {Object.keys(API_CATEGORIES).length} API Categories {activeProviders.length} Active Providers ${totalCost.toFixed(4)} Total Cost {activeProviders.reduce((sum, p) => sum + p.calls, 0)} Total Calls {/* API Categories */} {Object.entries(API_CATEGORIES).map(([categoryKey, category]) => { const stats = getCategoryStats(categoryKey); const hasUsage = stats.count > 0; return ( } sx={{ minHeight: 48, '&.Mui-expanded': { minHeight: 48 } }} > {category.icon} {category.title} {category.description} {hasUsage && ( ${stats.totalCost.toFixed(4)} )} {category.apis.map((api) => { const providerData = activeProviders.find(p => p.provider.toLowerCase() === api.name.toLowerCase() ); return ( {api.name} {providerData && ( )} {api.description} Pricing: {api.pricing} {providerData && ( Cost ${providerData.cost.toFixed(4)} Calls {providerData.calls} Tokens {providerData.tokens.toLocaleString()} )} Use cases: {api.use_cases.join(', ')} ); })} ); })} ); }; export default ComprehensiveAPIBreakdown;