Skip to content

Releases: HKUDS/DeepTutor

v1.5.4

Choose a tag to compare

@pancacake pancacake released this 24 Jul 10:16

DeepTutor v1.5.4 Release Notes

Release Date: 2026.07.24

A same-day maintenance follow-up to v1.5.3, focused on how chat feels: the post-answer "generating" stall is gone, IM partners render Markdown tables faithfully, and the JSON that models hand back parses more robustly. Drop-in — no migrations.

What's New

Chat responsiveness

  • The seconds-long "generating…" stall after an answer finished streaming is eliminated: the turn's completion event now carries the persisted message ids so the frontend reconciles them in place instead of refetching and re-rendering the whole session, turn events flush in one transaction (#678), and the streaming autoscroll no longer forces a layout every frame.
  • Pressing Enter while the assistant is still streaming no longer fires a second, interleaved message (#674).

Faithful IM tables

Markdown-table handling is unified across partner channels, fixing empty cells dropped from Slack (#679) and Feishu (#683) tables and empty rows misread as header separators (#682).

Sturdier LLM-output parsing

Structured output survives messier model responses: <think> reasoning tags are stripped before parsing (#675), a JSON value followed by adjacent values no longer breaks Deep Research extraction (#680), and the parser returns the longest decodable value instead of the first prefix it finds (#692).

Assorted fixes

  • Quiz cards generated mid-stream are scoped to their own turn — a new quiz no longer inherits (and silently re-reports) the previous quiz's answers (#677).
  • The create-KB form no longer loses typed input and loaded files while another knowledge base is indexing in the background (#691).
  • Math Animator reads 500ms as milliseconds, not minutes (#681).

Upgrade Notes

Drop-in from v1.5.3: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations, no schema or config changes.

Full Changelog: v1.5.3...v1.5.4

v1.5.3

Choose a tag to compare

@pancacake pancacake released this 23 Jul 19:07

DeepTutor v1.5.3 Release Notes

Release Date: 2026.07.24

A maintenance release on top of v1.5.2: code blocks are now yours to theme, My Agents connects four more coding CLIs, a new LLM provider joins the roster, and a broad sweep of chat, memory, embedding, and parsing reliability fixes lands underneath. Drop-in — no migrations.

What's New

Themeable code blocks

Settings → Appearance gains a Code blocks panel: pick a syntax-highlighting theme, toggle line numbers, and choose whether long lines wrap, with a live preview. Your choice is stored per-account and applied everywhere code is rendered across chat, Book, and Co-Writer.

Four more coding CLIs in My Agents

Beyond Claude Code and Codex, you can now connect and consult a live Gemini CLI, Kimi CLI, opencode, or MiMo Code from any chat turn — each detected on your machine, model-selectable, and streamed into the Activity panel through consult_subagent.

Broader, steadier provider support

  • Atlas Cloud joins as an LLM provider (atlascloud), bringing the roster to 34 bindings.
  • DashScope text-embedding models now route to the correct text endpoint, and encoding_format is omitted by default for OpenAI-compatible gateways that reject it — fixing embedding failures on stricter proxies.

Reliability sweep

  • Chat — RAG coexists with an exclusive knowledge capability instead of being suppressed (#650); DeepSeek's DSML text tool-call markup is parsed (#666); autoscroll releases on manual scroll-up (#649).
  • Memorywrite_memory preference adds are idempotent (#647); fact and line-edit JSON parse cleanly even with trailing prose.
  • Personas — the peer / teacher / research-assistant presets ship seeded (#659).
  • Book, Partners, Visualize, CLI — long-running Book operations stream over WebSocket; partner filenames strip control characters and message-splitting no longer hangs; Visualize accepts code fences without a blank closing line; the CLI hardens UTF-8 terminal input.

Upgrade Notes

Drop-in from v1.5.2: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations — existing knowledge bases, partners, personas, and mastery paths keep working. One packaging change: DeepTutor now requires Python 3.11–3.13 (requires-python = ">=3.11,<3.14"); on 3.14 pip finds no wheels for some compiled base dependencies (e.g. faiss-cpu) and now refuses with a readable message instead of a failed source build (#664).

Full Changelog: v1.5.2...v1.5.3

v1.5.2

Choose a tag to compare

@pancacake pancacake released this 19 Jul 09:16

DeepTutor v1.5.2 Release Notes

Release Date: 2026.07.19

A maintenance release on top of v1.5.1: chat attachment limits are now yours to tune, PageIndex retrieves by reasoning across your documents, and a broad sweep of provider, Book, and Knowledge Base reliability fixes lands underneath. Drop-in — no migrations.

What's New

Configurable chat attachment limits

Attachment size caps and extracted-text budgets are now editable in Settings → Chat → Attachments (admin-only): per-file and per-turn upload ceilings, plus per-document and per-turn character budgets, stored in system.json and overridable by CHAT_ATTACHMENT_* environment variables. This also fixes large uploads silently dropping the connection — the WebSocket frame ceiling is now derived from your total cap instead of a fixed default. Lowering a limit takes effect on the next message; raising the size cap past the current frame ceiling needs a restart.

PageIndex retrieves by reasoning over your documents

PageIndex knowledge bases are now queried through an internal MCP server, so chat retrieves by making agentic tool calls against the document tree rather than a single fixed lookup — sharper page-level citations on multi-step questions. Ingestion also accepts more formats now: PDF, Office (Word / PowerPoint / Excel), Markdown, plain text, and CSV.

Broader, steadier model support

  • Newer Anthropic and OpenAI models work through their official SDKs, including OpenAI Codex native tool calls.
  • Effort-based Claude models drive extended thinking adaptively instead of a fixed token budget, and the temperature-rejection model set is corrected so unsupported models no longer error out.
  • Streamed token usage is counted once per completion, fixing inflated usage and cost accounting.

Steadier Book and Knowledge Base

  • Book pages stuck in GENERATING or PLANNING are rescued and reset on failure, so a background compile error no longer strands a page.
  • Knowledge Base status updates on upload and folder sync, linked-folder sync state persists, and all manager writes are atomic — no more half-written JSON after a crash.

Chat and channel polish

Full-width chat with a single, predictable scrollbar; aligned composer and message columns; Enter sends an edited message (Shift+Enter for a newline); and malformed Markdown links no longer crash the renderer. WeCom partners are aligned with SDK 1.0.8, and Mastery Path recency weighting is restored (#618).

Upgrade Notes

Drop-in from v1.5.1: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations — existing knowledge bases, partners, and mastery paths keep working. The new attachment defaults are generous (20 MB per file, 25 MB per turn; 200k / 150k character budgets), so nothing changes unless you tune them under Settings → Chat → Attachments; only raising the size cap past the current WebSocket frame ceiling requires a restart.

Full Changelog: v1.5.1...v1.5.2

v1.5.1

Choose a tag to compare

@pancacake pancacake released this 09 Jul 15:24

DeepTutor v1.5.1 Release Notes

Release Date: 2026.07.09

A small release on top of v1.5.0: a knowledge base stuck in an error state is no longer a dead end — you can drop the single document that failed and keep going, instead of deleting and rebuilding the whole base. Drop-in — no migrations.

What's New

Remove a single document — even from an error-state KB

You can now delete one raw document from a knowledge base in the Files tab, and it works even while the KB is in an error state. Previously a file that failed to parse (for example, a PDF over the cloud parser's page limit) left the whole base locked, and the only escape was to delete and rebuild it from scratch. Now you drop just the offending file, upload a replacement, or retry indexing from the documents that remain. Removal is decoupled from the index — it never needs a working index to run — so any vectors from an already-indexed file are simply cleared on the next re-index.

Upgrade Notes

Drop-in from v1.5.0: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations and no behavior changes — existing knowledge bases, partners, and mastery paths keep working as-is. Connected (read-only) and legacy knowledge bases still reject per-file deletion, as before.

Full Changelog: v1.5.0...v1.5.1

v1.5.0

Choose a tag to compare

@pancacake pancacake released this 04 Jul 08:40

DeepTutor v1.5.0 Release Notes

Release Date: 2026.07.04

v1.5.0 closes out the entire v1.4 line and opens the next. Rather than a single-point delta, this note looks back across the whole arc from v1.4.0-beta to today — the release that turned DeepTutor into an agent-native, community-driven tutoring platform. Over these weeks the community sent 36 merged pull requests and helped us resolve 53 issues. Thank you — this release is as much yours as ours.

Highlights since v1.4.0

  • Partners, born from TutorBot. TutorBot grew into Partners: a production-grade IM pipeline across 15+ channels — Slack, Discord, Telegram, Feishu, WeCom, Zulip, Matrix (with optional E2EE), and a native Mattermost channel — with live streaming replies. You can connect your own Partners, or your local Claude Code / Codex, under My Agents and consult them live mid-chat; each Partner carries its own private memory and its conversations can branch, resume, and replay.
  • One agentic chat engine. Chat was rebuilt on a single agent loop with native tool calling on every OpenAI-compatible cloud provider (and SiliconFlow, MiniMax M3, Qwen, Gemini 2.5+), smooth streaming, and an honest activity header.
  • A real Knowledge Center. Multiple retrieval engines — LlamaIndex + a FAISS vector backend, LightRAG (local and standalone-server), GraphRAG, PageIndex, and linked / Obsidian knowledge bases — behind one console, on a pluggable document-parse layer (text-only, MinerU, Docling, markitdown, PyMuPDF4LLM). Large-KB retrieval got dramatically faster.
  • Guided Learning & Mastery Path. Rebuilt on the chat loop with a per-type mastery gate, a /learning dashboard, LaTeX-rendered quizzes, and graded questions that flow into your Question Bank.
  • Multi-user, done properly. Real per-user isolation, admin grants, a redesigned User Management page, a self-service Profile page with avatars, deny-by-default MCP tools, and per-user session isolation.
  • Deployment hardening. Rootless-Podman / read-only-rootfs support, a single-port request-time proxy, env-configurable host binding, and a portable supervisord config.
  • Security lockdown. The Partner/TutorBot tool sandbox was locked down and a cluster of authorization-bypass, path-traversal, and RCE reports were fixed (see below).
  • Three-layer Memory & richer surfaces. A top-level Memory workbench (L1/L2/L3) with Partner conversations bridged in, plus continued work on Deep Research, Solve, Visualize (Animator merged in), and Co-Writer.

In v1.5.0 specifically: the default LlamaIndex engine now routes ingestion through the shared document-parse layer (so it honors your chosen parsing engine and indexes extracted images as multimodal nodes), Partner and Soul ids are ASCII/URL-safe so non-Latin names stay reachable, and the optional graphrag / rag-lightrag extras install cleanly on Python 3.14+ (issues #606, and the fixes below).

Merged pull requests

With gratitude to everyone who sent code:

  • #484 — Zulip: content-detection fallback so bots receive @-mentions — @wedone
  • #485 — Make require_auth async so the user ContextVar reaches the endpoint — @truffle-dev
  • #490 — Unblock Gemini 2.5+ and harden the Visualize pipeline — @skinred78
  • #493 — Fix SQLite file-descriptor exhaustion — @thelooter
  • #500 — Guided Learning feature work — @arlenwoox
  • #507 — Harden ExecTool defaults against command injection (#506) — @kagura-agent
  • #508 — Fix the GPT-5 token-limit parameter in the init-wizard probe — @lezhimiffyliu
  • #509 — Prevent Document nodes from bypassing the chunking pipeline — @washi4
  • #513 — Add a Profile button when no profiles exist — @wedone
  • #524 — Truncate oversized event payloads in the session response — @xiongjnu
  • #528 — Native tool calling for reasoning models on OpenAI-compatible endpoints — @wedone
  • #529 — Qwen JSON preamble, force-recompile overview pages, health false positives — @alvinets
  • #540 — Preserve math before citation linkification — @thakrarsagar
  • #542 — Route the OAuth backend through the native provider — @thakrarsagar
  • #543 — Upgrade the MiniMax default model to M3 — @octo-patch
  • #549 — Keep NEXT_PUBLIC_AUTH_ENABLED out of the minifier constant-fold — @IliaAvdeev
  • #550 — Keep sidebar footer items as text when the sidebar is collapsed — @IliaAvdeev
  • #558 — Surface bad-login errors inline instead of a silent reload — @IliaAvdeev
  • #559 — Accept a username, not just an email, on login and register — @IliaAvdeev
  • #568 — Gate LLM features for users without an assigned model — @IliaAvdeev
  • #570 — Show only provider-relevant fields in Search settings — @IliaAvdeev
  • #571 — Discoverable profile rename and auto-name by provider — @IliaAvdeev
  • #572 — Translate the missing English settings-tour steps — @IliaAvdeev
  • #573 — User profile page with avatar — @IliaAvdeev
  • #577 — Harden the image for rootless Podman with a read-only rootfs — @enihcam
  • #578 — Chat-history loading animation — @emmett001
  • #579 — Deny MCP tools until explicitly granted (multi-user) — @Hinotoi-agent
  • #582 — Run supervisord as root so services start under rootful Docker — @IliaAvdeev
  • #583 — Redesign the User Management page (avatars, search, skeletons, confirm dialog) — @IliaAvdeev
  • #584 — Enable native tool calls for SiliconFlow — @TyrionH-is-coding
  • #585 — Move the Back link to its own row in the page header — @IliaAvdeev
  • #586 — Make BACKEND_HOST and FRONTEND_HOST env-configurable — @enihcam
  • #588 — Render LaTeX in quiz options — @ZhouJ-sh
  • #593 — Portable supervisord config across rootful + rootless keep-id — @enihcam
  • #602 — Preserve a configured zero LlamaIndex chunk overlap — @VectorPeak
  • #604 — Fix mastery choice persistence and grading — @spring618

Resolved issues

🔒 Security & isolation

  • #506 — ExecTool executed LLM-generated shell commands over the chat WebSocket
  • #514 — Authorization bypass in the book-confirmation flow
  • #515 — Cross-session authorization bypass in turn regeneration
  • #516 — Cross-bot authorization bypass in TutorBot file management
  • #517 — Path traversal in the TutorBot filesystem tool
  • #518 — Remote code execution via the TutorBot shell tool
  • #596 — Sessions were not isolated by user

🐛 Bug fixes

  • #301 — Guided Learning not working with LM Studio (Docker)
  • #472 — Co-Writer responses came back extremely short
  • #481 — Non-admin users hit 404 on all session requests (Docker multi-user)
  • #487 — A new quiz inherited the previous quiz's answer state
  • #489 — Visualize and other capabilities silently truncated on Gemini 2.5 / 3.x
  • #494knowledge_learning router not registered in main.py
  • #495 — Knowledge extractor JSON-parsing error with DeepSeek
  • #496LearningSession had no metadata field, so agents got empty context
  • #497KnowledgePoint validation rejected LLM-extracted data
  • #502 — Docker sed placeholder broke API base-URL validation with a non-default port
  • #503 — Unable to communicate with v1.4.0-beta
  • #504 — Settings-load failure and zombie running turns after container restart (Docker)
  • #512 — New user could not create an initial profile via the UI (Docker)
  • #520 — Chat input disabled after the first turn; hardcoded URL guard broke deployments
  • #521 — Errors while embedding some knowledge-base documents
  • #527 — Qwen 3.6 Plus failed to use native tool calling
  • #530 — self-signed-certificate error despite disable_ssl_verify: true
  • #531allow_shell_exec silently reset to false on every auto-start
  • #534allow_shell_exec could not be persisted
  • #536 — Container appeared to crash after idle time
  • #537 — Responses were incoherent
  • #574 — Partner conversations never reached the Memory system (empty L1)
  • #580 — supervisord pidfile CRIT on rootless Podman + keep-id + read-only rootfs
  • #587 — Quiz option cards did not render LaTeX formulas
  • #594 — Choosing PyMuPDF4LLM as the parser was overridden by MinerU when building a LightRAG KB
  • #595 — Deep Research returned a success response even when a block failed
  • #599 — Wrong top-left logo/icon after login in multi-user mode
  • #603 — Guided Learning choice options were lost and correct answers could be mis-graded
  • #605 — v1.4.15 could not be installed with uv

✨ Features & requests

  • #511 — HTTP API for multi-turn conversations with a specific TutorBot
  • #553 — User profile page (account + avatar) and a lighter Admin page
  • #555 — Moodle support
  • #569 — Feature request
  • #576 — Rootless Podman with a read-only rootfs for hardened deployments
  • #589 — PyMuPDF4LLM for building knowledge bases
  • #590 — Native Mattermost channel for the Partner subsystem
  • #591 — Support for a standalone external LightRAG container endpoint

💬 Questions & discussions

  • #476 — Does adding a doc to a knowledge base have quadratic complexity?
  • #505 — How to register a provider on v1.4.0
  • #532 — RAG chat could not return information from the selected knowledge base
  • #535 — Can TutorBot do almost everything the main system does, via skills?
  • #552 — RAG chat on a 250 MB knowledge base returned nothing
  • #565 — Question
  • #592 — Should DeepTutor become installable apps?
  • #597 — Does a Partner have its own memory?
  • #598 — Can non-admin users use and create Partners in multi-user mode?

Upgrade Notes

Drop-in from any v1.4.x: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations — existing knowledge bases, partners, souls, and mastery paths keep working as-is. Two things to know:

  • LlamaIndex re-indexing now extracts through the engine you pick in Settings → Document Parsing, not the old text-only path. Existing indexes are untouched; only a re-index picks up the new engine. If a document doesn't extract, confirm the active engine supports that format (keep it on text-only for the previous behavior).
  • Non-Latin partner/soul ids only change for newly created ...
Read more

v1.4.15

Choose a tag to compare

@pancacake pancacake released this 30 Jun 14:33

DeepTutor v1.4.15 Release Notes

Release Date: 2026.06.30

A small release on top of v1.4.14: Partners gain a native Mattermost channel, Guided Learning multiple-choice questions persist and grade correctly, and a configured zero chunk overlap is honored when indexing. Drop-in — no migrations.

What's New

Native Mattermost channel

Partners can now connect to a self-hosted Mattermost server through its own v4 WebSocket + REST API instead of routing through Mattermost's Slack-compatibility shim. Set a bot account's server URL and access token in the partner's Channels tab; replies render with native Markdown, and group chats answer on @-mention or to every message per group_policy. It reuses the existing httpx + websockets transport, so no new dependency is needed (issue #590).

Guided Learning choices persist and grade correctly

Multiple-choice questions in Mastery Path now register every full option body with mastery_quiz — not just the bare A/B/C labels — so the engine grades deterministically and the saved Question Bank entry shows the real choices alongside the correct answer. Paths created before this release recover the option text from the original ask_user card at grading time.

Configured zero chunk overlap is honored

Setting a knowledge base's chunk_overlap (or chunk_size) to 0 on the LlamaIndex engine was silently replaced with the default of 50 before indexing. An explicit 0 is now preserved, so a no-overlap chunking strategy indexes exactly as configured.

Upgrade Notes

Drop-in from v1.4.14: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations and no behavior changes — existing knowledge bases, partners, and mastery paths keep working as-is.

Full Changelog: v1.4.14...v1.4.15

v1.4.14

Choose a tag to compare

@pancacake pancacake released this 29 Jun 15:24

DeepTutor v1.4.14 Release Notes

Release Date: 2026.06.29

A fixes-and-polish follow-up to v1.4.13: open an assigned partner straight into chat with one click, Deep Research reports flag when a subtopic couldn't be completed, LightRAG indexes without MinerU installed, FAISS handles non-ASCII paths, and PocketBase sessions are isolated per user. Drop-in for the default backend — no migrations.

What's New

Open an assigned partner straight into chat

For a non-admin user, clicking a partner the administrator assigned now connects it as an agent and drops you into a fresh chat already targeting it — no separate trip through My Agents. Admins still click through to the partner's management page as before.

Deep Research flags partial results

When some research subtopics can't be completed — a block raises, or exhausts its iteration budget without finishing — the report no longer looks like a clean success. The run surfaces a warning notice and the result envelope carries partial, failed_block_count, and failed_block_titles, so callers can tell the report rests on partial evidence (issue #595).

LightRAG indexes without MinerU

LightRAG indexing hard-failed with "Parser 'mineru' is not properly installed" even when you'd picked a different parsing engine, because RAG-Anything ran a one-time install check on its default parser. DeepTutor already feeds it pre-parsed content, so that spurious check is now skipped and indexing proceeds regardless of which parse engine you chose (issue #594).

FAISS indexes on non-ASCII paths

Rebuilding a FAISS-backed knowledge base crashed on Windows when the path held non-ASCII characters — a Chinese knowledge-base name, or a C:\Users\张三 home directory. FAISS indexes now persist and load through a Python byte stream that handles Unicode paths; the on-disk format is unchanged and stays cross-readable with stock FAISS.

PocketBase sessions isolated per user

On the optional PocketBase backend, every session is now stamped with and filtered by user_id, matching the per-user-file isolation the default SQLite backend already provides. A session's messages and turns are reachable only through that session, so one user can no longer read or mutate another's conversations.

Upgrade Notes

Drop-in from v1.4.13 on the default JSON/SQLite backend: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations and no behavior changes for existing single-user setups.

On the optional PocketBase backend, sessions are now scoped by user_id. Sessions created before this upgrade carry no user_id and won't appear in the session list until re-created (or backfilled with the current user's id). PocketBase stays a single-user integration — keep integrations.pocketbase_url blank for multi-user deployments.

Full Changelog: v1.4.13...v1.4.14

v1.4.13

Choose a tag to compare

@pancacake pancacake released this 27 Jun 10:48

DeepTutor v1.4.13 Release Notes

Release Date: 2026.06.27

A fixes-and-polish follow-up to v1.4.12: partners with non-Latin names create correctly and can be handed to specific users, logos render after login in multi-user mode, and small knowledge bases retrieve reliably. Drop-in — no migrations.

What's New

Partners: any-language names, and admin assignment

Creating a partner with a Chinese (or any non-Latin) name now works — the id keeps Unicode letters instead of collapsing to an empty slug. Partners also become a grantable resource: an admin can assign specific partners to specific non-admin users, who then see, connect, and consult them in chat. The partner still runs in its own isolated workspace, and the partner CRUD API stays admin-only — a grant only opens the door to use an assigned partner.

Multi-user: logos and static assets render after login

In a multi-user deployment, the sidebar logo and login banner showed up broken after signing in (issue #599): the auth gate bounced the Next.js image optimizer's cookie-less loopback fetch to /login. Public static assets now bypass the gate, so logos, favicons, fonts, and icons load normally. The middleware's routing policy moved into a pure, unit-tested module.

Small knowledge bases retrieve reliably

Hybrid (BM25) retrieval crashed on a knowledge base with only a document or two, because the requested result count exceeded the number of indexed chunks. The count is now clamped to the corpus size, so tiny knowledge bases return what they have instead of erroring at query time.

One upload limit for every format

Document uploads now share a single 200 MB limit across all formats; the separate, lower cap that rejected larger PDFs is gone. The in-container proxy body limit was raised to match, so large uploads pass through without silent truncation.

Portable container startup

The container's supervisord configuration now starts cleanly under both rootful Docker/Podman and rootless Podman with userns_mode: keep-id. It no longer pins its own privilege or writes to a root-owned path, removing a startup failure (and a cosmetic pidfile warning) under rootless keep-id.

Upgrade Notes

Drop-in from v1.4.12: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations and no behavior changes for existing single-user setups. In multi-user deployments, assigning a partner to a user is a new option in the grant editor — nothing changes until you use it.

Full Changelog: v1.4.12...v1.4.13

v1.4.12

Choose a tag to compare

@pancacake pancacake released this 24 Jun 08:26

DeepTutor v1.4.12 Release Notes

Release Date: 2026.06.24

A knowledge-base release on top of v1.4.11: a new LightRAG Server
retrieval engine, a lightweight PyMuPDF4LLM parsing engine, and a FAISS vector
backend that makes large-KB retrieval dramatically faster. Drop-in — existing
knowledge bases keep working untouched.

What's New

LightRAG Server retrieval engine

Point a knowledge base at a standalone LightRAG server you run yourself, and
DeepTutor offloads retrieval to it over HTTP — no local index is built. Each KB
stores its own server URL (plus optional API key) at connect time, so one server
workspace maps to one KB, and queries run in any of LightRAG's modes
(naive/local/global/hybrid/mix). It needs no install and is always available in the
engine picker.

PyMuPDF4LLM document parsing

A fifth parsing engine joins Text-only, MinerU, Docling, and markitdown. PyMuPDF4LLM
rides on PyMuPDF (already bundled), making it the lightest image-capable option — no
model downloads, no CUDA, runs on low-end and GPU-less machines — turning PDFs and
e-books into Markdown and extracting images. Install with
pip install deeptutor[parse-pymupdf4llm]; engines that need packages can now be
installed in the background straight from Settings → Document Parsing.

FAISS vector retrieval

The default LlamaIndex engine now retrieves through FAISS instead of re-parsing
the entire vector store on every query, so search on large knowledge bases is
dramatically faster. faiss-cpu ships as a core dependency with a graceful fallback
to the previous store, so there's nothing new to install.

Upgrade Notes

Drop-in from v1.4.11: pip install -U deeptutor; Docker users pull
ghcr.io/hkuds/deeptutor:latest. No migrations. Existing LlamaIndex knowledge bases
keep loading and querying as-is — re-index a KB to move it onto the faster FAISS
backend. The new engines are opt-in: choose LightRAG Server or PyMuPDF4LLM when
creating a knowledge base or in Settings.

Full Changelog: v1.4.11...v1.4.12

v1.4.11

Choose a tag to compare

@pancacake pancacake released this 23 Jun 15:55

DeepTutor v1.4.11 Release Notes

Release Date: 2026.06.23

A fixes-and-polish follow-up to v1.4.10: native tool calling now
lights up on every cloud OpenAI-compatible provider, the admin Users page is
rebuilt, quiz options render LaTeX, and the container story gains configurable
host binding. Drop-in — no migrations.

What's New

Native tool calling on every cloud OpenAI-compatible provider

Cloud providers that lacked a dedicated capability entry — SiliconFlow, Gemini,
Zhipu, Qianfan, NVIDIA NIM, the Volc/BytePlus coding plans — now use native
function calling
instead of silently falling back to prose. Function calling is
part of the OpenAI-compatible API contract, so any registered cloud provider is
assumed tool-capable unless it's explicitly opted out. This is what lets KB
retrieval and the capability tools actually fire on those providers. Local servers
(Ollama, vLLM, LM Studio, llama.cpp, Lemonade, …) still fall back to prose, since
tool support there depends on the loaded model.

Redesigned User Management page

The admin Users page is rebuilt with avatars, a username search box, skeleton
loading states, and a styled confirm dialog before destructive actions in place of
the raw browser prompt.

LaTeX in quiz options

Answer choices now render Markdown and math, so $…$ and formulas show up in the
options the same way they already did in question text.

Configurable container host binding

BACKEND_HOST and FRONTEND_HOST are now environment-configurable, so on Linux
host networking you can keep both services on loopback (127.0.0.1) instead of
exposing them on every interface. supervisord now runs as root so services start
correctly under rootful Docker, and the dead gosu / libcap2-bin infrastructure
is gone — the container follows a single root-supervisord model. See
CONTAINERIZATION.md.

Honest session-loading overlay

Opening a conversation drops the simulated progress bar that crept to a fake 99%
over ~24 seconds and shows an honest indeterminate spinner instead; the
conversation now appears the moment the fetch resolves, with a "Still loading…"
hint after 8 seconds.

Upgrade Notes

Drop-in from v1.4.10: pip install -U deeptutor; Docker users pull
ghcr.io/hkuds/deeptutor:latest. No migrations, no configuration changes. The one
behavior change is native tool calling defaulting on for cloud OpenAI-compatible
providers — almost always what you want, since it's what makes KB retrieval and
capability tools fire.

Full Changelog: v1.4.10...v1.4.11