Skip to content

Releases: saylordotorg/moodle-local_ai_course_assistant

v3.4.5: Runtime UI translation + admin rebrand + sectionerror fix

11 Apr 13:50

Choose a tag to compare

Runtime UI Translation (CDN deliverable)

Widget static labels now retranslate when a student switches language inside the drawer. Previously every mustache {{#str}} lookup rendered once at page load in the Moodle user language and stayed frozen, leaving bottom tabs (Chat/Voice/Notes), voice panel title, history panel, header tooltips, footer buttons, and LLM picker labels stuck in the initial server language.

  • amd/src/i18n_strings.js: bundled 46 language translation table for every static widget string. Missing keys fall back to English.
  • chat.js tags the widget DOM with data-i18n-* attributes at init time and applies the current language immediately. The same pass fires on every language switch in both the compact picker and the in drawer settings panel.
  • Ships via the CDN bundle (sola.min.js), so Saylor production running v3.4.4 picks up runtime translation on the next cdn_version bump without a plugin reinstall.
  • Covers: bottom tab labels, voice mode card, Notes/History panel, header action tooltips, language suggestion banner, starters aria label, footer Usability Testing and Feedback buttons, LLM picker, mic and send, input placeholder.

Admin Rebranding for Upstream Usability

  • Removed the "SOLA:" prefix from every admin page display name so other institutions can use the plugin without Saylor-specific branding in the admin tree. The 7 settings pages now show as General, AI Provider & Models, Content & RAG, Safety & Moderation, Engagement, Branding & UI, Integrations & Delivery. The 4 external tool pages show as Survey Editor, Usability Testing Editor, Rubric Editor, WhatsApp Integration Test.
  • The top level admin category is now titled "AI Course Assistant" instead of "SOLA (AI Course Assistant)".
  • Student facing branding in the widget header still respects the short_name admin setting, which defaults to "SOLA" for Saylor and can be overridden per install.
  • Stable section identifiers (local_ai_course_assistant_general, etc.) are unchanged. URLs, bookmarks, and the self-updater all keep working.

Bug Fixes

  • Section error when clicking Global AI Settings from the wrench icon or Back to Settings links. The v3.4.4 settings restructure replaced the single local_ai_course_assistant admin settings page with a category of the same name containing 7 admin_settingpage children. 9 PHP admin pages still linked to the old /admin/settings.php?section=local_ai_course_assistant URL, which no longer resolves to an admin node and throws error/admin/sectionerror. Every link now points to /admin/category.php?category=local_ai_course_assistant. Affected files: course_settings.php, rag_admin.php, update_admin.php, analytics.php, usertesting_admin.php, rubric_admin.php, survey_admin.php, integrity_admin.php, starter_settings.php.
  • Defensive registration of Catalyst's WhatsApp Integration Test admin page. Catalyst's fork adds whatsapp_test.php which calls admin_externalpage_setup('local_ai_course_assistant_whatsapptest'). The v3.4.4 settings restructure wiped that registration when Catalyst merged it, causing sectionerror on their staging. settings.php now registers the page conditional on file_exists(whatsapp_test.php), so upstream installs without the file build a valid admin menu while Catalyst's fork works without a local patch.

Tooling

  • deploy_dev.py now accepts --target {dev,405,500,501,all} for single tarball multi site deploy across all 4 Saylor dev Moodles.

Upgrading

  • Saylor production on v3.4.4: bump the cdn_version admin setting (Site admin → Plugins → Local plugins → AI Course Assistant → Integrations & Delivery → CDN Asset Version) to 3.4.5 to pull the new bundle. The CDN base URL should already point at https://saylordotorg.github.io/moodle-local_ai_course_assistant.
  • Dev sites and anyone else: install as a normal plugin upgrade, or deploy_dev.py --target all.

v3.4.4: Admin settings restructure + curl filelib fixes

10 Apr 16:56

Choose a tag to compare

What is new in v3.4.4

Admin settings restructure and a batch of latent curl bug fixes. No database migration, no new configuration, no capability changes. Drop in upgrade from 3.4.3.

Admin settings split into 7 focused pages

The single scrolling settings page and the obsolete JS based tab hack are gone. Replaced with a native SOLA admin category containing 7 settings pages:

  • General: enabled toggle, remote config URL, version banner
  • AI Provider & Models: provider, API key, model, temperature, system prompt, max tokens, history, starter editor link, token analytics link
  • Content & RAG: RAG toggle, embedding provider and API, chunk and top-k tuning, performance content caps, RAG admin link
  • Safety & Moderation: quiz hide, off-topic detection, wellbeing, integrity checks
  • Engagement: study plans, email and WhatsApp reminders, voice and realtime mode, surveys, usability testing, practice scoring rubrics
  • Branding & UI: institution name, display name, welcome message, chat greeting, display mode, position, avatar, colors
  • Integrations & Delivery: FAQ and Zendesk, Redash export, CDN frontend delivery, plugin self update

Plus 7 editor and tool pages (Starter Editor, Survey Editor, Usability Testing Editor, Rubric Editor, RAG Index, Plugin Updates, Integrity Checks) all listed under the same SOLA category.

All 92 existing setting fields and their saved values are preserved.

Bug fixes

  • Fatal class \\curl not found on update_admin.php and the rag_admin.php reindex path. \\curl is not auto loaded by Moodle. Added require_once($CFG->libdir . '/filelib.php') inside every class method that creates a \\curl instance: plugin_updater, reminder_manager, zendesk_client, embedding_provider\\base_embedding_provider, provider\\base_provider. Previously these silently failed on cold includes.

  • Removed the obsolete JS tab navigation hack and duplicated top save button script from the single settings page, now redundant with the native multi page layout.

QA

  • All 7 new settings pages render HTTP 200 with zero errors and zero warnings over authenticated HTTP.
  • All 9 admin external pages (analytics, token analytics, rubric editor, survey editor, usability testing editor, RAG admin, update admin, integrity admin, starter settings) render cleanly.
  • 18 analytics methods, survey manager, usability testing manager, rubric manager, and token cost manager smoke tested without argument or signature errors.
  • All 46 lang files still lint clean. Mustache template sections still balanced.

Upgrade notes

  • Any direct link to /admin/settings.php?section=local_ai_course_assistant will 404. Use the SOLA category or one of the new section names (local_ai_course_assistant_general, _ai, _content, _safety, _engagement, _branding, _integrations).
  • No DB migrations.
  • No configuration changes.
  • If you use CDN mode for frontend delivery, no CDN rebuild is required for this release (template and server side changes only).

v3.4.3: i18n cleanup, starter translation fix, voice precondition reorder

10 Apr 15:42

Choose a tag to compare

What's new in v3.4.3

Patch release focused on internationalisation cleanup and two UX bug fixes. No schema changes, no new configuration, no capability changes. Safe drop in upgrade from 3.4.2.

i18n cleanup

  • Replaced 17 hardcoded English strings in the widget template with Moodle string lookups. Affected UI: the language suggestion banner aria labels, debug panel buttons (Refresh, Copy all, Close), voice panel title, Notes tab saved subtitle and empty state, history Saved and History tabs, LLM provider and model picker labels, and footer Usability Testing and Feedback links.
  • Added 17 new chat:* string keys to the English lang file and translated all of them into the other 45 supported languages.
  • Backfilled chat:starter_help_page, chat:starter_ask_anything, and chat:starter_review_practice in 41 language files that previously fell back to English.
  • Approximately 925 new or backfilled translation strings across the full 46 language set.

Starter translation on language switch

  • Fixed a bug where conversation starter buttons would not re-translate when the student picked a different language at runtime. The client side gate was checking data-translatable, which the server never emitted. Switched the gate to data-builtin, which the template already emits correctly. Also added data-builtin="1" to the 8 fallback starter buttons rendered when starter_manager returns no data.

Voice feature click fix (Conversation Practice, Pronunciation Practice)

  • Fixed a bug where clicking Conversation Practice or Pronunciation Practice on a non secure context (plain HTTP served over a LAN IP) appeared to do nothing. The preconditions check ran after the UI already switched to voice mode, and the error message was routed through the chat message area which is hidden in voice mode. Reordered the checks to run before the mode switch and routed errors through the visible notification toast.

Files changed

51 files, 1,041 insertions, 54 deletions. Most of the line count is translated strings in the 46 language files.

Upgrade notes

  • No DB migrations.
  • No new configuration settings.
  • Existing custom starters are unaffected; only built in starters change behaviour on runtime language switch.
  • If you use CDN mode for frontend delivery, rebuild and redeploy cdn/dist/sola.min.js before this update will take effect in the browser.

v3.4.2: Quiz Improvements, Learning Objectives, Language Fixes

09 Apr 14:30

Choose a tag to compare

What's New

Quiz and Starters

  • Starters renamed: Explain This Page (was "Help With This") and Quiz Me (was "Quiz Me On This")
  • Quiz topic picker filters out non-content sections (enrollment, certificate, feedback, survey, etc.)
  • Learning Objectives picker now extracts real objectives from "Unit X Learning Outcomes" pages (supports GENERICO tags, HTML lists, and plain text)
  • Starter label translations updated in all 46 languages

Language and Localization

  • Input placeholder translates when language is switched (15 languages)
  • English Lock fixed: frontend forces English, disables picker, shows "(Locked)" label, blocks settings changes

Voice Tab

  • Voice mode passes page context (pageid, pagetitle) so AI responses are relevant to the current lesson
  • Fixed voice transcript ordering (user/assistant messages now appear chronologically)
  • Voice tab toggle is now per-course (Inherit / Force On / Force Off in course settings)

Performance

  • New admin settings: Max Content Per Resource and Max Total Content (Performance tab)
  • Content stuffing defaults halved (1,500/15,000 chars) for faster AI responses
  • RAG retriever caches decoded embedding vectors in memory

White Label

  • Chat widget title uses configured short name instead of hardcoded "SOLA" lang string
  • Admin settings organized into 16 tabs

Admin

  • Tabbed settings page (General, AI Provider, RAG, Quiz, Safety, Study Plans, Branding, FAQ, Voice, Updates, CDN, Analytics Export, Integrity, Surveys, Practice Scoring, Usability Testing, Performance)
  • Default avatar border color updated to #152233

Upgrade Notes

  • No breaking changes. Drop-in replacement for v3.4.1.
  • Requires Moodle 4.5+.

Installation

Download ai_course_assistant.zip and upload via Site Admin > Plugins > Install plugins.

v3.4.1: New LLM Providers + Model Fallback

11 Apr 13:05

Choose a tag to compare

New LLM Providers

SOLA now supports 11 LLM providers:

Provider Default Model New?
OpenAI gpt-4o
Claude (Anthropic) claude-sonnet-4
DeepSeek deepseek-chat
Google Gemini gemini-pro
Mistral AI mistral-large-latest NEW
Groq llama-3.3-70b-versatile NEW
OpenRouter openai/gpt-4o NEW
xAI (Grok) grok-3 NEW
MiniMax abab5.5-chat
Ollama llama3
Custom (user-defined)

All four new providers use the OpenAI-compatible API format.

Model Resilience

  • Default model set to gpt-4o (was blank)
  • Automatic fallback: if the configured model returns 404 (misspelled or deprecated), SOLA retries with the provider's built-in default model
  • Clear error messages tell admins exactly which model failed and what the correct default is
  • Fallback events logged in the audit trail

Layout

  • Analytics dashboard tabs moved to the top of the analytics page

Upgrade Notes

  • No breaking changes. Drop-in replacement for v3.4.0.
  • Requires Moodle 4.5+.

Installation

Download ai_course_assistant.zip and upload via Site Admin → Plugins → Install plugins.

v3.4.0: Analytics Dashboard Expansion

30 Mar 14:56

Choose a tag to compare

Highlights

7-Tab Analytics Dashboard

Comprehensive analytics with lazy-loaded AJAX tabs and Chart.js visualizations:

  1. Overall Usage — enrollment, messages/student, session duration, return rate, time-of-day/day-of-week heatmaps
  2. By Course — per-course breakdown with horizontal bar chart + sortable table
  3. AI vs Non-Users — completion rates, average grades, time to completion (pulls from Moodle grade/completion APIs)
  4. By Unit — per-section student counts and message volume with progression chart
  5. Usage Types — doughnut chart of chat/voice/quiz/practice interaction modes
  6. Themes — keyword extraction with concept vs navigation/UX categorization
  7. AI Feedback — thumbs up/down, hallucination flags, survey results, messages-to-resolution

Per-Message Rating UI

  • Thumbs up/down buttons on every assistant message
  • Hallucination flagging checkbox on thumbs-down
  • Optional comment field for qualitative feedback
  • Data feeds directly into the Feedback analytics tab

Infrastructure

  • 9 new web service endpoints for AJAX data loading
  • 2 new database tables: msg_ratings (per-message ratings + hallucination flags), keywords (cached keyword extraction)
  • 2 new columns on messages table: interaction_type (chat/voice/quiz/practice), cmid (course module context)
  • SSE done event includes messageid for client-side rating
  • Chart.js 4.4.7 vendored for chart rendering
  • CSV export for all tabs

i18n

  • Analytics strings translated to all 46 supported languages

Upgrade Notes

  • No breaking changes. The new analytics tabs appear below the existing course management section on the analytics page.
  • Historical messages will show as 'chat' interaction type (tracking starts after upgrade).
  • Per-unit analytics require the cmid field which populates after upgrade.
  • Requires Moodle 4.5+ (unchanged).

Installation

Download ai_course_assistant.zip below and upload via Site Admin → Plugins → Install plugins.

v3.3.0: CDN Frontend Delivery + Avatar Refresh

26 Mar 09:50

Choose a tag to compare

Highlights

CDN Frontend Delivery

SOLA can now serve its entire frontend (JS + CSS) from an external CDN, decoupling frontend updates from Moodle plugin upgrades. Ship UI fixes and features by pushing to GitHub — no hosting provider involvement needed.

  • Single JS bundle: all 10 AMD modules in one sola.min.js (224KB)
  • Minified CSS: sola.min.css (73KB, down from 108KB)
  • GitHub Actions auto-deploys to GitHub Pages on push
  • Two new admin settings: CDN Base URL + CDN Asset Version
  • Zero-risk fallback: clear CDN URL to revert to local files

Performance

  • JS HTTP requests reduced from 10 → 1
  • CSS 32% smaller (73KB vs 108KB)
  • CDN edge caching (vs single Moodle server)
  • Pre-resolved module dependencies (no RequireJS overhead)

Avatar Refresh

  • New character illustrations for avatars 02–10
  • Optimized from 150–423KB SVGs to 13–22KB PNGs
  • Removed unused legacy pix assets

i18n

  • CDN settings translated to all 46 supported languages

Upgrade Notes

  • No breaking changes. CDN mode is opt-in; default behavior unchanged.
  • New admin settings appear under "CDN / Frontend Delivery" section.
  • Requires Moodle 4.5+ (unchanged from v3.2.x).

Installation

Download ai_course_assistant.zip below and upload via Site Admin → Plugins → Install plugins.

v3.2.3 — Remove expand button

20 Mar 09:18

Choose a tag to compare

Changes

  • Removed expand/collapse header button from the chat drawer
  • Cleaned up associated CSS (.local-ai-course-assistant__drawer--expanded state rules, icon toggle CSS)
  • Removed chat:expand and chat:collapse strings from all 46 language files
  • Removed toggleExpand(), EXPAND_KEY localStorage, and expandBtn references from chat.js and ui.js

v3.2.2: Security Review Fixes

16 Mar 22:39

Choose a tag to compare

v3.2.2 — Security Review Fixes

Addresses all findings from the Catalyst security and code review (WR-483440, 16 March 2026).

Critical: Installation Blocker Fixed

  • install.xml embedding field changed from invalid TYPE="longtext" to TYPE="text" — plugin can now be installed on fresh Moodle instances

GDPR Compliance

  • Privacy provider now declares all 9 tables containing personal data (was 4)
  • delete_data_for_user() and delete_data_for_users() now delete from _feedback, _survey_resp, _ut_resp, _audit, and _practice_scores
  • Fixed delete_data_for_users() asymmetry — now mirrors single-user deletion (plans + reminders)
  • export_user_data() now exports study plans, reminders, feedback, and survey responses

Code Standards (Moodle PHPCS)

  • All camelCase PHP variable names converted to snake_case across 15+ files
  • PHPDoc blocks added to all classes/external/ public methods
  • Hardcoded English strings replaced with get_string() in sse.php, tts.php, reminder_manager.php

Race Condition Fix

  • userid_courseid index on _convs table changed to UNIQUE
  • get_or_create_conversation() wrapped in try/catch for concurrent request safety
  • Upgrade step deduplicates existing conversations and migrates orphaned messages

Other Fixes

  • course_settings.php now uses course context instead of system context (fixes breadcrumbs)
  • Removed create_demo_course.php from production package

v3.2.0

13 Mar 06:44

Choose a tag to compare

What's New in v3.2.0

UX Improvements

  • Toggle button as Home: Clicking the chat button while the drawer is already open shows conversation starters (acts as Home/Reset) instead of closing
  • Stop button for streaming: A "Stop" button appears during AI responses, letting users interrupt long messages and keep partial text
  • Voice noise reduction: Speech detection threshold raised (0.012 → 0.02) and silence window extended (1.7s → 2.1s) to reduce false triggers from ambient noise
  • Editable email for reminders: Email field in the settings panel is now an editable input (was read-only); defaults to Moodle email if blank
  • Specific source links: AI now strongly prefers linking to the exact course activity page rather than the generic course view

Admin Dashboard — Course Management

  • Bulk actions: Enable/Disable SOLA and Usability Testing for selected courses or all courses at once
  • Checkbox selection: Select individual courses or use "Select all" for bulk operations
  • Course search: Filter/search input to quickly find courses by name
  • Status filters: Filter course list by SOLA status (enabled/disabled) and Usability Testing status (on/off/inherit)
  • Sortable columns: Click column headers to sort by course name, SOLA status, UT status, or data availability
  • Per-course usability testing toggle: Three states — On (forced), Off (forced), or Inherit Global setting
  • Back to All Courses: Navigation link on per-course analytics view to return to the course list

AI Insights (Analytics Dashboard)

  • New "Generate AI Insights" button on the per-course analytics page
  • Sends all feedback, survey, and usability testing data to the configured AI provider
  • Returns structured analysis: key issues, feature requests, positive highlights, and prioritized recommendations
  • Only appears when there is data to analyze

Terminology Update

  • Renamed "User Testing" to "Usability Testing" throughout the entire interface — widget footer, analytics dashboard, settings, admin editor, insights, and all documentation

Institution Name Setting

  • New institution_name admin setting under Branding (default: "Saylor University")
  • System prompt, avatar labels (46 languages), and AI insights all use this setting
  • Enables rebranding without code changes (e.g., Saylor Academy → Saylor University)

Language Support

  • All four translation layers now at 46 languages (added Hebrew starter prompts)
  • UI lang files, SUPPORTED_LANGS, STARTER_LABELS, and STARTER_PROMPTS fully aligned

Bug Fixes

  • Fixed AI Insights "Class curl not found" error (missing require_once for lib/filelib.php)
  • Fixed course search JS that was incorrectly scoped inside per-course view