Spaces:
Sleeping
Sleeping
File size: 1,838 Bytes
c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe 831da65 c82cafe |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
from pydantic import BaseModel
from typing import Dict, List, Optional, Union, Any
# =============================================================================
# REQUEST SCHEMA
# =============================================================================
class PredictRequest(BaseModel):
"""
Forest segmentation prediction request.
This schema is intentionally flexible to support:
- Supabase Edge Functions
- Hugging Face remote inference
- Local inference scripts
Required:
- bands: Dict[str, Union[str, List[float]]]
Allowed extra fields (sent by Supabase):
- width, height
- bbox
- band_names
- preprocessing
- model_name, model_version
"""
model_name: str = "forest_segmentation"
model_version: str = "landsat8_v1"
# Band data:
# - base64-encoded float32 (remote calls)
# - list/array of floats (local calls)
bands: Dict[str, Union[str, List[float]]]
class Config:
# 🔑 CRITICAL FIX
# Allows Supabase to send extra metadata without 422 errors
extra = "allow"
# =============================================================================
# RESPONSE SCHEMA
# =============================================================================
class PredictResponse(BaseModel):
"""
Forest segmentation prediction response.
Mask values are CONTINUOUS (0–255) — NOT binary.
"""
# Flattened mask (length = width * height)
mask: List[int]
# Inverted mask (optional utility)
inverted_mask: List[int]
# Statistics
forest_percentage: float
forest_confidence: float
mean_prediction: float
# Class mapping
classes: Dict[str, int]
# Model metadata
model_info: Dict[str, Any]
# Optional debug block
debug: Optional[Dict[str, Any]] = None
|