Advocate_Life_Style / CURRENT_ARCHITECTURE.md
DocUA's picture
Docs: cleanup and create current architecture guide
81f922c

🏗️ Поточна архітектура Lifestyle Journey

🎯 Огляд системи

Lifestyle Journey - медичний чат-бот з lifestyle коучингом на базі Gemini API, що використовує розумну класифікацію повідомлень та м'який медичний тріаж.

🔧 Ключові компоненти

📋 Класифікатори

1. EntryClassifier - K/V/T формат

Призначення: Класифікує повідомлення пацієнта на початку взаємодії

Формат відповіді:

{
    "K": "Lifestyle Mode",
    "V": "on|off|hybrid", 
    "T": "2025-09-04T11:30:00Z"
}

Значення V:

  • off - медичні скарги, симптоми, вітання → м'який медичний тріаж
  • on - lifestyle питання → активація lifestyle режиму
  • hybrid - містить і lifestyle теми, і медичні скарги → гібридний потік

2. TriageExitClassifier

Призначення: Після медичного тріажу оцінює готовність до lifestyle

Критерії для lifestyle:

  • Медичні скарги стабілізовані
  • Пацієнт готовий до lifestyle активностей
  • Немає активних симптомів

3. LifestyleExitClassifier (deprecated)

Призначення: Контролює вихід з lifestyle режиму Статус: Замінено на MainLifestyleAssistant логіку

🤖 Асистенти

1. SoftMedicalTriage - М'який тріаж

Призначення: Делікатна перевірка стану пацієнта на початку взаємодії

Принципи:

  • Дружній, не нав'язливий тон
  • 1-2 коротких питання про самопочуття
  • Швидка оцінка потреби в медичній допомозі
  • Готовність перейти до lifestyle якщо все добре

2. MedicalAssistant - Повний медичний режим

Призначення: Медичні консультації з урахуванням хронічних станів

Функції:

  • Безпечні рекомендації та тріаж
  • Направлення до лікарів при red flags
  • Урахування медичного анамнезу та медикаментів

3. MainLifestyleAssistant - Розумний lifestyle коуч

Призначення: Аналізує повідомлення і визначає найкращу дію для lifestyle сесії

3 типи дій:

{
    "message": "відповідь пацієнту",
    "action": "gather_info|lifestyle_dialog|close",
    "reasoning": "пояснення вибору дії"
}
  • gather_info - збір додаткової інформації про стан, уподобання
  • lifestyle_dialog - lifestyle коучинг та рекомендації
  • close - завершення lifestyle сесії (медичні скарги, прохання, довга сесія)

🔄 Менеджери

LifestyleSessionManager

Призначення: Управляє lifecycle lifestyle сесій та розумно оновлює профіль

Функції:

  • Суммаризація сесії без розростання даних
  • Контроль розміру journey_summary (максимум 800 символів)
  • Логування ключових моментів з датами
  • Уникнення повторів інструкцій

🔄 Потік обробки повідомлень

1. Entry Classification

Повідомлення → EntryClassifier → K/V/T формат
├── V="off" → SoftMedicalTriage
├── V="on" → MainLifestyleAssistant  
└── V="hybrid" → Гібридний потік

2. Гібридний потік

V="hybrid" → MedicalAssistant (тріаж)
           → TriageExitClassifier (оцінка готовності)
           → [lifestyle або medical режим]

3. Lifestyle режим

MainLifestyleAssistant → action
├── "gather_info" → збір інформації (продовжити lifestyle)
├── "lifestyle_dialog" → коучинг (продовжити lifestyle)
└── "close" → завершення → LifestyleSessionManager → medical режим

4. Оновлення профілю

Завершення lifestyle → LifestyleSessionManager
                    → Аналіз сесії
                    → Оновлення last_session_summary
                    → Додавання до journey_summary
                    → Контроль розміру даних

📊 Структура даних

SessionState

@dataclass
class SessionState:
    current_mode: str                    # "medical" | "lifestyle" | "none"
    is_active_session: bool
    session_start_time: Optional[str]
    last_controller_decision: Dict
    lifestyle_session_length: int = 0   # Лічильник lifestyle повідомлень
    last_triage_summary: str = ""        # Результат медичного тріажу
    entry_classification: Dict = None    # K/V/T класифікація

Приклад оновлення профілю

{
  "last_session_summary": "[04.09.2025] Обговорювали: питання про ходьбу; дієта з низьким вмістом солі",
  "journey_summary": "...попередні записи... | 04.09.2025: 5 повідомлень"
}

🎯 Переваги поточної архітектури

1. K/V/T формат

  • Простіший для розуміння ніж складні категорії
  • Легше розширювати в майбутньому
  • Консистентний timestamp для відстеження

2. М'який медичний тріаж

  • Делікатніший підхід до пацієнтів
  • Природні відповіді на вітання
  • Не лякає одразу повним медичним режимом

3. Розумний lifestyle асистент

  • Сам визначає коли збирати інформацію
  • Сам вирішує коли давати поради
  • Сам визначає коли завершувати сесію
  • Менше API викликів

4. Контрольоване оновлення профілю

  • Уникає розростання даних
  • Зберігає тільки ключову інформацію
  • Контролює розмір journey_summary

🧪 Тестування

Покриття тестами:

  • ✅ Entry Classifier K/V/T: 8/8
  • ✅ Main Lifestyle Assistant: 7/7
  • ✅ Lifecycle потоки: 3/3
  • ✅ Profile Update: працює
  • ✅ Всього тестів: 31/31

Тестові сценарії:

# K/V/T класифікація
"У мене болить голова" → V="off"
"Хочу почати займатися спортом" → V="on"
"Хочу займатися спортом, але у мене болить спина" → V="hybrid"
"Привіт" → V="off"'який тріаж)

# Main Lifestyle дії
"Хочу почати займатися спортом" → action="gather_info"
"Дайте мені поради щодо харчування" → action="lifestyle_dialog"
"У мене болить спина" → action="close"

🚀 Деплой та використання

Файли системи:

├── app.py                    # Точка входу з create_app()
├── huggingface_space.py      # HuggingFace Space entry point
├── lifestyle_app.py          # Основна бізнес-логіка
├── core_classes.py           # Класифікатори та асистенти
├── prompts.py                # Промпти для Gemini API
├── gradio_interface.py       # UI інтерфейс
├── requirements.txt          # Залежності
└── README.md                 # Документація для HF Space

Змінні оточення:

GEMINI_API_KEY=your_api_key    # Обов'язково
LOG_PROMPTS=true               # Опціонально для debug

Запуск:

# Локально
python app.py

# HuggingFace Space
# Автоматично через huggingface_space.py

📈 Метрики та моніторинг

Автоматично відстежується:

  • Кількість API викликів до Gemini
  • Розподіл по режимах (medical/lifestyle)
  • Тривалість lifestyle сесій
  • Частота оновлень профілю

Логування (LOG_PROMPTS=true):

  • Всі промпти до Gemini API з типом виклику
  • Повні відповіді LLM з timestamps
  • Класифікаційні рішення та обґрунтування
  • Метрики продуктивності

🔮 Майбутні покращення

Короткострокові:

  • Покращення розпізнавання прохань про завершення
  • Додавання timeout для lifestyle сесій
  • Оптимізація промптів на основі реальних тестів

Довгострокові:

  • Додавання нових типів класифікації
  • Інтеграція з медичними системами
  • Персоналізація на основі історії взаємодій
  • A/B тестування різних підходів

Система готова до продакшену з чистою архітектурою та розумною логікою! 🚀