π 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