Back to Updates

Platform Update — September 4, 2026

ibl.ai Engineering
Application

Sixty-nine production releases in a week — curated agent-level knowledge injected into every conversation, a standards-compliant OpenAI-compatible /v1 endpoint, an LLM registry refreshed to GPT-5.6, Claude Opus 5, Gemini 3.7, Grok 4.6 and DeepSeek V4, priority-ranked document retrieval, and ibl.ai Pro as the new default model.

Covers releases published 2026-08-28 → 2026-09-04 from iblai/iblai-prod-images (platform pins 1.174.0 – 1.198.0) and iblai/iblai-web-frontend (24 + 45 releases).

ServiceImage / PinVersion Span
dmiblai-dm-pro4.356.0-ai4.369.0-ai
osiblai-os-spa0.130.20.140.2
lmsiblai-lms-spa0.73.00.78.1
edxiblai-edx-prosumac.2.55.0sumac.2.58.0
authiblai-auth-spa2.2.52.2.6
web-utils@iblai/web-utils2.2.22.3.3
web-containers@iblai/web-containers1.19.21.19.8
iblai-js@iblai/iblai-js2.7.32.8.5
agent-ai@iblai/agent-ai2.8.32.9.2
mcp@iblai/mcp1.12.21.12.6

Note: ibl-cli was temporarily pinned to 7.3.0 (pin 1.190.0) and reverted to 6.2.0 (pin 1.193.0) in the same window; no net change for deployed environments.


iblai-dm-pro (4.356.0-ai4.369.0-ai)

Agent-level shared knowledge (MentorMemory). A new MentorMemory store lets operators curate per-agent "agent knowledge" entries that are injected into every user's chat via a ## Agent Knowledge system-prompt section. Gated by the existing enable_memory_component / use_memory_in_responses switches and run through the PII/PHI sanitizer. Platform-scoped, RBAC-gated CRUD endpoints at GET/POST /mentors/{mentor_id}/agent-memories/ and PATCH/DELETE .../agent-memories/{memory_id}/; tenant-isolated by (unique_id, platform_key). Create de-duplicates on a SHA-256 content hash. Five new grantable RBAC actions (Ibl.Mentor/AgentMemory/{list,read,write,delete,action}) are seeded; Limited Editor gains full access, Limited Viewer gains list+read. Additive migration 0357. (4.357.0)

Chat answer compilation from graph state. The graph turn's answer is now compiled from every AIMessage since the last human message, correctly handling answers split across messages and turns ending on tool calls. Intermediate steps in transcripts are accurately separated from the final answer. enable_computational_runtime is now readable from the mentor-settings endpoint. (4.358.0)

Sentry error reporting improvements. Chat errors now reach Sentry with full tracebacks using a stable per-session logger. Primary-model failures are reported even when the fallback succeeds. Langfuse records ls_provider as iblai rather than repeating the model name. (4.358.0)

Skip RAG for document-less agents. Agents with no trained documents no longer issue a pgvector embedding search on every chat turn — a no-op query that added latency. Migration 0358 adds a composite index on DocumentEmbedding(pathway, platform_key), built concurrently. (4.358.0)

Voice transcription fallback credential precheck. When the primary transcription provider fails, the fallback is now skipped if the tenant lacks a credential for it, surfacing the real primary failure instead of a misleading "credential not found" pointing at the fallback. Precheck covers groq, openai, google (API key or service-account), and iblai. (4.359.0)

Inclusive document_filter semantics. document_filter on the chat WebSocket is now inclusive: for each {key: value} pair, a document is eligible when its custom_metadata[key] matches or it has no such key at all. This lets a state-scoped agent keep both its state-specific documents and generic reference material while excluding documents tagged with a different value. Supports multiple filter pairs (AND'd), treats NULL/absent metadata as generic, and validates filter keys to a flat alphanumeric shape. (4.360.0)

Global search: agent results. The global search endpoint accepts content=agents and returns type: agent entries. API parameters now accept agent* as a synonym for mentor* across the core and mentor apps. (4.362.0)

Standards-compliant OpenAI-compatible /v1 endpoint. A new hosting path serves a standards-compliant OpenAI-compatible API with Bearer-key auth, a structured error envelope, and tenant-scoped model listing. Responses include a deployment_hash for cache busting. (4.362.0)

Google ADK, OpenAI Assistants, and OpenAI Agents SDK retired. Three agent backends are removed end to end — Google ADK/A2A (runner, endpoints, RBAC node), OpenAI Assistants (runner, admin pages, document-upload tasks, signal handlers), and the OpenAI Agents SDK fetcher. The google-adk, openai-agents, and google-generativeai dependencies are dropped. Database models and columns are deprecated but kept for rolling-deploy safety. Migration 0360 (data-only) repoints affected agents to base-agent so they continue chatting. mentor-available-tools now returns the base-agent tool set for every agent. Breaking: users/{user_id}/google-agents/ endpoints are removed; seed_base_mentors management command is removed. (4.363.0)

Dependency refresh. LiveKit 1.5.111.7.1, LangChain 1.3.18 / core 1.6.1 / langgraph 1.2.11 with deepagents 0.7.11, google-genai 1.75.02.20.0, google-cloud-aiplatform1.165.1, mcp1.29.1, langfuse3.15.0, openai2.54.0, anthropic1.2.0, OpenTelemetry → 1.44.0. Load-bearing ceilings: mcp<2, openai<3, google-cloud-aiplatform<2. (4.363.0)

Document permission cleanup. Document listing and chat retrieval no longer re-generate S3 presigned URLs on every request, removing per-request database writes and the row-level locks they caused. Deleting a document now cascades to its MediaFilePermission row. Training a file-type document no longer mints duplicate permission rows per run — the grant is keyed on the document's stable identity. Profile/embed image writes no longer create unused permission rows. Migration 0361 adds an index on MediaFilePermission(file_model_id), built concurrently. New purge_orphaned_media_file_permissions management command backfills orphans (--batch-size, --dry-run, idempotent). (4.365.0)

LLM model registry refresh. Registry updated to current provider model pages: OpenAI GPT-5.6 (sol/terra/luna), Anthropic Claude Fable 5 / Opus 5 / Opus 4.8, Google Gemini 3.7/3.6 Flash + Flash-Lite tiers, xAI Grok 4.6/4.5, DeepSeek V4 (pro/flash/flash-vision), and matching Azure/Bedrock entries. Removed: Perplexity sonar-reasoning and DeepSeek deepseek-chat (both deprecated by their providers). Breaking provisioning change: ibl_ai_mentor/mentors/llm_flows/*.json and manage.py update_llms are removed — manage.py seed_llm_registry is now the sole way to populate providers and models. Run seed_llm_registry --prune after deploying to migrate agents still on removed rows. (4.366.0)

New iblai default model. Agents created without an explicit model now default to iblai/iblai-pro instead of openai/gpt-4o-mini, tracking the best available model. iblai-fast (side-calls: memory extraction, insight summaries) routes to google/gemini-2.5-flash-lite. The iblai routing layer no longer streams the classifier's verdict to the user, and reasoning payloads are excluded from cross-model turn replay. Migration 0362 (data-only) repoints the routing classifier off openai/gpt-4.1-nano (sunset 2026-10-23). (4.366.0)

Watcher transcript access. Watchers can now see their watched students' transcripts on the mentor analytics messages endpoint. WATCHED_GROUP_WATCHER_GRANTS now includes Ibl.Analytics/Mentors/read; picks up on the next seed_rbac_data. (4.366.1)

File-only chat turns saved. A chat turn where the learner uploads files without typing text is now persisted with attachments. Each chat run records its request_payload (post-PII-filter, token-stripped) on a new ChatRunTracker.request_payload column for debugging. Chat-history exports (ai-mentor-chat-history, my-chat-history) gain a human_message_files column naming and linking files attached to each prompt. Migration 0363 adds the nullable column. (4.367.0)

API rate limits tightened. Default anonymous throttle lowered to 60/min and OAuth2 per-application throttle to 600/min (both env-var-overridable). OAUTH2_THROTTLE_RATE is now a live-adjustable Config()-backed setting matching the other rate limits. The unused THROTTLE_RATE setting is removed. (4.367.0)

Provisioning and notification sandbox hardening. Code execution in the platform provisioning feature and the custom-notification feature now runs with real process-level isolation. Legitimate snippets continue to work unchanged; runs take noticeably longer. No configuration change required. (4.367.0, 4.369.0)

Prioritized document retrieval with document_filter. A chat using document_filter now retrieves in two buckets — a matched bucket (every filter key strictly equals its value) and a generic bucket (documents that lack the filter key) — merged matched-first. Each chunk is labeled in-context (e.g. [Priority: metadata-matched | stateCode=CA] vs [Priority: general reference]) with a preamble instructing the model to prefer matched content. Chats without a document_filter keep the single-query retriever. (4.369.0)


iblai-os-spa (0.130.20.140.2)

Sandbox and canvas upgrades. The chat sandbox and canvas features gain "kind of sandbox" differentiation — canvas artifacts render inside the chat. (0.132.0)

Agent Datasets tab. A new Datasets tab renders the SDK AgentDatasetsTab via an OS host wrapper, with URL query-string synchronisation and replace-style navigation. (0.131.0)

Embed tab and help centre. The embed-tab preview no longer flips the app into embed mode. Custom embed launcher icons persist across refresh (and their removal persists too). The embed close control is hidden unless the host opts in via show-close-button. A configurable documentation URL (useHelpCenter hook) replaces hardcoded support links across the sidebar, free-trial dialog, and embed nav bar. (0.130.4 – 0.133.0)

Code Mode. Code Mode gains approval modes, per-agent workspaces, auto-minted platform keys, broader sandbox scope, alternative domain support, and Vercel/Stripe integration fixes. Guidance is now shipped as AGENTS.md instead of proxy-body injection; the agent loads it on every turn. The IBLAI_API_KEY guidance explains it doubles as an OpenAI API key for apps the agent builds. Pre-tool narration is removed from replies. (0.135.0, 0.138.0, 0.140.0)

LLM tab from SDK. The in-repo LLM tab is deleted in favour of the SDK AgentLLMTab, which surfaces on-device providers and models in both the tab and the provider modal. The nav-bar model selector opens the SDK LLM tab and shows the model's display name instead of its wire key. (0.136.0)

Chat working indicator. A new component shows an animated working indicator during the in-flight agent turn, with disclosure rows that report their own liveness. (0.137.0)

Bundle performance. The syntax highlighter and LiveKit are lazy-loaded off the main chat path. (0.137.1)

Voice recording guards. Voice recording now validates audio uploads before sending and stops the dictation timer when the recorder errors. (0.136.1)

Access tab RBAC. The Access tab's mutating controls are gated on the share_mentor RBAC permission. (0.136.0)

Chat 401 recovery. Chat connections that receive a 401 automatically refresh the DM token and retry. (0.139.0)

Tauri desktop app. Releases app-v0.95.17 through app-v0.95.19 with auto port allocation. (0.135.0 – 0.140.0)


iblai-lms-spa (0.73.00.78.1)

Agent tab race condition. The agent tab loading is optimised to avoid race conditions during concurrent initialisation. (0.74.0)

Course about page. The course about page correctly shows the session title and the login button. (0.73.1)

Watcher transcript integration. The LMS now shows watched students' chat transcripts, wired through the updated @iblai/iblai-js. (0.76.0)

Agent-based lesson completion. A new agent-based lesson/unit completion flow replaces the previous timer-based auto-completion. Course agent loading is optimised and the progress integration tracks agent-driven completion. (0.77.0 – 0.78.0)


iblai-edx-pro (sumac.2.55.0sumac.2.58.0)

Magic-link email CTA. The magic-link email's call-to-action button now reads "Get Started" instead of the previous label. Migration 0009_deeducate_magic_link_cta (data-only, rolling-deploy safe) updates the stored template; operator-customised copies are left untouched. To manually re-seed: python manage.py setup_default_templates (--force to unconditionally overwrite). (sumac.2.58.0)

Security hardening. Defense-in-depth hardening across multiple internal apps following an internal security review. No behaviour change for legitimate users or callers. (sumac.2.56.0, sumac.2.57.0)


iblai-auth-spa (2.2.52.2.6)

SDK feature bundle. The auth SPA picks up the web-containers and web-utils features released during this window — dictation settings, LLM on-device providers, voice transcription language catalogue, agent skill RBAC, and embed/wizard fixes.


@iblai/web-utils (2.2.22.3.3)

Per-tab auth storage. A flag-gated (default off) per-tab authentication storage foundation enables each browser tab to maintain its own auth session independently, with boot-time hydration. MCP feeders (Code/Cowork) route through authStorage. (2.2.2)

Agent lesson completion. Client-side implementation for agent-driven lesson completion, sending completion signals through the SDK rather than the previous timer-based approach. (2.2.3)

Chat 401 recovery. A new use401TokenRefresh hook detects expired DM/AXD tokens during chat, refreshes them, and resends — eliminating mid-conversation auth failures for long-lived sessions. (2.2.4, 2.3.1)

Embedded tenant switching. When the agent widget is embedded, tenant switches are handed off to the host application. On a tenant mismatch the SDK re-asks the host; if no host claims the switch, a self-switch fallback fires. A cookie-sync refresh loop that could spin indefinitely is stopped. (2.3.0, 2.3.2, 2.3.3)


@iblai/web-containers (1.19.21.19.8)

On-device LLM providers. The LLM tab and provider modal now surface on-device providers and models, with provider-identity helpers and an on-device model selection hook. The tab surface is translated and exported for consumption by OS and other hosts. (1.19.2)

Dictation settings sub-tab. A new Settings sub-tab under Voice lets operators configure dictation preferences, including a transcription language catalogue. The voice chat hook now passes the agent id with audio-to-text transcriptions. (1.19.5)

Watcher transcript access. The analytics panel now shows transcripts for watched students, matching the backend RBAC grant. (1.19.7)

Agent skill RBAC. The agent skills panel enforces RBAC for skill visibility and removes the "remove" button when the user lacks permission. (1.19.3)

Scroll-lock packaging. react-remove-scroll is externalised so the scroll lock is shared across consumers rather than bundled twice. (1.19.7)


@iblai/iblai-js (2.7.32.8.5)

API type bindings. Continuous API type updates tracking dm-pro releases 4.357.0 through 4.369.0 and core releases, keeping TypeScript consumers in sync with backend schema changes. (2.7.3 – 2.8.5)


@iblai/agent-ai (2.8.32.9.2)

Embed close button. A new showclosebutton attribute lets the host opt in to showing a close control on the embedded agent widget, with a documented closeEmbed contract. (2.8.3)

Auth refresh on JWT expiry. The embedded widget now refreshes the edX JWT before fetching tenants when auth expires, preventing blank-state failures in long-lived LMS embeds. (2.8.4)

Embedded tenant handoff. When the widget is embedded, tenant switches are delegated to the host via a message protocol rather than handled internally, preventing stale-context issues. The current tenant is included in auth data sent to the embed. (2.9.0, 2.9.2)


@iblai/mcp (1.12.21.12.6)

Sync releases. Tracks the web-utils and iblai-js releases in this window — per-tab auth storage routing, 401 recovery plumbing, and tenant-switch protocol updates flow through to the MCP layer. (1.12.2 – 1.12.6)