diff --git a/README.md b/README.md index 0732ec5..57c041c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,16 @@ LLM & AI Model Compare is a contributor-driven platform for comparing language models and AI technologies across various suppliers. Built with Svelte, it provides an interactive way to explore and understand the differences in cost, speed, and quality of AI models. +## Suppliers +- [x] OpenAI: [docs](https://platform.openai.com/docs/overview) +- [ ] Google: [docs](https://cloud.google.com/products/ai) +- [ ] Anthropic: [docs](https://www.anthropic.com/) +- [ ] Cohere: [docs](https://docs.cohere.ai/) +- [ ] Microsoft: [docs](https://docs.microsoft.com/en-us/azure/cognitive-services/) +- [ ] Anyscale: [docs](https://docs.anyscale.com/) +- [ ] Groq: [docs](https://groq.com/product/) +- [ ] Mistral: [docs](https://docs.mistral.ai/) + ## Project Structure - **`/data`**: Contains supplier directories and model details. diff --git a/src/data/suppliers/Demo/Model_1.js b/src/data/suppliers/_example/Model_1.js similarity index 95% rename from src/data/suppliers/Demo/Model_1.js rename to src/data/suppliers/_example/Model_1.js index 99d243e..a584df6 100644 --- a/src/data/suppliers/Demo/Model_1.js +++ b/src/data/suppliers/_example/Model_1.js @@ -1,6 +1,7 @@ const model = { id: 'Model_1', model: 'Model_1', + supplier: 'Supplier_1', source: 'https://URL', cost: { currency: 'USD', diff --git a/src/data/suppliers/_example/index.js b/src/data/suppliers/_example/index.js new file mode 100644 index 0000000..0a083eb --- /dev/null +++ b/src/data/suppliers/_example/index.js @@ -0,0 +1,7 @@ +const supplier = { + id: 'supplier_1', + name: 'Supplier 1', + docs: 'https://URL' +}; + +export default async () => supplier; diff --git a/src/data/suppliers/anthropic/claude-3-haiku.js b/src/data/suppliers/anthropic/claude-3-haiku.js new file mode 100644 index 0000000..d4dc2f1 --- /dev/null +++ b/src/data/suppliers/anthropic/claude-3-haiku.js @@ -0,0 +1,32 @@ +const claude3Haiku = { + id: 'claude-3-haiku-20240307', + name: 'Claude 3 Haiku', + modelCard: + 'https://www-cdn.anthropic.com/de8ba9b01c9ab7cbabf5c33b80b7bbc618857627/Model_Card_Claude_3.pdf', + supplier: { + id: 'anthropic', + docs: 'https://docs.anthropic.com/' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.25, + per_million_tokens_output: 1.25 + }, + speed: { + tokens_per_second: 89.1, + latency_first_token_ms: 340 + }, + technical: { + token_window: 200000 + } +}; + +claude3Haiku.cost['per_million_tokens_blend_3_1'] = + (claude3Haiku.cost['per_million_tokens_input'] * 3 + + claude3Haiku.cost['per_million_tokens_output']) / + 4; + +export default async () => claude3Haiku; diff --git a/src/data/suppliers/anthropic/claude-3-opus.js b/src/data/suppliers/anthropic/claude-3-opus.js new file mode 100644 index 0000000..7a29f2b --- /dev/null +++ b/src/data/suppliers/anthropic/claude-3-opus.js @@ -0,0 +1,32 @@ +const claude3Opus = { + id: 'claude-3-opus-20240229', + name: 'Claude 3 Opus', + modelCard: + 'https://www-cdn.anthropic.com/de8ba9b01c9ab7cbabf5c33b80b7bbc618857627/Model_Card_Claude_3.pdf', + supplier: { + id: 'anthropic', + docs: 'https://docs.anthropic.com/' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 15.0, + per_million_tokens_output: 75.0 + }, + speed: { + tokens_per_second: 26.6, + latency_first_token_ms: 1390 + }, + technical: { + token_window: 200000 + } +}; + +claude3Opus.cost['per_million_tokens_blend_3_1'] = + (claude3Opus.cost['per_million_tokens_input'] * 3 + + claude3Opus.cost['per_million_tokens_output']) / + 4; + +export default async () => claude3Opus; diff --git a/src/data/suppliers/anthropic/claude-3-sonnet.js b/src/data/suppliers/anthropic/claude-3-sonnet.js new file mode 100644 index 0000000..06fed34 --- /dev/null +++ b/src/data/suppliers/anthropic/claude-3-sonnet.js @@ -0,0 +1,32 @@ +const claude3Sonnet = { + id: 'claude-3-sonnet-20240229', + name: 'Claude 3 Sonnet', + modelCard: + 'https://www-cdn.anthropic.com/de8ba9b01c9ab7cbabf5c33b80b7bbc618857627/Model_Card_Claude_3.pdf', + supplier: { + id: 'anthropic', + docs: 'https://docs.anthropic.com/' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 3.0, + per_million_tokens_output: 15.0 + }, + speed: { + tokens_per_second: 58.8, + latency_first_token_ms: 420 + }, + technical: { + token_window: 200000 + } +}; + +claude3Sonnet.cost['per_million_tokens_blend_3_1'] = + (claude3Sonnet.cost['per_million_tokens_input'] * 3 + + claude3Sonnet.cost['per_million_tokens_output']) / + 4; + +export default async () => claude3Sonnet; diff --git a/src/data/suppliers/anthropic/index.js b/src/data/suppliers/anthropic/index.js new file mode 100644 index 0000000..489a4af --- /dev/null +++ b/src/data/suppliers/anthropic/index.js @@ -0,0 +1,7 @@ +const anthropic = { + id: 'anthropic', + name: 'Anthropic', + docs: 'https://docs.anthropic.com/' +}; + +export default async () => anthropic; diff --git a/src/data/suppliers/groq/gemma_7b.js b/src/data/suppliers/groq/gemma_7b.js new file mode 100644 index 0000000..2f74235 --- /dev/null +++ b/src/data/suppliers/groq/gemma_7b.js @@ -0,0 +1,29 @@ +const gemma7B = { + id: 'gemma-7b', + name: 'Gemma 7B', + modelCard: 'https://huggingface.co/google/gemma-1.1-7b-it', + supplier: { + id: 'groq', + docs: 'https://console.groq.com/docs/models' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.1, + per_million_tokens_output: 0.1 + }, + speed: { + tokens_per_second: 825.4, + latency_first_token_ms: 330 + }, + technical: { + token_window: 8192 + } +}; + +gemma7B.cost['per_million_tokens_blend_3_1'] = + (gemma7B.cost['per_million_tokens_input'] * 3 + gemma7B.cost['per_million_tokens_output']) / 4; + +export default async () => gemma7B; diff --git a/src/data/suppliers/groq/index.js b/src/data/suppliers/groq/index.js new file mode 100644 index 0000000..259d12a --- /dev/null +++ b/src/data/suppliers/groq/index.js @@ -0,0 +1,7 @@ +const groq = { + id: 'groq', + name: 'Groq', + docs: 'https://console.groq.com/docs/models' +}; + +export default async () => groq; diff --git a/src/data/suppliers/groq/llama_3_70b.js b/src/data/suppliers/groq/llama_3_70b.js new file mode 100644 index 0000000..92b4b37 --- /dev/null +++ b/src/data/suppliers/groq/llama_3_70b.js @@ -0,0 +1,30 @@ +const llama3_70B = { + id: 'llama3-70b-8192', + name: 'LLaMA 3 (70B)', + modelCard: 'https://huggingface.co/meta-llama/Meta-Llama-3-70B', + supplier: { + id: 'groq', + docs: 'https://console.groq.com/docs/models' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.59, + per_million_tokens_output: 0.79 + }, + speed: { + tokens_per_second: 274.7, + latency_first_token_ms: 290 + }, + technical: { + token_window: 8192 + } +}; + +llama3_70B.cost['per_million_tokens_blend_3_1'] = + (llama3_70B.cost['per_million_tokens_input'] * 3 + llama3_70B.cost['per_million_tokens_output']) / + 4; + +export default async () => llama3_70B; diff --git a/src/data/suppliers/groq/llama_3_8b.js b/src/data/suppliers/groq/llama_3_8b.js new file mode 100644 index 0000000..9fadc7f --- /dev/null +++ b/src/data/suppliers/groq/llama_3_8b.js @@ -0,0 +1,30 @@ +const llama3_8B = { + id: 'llama3-8b-8192', + name: 'LLaMA 3 (8B)', + modelCard: 'https://huggingface.co/meta-llama/Meta-Llama-3-8B', + supplier: { + id: 'groq', + docs: 'https://console.groq.com/docs/models' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.05, + per_million_tokens_output: 0.1 + }, + speed: { + tokens_per_second: 867.2, + latency_first_token_ms: 300 + }, + technical: { + token_window: 8192 + } +}; + +llama3_8B.cost['per_million_tokens_blend_3_1'] = + (llama3_8B.cost['per_million_tokens_input'] * 3 + llama3_8B.cost['per_million_tokens_output']) / + 4; + +export default async () => llama3_8B; diff --git a/src/data/suppliers/groq/mistral_8x7b.js b/src/data/suppliers/groq/mistral_8x7b.js new file mode 100644 index 0000000..cf353e6 --- /dev/null +++ b/src/data/suppliers/groq/mistral_8x7b.js @@ -0,0 +1,31 @@ +const mixtral8x7B = { + id: 'mixtral-8x7b-32768', + name: 'Mixtral 8x7B', + modelCard: 'https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1', + supplier: { + id: 'groq', + docs: 'https://console.groq.com/docs/models' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.27, + per_million_tokens_output: 0.27 + }, + speed: { + tokens_per_second: 471.6, + latency_first_token_ms: 310 + }, + technical: { + token_window: 32768 + } +}; + +mixtral8x7B.cost['per_million_tokens_blend_3_1'] = + (mixtral8x7B.cost['per_million_tokens_input'] * 3 + + mixtral8x7B.cost['per_million_tokens_output']) / + 4; + +export default async () => mixtral8x7B; diff --git a/src/data/suppliers/mistral/8x22b.js b/src/data/suppliers/mistral/8x22b.js new file mode 100644 index 0000000..9ff9a60 --- /dev/null +++ b/src/data/suppliers/mistral/8x22b.js @@ -0,0 +1,31 @@ +const mistral8x22B = { + id: 'mistral_8x22b', + name: 'Mistral 8x22B', + modelCard: 'https://huggingface.co/mistralai/Mixtral-8x22B-v0.1', + supplier: { + id: 'mistral', + docs: 'https://docs.mistral.ai/api/' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 2.0, + per_million_tokens_output: 6.0 + }, + speed: { + tokens_per_second: 77.2, + latency_first_token_ms: 220 + }, + technical: { + token_window: 64000 + } +}; + +mistral8x22B.cost['per_million_tokens_blend_3_1'] = + (mistral8x22B.cost['per_million_tokens_input'] * 3 + + mistral8x22B.cost['per_million_tokens_output']) / + 4; + +export default async () => mistral8x22B; diff --git a/src/data/suppliers/mistral/8x7b.js b/src/data/suppliers/mistral/8x7b.js new file mode 100644 index 0000000..119d88a --- /dev/null +++ b/src/data/suppliers/mistral/8x7b.js @@ -0,0 +1,31 @@ +const mistral8x7B = { + id: 'mistral_8x7b', + name: 'Mistral 8x7B', + modelCard: 'https://huggingface.co/mistralai/Mixtral-8x7B-v0.1', + supplier: { + id: 'mistral', + docs: 'https://docs.mistral.ai/api/' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.7, + per_million_tokens_output: 0.7 + }, + speed: { + tokens_per_second: 45.3, + latency_first_token_ms: 250 + }, + technical: { + token_window: 32000 + } +}; + +mistral8x7B.cost['per_million_tokens_blend_3_1'] = + (mistral8x7B.cost['per_million_tokens_input'] * 3 + + mistral8x7B.cost['per_million_tokens_output']) / + 4; + +export default async () => mistral8x7B; diff --git a/src/data/suppliers/mistral/index.js b/src/data/suppliers/mistral/index.js new file mode 100644 index 0000000..3c91874 --- /dev/null +++ b/src/data/suppliers/mistral/index.js @@ -0,0 +1,7 @@ +const mistral = { + id: 'mistral', + name: 'Mistral', + docs: 'https://docs.mistral.ai/api/' +}; + +export default async () => mistral; diff --git a/src/data/suppliers/openai/gpt-3_5_turbo.js b/src/data/suppliers/openai/gpt-3_5_turbo.js new file mode 100644 index 0000000..4d3d70c --- /dev/null +++ b/src/data/suppliers/openai/gpt-3_5_turbo.js @@ -0,0 +1,29 @@ +const gpt35Turbo = { + id: 'gpt-3.5_turbo', + name: 'GPT-3.5 Turbo', + supplier: { + id: 'openai', + docs: 'https://platform.openai.com/docs/models' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.5, + per_million_tokens_output: 1.5 + }, + speed: { + tokens_per_second: 71.4, + latency_first_token_ms: 380 + }, + technical: { + token_window: 16000 + } +}; + +gpt35Turbo.cost['per_million_tokens_blend_3_1'] = + (gpt35Turbo.cost['per_million_tokens_input'] * 3 + gpt35Turbo.cost['per_million_tokens_output']) / + 4; + +export default async () => gpt35Turbo; diff --git a/src/data/suppliers/openai/gpt-4_turbo.js b/src/data/suppliers/openai/gpt-4_turbo.js new file mode 100644 index 0000000..a9dab3c --- /dev/null +++ b/src/data/suppliers/openai/gpt-4_turbo.js @@ -0,0 +1,29 @@ +const gpt4Turbo = { + id: 'gpt-4_turbo', + name: 'GPT-4 Turbo', + supplier: { + id: 'openai', + docs: 'https://platform.openai.com/docs/models' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 10.0, + per_million_tokens_output: 30.0 + }, + speed: { + tokens_per_second: 24.4, + latency_first_token_ms: 630 + }, + technical: { + token_window: 128000 + } +}; + +gpt4Turbo.cost['per_million_tokens_blend_3_1'] = + (gpt4Turbo.cost['per_million_tokens_input'] * 3 + gpt4Turbo.cost['per_million_tokens_output']) / + 4; + +export default async () => gpt4Turbo; diff --git a/src/data/suppliers/openai/index.js b/src/data/suppliers/openai/index.js new file mode 100644 index 0000000..e6074de --- /dev/null +++ b/src/data/suppliers/openai/index.js @@ -0,0 +1,7 @@ +const openai = { + id: 'openai', + name: 'OpenAI', + docs: 'https://platform.openai.com/docs/models' +}; + +export default async () => openai; diff --git a/src/data/suppliers/perplexity/index.js b/src/data/suppliers/perplexity/index.js new file mode 100644 index 0000000..f6d0c95 --- /dev/null +++ b/src/data/suppliers/perplexity/index.js @@ -0,0 +1,5 @@ +export default async () => ({ + id: 'perplexity', + name: 'Perplexity', + docs: 'https://docs.perplexity.ai/' +}); diff --git a/src/data/suppliers/perplexity/llama_3_70b.js b/src/data/suppliers/perplexity/llama_3_70b.js new file mode 100644 index 0000000..9b2a4b3 --- /dev/null +++ b/src/data/suppliers/perplexity/llama_3_70b.js @@ -0,0 +1,29 @@ +const llama3_70B_perplexity = { + id: 'llama3-70b-8192-perplexity', + name: 'LLaMA 3 (70B)', + supplier: { + id: 'perplexity' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 1.0, + per_million_tokens_output: 1.0 + }, + speed: { + tokens_per_second: 42.5, + latency_first_token_ms: 270 + }, + technical: { + token_window: 8000 + } +}; + +llama3_70B_perplexity.cost['per_million_tokens_blend_3_1'] = + (llama3_70B_perplexity.cost['per_million_tokens_input'] * 3 + + llama3_70B_perplexity.cost['per_million_tokens_output']) / + 4; + +export default async () => llama3_70B_perplexity; diff --git a/src/data/suppliers/perplexity/llama_3_8b.js b/src/data/suppliers/perplexity/llama_3_8b.js new file mode 100644 index 0000000..03dd82b --- /dev/null +++ b/src/data/suppliers/perplexity/llama_3_8b.js @@ -0,0 +1,29 @@ +const llama3_8B_perplexity = { + id: 'llama3-8b-8192-perplexity', + name: 'LLaMA 3 (8B)', + supplier: { + id: 'perplexity' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.2, + per_million_tokens_output: 0.2 + }, + speed: { + tokens_per_second: 121.6, + latency_first_token_ms: 190 + }, + technical: { + token_window: 8000 + } +}; + +llama3_8B_perplexity.cost['per_million_tokens_blend_3_1'] = + (llama3_8B_perplexity.cost['per_million_tokens_input'] * 3 + + llama3_8B_perplexity.cost['per_million_tokens_output']) / + 4; + +export default async () => llama3_8B_perplexity; diff --git a/src/data/suppliers/perplexity/mistral_8x22b.js b/src/data/suppliers/perplexity/mistral_8x22b.js new file mode 100644 index 0000000..5ec5398 --- /dev/null +++ b/src/data/suppliers/perplexity/mistral_8x22b.js @@ -0,0 +1,29 @@ +const mistral8x22B_perplexity = { + id: 'mistral_8x22b_perplexity', + name: 'Mistral 8x22B', + supplier: { + id: 'perplexity' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 1.0, + per_million_tokens_output: 1.0 + }, + speed: { + tokens_per_second: 62.3, + latency_first_token_ms: 230 + }, + technical: { + token_window: 64000 + } +}; + +mistral8x22B_perplexity.cost['per_million_tokens_blend_3_1'] = + (mistral8x22B_perplexity.cost['per_million_tokens_input'] * 3 + + mistral8x22B_perplexity.cost['per_million_tokens_output']) / + 4; + +export default async () => mistral8x22B_perplexity; diff --git a/src/data/suppliers/perplexity/mistral_8x7b.js b/src/data/suppliers/perplexity/mistral_8x7b.js new file mode 100644 index 0000000..adf995c --- /dev/null +++ b/src/data/suppliers/perplexity/mistral_8x7b.js @@ -0,0 +1,30 @@ +const mistral8x7B_perplexity = { + id: 'mistral_8x7b_perplexity', + name: 'Mistral 8x7B', + supplier: { + id: 'perplexity', + docs: 'https://docs.perplexity.ai/' + }, + meta: { + active: true + }, + cost: { + currency: 'USD', + per_million_tokens_input: 0.6, + per_million_tokens_output: 0.6 + }, + speed: { + tokens_per_second: 120.1, + latency_first_token_ms: 220 + }, + technical: { + token_window: 32000 + } +}; + +mistral8x7B_perplexity.cost['per_million_tokens_blend_3_1'] = + (mistral8x7B_perplexity.cost['per_million_tokens_input'] * 3 + + mistral8x7B_perplexity.cost['per_million_tokens_output']) / + 4; + +export default async () => mistral8x7B_perplexity;