github HKUDS/DeepTutor v1.5.9

5 hours ago

DeepTutor v1.5.9 Release Notes

Release Date: 2026.08.04

Where v1.5.8 was about memory, this one is about providers — Gemini's native Embedding 2 endpoint, a per-model reasoning-effort control, a Novita AI gateway — and about the paths that were quietly wrong underneath them: queries embedded as if they were documents, none turning thinking on, a capability crash arriving as a blank message. Drop-in for most installs, but docker-compose.ghcr.yml users have a one-time data migration to run before their next up.

What's New

Gemini Embedding 2 over the native API

A Gemini embedding profile now defaults to Google's native …/models/<model>:batchEmbedContents endpoint with gemini-embedding-2, authenticated with x-goog-api-key, and the endpoint follows the model you pick — including through a gateway prefix. Existing gemini-embedding-001 profiles deliberately stay on the OpenAI-compatible path: the native route sends a taskType and L2-normalizes what comes back, so moving them would change their document vectors and silently invalidate the index built from them. Point base_url at the native URL yourself to opt any model in.

Queries stop being embedded as documents

Retrieval embeddings now carry their role. LlamaIndex tags queries search_query and passages search_document, LightRAG maps its own context hint the same way, and adapters opt in explicitly (SUPPORTS_INPUT_TYPE) so a backend that never sent a role keeps not sending one. Only Cohere — which requires the field and already defaulted to search_document — changes today: document vectors are untouched, queries finally get the right role. No re-index.

A reasoning-effort selector per model

Each LLM model in the catalog gets an optional default reasoning depth next to its context window, offered only where the provider actually supports one and labelled in that provider's own vocabulary (minimal/low/medium/high/xhigh for OpenAI-style families, adaptive where that is the only on-mode, a plain on/off for the rest). Provider default (Auto) leaves the choice to the provider. Two Anthropic bugs fell out of wiring it up: none was turning thinking on with a 4096-token budget, and a stored adaptive sent to an older family drew a 400 instead of the default budget.

Novita AI, and MiniMax on the right platform

Novita AI joins the LLM gateways (novita, https://api.novita.ai/openai). MiniMax runs two separate platforms whose keys are not interchangeable, and the default now points at the global one (api.minimax.io) instead of the mainland-China one; minimax-m3 and minimax-m2.7 context windows are recorded, and detection also reads a context_size field.

Compose deployments keep all of data/

docker-compose.ghcr.yml bind-mounted only data/user, data/memory and data/knowledge_bases, so data/system (the JWT signing secret, accounts, grants, per-owner Codex tokens), data/users, data/partners and data/cli-apps lived in the container's writable layer and were discarded on every recreate. It now mounts the whole tree, matching the other Compose files. Named-volume and source-build deployments were never affected.

Codex sign-in inside a local container

Default local Docker and Podman deployments put the browser and the server on separate loopback networks, so the OAuth callback never arrived. There is now a temporary compose.codex-oauth.yaml overlay (and the equivalent docker/podman commands) that publishes ports 1455/1457 only while you sign in — with teardown, so those ports go back to your other Codex clients. See CONTAINERIZATION.md.

Failures that used to arrive as nothing

A capability that raised — or a request for one that does not exist — ended the stream without a verdict, and the turn was persisted as completed with an empty answer. The error is now marked terminal and carried through a DONE event, so the turn is stored as failed with its message and the UI shows what went wrong instead of an empty bubble.

Assorted

  • The interface language you saved is honored on first load. It lived in the backend's ui settings, which only the Settings route ever read, so every other page started in English until you re-picked it in that browser. A local choice still wins.
  • Visualize no longer aborts when the analysis model invents a render_type or visual_genre outside the enum — the off-enum value is dropped and the field falls back to its default.
  • Credential-like query parameters (key, api_key, token, access_token) are redacted in every endpoint the wizard, the client, and error messages print.

Upgrade Notes

pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No schema changes, and nothing to re-index.

  • docker-compose.ghcr.yml users: copy your state out before the next up -d. The new whole-tree mount means empty host directories would shadow what is in the container's writable layer, regenerating the auth secret (logging everyone out) and starting with no non-admin accounts. The one docker cp loop is in CONTAINERIZATION.md → One-time migration.
  • MiniMax on the mainland-China platform: the default base URL is now the global endpoint. Set base_url to https://api.minimaxi.com/v1 (or https://api.minimaxi.com/anthropic) and use a China-platform key — keys are issued per platform. Saved profiles keep whatever URL they already have.
  • Gemini embeddings: existing gemini-embedding-001 profiles are left where they are on purpose. New profiles and gemini-embedding-2 use the native endpoint.

Full Changelog: v1.5.8...v1.5.9

Don't miss a new DeepTutor release

NewReleases is sending notifications on new releases.