|
6 | 6 | import os |
7 | 7 | from pathlib import Path |
8 | 8 | from typing import List, Dict, Any, Optional |
9 | | -from pydantic import BaseModel, Field, ConfigDict |
| 9 | +from pydantic import BaseModel, Field, ConfigDict, field_validator |
10 | 10 |
|
11 | 11 |
|
12 | 12 | def calculate_file_checksum(file_path: Path) -> str: |
@@ -363,14 +363,18 @@ def has_required_files(cls, experiment_dir: Path) -> bool: |
363 | 363 | return all((experiment_dir / f).exists() for f in required_files) |
364 | 364 |
|
365 | 365 |
|
366 | | -# Enhanced Manifest Models for New Structure |
367 | 366 | class SceneInfo(BaseModel): |
368 | 367 | """Information about a scene within a scenario.""" |
369 | 368 |
|
370 | 369 | source_index: int # Index in the source input_output.json file |
371 | 370 | scene_id: str # Scene ID from meta_info.scene_id |
372 | 371 | timing_s: float # Timing from timing.json raw_times_s[source_index] |
373 | 372 |
|
| 373 | + @field_validator("scene_id", mode="before") |
| 374 | + @classmethod |
| 375 | + def convert_scene_id_to_str(cls, v): |
| 376 | + return str(v) if isinstance(v, int) else v |
| 377 | + |
374 | 378 |
|
375 | 379 | class InputOutputFileInfo(BaseModel): |
376 | 380 | """File information for input_output data.""" |
@@ -487,6 +491,11 @@ def add_experiment( |
487 | 491 | meta_info = item.input.full_state.get("meta_info", {}) |
488 | 492 | if isinstance(meta_info, dict): |
489 | 493 | scene_id = meta_info.get("scene_id", f"scene_{source_index}") |
| 494 | + scene_id = ( |
| 495 | + str(scene_id) |
| 496 | + if scene_id is not None |
| 497 | + else f"scene_{source_index}" |
| 498 | + ) |
490 | 499 |
|
491 | 500 | if scenario_id not in scenarios_dict: |
492 | 501 | scores_path = None |
|
0 commit comments