Releases: HKUDS/DeepTutor
ver0.6.0
DeepTutor v0.6.0 Release Notes
Release Date: 2026.01.23
Highlights
Frontend State Persistence
Implemented robust session persistence across the application:
- Solver, Guide, and other sessions now persist across browser refreshes
- Improved state management with dedicated persistence layer
- Better user experience with session continuity
Incremental Document Upload
Enhanced knowledge base with incremental document processing:
- Add new documents to existing knowledge bases without full re-indexing
- Significant performance improvement for large document collections
- Smarter document change detection
Flexible RAG Pipeline Import
Refactored RAG initialization for better compatibility:
- On-demand loading of RAG libraries (RAG-Anything, LlamaIndex)
- Reduced startup time and memory footprint
- Graceful fallback when optional dependencies are unavailable
Full Chinese Localization (i18n)
Added complete Chinese language support for the web interface:
- Comprehensive translation across all pages and components
- Dynamic language switching without page reload
- i18n audit tools for translation consistency
Bug Fixes & Improvements
- Enhanced LLM retry mechanism for complex agent operations
- Fixed temperature parameter handling issues
- Docker build optimizations and npm compatibility fixes
- Added
api_versionparameter for Azure OpenAI support
Full Changelog: v0.5.2...v0.6.0
ver0.5.2
DeepTutor v0.5.2 Release Notes
Release Date: 2026.01.18
Highlights
Docling Support for RAG-Anything
Added alternative RAG-Anything initialization using Docling as the document parser:
- For users whose local environment is not suitable for MinerU
- Provides a lightweight alternative for document processing
- Same multimodal graph capabilities with different backend
Logging System Optimization
Refactored the logging system for better management:
- Improved log output control across all modules
- Better structured logging adapters
- Enhanced console, file, and WebSocket handlers
Bug Fixes & Code Improvements
- Optimized code structure across multiple modules
- Fixed several bugs affecting user experience
- Improved CI/CD workflows with Python 3.10/3.11 matrix testing
Full Changelog: v0.5.1...v0.5.2
ver0.5.1
DeepTutor v0.5.1 Release Notes
Release Date: 2026.01.18
Hey everyone! We just released v0.5.1!
Highlights
Docling Support for RAG-Anything
Added alternative RAG-Anything initialization using Docling as the document parser:
- For users whose local environment is not suitable for MinerU
- Provides a lightweight alternative for document processing
- Same multimodal graph capabilities with different backend
Logging System Optimization
Refactored the logging system for better management:
- Improved log output control across all modules
- Better structured logging adapters
- Enhanced console, file, and WebSocket handlers
Bug Fixes & Code Improvements
- Optimized code structure across multiple modules
- Fixed several bugs affecting user experience
- Improved CI/CD workflows with Python 3.10/3.11 matrix testing
Full Changelog: v0.5.0...v0.5.1
What's Changed
- feat: centralise JSON parsing with automatic repair fallback by @Purestone in #130
- feat: folder sync with improved architecture (supersedes #122) by @ahmedjawedaj in #127
New Contributors
- @Purestone made their first contribution in #130
Full Changelog: v0.5.0...v0.5.1
ver0.5.0 !
DeepTutor v0.5.0 Release Notes
Release Date: 2026.01.15
We're thrilled to announce DeepTutor v0.5.0! This release delivers unified service configuration, flexible RAG pipeline selection, and major UI/UX improvements across multiple modules.
Stability Update: This release fixes multiple environment configuration and stability issues. We recommend all users to pull the latest version! Remember to update your .env file!
Tip
Call for Issues: We welcome your feedback! If you encounter any bugs or have feature requests, please open an issue! If you would like to submit a PR, please check out our Contributing Guide.
Quick Summary
- Configuration — Refactored config logic for smoother LLM/Embedding setup. Backend secrets stay hidden from frontend. Added more search providers.
- RAG Pipelines — Select different pipelines per KB: LlamaIndex (direct), LightRAG (graph), RAG-Anything (multimodal graph).
- Question Gen — Unified BaseAgent architecture with more intuitive UI.
- Home — Save chat history to notebooks.
- Sidebar — Drag-and-drop reordering + customizable top-left label.
- Misc — Various bug fixes and stability improvements.
✨ Highlights
Unified Configuration System
Completely redesigned configuration management for LLM, Embedding, TTS, and Search services:
Key Features:
- Environment-based secrets: Store sensitive API keys in
.envwhile managing configurations in the UI {"use_env": "VAR_NAME"}syntax: Reference environment variables without exposing them in the frontend- Per-service active config: Each service (LLM, Embedding, TTS, Search) maintains its own active configuration
- Seamless provider switching: Add new providers in the frontend without touching backend secrets
New Search Providers:
| Provider | Description |
|---|---|
| Tavily | AI-native search API |
| Exa | Neural search engine |
| Jina | Reader-based web search |
| Serper | Google SERP API |
RAG Pipeline Selection
Choose the optimal RAG pipeline for each knowledge base based on your speed/quality requirements:
| Pipeline | Index Type | Best For | Speed |
|---|---|---|---|
| LlamaIndex | Vector (Direct) | Quick setup, simple documents | Fastest |
| LightRAG | Knowledge Graph | General documents, text-heavy | Fast |
| RAG-Anything | Multimodal Graph | Academic papers, textbooks with figures/equations | Thorough |
Question Generation Overhaul
Refactored the Question Generation module with unified agent architecture:
Backend Changes:
- Migrated to
BaseAgentpattern consistent with other modules - New specialized agents:
RetrieveAgent,GenerateAgent,RelevanceAnalyzer - Single-pass generation with relevance classification (no iterative validation loops)
- Improved JSON parsing with markdown code block extraction
Frontend Improvements:
- Real-time progress dashboard with stage indicators
- Log drawer for debugging generation process
- Cleaner question card layout with answer submission
- "Add to Notebook" integration
Home Page Enhancements
Save Chat to Notebook:
- New "Save to Notebook" button in chat interface
- Automatically formats conversation as markdown
- Preserves user queries and assistant responses with role labels
Sidebar Customization
Drag-and-Drop Navigation:
- Reorder sidebar items within groups by dragging
- Visual feedback during drag operations
- Persistent order saved to user settings
Customizable Description:
- Click to edit the sidebar description label
- Personalize your workspace identity
📦 What's Changed
Core Infrastructure
- Added
src/services/config/unified_config.py— Centralized configuration manager - Added
src/api/routers/config.py— Unified REST API for all service configs - Refactored web search to support multiple providers (
src/services/search/) - Enhanced error handling with LLM error framework
RAG System
- Implemented
LlamaIndexPipelinewith custom embedding adapter - Implemented pure
LightRAGPipelinewith complete initialization - Added pipeline selection during KB create/upload (PR #129)
- Factory pattern in
src/services/rag/factory.pyfor pipeline management
Question Generation
- Refactored
AgentCoordinatorwith specialized agents - New
RetrieveAgent,GenerateAgent,RelevanceAnalyzerinsrc/agents/question/agents/ - Removed iterative validation loops for faster generation
- Added
useQuestionReducerhook for frontend state management
Frontend Updates
web/app/settings/page.tsx— Complete rebuild with unified config UIweb/app/question/page.tsx— New dashboard with progress trackingweb/app/page.tsx— Added "Save to Notebook" functionalityweb/components/Sidebar.tsx— Drag-and-drop + editable descriptionweb/components/AddToNotebookModal.tsx— Reusable notebook integration
What's Changed
- feat(kb): allow selecting RAG provider during KB create/upload by @tusharkhatriofficial in #129
- fix(docker): make Dockerfile portable by @scrrlt in #128
- feat: pre-commit CI integration by @scrrlt in #126
- feat: LlamaIndex pipeline implementation by @tusharkhatriofficial in #98
- feat: web search providers (Tavily, Exa, Jina, Serper) by @Andres77872 in #95
- feat: Azure OpenAI support enhancement by @scrrlt in #87
- fix: modal vertical centering by @OlalalalaO in #117
- work: LLM error framework by @scrrlt in #118
New Contributors
- @Andres77872 made their first contribution in #95
- @OlalalalaO made their first contribution in #117
Full Changelog: v0.4.1...v0.5.0
Update: ver0.4.1
🔧 DeepTutor v0.4.1 Release Notes
Release Date: 2026.01.09
A maintenance release focused on LLM Provider system optimization, Question Generation robustness, and Docker deployment fixes.
✨ Highlights
🔌 LLM Provider System Overhaul
Completely redesigned LLM provider management with persistent configuration:
Three Deployment Modes (LLM_MODE env var):
| Mode | Description |
|---|---|
hybrid (default) |
Use active provider if available, else env config |
api |
Cloud API providers only (OpenAI, Anthropic, etc.) |
local |
Local/self-hosted only (Ollama, LM Studio, etc.) |
Provider Presets for quick setup:
# API Providers
API_PROVIDER_PRESETS = {
"openai": {"base_url": "https://api.openai.com/v1", "requires_key": True},
"anthropic": {"base_url": "https://api.anthropic.com/v1", "requires_key": True},
"deepseek": {"base_url": "https://api.deepseek.com", "requires_key": True},
"openrouter": {"base_url": "https://openrouter.ai/api/v1", "requires_key": True},
}
# Local Providers
LOCAL_PROVIDER_PRESETS = {
"ollama": {"base_url": "http://localhost:11434/v1", "requires_key": False},
"lm_studio": {"base_url": "http://localhost:1234/v1", "requires_key": False},
"vllm": {"base_url": "http://localhost:8000/v1", "requires_key": False},
"llama_cpp": {"base_url": "http://localhost:8080/v1", "requires_key": False},
}New API Endpoints:
GET /api/llm-providers/mode/- Get current LLM mode infoGET /api/llm-providers/presets/- Get provider presetsPOST /api/llm-providers/test/- Test provider connection
🛡️ Question Generation Robustness (PR #81)
Enhanced JSON parsing for LLM responses:
- Added
_extract_json_from_markdown()to handle\``json ... ```` wrapped responses - Comprehensive error handling with detailed logging
- Graceful fallbacks when LLM returns invalid JSON
🐳 Docker Deployment Fixes
- Fixed frontend startup script for proper
NEXT_PUBLIC_API_BASEinjection - Improved supervisor configuration for better service management
- Environment variable handling improvements
🧹 Codebase Cleanup
Removed src/core module - All functionality migrated to src/services:
| Old Import | New Import |
|---|---|
from src.core.core import load_config_with_main |
from src.services.config import load_config_with_main |
from src.core.llm_factory import llm_complete |
from src.services.llm import complete |
from src.core.prompt_manager import get_prompt_manager |
from src.services.prompt import get_prompt_manager |
from src.core.logging import get_logger |
from src.logging import get_logger |
📦 What's Changed
- Merge pull request #81 from tusharkhatriofficial/fix/question-generation-json-parsing
- fix: Add comprehensive error handling and JSON parsing for question generation
- fix: llm providers, frontend
- fix: docker deployment
Full Changelog: v0.4.0...v0.4.1
Release ver0.4.0
🚀 DeepTutor v0.4.0 Release Notes
Release Date: 2026.01.09
We're excited to announce DeepTutor v0.4.0! This release brings New home page, Expanded provider support for LLM & Embeddings provider, RAG module decoupling, Web improvement, and a bunch of minor improvements.
🚧 Possible Issues: Docker deployment and local LLM/Embeddings setup (Ollama, LM Studio) may still have compatibility issues. We're actively working on improvements. Issues and PRs are welcome! → Open an Issue | Contributing Guide
⚠️ Breaking Changes: Environment Configuration
Environment variable names have been updated. Please update your .env file based on .env.example.
| Old Variable | New Variable | Notes |
|---|---|---|
OPENAI_API_KEY |
LLM_API_KEY |
Now provider-agnostic |
OPENAI_API_BASE |
LLM_HOST |
Renamed for clarity |
OPENAI_MODEL |
LLM_MODEL |
Renamed for clarity |
EMBEDDING_DIM |
EMBEDDING_DIMENSION |
Full word naming |
| (hardcoded) | BACKEND_PORT |
Now configurable in .env (default: 8001) |
| (hardcoded) | FRONTEND_PORT |
Now configurable in .env (default: 3782) |
New required variables:
LLM_BINDING— Provider type:openai,ollama,azure_openai,anthropic, etc.EMBEDDING_BINDING— Provider type:openai,ollama,jina,cohere, etc.
New optional variables:
SEARCH_PROVIDER— Web search provider:perplexity(default) orbaiduBAIDU_API_KEY— For Baidu AI Search (百度AI搜索)NEXT_PUBLIC_API_BASE— Frontend API URL for remote/LAN access (e.g.,http://192.168.1.100:8001)
💡 Remote Access: If accessing DeepTutor from another device on your network, set
NEXT_PUBLIC_API_BASEto your server's IP. If not set, defaults tohttp://localhost:8001(local machine only).
📌 Action Required: Copy
.env.exampleto.envand update your configuration before upgrading.
✨ Highlights
🔌 Multi-Provider LLM & Embedding Support
Expanded from local-only to a full provider ecosystem:
| LLM Providers | Embedding Providers |
|---|---|
| OpenAI, Anthropic, Azure OpenAI | OpenAI, Azure OpenAI, Jina AI |
| Ollama, Ollama Cloud, LM Studio | Cohere, Ollama, LM Studio |
| Groq, OpenRouter, DeepSeek, Gemini | HuggingFace (OpenAI-compatible) |
New adapter-based architecture in src/services/embedding/adapters/ enables easy addition of new providers.
🧩 RAG Module Decoupling
New RAGService class provides a unified, provider-agnostic interface:
from src.services.rag import RAGService
service = RAGService() # Uses RAG_PROVIDER env var (default: raganything)
await service.initialize("my_kb", ["doc.pdf"])
result = await service.search("query", "my_kb")📌 Currently supports RAG-Anything (MinerU + LightRAG). More backends coming soon!
🌙 Dark Mode & UI Overhaul
- Theme toggle with system preference detection & localStorage persistence
- Collapsible sidebar with icon-only compact mode
- Settings page rebuild: Environment variable management with category-based organization
- Consistent dark mode styling across all pages
⚙️ Centralized Configuration
New settings.py using pydantic-settings for unified configuration:
| Category | Environment Variables |
|---|---|
| LLM | LLM_BINDING, LLM_MODEL, LLM_HOST, LLM_API_KEY |
| Embedding | EMBEDDING_BINDING, EMBEDDING_MODEL, EMBEDDING_HOST, EMBEDDING_API_KEY, EMBEDDING_DIMENSION |
| RAG | RAG_PROVIDER |
| TTS | TTS_MODEL, TTS_URL, TTS_API_KEY, TTS_VOICE |
| Search | PERPLEXITY_API_KEY |
Runtime updates via /api/settings/env with automatic .env persistence.
📦 What's Changed
Core Infrastructure
- Added
settings.pywithpydantic-settingsfor centralized config management - Added
src/core/llm_factory.pywith unifiedllm_complete()function - Added
/api/embedding-providersrouter for embedding configuration CRUD - Added
/api/settings/envendpoints for runtime environment management
Services Module Restructure (src/services/)
services/
├── embedding/ # 🆕 Adapter-based embedding providers
│ ├── adapters/ # Provider implementations
│ │ ├── base.py, openai_compatible.py, jina.py, cohere.py, ollama.py
│ ├── client.py # Unified embedding client
│ ├── provider.py # Provider manager (singleton)
│ └── provider_config.py # Multi-provider config persistence
├── llm/ # LLM configuration & client
├── rag/ # 🆕 Decoupled RAG system
│ ├── service.py # Unified RAGService entry point
│ ├── factory.py # Pipeline factory
│ ├── pipelines/ # Backend implementations
│ │ └── raganything.py, lightrag.py, llamaindex.py, academic.py
│ └── components/ # Modular RAG components
│ ├── chunkers/ # Text chunking strategies
│ ├── parsers/ # Document parsers (PDF, Markdown, Text)
│ ├── embedders/ # Embedding wrappers
│ ├── indexers/ # Vector & Graph indexers
│ └── retrievers/ # Dense & Hybrid retrieval
├── prompt/ # PromptManager singleton
├── tts/ # TTS configuration
└── setup/ # Initialization utilities
Frontend Updates
- 🆕 Added Home page (
web/app/page.tsx) with feature overview - 🆕 Rebuilt History page (
web/app/history/page.tsx) with improved activity views - Added
web/lib/theme.tswith theme utilities (initializeTheme(),setTheme()) - Added
web/hooks/useTheme.tsfor React theme hook - Added
web/components/ThemeScript.tsxfor SSR theme hydration - Added
web/components/ChatSessionDetail.tsxfor history page - Refactored
Sidebar.tsxwith collapsible mode - Rebuilt
settings/page.tsxwith environment variable management
IdeaGen Improvements
Enhanced 4-stage workflow: Loose Filter → Explore Ideas → Strict Filter → Generate Statement
🐳 Docker
Streamlined single-container deployment:
docker compose up -d
# Exposes: backend (8001), frontend (3782)
# Volumes: ./config (ro), ./data/user, ./data/knowledge_basesCloud deployment supported via NEXT_PUBLIC_API_BASE_EXTERNAL.
⬆️ Upgrade
git pull origin main
docker compose build && docker compose up -dMigration Notes:
- Rename
EMBEDDING_DIM→EMBEDDING_DIMENSION - Default RAG provider changed to
raganything
What's Changed
- chore(deps): bump actions/checkout from 4 to 6 by @dependabot in #39
- chore(deps): bump actions/configure-pages from 4 to 5 by @dependabot in #40
- chore(deps): bump lucide-react from 0.460.0 to 0.562.0 in /web by @dependabot in #43
- chore(deps): bump react-markdown from 9.1.0 to 10.1.0 in /web by @dependabot in #47
- chore(deps): bump node from 20-slim to 25-slim by @dependabot in #42
- chore(deps): bump actions/upload-pages-artifact from 3 to 4 by @dependabot in #38
- chore(deps): bump framer-motion from 11.18.2 to 12.24.0 in /web by @dependabot in #44
- chore(deps): bump tailwind-merge from 2.6.0 to 3.4.0 in /web by @dependabot in #45
- chore(deps): bump @types/node from 22.19.3 to 25.0.3 in /web by @dependabot in #48
- fix(ci): Resolve linting and formatting issues by @ahmedjawedaj in #50
- Feature/rag plugin system by @tusharkhatriofficial in #57
- fix: resolve double decoration in embedding functions for OpenRouter by @Laksh-star in #64
- Fix critical jspdf vuln and clean up pre-commit hooks by @RinZ27 in #62
- UI/theme by @tusharkhatriofficial in #51
- feat: support baidu ai search by @yugasun in #55
- Cleanup: address reviewer feedback on PR #62 (Final) by @RinZ27 in #67
- provides more llm providers supports, UI updates by @kushalgarg101 in #77
- Dev embeddings providers by @FacundoMajda in #79
🤝 New Contributors
- @dependabot made their first contribution in #39
- @Laksh-star made their first contribution in #64
- @yugasun made their first contribution in #55
- @kushalgarg101 made their first contribution in #77
- @FacundoMajda made their first contribution in #79
Full Changelog: v0.3.0...v0.4.0
Release ver0.3.0
🚀 DeepTutor v0.3.0 Release Notes
Release Date: January 6, 2026
We're excited to announce DeepTutor v0.3.0! This release focuses on developer experience improvements, CI/CD automation, and simplified local deployment.
✨ Highlights
🏗️ Unified PromptManager Architecture
A major refactor consolidates all prompt loading across 10+ agent modules into a centralized PromptManager singleton:
- Global caching with module-level invalidation for improved performance
- Language fallback chain (
zh → en,en → zh) for seamless i18n support - ISO 639-1 compliance — all
cn/prompt directories renamed tozh/ - Simplified agent code by removing redundant
_load_promptsmethods and class-level caches
🤖 GitHub Actions & CI/CD
Introducing automated workflows for better code quality and easier deployment:
| Workflow | Description |
|---|---|
dependabot.yml |
Automatic dependency updates (pip, npm, GitHub Actions, Docker) |
tests.yml |
Automated testing on push/PR |
docker-publish.yml |
Auto-publish Docker images to GHCR |
🐳 Pre-built Docker Images
Deploy in ~30 seconds using our pre-built image from GitHub Container Registry:
docker run -d --name deeptutor
-p 8001:8001 -p 3782:3782
--env-file .env
-v $(pwd)/data:/app/data
ghcr.io/hkuds/deeptutor:latest### 🏠 Local-First LLM Configuration
Simplified settings page now focuses exclusively on local LLM providers:
- ✅ Ollama (default)
- ✅ LM Studio
- ❌ Removed cloud providers (OpenAI, Gemini, Azure, etc.)
This aligns with DeepTutor's vision for privacy-first, self-hosted AI tutoring.
📦 What's Changed
Core Infrastructure
- Added
src/core/prompt_manager.pywith singletonPromptManager - Export
get_prompt_manager()fromsrc/core/__init__.py - Added
/api/v1/config/agentsendpoint for data-driven frontend configuration
Agent Modules Migrated (10 files)
research/agents/base_agent.pysolve/base_agent.pyguide/agents/base_guide_agent.pyquestion/agents/generation_agent.pyquestion/agents/validation_agent.pyquestion/validation_workflow.pyideagen/idea_generation_workflow.pyideagen/material_organizer_agent.pyco_writer/edit_agent.pyco_writer/narrator_agent.py
Removed Legacy Code
- Deleted
src/agents/solve/utils/prompt_loader.py - Removed
use_prompt_loaderparameter fromBaseAgent - Cleaned up
_PROMPT_CACHEclass-level caches across all modules - Removed
PromptLoaderexports fromsolve/__init__.py
⬆️Upgrade
git pull origin main
docker pull ghcr.io/hkuds/deeptutor:latestCloses #33
What's Changed
- fix(UI): unrendered markdown in ActivityDetail card by @tusharkhatriofficial in #26
- chore: transtale readme to ru by @oshliaer in #27
- fix: improve reload_excludes configuration for uvicorn server and added support for newer models (openai) by @LouisACR in #28
- feat: Dynamic LLM Provider Support (Local & Cloud) by @ahmedjawedaj in #34
🤝New Contributors
release v0.2.0
Release v0.2.0
🚀 New Features
Docker Deployment: Added multi-stage Dockerfile and docker-compose configurations for both development and production environments
Enhanced WebSocket Security: Improved websocket security with comprehensive documentation
🔧 Improvements
Next.js 16 & React 19: Upgraded frontend framework to the latest versions for better performance and features
JSON Parsing: Fixed JSON parsing for triple-quoted Python strings, improving output reliability
UI Enhancements: Fixed knowledge base modal backdrop and positioning issues
Install Scripts: Improved installation scripts with better conda environment detection and session management
SolveAgent: Enhanced code generation by enforcing intent-only planning
🔒 Security
Fixed critical path traversal and injection vulnerabilities
Updated dependencies to address security vulnerabilities
Hardened application attack surface through least privilege principle
Enhanced secure websockets implementation
🐛 Bug Fixes
Fixed DisplayManager attributes initialization before rich availability check
Various UI and core stability improvements
What's Changed
- avoid false 'Virtual env not detected' warning under conda by @lovingfish in #2
- fix(ui): knowledge base modal backdrop and positioning by @tusharkhatriofficial in #10
- Hardened the Application's Attack Surface through Least Privilege Principle by @RinCodeForge927 in #11
- fix(core): ensure core attributes initialized without rich library by @tusharkhatriofficial in #12
- Fix JSON parsing failure for triple-quoted Python strings in Smart Solver by @TejasD-13 in #18
- feat(security): enforce WSS protocol for production websockets by @RinCodeForge927 in #22
- chore(deps): update core libraries to mitigate known CVEs by @RinCodeForge927 in #21
- fix(security): patch critical RCE and LFI vulnerabilities by @RinCodeForge927 in #20
- fix: SolveAgent code generation by enforcing intent-only planning by @tusharkhatriofficial in #23
- Add Docker infrastructure for DeepTutor, including multi-stage Docker… by @Andres77872 in #14
New Contributors
- @lovingfish made their first contribution in #2
- @tusharkhatriofficial made their first contribution in #10
- @RinCodeForge927 made their first contribution in #11
- @TejasD-13 made their first contribution in #18
- @Andres77872 made their first contribution in #14
Full Changelog: https://github.com/HKUDS/DeepTutor/commits/v0.2.0