TradingAgents/BUG_FIX_CHROMADB_COLLECTION...

66 lines
2.5 KiB
Markdown

# Bug Fix: ChromaDB Collection Name Collision
## Issue Description
When running multiple analyses through the API (either concurrently or sequentially), the system would fail with:
```
chromadb.errors.InternalError: Collection [bull_memory] already exists
```
### Root Cause
The `TradingAgentsGraph` class was creating ChromaDB memory collections with **hardcoded names**:
- `bull_memory`
- `bear_memory`
- `trader_memory`
- `invest_judge_memory`
- `risk_manager_memory`
When multiple analyses ran (even for different tickers), they all tried to create collections with the same names, causing ChromaDB to reject duplicate collection creation.
**Location of the bug:**
- `tradingagents/graph/trading_graph.py` lines 90-94
- `tradingagents/agents/utils/memory.py` line 14
## Solution Implemented
### Changes Made
1. **Modified `TradingAgentsGraph.__init__`** (`tradingagents/graph/trading_graph.py`):
- Added optional `analysis_id` parameter
- Collection names now include the analysis ID as a suffix: `bull_memory_{analysis_id}`
- When `analysis_id` is None, collections use original names (backward compatibility)
2. **Modified `state_manager.py`** (`api/state_manager.py`):
- Pass the unique `analysis_id` when creating `TradingAgentsGraph`
- Added cleanup in `finally` block to delete collections after analysis completes
3. **Added cleanup method** (`tradingagents/graph/trading_graph.py`):
- New `cleanup_memories()` method to delete ChromaDB collections
- Called after each analysis (success or failure) to prevent memory leaks
- Prevents accumulation of old collections in the database
### Backward Compatibility
The fix is **fully backward compatible**:
- CLI usage (`cli/main.py`) - continues to work without `analysis_id`
- Standalone usage (`main.py`) - continues to work without `analysis_id`
- API usage - now provides unique `analysis_id` for isolation
## Testing Recommendations
1. **Test concurrent analyses**: Run multiple analyses simultaneously for the same or different tickers
2. **Test sequential analyses**: Run multiple analyses one after another for the same ticker
3. **Test failure scenarios**: Ensure collections are cleaned up even when analysis fails
4. **Test CLI**: Verify CLI still works without regression
## Benefits
✅ Multiple analyses can now run concurrently without conflicts
✅ Same ticker can be analyzed multiple times without errors
✅ Memory collections are properly cleaned up after each analysis
✅ No breaking changes to existing code
✅ Prevents ChromaDB from accumulating stale collections