API Models Documentation
This document describes the Pydantic models used throughout the YLFF API. All models are rigorously defined with comprehensive validation, documentation, and examples.
Overview
All API request/response models are defined in ylff/api_models.py with:
- Comprehensive field validation (ranges, types, constraints)
- Detailed descriptions for all fields
- Examples for every field and model
- Type safety with enums where appropriate
- Custom validators for complex validation logic
- JSON schema generation support
Model Organization
Models are organized into:
- Enums: Type-safe enumerations for common values
- Request Models: Input validation for API endpoints
- Response Models: Structured response data
Enums
JobStatus
Job execution status values:
queued: Job is queued for executionrunning: Job is currently executingcompleted: Job completed successfullyfailed: Job failedcancelled: Job was cancelled
DeviceType
Device type for model inference/training:
cpu: CPU executioncuda: CUDA GPU executionmps: Apple Metal Performance Shaders
UseCase
Use case for model selection:
ba_validation: Bundle Adjustment validationmono_depth: Monocular depth estimationmulti_view: Multi-view depth estimationpose_conditioned: Pose-conditioned depthtraining: Training use caseinference: General inference
Request Models
ValidateSequenceRequest
Request model for sequence validation endpoint.
Fields:
sequence_dir(str, required): Directory containing image sequencemodel_name(str, optional): DA3 model name (default: auto-select)use_case(UseCase): Use case for model selection (default:ba_validation)accept_threshold(float): Accept threshold in degrees (default: 2.0, range: 0-180)reject_threshold(float): Reject threshold in degrees (default: 30.0, range: 0-180)output(str, optional): Output JSON path for results
Validation:
reject_thresholdmust be greater thanaccept_thresholdsequence_dircannot be empty
Example:
{
"sequence_dir": "data/sequences/sequence_001",
"model_name": "depth-anything/DA3-LARGE",
"use_case": "ba_validation",
"accept_threshold": 2.0,
"reject_threshold": 30.0,
"output": "data/results/validation.json"
}
ValidateARKitRequest
Request model for ARKit validation endpoint.
Fields:
arkit_dir(str, required): Directory containing ARKit video and JSON metadataoutput_dir(str): Output directory (default:"data/arkit_validation")model_name(str, optional): DA3 model namemax_frames(int, optional): Maximum frames to process (≥1)frame_interval(int): Extract every Nth frame (default: 1, ≥1)device(DeviceType): Device for DA3 inference (default:cpu)gui(bool): Show real-time GUI visualization (default:False)
Validation:
arkit_dircannot be empty
BuildDatasetRequest
Request model for building training dataset.
Fields:
sequences_dir(str, required): Directory containing sequence directoriesoutput_dir(str): Output directory (default:"data/training")model_name(str, optional): DA3 model name for validationmax_samples(int, optional): Maximum training samples (≥1)accept_threshold(float): Accept threshold in degrees (default: 2.0)reject_threshold(float): Reject threshold in degrees (default: 30.0)use_wandb(bool): Enable W&B logging (default:True)wandb_project(str): W&B project name (default:"ylff")wandb_name(str, optional): W&B run name
Validation:
reject_thresholdmust be greater thanaccept_threshold
TrainRequest
Request model for model fine-tuning.
Fields:
training_data_dir(str, required): Directory containing training samplesmodel_name(str, optional): DA3 model name to fine-tuneepochs(int): Number of epochs (default: 10, range: 1-1000)lr(float): Learning rate (default: 1e-5, >0)batch_size(int): Batch size (default: 1, ≥1)checkpoint_dir(str): Checkpoint directory (default:"checkpoints")device(DeviceType): Device for training (default:cuda)use_wandb(bool): Enable W&B logging (default:True)wandb_project(str): W&B project name (default:"ylff")wandb_name(str, optional): W&B run name
PretrainRequest
Request model for model pre-training on ARKit sequences.
Fields:
arkit_sequences_dir(str, required): Directory containing ARKit sequence directoriesmodel_name(str, optional): DA3 model name to pre-trainepochs(int): Number of epochs (default: 10, range: 1-1000)lr(float): Learning rate (default: 1e-4, >0)batch_size(int): Batch size (default: 1, ≥1)checkpoint_dir(str): Checkpoint directory (default:"checkpoints/pretrain")device(DeviceType): Device for training (default:cuda)max_sequences(int, optional): Maximum sequences to process (≥1)max_frames_per_sequence(int, optional): Maximum frames per sequence (≥1)frame_interval(int): Extract every Nth frame (default: 1, ≥1)use_lidar(bool): Use ARKit LiDAR depth as supervision (default:False)use_ba_depth(bool): Use BA depth maps as supervision (default:False)min_ba_quality(float): Minimum BA quality threshold (default: 0.0, range: 0.0-1.0)use_wandb(bool): Enable W&B logging (default:True)wandb_project(str): W&B project name (default:"ylff")wandb_name(str, optional): W&B run name
EvaluateBAAgreementRequest
Request model for BA agreement evaluation.
Fields:
test_data_dir(str, required): Directory containing test sequencesmodel_name(str): DA3 model name (default:"depth-anything/DA3-LARGE")checkpoint(str, optional): Path to model checkpointthreshold(float): Agreement threshold in degrees (default: 2.0, range: 0-180)device(DeviceType): Device for inference (default:cuda)use_wandb(bool): Enable W&B logging (default:True)wandb_project(str): W&B project name (default:"ylff")wandb_name(str, optional): W&B run name
VisualizeRequest
Request model for result visualization.
Fields:
results_dir(str, required): Directory containing validation resultsoutput_dir(str, optional): Output directory for visualizationsuse_plotly(bool): Use Plotly for interactive plots (default:True)
Response Models
JobResponse
Standard response for job-based endpoints.
Fields:
job_id(str, required): Unique job identifierstatus(JobStatus, required): Current job statusmessage(str, optional): Status message or error descriptionresult(dict, optional): Job result data (only when completed/failed)
ValidationStats
Statistics from BA validation.
Fields:
total_frames(int): Total frames processed (≥0)accepted(int): Accepted frames count (≥0)rejected_learnable(int): Rejected-learnable frames count (≥0)rejected_outlier(int): Rejected-outlier frames count (≥0)accepted_percentage(float): Percentage accepted (0-100)rejected_learnable_percentage(float): Percentage rejected-learnable (0-100)rejected_outlier_percentage(float): Percentage rejected-outlier (0-100)ba_status(str, optional): BA validation statusmax_error_deg(float, optional): Maximum rotation error in degrees (≥0)
HealthResponse
Health check response.
Fields:
status(str): Health status ("healthy","degraded","unhealthy")timestamp(float): Unix timestamprequest_id(str): Request IDprofiling(dict, optional): Profiling status if available
ModelsResponse
Response for models list endpoint.
Fields:
models(dict): Dictionary of available models with metadatarecommended(str, optional): Recommended model for requested use case
ErrorResponse
Standard error response.
Fields:
error(str): Error type/namemessage(str): Human-readable error messagerequest_id(str): Request ID for log correlationdetails(dict, optional): Additional error detailsendpoint(str, optional): Endpoint where error occurred
Validation Features
Field Validators
- Range Validation: Numeric fields have
ge(≥),le(≤),gt(>),lt(<) constraints - String Validation: String fields have
min_lengthconstraints - Custom Validators:
reject_threshold > accept_thresholdvalidation- Path format validation
- Non-empty string validation
Type Safety
- Enums for status values, device types, and use cases
- Optional fields clearly marked with
Optional[Type] - Required fields use
...in Field definition
Examples
All models include model_config with JSON schema examples for:
- API documentation generation
- Client SDK generation
- Testing and validation
Usage
In API Endpoints
from .api_models import ValidateSequenceRequest, JobResponse
@app.post("/api/v1/validate/sequence", response_model=JobResponse)
async def validate_sequence(request: ValidateSequenceRequest):
# request is automatically validated
# Invalid requests return 422 with detailed error messages
...
Model Validation
Pydantic automatically validates:
- Type checking
- Range constraints
- Custom validators
- Required fields
- Enum values
Error Handling
Validation errors are automatically handled by FastAPI and return:
{
"error": "ValidationError",
"message": "Invalid request data",
"details": [
{
"field": "reject_threshold",
"error": "reject_threshold (20.0) must be greater than accept_threshold (30.0)"
}
],
"request_id": "..."
}
Benefits
- Type Safety: Catch errors at request time, not runtime
- Documentation: Auto-generated API docs with examples
- Validation: Comprehensive input validation before processing
- Consistency: Standardized request/response formats
- Maintainability: Centralized model definitions
- Developer Experience: Clear error messages and examples