Spaces:
Runtime error
Runtime error
| 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) |