Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,9 @@ run_indexer_with_filtering.py

# Cline files
memory-bank/
/deepcode_lab
/logs
mcp_agent.config.yaml
mcp_agent.secrets.yaml
mcp_agent.config.yaml
mcp_agent.secrets.yaml
74 changes: 74 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Changelog

All notable changes to DeepCode will be documented in this file.

## [1.0.6-jm] - 2025-10-19

### Added
- **Dynamic Model Limit Detection**: New `utils/model_limits.py` module that automatically detects and adapts to any LLM model's token limits and pricing
- **Loop Detection System**: `utils/loop_detector.py` prevents infinite loops by detecting repeated tool calls, timeouts, and progress stalls
- **Progress Tracking**: 8-phase progress tracking (5% → 100%) with file-level progress indicators in both UI and terminal
- **Abort Mechanism**: "Stop Processing" button in UI with global abort flag for clean process termination
- **Cache Cleanup Scripts**: `start_clean.bat` and `start_clean.ps1` to clear Python cache before starting
- **Enhanced Error Display**: Real-time error messages in both UI and terminal with timestamps
- **File Progress Tracking**: Shows files completed/total with estimated time remaining

### Fixed
- **Critical: False Error Detection**: Fixed overly aggressive error detection that was marking successful operations as failures, causing premature abort and empty file generation
- **Critical: Empty File Generation**: Files now contain actual code instead of being empty (2-byte files)
- **Unique Folder Naming**: Each project run now creates `paper_{timestamp}` folders instead of reusing `pdf_output`
- **PDF Save Location**: PDFs now save to `deepcode_lab/papers/` instead of system temp directory
- **Duplicate Folder Prevention**: Added session state caching to prevent duplicate folder creation on UI reruns
- **Token Limit Compliance**: Fixed `max_tokens` to respect model limits dynamically (e.g., gpt-4o-mini's 16,384 token limit)
- **Empty Plan Detection**: System now fails early with clear error messages when initial plan is empty or invalid
- **Process Hanging**: Fixed infinite loops and hanging on errors - process now exits cleanly
- **Token Cost Tracking**: Restored accurate token usage and cost display (was showing $0.0000)
- **PDF to Markdown Conversion**: Fixed automatic conversion and file location handling
- **Document Segmentation**: Properly uses configured 50K character threshold from `mcp_agent.config.yaml`
- **Error Propagation**: Abort mechanism now properly stops process after 10 consecutive real errors

### Changed
- **Model-Aware Token Management**: Token limits now adapt automatically based on configured model instead of hardcoded values
- **Cost Calculation**: Dynamic pricing based on actual model rates (OpenAI, Anthropic)
- **Retry Logic**: Token limits for retries now respect model maximum (87.5% → 95% → 98% of max)
- **Segmentation Workflow**: Better integration with code implementation phase
- **Error Handling**: Enhanced error propagation - errors no longer reported as "success"
- **UI Display**: Shows project folder name after PDF conversion for better visibility
- **Terminal Logging**: Added timestamps to all progress messages

### Technical Improvements
- Added document-segmentation server to code implementation workflow for better token management
- Improved error handling in agent orchestration engine with proper cleanup
- Enhanced subprocess handling on Windows (hide console windows, prevent hanging)
- Better LibreOffice detection on Windows using direct path checking
- Fixed input data format consistency (JSON with `paper_path` key)
- Added comprehensive logging throughout the pipeline
- Improved resource cleanup on errors and process termination

### Documentation
- Translated Chinese comments to English in core workflow files
- Added inline documentation for new utility modules
- Created startup scripts with clear usage instructions

### Breaking Changes
- None - all changes are backward compatible

### Known Issues
- Terminal may show trailing "Calling Tool..." line after completion (cosmetic display artifact - process completes successfully)
- Some Chinese comments remain in non-critical files (cli, tools) - translation in progress
- tiktoken package optional warning (doesn't affect functionality)

### Success Metrics
- ✅ Complete end-to-end workflow: DOCX upload → PDF conversion → Markdown → Segmentation → Planning → Code generation
- ✅ Files generated with actual code content (15+ files with proper implementation)
- ✅ Single folder per project run (no duplicates)
- ✅ Dynamic token management working across different models
- ✅ Accurate cost tracking per model
- ✅ Clean process termination with proper error handling

---

## [1.0.5] - Previous Release

See previous releases for earlier changes.

5 changes: 3 additions & 2 deletions __init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
⚡ Transform research papers into working code automatically
"""

__version__ = "1.0.5"
__author__ = "DeepCode Team"
__version__ = "1.0.6-jm"
__author__ = "DeepCode Team, Jany Martelli"
__url__ = "https://github.com/HKUDS/DeepCode"
__repo__ = "https://github.com/Jany-M/DeepCode/"

# Import main components for easy access
from utils import FileProcessor, DialogueLogger
Expand Down
60 changes: 46 additions & 14 deletions deepcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def check_dependencies():
try:
import subprocess
import platform
import os

subprocess_kwargs = {
"capture_output": True,
Expand All @@ -58,25 +59,56 @@ def check_dependencies():
}

if platform.system() == "Windows":
subprocess_kwargs["creationflags"] = 0x08000000 # Hide console window
subprocess_kwargs["creationflags"] = 0x08000000
# Also configure startupinfo to hide window
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess_kwargs["startupinfo"] = startupinfo

# Try different LibreOffice commands
libreoffice_found = False
for cmd in ["libreoffice", "soffice"]:
try:
result = subprocess.run([cmd, "--version"], **subprocess_kwargs)
if result.returncode == 0:
print(
"✅ LibreOffice is installed (for Office document conversion)"
)

# On Windows, try standard installation paths first
# Just check if file exists to avoid window/hanging issues
if platform.system() == "Windows":
possible_paths = [
r"C:\Program Files\LibreOffice\program\soffice.exe",
r"C:\Program Files (x86)\LibreOffice\program\soffice.exe",
]

# Also check PROGRAMFILES environment variables
program_files = os.environ.get("PROGRAMFILES")
program_files_x86 = os.environ.get("PROGRAMFILES(X86)")

if program_files:
possible_paths.append(os.path.join(program_files, "LibreOffice", "program", "soffice.exe"))
if program_files_x86:
possible_paths.append(os.path.join(program_files_x86, "LibreOffice", "program", "soffice.exe"))

for path in possible_paths:
if os.path.exists(path):
print("✅ LibreOffice is installed (for Office document conversion)")
libreoffice_found = True
break
except (
subprocess.CalledProcessError,
FileNotFoundError,
subprocess.TimeoutExpired,
):
continue

# Try standard commands if not found via Windows paths (non-Windows systems)
if not libreoffice_found and platform.system() != "Windows":
for cmd in ["libreoffice", "soffice"]:
try:
result = subprocess.run([cmd, "--version"], **subprocess_kwargs)
if result.returncode == 0:
print(
"✅ LibreOffice is installed (for Office document conversion)"
)
libreoffice_found = True
break
except (
subprocess.CalledProcessError,
FileNotFoundError,
subprocess.TimeoutExpired,
):
continue

if not libreoffice_found:
missing_system_deps.append("LibreOffice")
Expand Down
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@ asyncio-mqtt
docling
mcp-agent
mcp-server-git
openapi
nest_asyncio
pathlib2
PyPDF2>=2.0.0
reportlab>=3.5.0
streamlit
openai
PyPDF2
aiohttp
Loading