|
import gradio as gr |
|
import pandas as pd |
|
|
|
|
|
mockData = [ |
|
{ |
|
'provider': 'OpenAI', |
|
'uri': 'https://openai.com/api/pricing/', |
|
'models': [ |
|
{'name': 'GPT-4o', 'inputPrice': 5.0, 'outputPrice': 15.0}, |
|
{'name': 'GPT-4 (8K)', 'inputPrice': 30.0, 'outputPrice': 60.0}, |
|
{'name': 'GPT-4 Turbo', 'inputPrice': 10.0, 'outputPrice': 30.0}, |
|
{'name': 'GPT-3.5-turbo', 'inputPrice': 0.5, 'outputPrice': 1.5}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Anthropic', |
|
'uri': 'https://www.anthropic.com/pricing', |
|
'models': [ |
|
{'name': 'Claude 3 (Opus)', 'inputPrice': 15.0, 'outputPrice': 75.0}, |
|
{'name': 'Claude 3.5 (Sonnet)', 'inputPrice': 3.0, 'outputPrice': 15.0}, |
|
{'name': 'Claude 3 (Haiku)', 'inputPrice': 0.25, 'outputPrice': 1.25}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Google', |
|
'uri': 'https://ai.google.dev/pricing?hl=en', |
|
'models': [ |
|
{'name': 'Gemini 1.5 Pro', 'inputPrice': 3.5, 'outputPrice': 7.0}, |
|
{'name': 'Gemini 1.5 Flash', 'inputPrice': 0.35, 'outputPrice': 0.7}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Cohere', |
|
'uri': 'https://cohere.com/pricing', |
|
'models': [ |
|
{'name': 'Command R+', 'inputPrice': 3.0, 'outputPrice': 15.0}, |
|
{'name': 'Command R', 'inputPrice': 0.5, 'outputPrice': 1.5}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Mistral', |
|
'uri': 'https://docs.mistral.ai/platform/pricing', |
|
'models': [ |
|
{'name': 'mistral-large-2402', 'inputPrice': 4.0, 'outputPrice': 12.0}, |
|
{'name': 'codestral-2405', 'inputPrice': 1.0, 'outputPrice': 3.0}, |
|
{'name': 'Mixtral 8x22B', 'inputPrice': 2.0, 'outputPrice': 6.0}, |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.7, 'outputPrice': 0.7}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Deepspeek', |
|
'uri': 'https://platform.deepseek.com/api-docs/pricing/', |
|
'models': [ |
|
{'name': 'deepseek-chat', 'inputPrice': 0.14, 'outputPrice': 0.28}, |
|
{'name': 'deepseek-coder', 'inputPrice': 0.14, 'outputPrice': 0.28}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Anyscale', |
|
'uri': 'https://www.anyscale.com/pricing-detail', |
|
'models': [ |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.5, 'outputPrice': 0.5}, |
|
{'name': 'Llama 3 70b', 'inputPrice': 1.0, 'outputPrice': 1.0}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Together.AI', |
|
'uri': 'https://www.together.ai/pricing', |
|
'models': [ |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.6, 'outputPrice': 0.6}, |
|
{'name': 'Llama 3 70b', 'inputPrice': 0.9, 'outputPrice': 0.9}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Replicate', |
|
'uri': 'https://replicate.com/pricing', |
|
'models': [ |
|
{'name': 'Llama 3 70b', 'inputPrice': 0.65, 'outputPrice': 2.75}, |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.30, 'outputPrice': 1.00}, |
|
], |
|
}, |
|
{ |
|
'provider': 'IBM WatsonX', |
|
'uri': 'https://www.ibm.com/products/watsonx-ai/foundation-models', |
|
'models': [ |
|
{'name': 'Llama 3 70b', 'inputPrice': 1.80, 'outputPrice': 1.80}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Groq', |
|
'uri': 'https://wow.groq.com/', |
|
'models': [ |
|
{'name': 'Llama 3 70b', 'inputPrice': 0.59, 'outputPrice': 0.79}, |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.24, 'outputPrice': 0.24}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Fireworks', |
|
'uri': 'https://fireworks.ai/pricing', |
|
'models': [ |
|
{'name': 'Llama 3 70b', 'inputPrice': 0.90, 'outputPrice': 0.90}, |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.50, 'outputPrice': 0.50}, |
|
], |
|
}, |
|
{ |
|
'provider': '01.ai', |
|
'uri': 'https://platform.01.ai/docs#models-and-pricing', |
|
'models': [ |
|
{'name': 'Yi-Large', 'inputPrice': 3.00, 'outputPrice': 3.00}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Perplexity', |
|
'uri': 'https://docs.perplexity.ai/docs/pricing', |
|
'models': [ |
|
{'name': 'Llama 3 70b', 'inputPrice': 1.0, 'outputPrice': 1.0}, |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0.60, 'outputPrice': 0.60}, |
|
], |
|
}, |
|
{ |
|
'provider': 'OpenFreeAI', |
|
'uri': 'https://discord.gg/openfreeai', |
|
'models': [ |
|
{'name': 'kAI', 'inputPrice': 0, 'outputPrice': 0}, |
|
{'name': 'Llama 3 70b', 'inputPrice': 0, 'outputPrice': 0}, |
|
{'name': 'Llama 3 8b', 'inputPrice': 0, 'outputPrice': 0}, |
|
{'name': 'Mixtral 8x7B', 'inputPrice': 0, 'outputPrice': 0}, |
|
], |
|
}, |
|
{ |
|
'provider': 'Writer', |
|
'uri': 'https://dev.writer.com/home/pricing', |
|
'models': [ |
|
{'name': 'Palmyra X 003', 'inputPrice': 7.50, 'outputPrice': 22.50}, |
|
{'name': 'Palmyra X 32k', 'inputPrice': 1.0, 'outputPrice': 2.0}, |
|
{'name': 'Palmyra X 002', 'inputPrice': 1.0, 'outputPrice': 2.0}, |
|
{'name': 'Palmyra X 002 32k', 'inputPrice': 1.0, 'outputPrice': 2.0} |
|
], |
|
} |
|
] |
|
|
|
|
|
data = [] |
|
for provider in mockData: |
|
for model in provider['models']: |
|
total_price = model['inputPrice'] + model['outputPrice'] |
|
data.append({ |
|
'Provider': provider['provider'], |
|
'URI': provider['uri'], |
|
'Model': model['name'], |
|
'Total Price': total_price, |
|
'Input Price': model['inputPrice'], |
|
'Output Price': model['outputPrice'] |
|
}) |
|
|
|
df = pd.DataFrame(data) |
|
|
|
|
|
def sort_data(column, ascending=True): |
|
return df.sort_values(by=column, ascending=ascending) |
|
|
|
|
|
def update_table(column, ascending): |
|
sorted_df = sort_data(column, ascending) |
|
return sorted_df |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# Comparison of LLM (Large Language Model) Costs Based on One Million Tokens") |
|
column = gr.Dropdown(label="Select column to sort by", choices=df.columns.tolist(), value="Total Price") |
|
ascending = gr.Checkbox(label="Ascending order", value=True) |
|
sort_button = gr.Button("Sort") |
|
table = gr.Dataframe(df) |
|
sort_button.click(fn=update_table, inputs=[column, ascending], outputs=table) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |