m-ric HF staff commited on
Commit
955d640
·
1 Parent(s): 8aeda98

Style changes

Browse files
Files changed (1) hide show
  1. app.py +66 -33
app.py CHANGED
@@ -46,8 +46,8 @@ def calculate_total_cost(prompt_tokens: int, completion_tokens: int, model: str)
46
  completion_cost = completion_tokens * model_data['output_cost_per_token']
47
  return prompt_cost, completion_cost
48
 
49
- def update_model_list(function_calling, litellm_provider, max_price, supports_vision):
50
- filtered_models = TOKEN_COSTS
51
 
52
  if litellm_provider != "Any":
53
  filtered_models = filtered_models[filtered_models['litellm_provider'] == litellm_provider]
@@ -94,14 +94,24 @@ def compute_all(input_type, prompt_text, completion_text, prompt_tokens, complet
94
 
95
  min, max = df["Total Cost"].min(), df["Total Cost"].max()
96
  df = df.style.applymap(lambda x: apply_color(x, min, max), subset=["Total Cost"])
97
- df = df.format({"Prompt Cost": "${:.6f}", "Completion Cost": "${:.6f}", "Total Cost": "${:.6f}"})
98
- df = df.set_properties(**{
99
- 'font-family': 'Arial, sans-serif',
100
- 'white-space': 'pre-wrap'
101
- })
102
- df = df.set_properties(**{'font-weight': 'bold'}, subset=['Total Cost'])
 
 
 
 
103
  return df
104
 
 
 
 
 
 
 
105
  with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.yellow, secondary_hue=gr.themes.colors.orange)) as demo:
106
  gr.Markdown("""
107
  # Text-to-$$$: Calculate the price of your LLM runs
@@ -109,8 +119,8 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.yellow, seconda
109
  """)
110
 
111
  with gr.Row():
112
- with gr.Column(scale=2):
113
- gr.Markdown("## Input type")
114
  input_type = gr.Radio(["Text Input", "Token Count Input"], label="Input Type", value="Text Input")
115
 
116
  with gr.Group() as text_input_group:
@@ -121,27 +131,23 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.yellow, seconda
121
  prompt_tokens_input = gr.Number(label="Prompt Tokens (thousands)", value=1.5)
122
  completion_tokens_input = gr.Number(label="Completion Tokens (thousands)", value=2)
123
 
 
124
  gr.Markdown("## Model choice:")
125
  with gr.Row():
126
  with gr.Column():
127
  function_calling = gr.Checkbox(label="Supports Tool Calling", value=False)
128
  supports_vision = gr.Checkbox(label="Supports Vision", value=False)
 
 
 
129
  litellm_provider = gr.Dropdown(label="Inference Provider", choices=["Any"] + TOKEN_COSTS['litellm_provider'].unique().tolist(), value="Any")
130
-
131
- max_price = gr.Slider(label="Max Price per Token (input + output)", minimum=0, maximum=0.001, step=0.00001, value=0.001)
132
-
133
- model = gr.Dropdown(label="Models (can select multiple)", choices=TOKEN_COSTS['model'].tolist(), value=[TOKEN_COSTS['model'].tolist()[0]], multiselect=True)
134
-
135
- compute_button = gr.Button("Compute Costs ⚙️", variant="secondary")
136
-
137
- with gr.Column(scale=2):
138
- results_table = gr.Dataframe(label="Cost Results")
139
 
140
- def toggle_input_visibility(choice):
141
- return (
142
- gr.Group(visible=(choice == "Text Input")),
143
- gr.Group(visible=(choice == "Token Count Input"))
144
- )
145
 
146
  input_type.change(
147
  toggle_input_visibility,
@@ -149,15 +155,42 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.yellow, seconda
149
  outputs=[text_input_group, token_input_group]
150
  )
151
 
152
- # Update model list based on criteria
153
- function_calling.change(update_model_list, inputs=[function_calling, litellm_provider, max_price, supports_vision], outputs=model)
154
- litellm_provider.change(update_model_list, inputs=[function_calling, litellm_provider, max_price, supports_vision], outputs=model)
155
- max_price.change(update_model_list, inputs=[function_calling, litellm_provider, max_price, supports_vision], outputs=model)
156
- supports_vision.change(update_model_list, inputs=[function_calling, litellm_provider, max_price, supports_vision], outputs=model)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
 
158
- # Compute costs
159
- compute_button.click(
160
- compute_all,
161
  inputs=[
162
  input_type,
163
  prompt_text,
@@ -166,7 +199,7 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.yellow, seconda
166
  completion_tokens_input,
167
  model
168
  ],
169
- outputs=[results_table]
170
  )
171
 
172
  if __name__ == "__main__":
 
46
  completion_cost = completion_tokens * model_data['output_cost_per_token']
47
  return prompt_cost, completion_cost
48
 
49
+ def update_model_list(function_calling, litellm_provider, max_price, supports_vision, supports_max_input_tokens):
50
+ filtered_models = TOKEN_COSTS.loc[TOKEN_COSTS["max_input_tokens"] >= supports_max_input_tokens*1000]
51
 
52
  if litellm_provider != "Any":
53
  filtered_models = filtered_models[filtered_models['litellm_provider'] == litellm_provider]
 
94
 
95
  min, max = df["Total Cost"].min(), df["Total Cost"].max()
96
  df = df.style.applymap(lambda x: apply_color(x, min, max), subset=["Total Cost"])
97
+ else:
98
+ df = df.style.applymap(lambda x: 'background-color: rgba(0, 0, 0, 0)', subset=["Total Cost"])
99
+
100
+ df = df.format({"Prompt Cost": "${:.6f}", "Completion Cost": "${:.6f}", "Total Cost": "${:.6f}"})
101
+ df = df.set_properties(**{
102
+ 'font-family': 'Arial, sans-serif',
103
+ 'white-space': 'pre-wrap',
104
+ 'vertical-align': 'middle'
105
+ })
106
+ df = df.set_properties(**{'font-weight': 'bold'}, subset=['Total Cost'])
107
  return df
108
 
109
+ def toggle_input_visibility(choice):
110
+ return (
111
+ gr.Group(visible=(choice == "Text Input")),
112
+ gr.Group(visible=(choice == "Token Count Input"))
113
+ )
114
+
115
  with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.yellow, secondary_hue=gr.themes.colors.orange)) as demo:
116
  gr.Markdown("""
117
  # Text-to-$$$: Calculate the price of your LLM runs
 
119
  """)
120
 
121
  with gr.Row():
122
+ with gr.Column():
123
+ gr.Markdown("## Input type:")
124
  input_type = gr.Radio(["Text Input", "Token Count Input"], label="Input Type", value="Text Input")
125
 
126
  with gr.Group() as text_input_group:
 
131
  prompt_tokens_input = gr.Number(label="Prompt Tokens (thousands)", value=1.5)
132
  completion_tokens_input = gr.Number(label="Completion Tokens (thousands)", value=2)
133
 
134
+ with gr.Column():
135
  gr.Markdown("## Model choice:")
136
  with gr.Row():
137
  with gr.Column():
138
  function_calling = gr.Checkbox(label="Supports Tool Calling", value=False)
139
  supports_vision = gr.Checkbox(label="Supports Vision", value=False)
140
+ with gr.Column():
141
+ supports_max_input_tokens = gr.Slider(label="Min Supported Input Length (thousands)", minimum=2, maximum=256, step=2, value=2)
142
+ max_price = gr.Slider(label="Max Price per Input Token", minimum=0, maximum=0.001, step=0.00001, value=0.001)
143
  litellm_provider = gr.Dropdown(label="Inference Provider", choices=["Any"] + TOKEN_COSTS['litellm_provider'].unique().tolist(), value="Any")
144
+
145
+ model = gr.Dropdown(label="Models (can select multiple)", choices=TOKEN_COSTS['model'].tolist(), value="anyscale/meta-llama/Meta-Llama-3-8B-Instruct", multiselect=True)
146
+
147
+ gr.Markdown("## ➡️ Resulting Costs:")
 
 
 
 
 
148
 
149
+ with gr.Row():
150
+ results_table = gr.Dataframe()
 
 
 
151
 
152
  input_type.change(
153
  toggle_input_visibility,
 
155
  outputs=[text_input_group, token_input_group]
156
  )
157
 
158
+ gr.on(
159
+ triggers=[function_calling.change, litellm_provider.change, max_price.change, supports_vision.change, supports_max_input_tokens.change],
160
+ fn=update_model_list,
161
+ inputs=[function_calling, litellm_provider, max_price, supports_vision, supports_max_input_tokens],
162
+ outputs=model,
163
+ )
164
+
165
+ gr.on(
166
+ triggers=[
167
+ input_type.change,
168
+ prompt_text.change,
169
+ completion_text.change,
170
+ prompt_tokens_input.change,
171
+ completion_tokens_input.change,
172
+ function_calling.change,
173
+ litellm_provider.change,
174
+ max_price.change,
175
+ supports_vision.change,
176
+ supports_max_input_tokens.change,
177
+ model.change
178
+ ],
179
+ fn=compute_all,
180
+ inputs=[
181
+ input_type,
182
+ prompt_text,
183
+ completion_text,
184
+ prompt_tokens_input,
185
+ completion_tokens_input,
186
+ model
187
+ ],
188
+ outputs=results_table
189
+ )
190
 
191
+ # Load results on page load
192
+ demo.load(
193
+ fn=compute_all,
194
  inputs=[
195
  input_type,
196
  prompt_text,
 
199
  completion_tokens_input,
200
  model
201
  ],
202
+ outputs=results_table
203
  )
204
 
205
  if __name__ == "__main__":