Commit
Β·
d9831c7
1
Parent(s):
00808db
Move routing charts to end + add Indexes/Percentages toggle
Browse files- Move routing_plots_row to the end (after Tokens/Cost per Trajectory)
- Add Radio button for 'Replace part of trajectory': Indexes vs Percentages
- Indexes mode: start/end are step numbers (0-based)
- Percentages mode: start/end are percentages (0-100)
- Default: Percentages with start=0, end=50
app.py
CHANGED
|
@@ -29,19 +29,22 @@ _calculated_tokens_cache = {}
|
|
| 29 |
_trajectory_steps_cache = {}
|
| 30 |
|
| 31 |
|
| 32 |
-
def
|
| 33 |
"""
|
| 34 |
-
Parse
|
| 35 |
|
| 36 |
-
|
| 37 |
-
|
|
|
|
|
|
|
|
|
|
| 38 |
|
| 39 |
-
Returns:
|
| 40 |
"""
|
| 41 |
-
if
|
| 42 |
-
return int(
|
| 43 |
else:
|
| 44 |
-
return int(
|
| 45 |
|
| 46 |
|
| 47 |
def get_routed_steps(total_steps: int, strategy: str, params: dict) -> set:
|
|
@@ -66,8 +69,8 @@ def get_routed_steps(total_steps: int, strategy: str, params: dict) -> set:
|
|
| 66 |
routed = set(range(0, total_steps, k))
|
| 67 |
|
| 68 |
elif strategy == "Replace part of trajectory":
|
| 69 |
-
|
| 70 |
-
end =
|
| 71 |
routed = set(range(start, min(end, total_steps)))
|
| 72 |
|
| 73 |
return routed
|
|
@@ -1221,14 +1224,14 @@ def build_app():
|
|
| 1221 |
plot_tokens = gr.Plot(label="Token Usage by Type")
|
| 1222 |
plot_tokens_cost = gr.Plot(label="Cost by Token Type ($)")
|
| 1223 |
|
| 1224 |
-
with gr.Row(visible=False) as routing_plots_row:
|
| 1225 |
-
routing_tokens_plot = gr.Plot(label="Tokens by Type (per Model)")
|
| 1226 |
-
routing_cost_plot = gr.Plot(label="Cost by Type (per Model)")
|
| 1227 |
-
|
| 1228 |
with gr.Row():
|
| 1229 |
plot_stacked = gr.Plot(label="Tokens per Trajectory")
|
| 1230 |
plot_cost_breakdown = gr.Plot(label="Cost per Trajectory ($)")
|
| 1231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1232 |
with gr.Column(scale=1):
|
| 1233 |
selected_folder = gr.State("")
|
| 1234 |
gr.Markdown("### Selected Model")
|
|
@@ -1302,9 +1305,15 @@ def build_app():
|
|
| 1302 |
random_pct_1 = gr.Number(label="Percentage (%)", value=50, minimum=0, maximum=100, precision=0, interactive=True)
|
| 1303 |
with gr.Row(visible=False) as every_k_params_1:
|
| 1304 |
step_k_1 = gr.Number(label="k", value=2, minimum=1, precision=0, interactive=True)
|
| 1305 |
-
with gr.
|
| 1306 |
-
|
| 1307 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1308 |
|
| 1309 |
add_model_2_btn = gr.Button("+ Add another model", size="sm", visible=False)
|
| 1310 |
|
|
@@ -1332,9 +1341,15 @@ def build_app():
|
|
| 1332 |
random_pct_2 = gr.Number(label="Percentage (%)", value=50, minimum=0, maximum=100, precision=0, interactive=True)
|
| 1333 |
with gr.Row(visible=False) as every_k_params_2:
|
| 1334 |
step_k_2 = gr.Number(label="k", value=2, minimum=1, precision=0, interactive=True)
|
| 1335 |
-
with gr.
|
| 1336 |
-
|
| 1337 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1338 |
|
| 1339 |
add_model_3_btn = gr.Button("+ Add another model", size="sm", visible=False)
|
| 1340 |
|
|
@@ -1362,9 +1377,15 @@ def build_app():
|
|
| 1362 |
random_pct_3 = gr.Number(label="Percentage (%)", value=50, minimum=0, maximum=100, precision=0, interactive=True)
|
| 1363 |
with gr.Row(visible=False) as every_k_params_3:
|
| 1364 |
step_k_3 = gr.Number(label="k", value=2, minimum=1, precision=0, interactive=True)
|
| 1365 |
-
with gr.
|
| 1366 |
-
|
| 1367 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1368 |
|
| 1369 |
gr.Markdown("---")
|
| 1370 |
route_btn = gr.Button("π Let's ROUTE!!", variant="primary", size="lg", interactive=False)
|
|
@@ -1500,7 +1521,7 @@ def build_app():
|
|
| 1500 |
state_data,
|
| 1501 |
base_input, base_cache_read, base_cache_creation, base_completion,
|
| 1502 |
routing_model_1_val, r1_input, r1_cache_read, r1_cache_creation, r1_completion,
|
| 1503 |
-
strategy_1_val, random_pct_1_val, step_k_1_val, start_1_val, end_1_val,
|
| 1504 |
source, overhead, with_cache
|
| 1505 |
):
|
| 1506 |
if state_data is None:
|
|
@@ -1563,6 +1584,7 @@ def build_app():
|
|
| 1563 |
elif strategy_1_val == "Replace every step k":
|
| 1564 |
strategy_params["k"] = step_k_1_val
|
| 1565 |
elif strategy_1_val == "Replace part of trajectory":
|
|
|
|
| 1566 |
strategy_params["start"] = start_1_val
|
| 1567 |
strategy_params["end"] = end_1_val
|
| 1568 |
|
|
@@ -1688,7 +1710,7 @@ def build_app():
|
|
| 1688 |
trajectories_state,
|
| 1689 |
price_input, price_cache_read, price_cache_creation, price_completion,
|
| 1690 |
routing_model_1, routing_price_1_input, routing_price_1_cache_read, routing_price_1_cache_creation, routing_price_1_completion,
|
| 1691 |
-
strategy_1, random_pct_1, step_k_1, start_step_1, end_step_1,
|
| 1692 |
token_source, thinking_overhead, use_cache,
|
| 1693 |
],
|
| 1694 |
outputs=[routing_result, routing_plots_row, routing_tokens_plot, routing_cost_plot],
|
|
|
|
| 29 |
_trajectory_steps_cache = {}
|
| 30 |
|
| 31 |
|
| 32 |
+
def parse_start_end(start: float, end: float, total_steps: int, mode: str) -> tuple[int, int]:
|
| 33 |
"""
|
| 34 |
+
Parse start and end values based on mode.
|
| 35 |
|
| 36 |
+
Args:
|
| 37 |
+
start: start value
|
| 38 |
+
end: end value
|
| 39 |
+
total_steps: total number of steps in trajectory
|
| 40 |
+
mode: "Indexes" or "Percentages"
|
| 41 |
|
| 42 |
+
Returns: (start_idx, end_idx) - both 0-based
|
| 43 |
"""
|
| 44 |
+
if mode == "Indexes":
|
| 45 |
+
return int(start), int(end)
|
| 46 |
else:
|
| 47 |
+
return int(start * total_steps / 100), int(end * total_steps / 100)
|
| 48 |
|
| 49 |
|
| 50 |
def get_routed_steps(total_steps: int, strategy: str, params: dict) -> set:
|
|
|
|
| 69 |
routed = set(range(0, total_steps, k))
|
| 70 |
|
| 71 |
elif strategy == "Replace part of trajectory":
|
| 72 |
+
mode = params.get("mode", "Percentages")
|
| 73 |
+
start, end = parse_start_end(params.get("start", 0), params.get("end", 50), total_steps, mode)
|
| 74 |
routed = set(range(start, min(end, total_steps)))
|
| 75 |
|
| 76 |
return routed
|
|
|
|
| 1224 |
plot_tokens = gr.Plot(label="Token Usage by Type")
|
| 1225 |
plot_tokens_cost = gr.Plot(label="Cost by Token Type ($)")
|
| 1226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1227 |
with gr.Row():
|
| 1228 |
plot_stacked = gr.Plot(label="Tokens per Trajectory")
|
| 1229 |
plot_cost_breakdown = gr.Plot(label="Cost per Trajectory ($)")
|
| 1230 |
|
| 1231 |
+
with gr.Row(visible=False) as routing_plots_row:
|
| 1232 |
+
routing_tokens_plot = gr.Plot(label="Tokens by Type (per Model)")
|
| 1233 |
+
routing_cost_plot = gr.Plot(label="Cost by Type (per Model)")
|
| 1234 |
+
|
| 1235 |
with gr.Column(scale=1):
|
| 1236 |
selected_folder = gr.State("")
|
| 1237 |
gr.Markdown("### Selected Model")
|
|
|
|
| 1305 |
random_pct_1 = gr.Number(label="Percentage (%)", value=50, minimum=0, maximum=100, precision=0, interactive=True)
|
| 1306 |
with gr.Row(visible=False) as every_k_params_1:
|
| 1307 |
step_k_1 = gr.Number(label="k", value=2, minimum=1, precision=0, interactive=True)
|
| 1308 |
+
with gr.Column(visible=False) as part_params_1:
|
| 1309 |
+
part_mode_1 = gr.Radio(
|
| 1310 |
+
choices=["Indexes", "Percentages"],
|
| 1311 |
+
value="Percentages",
|
| 1312 |
+
label="Mode",
|
| 1313 |
+
)
|
| 1314 |
+
with gr.Row():
|
| 1315 |
+
start_step_1 = gr.Number(label="Start", value=0, minimum=0, precision=0, interactive=True)
|
| 1316 |
+
end_step_1 = gr.Number(label="End", value=50, minimum=0, precision=0, interactive=True)
|
| 1317 |
|
| 1318 |
add_model_2_btn = gr.Button("+ Add another model", size="sm", visible=False)
|
| 1319 |
|
|
|
|
| 1341 |
random_pct_2 = gr.Number(label="Percentage (%)", value=50, minimum=0, maximum=100, precision=0, interactive=True)
|
| 1342 |
with gr.Row(visible=False) as every_k_params_2:
|
| 1343 |
step_k_2 = gr.Number(label="k", value=2, minimum=1, precision=0, interactive=True)
|
| 1344 |
+
with gr.Column(visible=False) as part_params_2:
|
| 1345 |
+
part_mode_2 = gr.Radio(
|
| 1346 |
+
choices=["Indexes", "Percentages"],
|
| 1347 |
+
value="Percentages",
|
| 1348 |
+
label="Mode",
|
| 1349 |
+
)
|
| 1350 |
+
with gr.Row():
|
| 1351 |
+
start_step_2 = gr.Number(label="Start", value=0, minimum=0, precision=0, interactive=True)
|
| 1352 |
+
end_step_2 = gr.Number(label="End", value=50, minimum=0, precision=0, interactive=True)
|
| 1353 |
|
| 1354 |
add_model_3_btn = gr.Button("+ Add another model", size="sm", visible=False)
|
| 1355 |
|
|
|
|
| 1377 |
random_pct_3 = gr.Number(label="Percentage (%)", value=50, minimum=0, maximum=100, precision=0, interactive=True)
|
| 1378 |
with gr.Row(visible=False) as every_k_params_3:
|
| 1379 |
step_k_3 = gr.Number(label="k", value=2, minimum=1, precision=0, interactive=True)
|
| 1380 |
+
with gr.Column(visible=False) as part_params_3:
|
| 1381 |
+
part_mode_3 = gr.Radio(
|
| 1382 |
+
choices=["Indexes", "Percentages"],
|
| 1383 |
+
value="Percentages",
|
| 1384 |
+
label="Mode",
|
| 1385 |
+
)
|
| 1386 |
+
with gr.Row():
|
| 1387 |
+
start_step_3 = gr.Number(label="Start", value=0, minimum=0, precision=0, interactive=True)
|
| 1388 |
+
end_step_3 = gr.Number(label="End", value=50, minimum=0, precision=0, interactive=True)
|
| 1389 |
|
| 1390 |
gr.Markdown("---")
|
| 1391 |
route_btn = gr.Button("π Let's ROUTE!!", variant="primary", size="lg", interactive=False)
|
|
|
|
| 1521 |
state_data,
|
| 1522 |
base_input, base_cache_read, base_cache_creation, base_completion,
|
| 1523 |
routing_model_1_val, r1_input, r1_cache_read, r1_cache_creation, r1_completion,
|
| 1524 |
+
strategy_1_val, random_pct_1_val, step_k_1_val, part_mode_1_val, start_1_val, end_1_val,
|
| 1525 |
source, overhead, with_cache
|
| 1526 |
):
|
| 1527 |
if state_data is None:
|
|
|
|
| 1584 |
elif strategy_1_val == "Replace every step k":
|
| 1585 |
strategy_params["k"] = step_k_1_val
|
| 1586 |
elif strategy_1_val == "Replace part of trajectory":
|
| 1587 |
+
strategy_params["mode"] = part_mode_1_val
|
| 1588 |
strategy_params["start"] = start_1_val
|
| 1589 |
strategy_params["end"] = end_1_val
|
| 1590 |
|
|
|
|
| 1710 |
trajectories_state,
|
| 1711 |
price_input, price_cache_read, price_cache_creation, price_completion,
|
| 1712 |
routing_model_1, routing_price_1_input, routing_price_1_cache_read, routing_price_1_cache_creation, routing_price_1_completion,
|
| 1713 |
+
strategy_1, random_pct_1, step_k_1, part_mode_1, start_step_1, end_step_1,
|
| 1714 |
token_source, thinking_overhead, use_cache,
|
| 1715 |
],
|
| 1716 |
outputs=[routing_result, routing_plots_row, routing_tokens_plot, routing_cost_plot],
|