hellower/diary-predictor
0
Diary Predictor - Health Forecast API
Production-ready Flask приложение для прогнозирования состояния здоровья на основе исторических данных с использованием LSTM нейронных сетей.
Возможности
- 🤖 AI-прогнозирование состояния здоровья с использованием LSTM
- 🚨 Автоматическое обнаружение критических состояний
- 📊 Анализ трендов по множественным параметрам
- 🔍 Health check endpoints для мониторинга
- 📝 Структурированное логирование
- 📚 Swagger/OpenAPI документация с интерактивным UI
Технологии
- Flask - веб-фреймворк
- TensorFlow/Keras - LSTM нейронные сети
- Pandas/NumPy - обработка данных
- Scikit-learn - предобработка данных
- Gunicorn - WSGI сервер для production
- Docker - контейнеризация
- Flasgger - Swagger/OpenAPI документация
API Документация
Swagger UI
Интерактивная документация API доступна по адресу:
- Локально:
http://localhost:5000/docsилиhttp://localhost:7860/docs - Hugging Face Spaces:
https://<your-username>-diary-predictor.hf.space/docs
Swagger UI предоставляет:
- Полное описание всех эндпоинтов
- Интерактивное тестирование API
- Примеры запросов и ответов
- Схемы данных
API Endpoints
Health Check
GET /healthОтвет:
{
"status": "healthy",
"service": "diary_predictor",
"version": "1.0.0"
}Health Forecast
POST /api/v1/health/forecast
Content-Type: application/jsonЗапрос:
{
"history": [
{
"date": "2024-01-01",
"systolic_pressure": 120,
"diastolic_pressure": 80,
"pulse": 70,
"temperature": 36.6,
"weight": 70.0,
"wellbeing": 5,
"sleep_hours": 8
},
{
"date": "2024-01-02",
"systolic_pressure": 125,
"diastolic_pressure": 82,
"pulse": 72,
"temperature": 36.7,
"weight": 70.1,
"wellbeing": 5,
"sleep_hours": 7.5
}
]
}Успешный ответ:
{
"status": "OK",
"risk_level": "LOW",
"forecast_date": "2024-01-08",
"forecast": {
"systolic_pressure": 122.5,
"diastolic_pressure": 81.0,
"pulse": 71.0,
"temperature": 36.6,
"weight": 70.2,
"wellbeing": 5.0,
"sleep_hours": 7.8
},
"alerts": [],
"recommendation": "Тренды в норме."
}Критическое состояние:
{
"status": "CRITICAL",
"alerts": [
"CRITICAL: systolic_pressure is 165.0 (Call Doctor!)"
],
"forecast": null,
"recommendation": "Немедленно обратитесь за медицинской помощью."
}Развертывание на Hugging Face Spaces
Шаг 1: Создание Space
- Перейдите на Hugging Face Spaces
- Нажмите "Create new Space"
- Заполните форму:
- Space name:
diary-predictor(или любое другое) - SDK: выберите Docker
- Hardware: выберите подходящий вариант (CPU Basic бесплатно)
- Visibility: Public или Private
Шаг 2: Загрузка кода
После создания Space, загрузите код:
# Клонируйте ваш Space репозиторий
git clone https://huggingface.co/spaces/<your-username>/diary-predictor
cd diary-predictor
# Скопируйте все файлы проекта в эту директорию:
# - app.py
# - config.py
# - requirements.txt
# - Dockerfile
# - services/ (папка с ai_engine.py)
# - README.md
# Закоммитьте и запушьте
git add .
git commit -m "Initial commit: Diary Predictor API"
git pushШаг 3: Автоматическая сборка
Hugging Face Spaces автоматически:
- Соберет Docker образ из
Dockerfile(5-10 минут) - Установит все зависимости из
requirements.txt - Запустит приложение на порту 7860
- Проксирует трафик через HTTPS
Шаг 4: Проверка работы
После успешной сборки, проверьте:
# Health check
curl https://<your-username>-diary-predictor.hf.space/health
# Swagger документация (откройте в браузере)
# https://<your-username>-diary-predictor.hf.space/docs
# Тестовый запрос прогноза
curl -X POST https://<your-username>-diary-predictor.hf.space/api/v1/health/forecast \
-H "Content-Type: application/json" \
-d '{
"history": [
{
"date": "2024-01-01",
"systolic_pressure": 120,
"diastolic_pressure": 80,
"pulse": 70,
"temperature": 36.6,
"weight": 70.0,
"wellbeing": 5,
"sleep_hours": 8
},
{
"date": "2024-01-02",
"systolic_pressure": 125,
"diastolic_pressure": 82,
"pulse": 72,
"temperature": 36.7,
"weight": 70.1,
"wellbeing": 5,
"sleep_hours": 7.5
}
]
}'Важные замечания
- Порт: Приложение автоматически использует порт 7860 (стандарт для Spaces)
- Логи: Доступны в интерфейсе Spaces в разделе "Logs"
- Обновления: Просто делайте
git push- Spaces пересоберет автоматически - Таймауты: Запросы должны завершаться за 60 секунд (для бесплатных Spaces)
Troubleshooting
Ошибка сборки:
- Проверьте логи в интерфейсе Spaces
- Убедитесь, что
Dockerfileкорректен - Проверьте
requirements.txt
Приложение не отвечает:
- Убедитесь, что приложение слушает на
0.0.0.0:7860 - Проверьте health endpoint:
/health - Посмотрите логи в интерфейсе Spaces
Медленная работа:
- TensorFlow может быть медленным на CPU
- Рассмотрите GPU Space (требует подписки)
- Оптимизируйте модель
Структура проекта
diary-predictor/
├── app.py # Главный файл приложения
├── config.py # Конфигурация
├── requirements.txt # Python зависимости
├── Dockerfile # Docker образ для Spaces
├── README.md # Документация
└── services/
├── __init__.py
└── ai_engine.py # AI сервис для прогнозированияПеременные окружения
Локальная разработка
# Установите зависимости
pip install -r requirements.txt
# Запустите в режиме разработки
export DEBUG=True
python app.pyБезопасность
- ✅ Приложение запускается от непривилегированного пользователя в Docker
- ✅ Валидация входных данных
- ✅ Обработка ошибок
- ✅ Структурированное логирование
- ⚠️ Для production добавьте:
- Rate limiting
- Authentication/Authorization
- HTTPS/TLS
- CORS настройки
Лицензия
MIT
