predictHeatStress

Realiza la predicción de estrés térmico basada en los datos actuales.

Esta función ejecuta la inferencia del modelo TFLite. Incluye varias comprobaciones:

  • Throttling (Limitación): Asegura un intervalo mínimo entre inferencias para prevenir el uso excesivo de recursos. Si se llama demasiado pronto, devuelve la última predicción conocida.

  • Modelo Cargado: Verifica que el intérprete del modelo TFLite esté inicializado. Si no es así, actualiza el estado del modelo a ERROR y devuelve null.

  • Datos Válidos: Comprueba si el HealthDataPoint proporcionado contiene datos suficientes y válidos para el análisis usando dataPoint.isValidForAnalysis(). Si no es así, devuelve null.

El proceso de inferencia implica:

  1. Establecer el estado del modelo a INFERENCING.

  2. Preparar el array de datos de entrada a partir del HealthDataPoint.

  3. Crear ByteBuffers de entrada y salida para el intérprete TFLite.

  4. Ejecutar la inferencia y medir el tiempo de ejecución.

  5. Procesar el buffer de salida para obtener el array de predicción sin procesar (probabilidades).

  6. Validar el array de salida para asegurar que esté en el formato esperado (p. ej., dos probabilidades que sumen ~1). Si es inválido, actualiza el estado del modelo a ERROR y devuelve null.

  7. Interpretar el array de salida sin procesar en un objeto HeatStressPrediction, que incluye nivel de riesgo, confianza y probabilidades individuales.

  8. Actualizar el state flow _lastPrediction con la nueva predicción.

  9. Actualizar lastInferenceTime para la limitación (throttling).

  10. Actualizar el estado del modelo a READY, incrementar el contador de inferencias y limpiar cualquier mensaje de error.

Si ocurre alguna excepción durante este proceso, se captura, se registra, el estado del modelo