code-review-agent/docs/TEST_STREAMING.md

4.8 KiB
Raw Permalink Blame History

Тестирование LangGraph Streaming

Эти скрипты помогут проверить, как работает стриминг событий из LangGraph.

Скрипты

1. test_simple_graph.py - Простой тест (БЕЗ БД)

Рекомендуется запустить ПЕРВЫМ для понимания как работает стриминг.

Тестирует простой граф с 3 нодами без реального review.

# Активировать venv
cd backend
source venv/Scripts/activate  # Windows Git Bash
# или
source venv/bin/activate       # Linux/Mac

# Запустить
python ../test_simple_graph.py

Что тестирует:

  • stream_mode=['updates'] - обновления нод
  • stream_mode=['messages'] - сообщения (LLM calls)
  • stream_mode=['updates', 'messages'] - оба режима
  • stream_mode=['values'] - значения состояния
  • stream_mode=['debug'] - режим отладки
  • Callback обработка событий

Ожидаемый результат: Должны появиться события для каждой ноды (node_1, node_2, node_3).


2. test_langgraph_events.py - Полный тест (С БД)

Тестирует реальный ReviewerAgent с настоящими данными из БД.

⚠️ Требует:

  • Работающую БД с данными
  • Существующий Review ID, PR Number, Repository ID
  • Настроенный .env файл
# Активировать venv
cd backend
source venv/Scripts/activate  # Windows
# или
source venv/bin/activate       # Linux/Mac

# Запустить
python ../test_langgraph_events.py

Перед запуском: Отредактируйте в файле test_langgraph_events.py:

TEST_REVIEW_ID = 1        # ID существующего review
TEST_PR_NUMBER = 5        # Номер PR
TEST_REPOSITORY_ID = 1    # ID репозитория

Что тестирует:

  • Полный цикл review с callback
  • RAW стриминг напрямую из графа
  • Все режимы: updates, messages, updates + messages

Запуск локально (быстрый старт)

Шаг 1: Простой тест

cd backend
source venv/Scripts/activate
python ../test_simple_graph.py

Смотрите вывод - должны быть события от каждой ноды.

Шаг 2: Проверка формата событий

Обратите внимание на тип и структуру событий:

📨 Event #1
   Type: <class 'dict'>
   Keys: ['node_1']
   Content: {'node_1': {...}}

или

📨 Event #1
   Type: <class 'tuple'>
   Tuple[0]: 'messages'
   Tuple[1]: [AIMessage(...)]

Шаг 3: Полный тест (если нужно)

Отредактируйте параметры в test_langgraph_events.py и запустите:

python ../test_langgraph_events.py

Что искать в выводе

ХОРОШО:

📨 Event #1
   Type: <class 'dict'>
   Content: {'node_1': {...}}

📨 Event #2
   Type: <class 'dict'>
   Content: {'node_2': {...}}

События приходят! Граф работает.

ПЛОХО:

✅ Получено событий: 0

События НЕ приходят! Проблема с графом или версией LangGraph.


Отладка

Если события не приходят:

  1. Проверьте версию LangGraph:

    pip show langgraph
    

    Должна быть >= 0.1.0

  2. Проверьте, что граф компилируется:

    graph = workflow.compile()
    print(graph)  # Должен вывести информацию о графе
    
  3. Попробуйте ainvoke вместо astream:

    result = await graph.ainvoke(initial_state)
    print(result)  # Должен вернуть финальное состояние
    
  4. Проверьте логи: Включите DEBUG логирование:

    import logging
    logging.basicConfig(level=logging.DEBUG)
    

Результаты

После запуска тестов вы узнаете:

  1. Работает ли стриминг вообще?
  2. Какой формат у событий?
  3. Какие режимы стриминга поддерживаются?
  4. Как правильно обрабатывать события?

Это поможет понять, почему события не доходят до фронтенда.