Проект реализован как Rest API на FastAPI с отдельным Telegram-ботом, взаимодействующим с backend по HTTP
Calorie Counter - сервис для измерения КБЖУ и микронутриентов блюд по текстовому описанию, изображению или голосовому сообщению
Больше примеров можно посмотреть в Wiki.
- REST API для асинхронной записи/чтения/удаления данных
- Изоляция данных между пользователями (доступ только к своим записям)
- Агрегация записей пользователя за день
- Воспроизводимые миграции через Alembic
- Таблицы моделей для БД через SQLAlchemy Core
- Валидация входных данных и обработка ошибок
- Анализ содержания блюда по тексту или картинке через внешнюю LLM
- Использование строго Repository Pattern + отсутствие ORM
- Отдельный frontend-клиент, взаимодействующий с backend через HTTP
- Приём текстов, изображений и голосовых сообщений до 2 минут
- Локальная расшифровка voice message через faster-whisper без внешних speech-to-text API
- Взаимодействие с данными строго через API
- Использование заголовков для аутентификации пользователя
Backend:
- Python 3.10
- FastAPI
- PostgreSQL
- AsyncIO
- SQLAlchemy Core
Frontend:
- Telegram Bot (aiogram)
- httpx
- logging
Инфраструктура и инструменты:
- Docker, docker-compose
- Github Actions (CI/CD)
- flake8
Найдите бота в Telegram: @CalorieMicroBot
| Команда | Описание |
|---|---|
| /start | Начать работу |
| /today | Показать сумму КБЖУ за сегодня |
| /last | Посмотреть последнюю запись |
| /delete_last | Удалить последнюю запись |
| [Текст, изображение или голосовое до 2 минут] | Получить анализ КБЖУ и микронутриентов |
┌──────────────────┐
│ LLM (Gemma) │
└────────▲─────────┘
│ async httpx
│
┌─────────────────┐ REST API ┌────────▼─────────┐ ┌──────────────┐
│ Telegram Bot │ ◄────────────► │ FastAPI │ ◄─► │ Database │
│ (Frontend) │ │ (Backend) │ │ (PostgreSQL) │
└─────────────────┘ └──────────────────┘ └──────────────┘
Aleksander1Byte
