Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
# Define the LLM models and their properties | |
models = { | |
"gpt-4o-2024-08-06": { | |
"input_price_per_1M": 2.50, | |
"output_price_per_1M": 10.00, | |
"max_input_tokens": 128_000, | |
}, | |
"gpt-4o-mini-2024-07-18": { | |
"input_price_per_1M": 0.15, | |
"output_price_per_1M": 0.600, | |
"max_input_tokens": 128_000, | |
}, | |
"Claude 3.5 Sonnet": { | |
"input_price_per_1M": 3.0, | |
"output_price_per_1M": 15.0, | |
"max_input_tokens": 200_000, | |
}, | |
"GPT-3.5-turbo": { | |
"input_price_per_1M": 0.5, | |
"output_price_per_1M": 1.5, | |
"max_input_tokens": 4096, | |
}, | |
"GPT-4": { | |
"input_price_per_1M": 30.0, | |
"output_price_per_1M": 60.0, | |
"max_input_tokens": 8192, | |
}, | |
} | |
def calculate_cost(model, input_tokens, output_tokens, num_requests): | |
if model not in models: | |
return "Invalid model selected", 0, 0, 0 | |
if input_tokens > models[model]["max_input_tokens"]: | |
return f"Input tokens exceed the maximum limit for {model}", 0, 0, 0 | |
input_cost = (input_tokens / 1_000_000) * models[model]["input_price_per_1M"] * num_requests | |
output_cost = (output_tokens / 1_000_000) * models[model]["output_price_per_1M"] * num_requests | |
total_cost = input_cost + output_cost | |
return f"${total_cost:.6f}", input_cost, output_cost, total_cost | |
def compare_models(input_tokens, output_tokens, num_requests): | |
results = [] | |
for model in models: | |
total_cost_str, input_cost, output_cost, total_cost = calculate_cost( | |
model, input_tokens, output_tokens, num_requests | |
) | |
results.append( | |
{ | |
"Model": model, | |
"Input Cost": f"${input_cost:.6f}", | |
"Output Cost": f"${output_cost:.6f}", | |
"Total Cost": total_cost_str, | |
"Max Input Tokens": models[model]["max_input_tokens"], | |
"Input Price (1M)": f"${models[model]['input_price_per_1M']:.2f}", | |
"Output Price (1M)": f"${models[model]['output_price_per_1M']:.2f}", | |
} | |
) | |
return pd.DataFrame(results) | |
def create_interface(): | |
with gr.Blocks() as interface: | |
gr.Markdown("# LLM Price Comparison Tool") | |
with gr.Row(): | |
input_tokens = gr.Number(label="Input Tokens", value=100) | |
output_tokens = gr.Number(label="Output Tokens", value=100) | |
num_requests = gr.Number(label="Number of Requests", value=1, step=1) | |
compare_btn = gr.Button("Compare Models") | |
output_table = gr.DataFrame(label="Comparison Results") | |
compare_btn.click( | |
fn=compare_models, | |
inputs=[input_tokens, output_tokens, num_requests], | |
outputs=output_table, | |
) | |
return interface | |
# Create and launch the interface | |
demo = create_interface() | |
# Hugging Face specific launch | |
if __name__ == "__main__": | |
demo.launch() | |
else: | |
demo.launch(share=True) |