mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-30 03:39:38 +02:00
Code review
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# Recursion Detection Fixed in LangGraph Java
|
||||
|
||||
## Problem
|
||||
|
||||
The Java implementation of LangGraph had an issue with recursion detection in the `PregelLoop` class, which was causing tests to fail. The key problems were:
|
||||
|
||||
1. The recursion detection logic was relying on thread IDs containing specific strings (like "cycle")
|
||||
2. It was throwing `GraphRecursionError` exceptions even when workflows could complete naturally
|
||||
3. The tests were not handling these errors consistently
|
||||
|
||||
## Solution
|
||||
|
||||
We made the following improvements:
|
||||
|
||||
1. **Improved Recursion Detection Logic**
|
||||
- Modified `PregelLoop.execute()` to perform a final validation step before throwing errors
|
||||
- Updated the logic to only throw errors when workflows truly have more work to do
|
||||
- Removed the thread ID string pattern dependency
|
||||
|
||||
2. **Fixed Streaming Execution**
|
||||
- Added similar validation to the `stream()` method to prevent false recursion errors
|
||||
- Added proper final step handling to ensure graceful completion
|
||||
|
||||
3. **Updated Documentation**
|
||||
- Created and populated `PYTHON_JAVA_MAPPING.md` to document equivalence between Python and Java
|
||||
- Added detailed method-level mappings to explain implementation differences
|
||||
- Documented the improved recursion detection approach
|
||||
|
||||
4. **Improved Test Cases**
|
||||
- Fixed `testExecuteWithCheckpointRestore` to use a properly isolated test environment
|
||||
- Made test workflows complete naturally instead of relying on error handling
|
||||
- Added more diagnostic output to track execution steps
|
||||
|
||||
## Results
|
||||
|
||||
After these changes:
|
||||
- All tests now pass consistently
|
||||
- The Java implementation better matches Python's behavior
|
||||
- We have clear documentation about the implementation differences
|
||||
- Future developers have a reference for understanding the cross-language mapping
|
||||
|
||||
This fix makes the Java implementation more robust while maintaining compatibility with the Python version. The improved documentation will help maintain this alignment as both implementations evolve.
|
||||
Reference in New Issue
Block a user