Spaces:
Build error
Build error
| # app.py | |
| 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'], | |
| 'Input Price': model['inputPrice'], | |
| 'Output Price': model['outputPrice'], | |
| 'Total Price': total_price | |
| }) | |
| df = pd.DataFrame(data) | |
| # 정렬 함수 | |
| def sort_data(column, ascending): | |
| sorted_df = df.sort_values(by=column, ascending=ascending) | |
| return sorted_df | |
| # Gradio 인터페이스 설정 | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# AI 모델 가격 비교") | |
| with gr.Row(): | |
| column = gr.Dropdown(choices=df.columns.tolist(), label="정렬할 컬럼 선택") | |
| ascending = gr.Checkbox(label="오름차순", value=True) | |
| sort_button = gr.Button("정렬") | |
| table = gr.Dataframe(value=df, interactive=True) | |
| def update_table(column, ascending): | |
| sorted_df = sort_data(column, ascending) | |
| return sorted_df | |
| sort_button.click(update_table, inputs=[column, ascending], outputs=table) | |
| # 애플리케이션 실행 | |
| if __name__ == "__main__": | |
| demo.launch() |