()
| 272 | |
| 273 | |
| 274 | def main(): # noqa: [C901] |
| 275 | args = parse_args() |
| 276 | |
| 277 | viewer = get_viewer(args.db_url, args.table, args.schema) |
| 278 | |
| 279 | st.title("Trinity-RFT Experience Visualizer") |
| 280 | |
| 281 | # Initialize session state |
| 282 | if "page" not in st.session_state: |
| 283 | st.session_state.page = 1 |
| 284 | |
| 285 | def _set_page(page: int) -> None: |
| 286 | st.session_state.page = page |
| 287 | st.session_state.page_input = page |
| 288 | |
| 289 | def _sync_page_from_input() -> None: |
| 290 | st.session_state.page = st.session_state.page_input |
| 291 | |
| 292 | # === Sidebar: Filters === |
| 293 | st.sidebar.header("Filters") |
| 294 | |
| 295 | # Reward range filter |
| 296 | st.sidebar.markdown("**Reward Range**") |
| 297 | col_rmin, col_rmax = st.sidebar.columns(2) |
| 298 | with col_rmin: |
| 299 | reward_min_str = st.text_input("Min", value="", key="reward_min") |
| 300 | with col_rmax: |
| 301 | reward_max_str = st.text_input("Max", value="", key="reward_max") |
| 302 | reward_min = float(reward_min_str) if reward_min_str.strip() else None |
| 303 | reward_max = float(reward_max_str) if reward_max_str.strip() else None |
| 304 | |
| 305 | # Model version range filter |
| 306 | st.sidebar.markdown("**Model Version Range**") |
| 307 | col_vmin, col_vmax = st.sidebar.columns(2) |
| 308 | with col_vmin: |
| 309 | mv_min_str = st.text_input("Min", value="", key="mv_min") |
| 310 | with col_vmax: |
| 311 | mv_max_str = st.text_input("Max", value="", key="mv_max") |
| 312 | model_version_min = int(mv_min_str) if mv_min_str.strip() else None |
| 313 | model_version_max = int(mv_max_str) if mv_max_str.strip() else None |
| 314 | |
| 315 | # Task ID exact match filter |
| 316 | task_id_filter = st.sidebar.text_input("Task ID (exact match)", value="", key="task_id") |
| 317 | |
| 318 | # Apply filters button |
| 319 | if st.sidebar.button("Apply Filters", use_container_width=True): |
| 320 | new_filters: Dict = {} |
| 321 | if reward_min is not None: |
| 322 | new_filters["reward_min"] = reward_min |
| 323 | if reward_max is not None: |
| 324 | new_filters["reward_max"] = reward_max |
| 325 | if model_version_min is not None: |
| 326 | new_filters["model_version_min"] = int(model_version_min) |
| 327 | if model_version_max is not None: |
| 328 | new_filters["model_version_max"] = int(model_version_max) |
| 329 | if task_id_filter: |
| 330 | new_filters["task_id"] = task_id_filter |
| 331 | st.session_state.active_filters = new_filters |
no test coverage detected