import gradio as gr import pandas as pd # 데이터를 pandas DataFrame으로 변환 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} ], } ] # DataFrame으로 변환 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) # Function to sort the data based on a column def sort_data(column, ascending=True): return df.sort_values(by=column, ascending=ascending) # Gradio interface to display and interact with the data 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) # Run the application if __name__ == "__main__": demo.launch()