- Implemented HTML pages for datasets, models, training, testing, and results. - Created API endpoints for managing repositories, results, tests, and training sessions. - Added functionality for streaming training progress via Server-Sent Events (SSE). - Introduced a Dockerfile for the ML runner with necessary dependencies. - Developed an SDK for user code execution within the runner container. - Enhanced CSS styles for improved UI layout and navigation. - Established a layout template for consistent HTML structure across pages. - Added JavaScript for dynamic interactions on the models page. - Implemented WebSocket handling for real-time communication with kiosk devices and controllers. - Implemented model registration and management API at /api/models - Added Gitea proxy API for repository interactions at /api/repos - Created results API for listing and comparing training results at /api/results - Developed training management API for enqueueing and retrieving training jobs at /api/trainings - Introduced SSE endpoint for live training progress updates - Added HTML pages for models, datasets, and training management - Created a Dockerfile for the ML runner with necessary dependencies - Developed SDK for user code execution within the runner container - Enhanced CSS styles for improved UI/UX - Implemented WebSocket communication for real-time device and controller interactions in the kiosk system
78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Dict, List, Optional, Any
|
|
from datetime import datetime
|
|
|
|
|
|
# ── Catalog ──────────────────────────────────────────────────────────────────
|
|
|
|
class DatasetVariable(BaseModel):
|
|
short_name: str
|
|
standard_name: Optional[str] = None
|
|
units: Optional[str] = None
|
|
description: Optional[str] = None # human-readable label derived from standard_name
|
|
|
|
|
|
class CatalogDataset(BaseModel):
|
|
dataset_id: str
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
variables: List[DatasetVariable] = []
|
|
min_longitude: Optional[float] = None
|
|
max_longitude: Optional[float] = None
|
|
min_latitude: Optional[float] = None
|
|
max_latitude: Optional[float] = None
|
|
start_datetime: Optional[str] = None
|
|
end_datetime: Optional[str] = None
|
|
|
|
|
|
# ── Jobs ─────────────────────────────────────────────────────────────────────
|
|
|
|
class DownloadJobRequest(BaseModel):
|
|
dataset_id: str
|
|
variables: List[str] = Field(..., min_length=1)
|
|
min_longitude: float
|
|
max_longitude: float
|
|
min_latitude: float
|
|
max_latitude: float
|
|
start_date: str # YYYY-MM-DD
|
|
end_date: str # YYYY-MM-DD
|
|
format: str = Field("json", pattern="^(json|csv)$")
|
|
nome: str = Field(..., min_length=1)
|
|
tags: List[str] = Field(default_factory=lambda: ["marine"])
|
|
notes: str = ""
|
|
variable_renames: Dict[str, str] = Field(default_factory=dict) # {original: custom}
|
|
|
|
|
|
class JobStatus(BaseModel):
|
|
job_id: str
|
|
status: str # pending | downloading | converting | saving | done | error
|
|
progress: int = 0 # 0-100
|
|
message: str = ""
|
|
dataset_id: Optional[str] = None # filled on done
|
|
|
|
|
|
# ── Saved Datasets ────────────────────────────────────────────────────────────
|
|
|
|
class DatasetMeta(BaseModel):
|
|
id: str
|
|
nome: str
|
|
tags: List[str] = []
|
|
created_date: str
|
|
created_by: str
|
|
used_last_date: Optional[str] = None
|
|
type: str # json | csv
|
|
size: int
|
|
notes: str = ""
|
|
version: int = 1
|
|
filename: str
|
|
copernicus_id: str
|
|
variables: List[str] = []
|
|
bbox: List[float] = [] # [min_lon, min_lat, max_lon, max_lat]
|
|
start_date: str
|
|
end_date: str
|
|
|
|
|
|
class DatasetListResponse(BaseModel):
|
|
datasets: List[DatasetMeta]
|
|
count: int
|