API Models Implementation Summary
Overview
Created a dedicated, rigorously defined Pydantic models module (ylff/api_models.py) for all API request/response schemas with comprehensive validation, documentation, and type safety.
β Completed
1. Created ylff/api_models.py
- β All API models extracted and enhanced
- β Comprehensive field validation
- β Detailed descriptions and examples
- β Custom validators for complex rules
- β Type-safe enums
- β JSON schema examples
2. Model Categories
Enums (Type Safety)
- β
JobStatus: Job execution status values - β
DeviceType: Device selection (CPU, CUDA, MPS) - β
UseCase: Use case for model selection
Request Models
- β
ValidateSequenceRequest: Sequence validation - β
ValidateARKitRequest: ARKit validation - β
BuildDatasetRequest: Dataset building - β
TrainRequest: Model fine-tuning - β
PretrainRequest: Model pre-training (ARKit-specific) - β
EvaluateBAAgreementRequest: BA agreement evaluation - β
VisualizeRequest: Result visualization
Response Models
- β
JobResponse: Standard job-based response - β
ValidationStats: BA validation statistics - β
HealthResponse: Health check response - β
ModelsResponse: Models list response - β
ErrorResponse: Standard error response
3. Validation Features
Range Constraints
- β
Numeric ranges:
ge,le,gt,lt - β
String lengths:
min_length - β Angle ranges: 0-180 degrees
- β Quality ranges: 0.0-1.0
Custom Validators
- β
reject_threshold > accept_thresholdvalidation - β Path format validation
- β Non-empty string validation
Type Safety
- β Enums for categorical values
- β Optional fields clearly marked
- β Required fields explicitly defined
4. Documentation
- β Field descriptions for all fields
- β Examples for every field
- β
JSON schema examples in
model_config - β Comprehensive model documentation
5. Updated ylff/api.py
- β Removed inline model definitions
- β
Import all models from
api_models - β All endpoints use imported models
- β Maintained backward compatibility
Model Features
Field Validation Examples
# Range validation
accept_threshold: float = Field(
2.0,
ge=0.0, # Greater than or equal to 0
le=180.0, # Less than or equal to 180
)
# String validation
sequence_dir: str = Field(
...,
min_length=1, # Cannot be empty
)
# Custom validator
@field_validator("reject_threshold")
@classmethod
def reject_greater_than_accept(cls, v, info):
if v <= info.data["accept_threshold"]:
raise ValueError("reject_threshold must be > accept_threshold")
return v
Enum Usage
# Type-safe device selection
device: DeviceType = Field(
DeviceType.CPU,
examples=["cpu", "cuda", "mps"],
)
# Type-safe use case
use_case: UseCase = Field(
UseCase.BA_VALIDATION,
examples=["ba_validation", "mono_depth"],
)
Benefits
- Type Safety: Catch errors at request validation time
- 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
- API Discovery: JSON schema examples enable client generation
File Structure
ylff/
βββ api.py # API endpoints (imports models)
βββ api_models.py # All Pydantic models (NEW)
βββ api_middleware.py # Middleware utilities
docs/
βββ API_MODELS.md # Comprehensive model documentation
βββ API_MODELS_SUMMARY.md # This file
Next Steps
The models are now:
- β Rigorously defined with validation
- β Well-documented with examples
- β Type-safe with enums
- β Ready for API documentation generation
- β Ready for client SDK generation
Future enhancements:
- Add response models for all endpoints
- Add pagination models for list endpoints
- Add filter/sort models for query parameters
- Generate OpenAPI schema from models
- Create client SDK from models