Skip to content

Releases: saylordotorg/moodle-local_ai_course_assistant

v3.1.0: User Testing

12 Mar 21:36

Choose a tag to compare

User Testing

In-Widget Testing Panel (Option B)

  • 8 default tasks covering: concept explanation, follow-ups, quiz testing, off-topic handling, overall experience, feature wishlist, recommendation likelihood, and settings usability
  • Step-through flow with progress bar, "Go to SOLA" pause button, and completion screen
  • Each response auto-captures message count and session duration
  • Results displayed in the analytics dashboard with per-task breakdowns
  • Fully customizable via the admin task editor (drag reorder, type switching, per-course overrides)
  • Per-course toggle: Enable or disable user testing per course from the analytics dashboard (On / Off / Inherit Global)

External Form Link (Option C)

  • Admin configurable URL with {{userid}}, {{courseid}}, {{messages}}, {{session_minutes}} placeholders
  • Works with Google Forms, Typeform, Qualtrics, or any URL-param-based form

AI Insights (Analytics Dashboard)

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

Institution Name Setting

  • New institution_name admin setting under Branding (default: "Saylor University")
  • System prompt uses {{institution}} placeholder — automatically substituted
  • Avatar label uses the setting across all 46 language files
  • Enables rebranding without code changes (e.g., Saylor Academy → Saylor University)

UX Improvements

  • Toggle button as Home: Clicking the chat toggle button while the drawer is already open now acts as the Home/Reset button (shows conversation starters) instead of closing the drawer
  • Stop button for streaming: A "Stop" button appears during AI response streaming, allowing users to interrupt long responses
  • Voice noise reduction: Increased speech detection threshold (0.012 → 0.02) and silence duration (1.7s → 2.1s) to reduce false triggers from ambient noise; barge-in (speaking to interrupt SOLA) already supported
  • Editable email for reminders: Email address field in the settings panel is now editable (was read-only); defaults to Moodle email if left blank
  • Specific source links: Strengthened AI source attribution prompt to strongly prefer linking to the specific course activity page rather than the generic course view

Admin Dashboard

  • Disable All / Enable All: Bulk toggle buttons on the analytics course list to enable or disable SOLA across all courses at once (with confirmation)
  • Course search: Filter/search input above the course list to quickly find specific courses
  • Per-course user testing toggle: New column in the course table to enable/disable user testing per course (On / Off / Inherit Global)

Language Support: 46 Languages

  • Added missing Hebrew (he) to starter prompt translations
  • All three translation layers now at 46 languages: UI lang files, STT/TTS support, starter labels, and starter prompts

Admin

  • New "User Testing" section in plugin settings (enable toggle, external URL, editor link)
  • Task editor admin page with global/per-course scoping, preview, and reset to defaults

Technical

  • New tables: _ut_tasks, _ut_resp
  • New web services: get_usertesting, submit_usertesting_response, generate_insights
  • New files: usertesting_manager.php, usertesting_admin.php, generate_insights.php
  • "User Testing" footer link appears left of "Feedback" when enabled

v3.0.3

12 Mar 20:42

Choose a tag to compare

v3.0.3

Survey Question Editor

  • New admin page for creating and editing survey questions (global default + per-course overrides)
  • Add, edit, delete, and reorder questions via drag or arrow buttons
  • Three question types: Multiple Choice (with options editor), Open Text, Rating Scale
  • Rating scale supports min/max text labels (e.g. "Not at all" / "Very happy")
  • Live preview shows how students will see the survey
  • Course scope selector to switch between global and per-course surveys
  • Reset to defaults or remove course override
  • Accessible from Plugin Settings or Moodle admin menu

Specific Source Attribution

  • Source pills now show the actual activity/resource name (e.g. "From: Unit 3 Reading Assignment") and link directly to that page
  • Previously showed generic "From: Course Materials" linking to the course overview
  • AI uses course module IDs from the course structure to cite specific resources

Widget Feature Guidance

  • System prompt now includes awareness of all settings panel features
  • When students ask to set up reminders, share phone numbers, or change preferences, the AI directs them to the gear icon in the chat header
  • Prevents the AI from saying "I can't collect personal information" when the feature already exists

Rating Question Fix

  • Question 5 now clarifies the scale: "(1 = not at all, 5 = very happy)"
  • Rating UI shows min/max text labels flanking the number buttons
  • Existing surveys updated automatically on upgrade

v3.0.2: Survey Editor + Specific Source Attribution

12 Mar 20:18

Choose a tag to compare

v3.0.2: Survey Editor + Specific Source Attribution

Survey Question Editor

  • New admin page for editing survey questions (global default and per-course overrides)
  • Add, edit, delete, and reorder questions via drag or arrow buttons
  • Three question types: Multiple Choice (with options editor), Open Text, Rating Scale
  • Rating scale supports min/max labels shown next to the number buttons
  • Live preview button shows how students will see the survey
  • Course scope selector to switch between global and per-course surveys
  • Reset to defaults or remove course override
  • Accessible from Plugin Settings or Moodle admin menu

Rating Question Fix

  • Question 5 now clarifies the scale: "(1 = not at all, 5 = very happy)"
  • Rating UI displays text labels at each end of the scale
  • Existing surveys updated automatically on upgrade

Specific Source Attribution

  • Source pills now show the actual activity/resource name (e.g. "From: Unit 3 Reading Assignment") and link directly to that page
  • Previously showed generic "From: Course Materials" linking to the course overview
  • AI uses course module IDs to cite the specific resource it drew from

v3.0.1: Admin Survey Tool + Specific Source Attribution

12 Mar 19:35

Choose a tag to compare

v3.0.1: Admin Survey Tool + Specific Source Attribution

Specific Source Attribution

  • Source pills now show the actual activity name (e.g. "From: Unit 3 Reading Assignment") and link directly to the activity page
  • Previously showed generic "From: Course Materials" linking to the course overview
  • AI uses course module IDs from the course structure to cite specific resources
  • Falls back to generic course link when the AI cannot identify a specific activity

Admin Chat Survey

  • 5 question default survey (multiple choice, long text, rating types)
  • Global default with per-course override capability
  • Admin settings: enable/disable, trigger threshold (messages), frequency (once/monthly/quarterly/unlimited)
  • Survey panel UI in the chat widget with validation and thank-you confirmation
  • Survey results section in the analytics dashboard with per-question breakdowns
  • Raw survey data included in Redash JSON export

Other Changes

  • Allow comma-separated emails in integrity report recipient field
  • Fix Realtime API "Cancellation failed" error on iOS Chrome (response.cancel race condition)
  • WhatsApp reminder opt-in with "messaging rates may apply" disclaimer
  • Email/WhatsApp contact info synced to Moodle user profile on save

Database Changes

  • 2 new tables: local_ai_course_assistant_surveys, local_ai_course_assistant_survey_resp
  • Default global survey auto-seeded on upgrade

v2.3.0

11 Mar 20:40

Choose a tag to compare

What's New in v2.3.0

Features ported from David Ta's fork

  • Google Gemini provider via OpenAI-compatible endpoint (gemini-2.5-flash default)
  • GPT-5 / o1 / o3 / o4 support: sends max_completion_tokens instead of max_tokens for models that require it
  • Quiz hide admin toggles: completely suppress the SOLA widget on all quiz pages for students, staff, or both (stricter than the built-in summative quiz lock)
  • Content debug inspector: admin-only three-pane panel showing browser snapshot, SSE request payload, and server response for troubleshooting context issues
  • Twilio-compatible WhatsApp auth: auto-detects Twilio API URLs and uses Basic auth with Account SID
  • Integrity checker PHP CLI fix: resolves a working PHP CLI binary on non-CLI SAPI environments (CGI/FPM)
  • Updated Saylor avatar (avatar_01.svg): new S* logo mark (200x200, navy/blue/white)

Bug fixes

  • Fixed duplicate string entries in Oromo and Somali lang files

Stats

  • 37,600+ lines of code across 122 files
  • 26 language translations, 46 languages for STT/TTS

v2.2.0

11 Mar 14:26

Choose a tag to compare

What's New in v2.2.0

My Saved Content Panel

  • Renamed from "Saved Responses" to "My Saved Content"
  • Bookmark badge is now a clean dot indicator (no counter)
  • Each saved item shows: date, source link (clickable), and expanded text preview (300 chars)
  • Action buttons on each item: Copy, TTS (read aloud), Edit (send to chat), Remove
  • Source URLs from course content are saved with bookmarks

Starter Prompt Translations (45 languages)

  • Translated AI prompts for 19 additional languages: Bulgarian, Czech, Danish, Dutch, Finnish, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Romanian, Slovak, Swedish, Thai, Turkish, Ukrainian
  • When UI language is non-English, clicking a starter chip now sends the prompt in the selected language (previously only chip labels were translated, prompts stayed English)

New Language: Bulgarian

  • Full support across SUPPORTED_LANGS, STARTER_LABELS, and STARTER_PROMPTS

Realtime API Model Update

  • Updated from deprecated gpt-4o-mini-realtime-preview to gpt-realtime-mini (OpenAI GA rename)
  • Fixed GitHub Actions smoke test workflow permissions and reliability

Stats

  • 45 supported languages (was 43)
  • 45 starter prompt translations (was 26)
  • ~38,000 lines of source code

v2.1.0

11 Mar 05:53

Choose a tag to compare

SOLA v2.1.0

New Features

  • Bookmarks in header: Dedicated bookmark button in the SOLA header with dropdown panel showing all saved responses. Removed from user settings panel.
  • TTS audio caching: Clicking the speaker icon on a previously played message now plays instantly from cache (no repeat API call). Up to 20 entries cached per session.
  • Clickable source attribution: "From: Current Page" and "From: Course Materials" pills are now clickable links that open the source content. Hover shows the page title.
  • Redash analytics export: New /redash_export.php endpoint with API key authentication. Outputs course analytics, user feedback (with browser, OS, SOLA version), token costs, and course hotspots in JSON format for Redash dashboards.
  • Translated starter prompts: When a non-English language is selected, conversation starter chips now send prompts in the selected language (26 languages supported).
  • Language selector clarified: Renamed to "SOLA Language" with description: "Choose the language SOLA speaks and responds in. This does not change your Moodle interface."

Bug Fixes

  • SOURCE tag regex now handles whitespace variations, preventing bracket leaks in chat display
  • More permissive SOLA_NEXT tag stripping for edge cases
  • Fixed deprecated OpenAI model: gpt-4o-mini-realtime-preview updated to gpt-4o-mini-realtime (GA version)

Technical

  • SSE metadata event emits page URL and course URL for source link resolution
  • New redash_api_key admin setting under Analytics Export section
  • TTS cache uses Map with LRU eviction (20 entry max)
  • createSourcePill() helper generates <a> or <span> based on source type and URL availability

v2.0.0: Self-update and automated integrity checks

10 Mar 05:15

Choose a tag to compare

What's New in v2.0.0

Self-Update from Inside the Plugin

SOLA can now update itself directly from the Moodle admin panel:

  • Plugin Updates page: shows installed vs latest version, release notes, one-click install
  • Automatic backup before each update with rollback on failure
  • Atomic directory swap ensures no downtime during updates
  • Security: only downloads from github.com (whitelisted)
  • Optional GitHub token setting for private repositories

Automated Daily Integrity Checks

10 automated health checks run daily at 3 AM:

  • PHP syntax validation across all 100+ plugin files
  • JS build file verification (10 modules: source + minified)
  • Language file parsing (26 languages)
  • API key configuration check
  • RAG table existence (when RAG is enabled)
  • version.php consistency
  • Core class autoloading (7 key classes)
  • Template file validation (6 mustache templates)
  • Database table existence (8 tables)
  • SSE endpoint validation

Email alerts are sent only when issues are found, to a configurable admin email address or the primary site admin.

Integrity Admin page: view last results, stat cards (passed/failed/warnings), full test table, and "Run Now" button for on-demand checks.

Admin Settings

  • New "Plugin Updates" section with link to update page and GitHub token setting
  • New "Integrity Monitoring" section with enable toggle, email config, and results link
  • Both pages registered in the Moodle admin navigation

Full changelog: v1.9.3...v2.0.0

v1.9.3: Documentation and help text

10 Mar 00:36

Choose a tag to compare

What's New in v1.9.3

Documentation & Help

  • Starter settings: collapsible "How to use" guide at the top explaining starter types (prompt, quiz, voice, pronunciation), conditional visibility, prompt placeholders, per-course overrides, and drag-to-reorder
  • Starter icon picker: all icons now show descriptive labels on hover (e.g., "Brain", "Goal", "Timer")
  • Course settings: info box explaining how course-level overrides work ("leave blank to use global setting")
  • Global settings: expanded descriptions for RAG/Semantic Search and Realtime Voice Mode sections explaining what each feature does and how to set it up
  • Top save button added to global admin settings page for quick access

Bug Fixes (from v1.9.2)

  • Fixed Oromo (om) and Somali (so) lang file syntax errors

Full changelog: v1.9.2...v1.9.3

v1.9.2: Fix lang file syntax errors

10 Mar 00:30

Choose a tag to compare

What's New in v1.9.2

Bug Fixes

  • Fixed Oromo (om) lang file: removed duplicate entries with unescaped apostrophes causing PHP parse errors
  • Fixed Somali (so) lang file: removed duplicate entries with unescaped apostrophes causing PHP parse errors

Recent Features (v1.9.x)

  • English Lock: per course toggle to keep ELL courses in English regardless of student language preference
  • Default provider changed to OpenAI (gpt-4o-mini) for faster responses
  • Max tokens cap: configurable response length limit (default 1024) for shorter, faster responses
  • RAG enabled by default: semantic search now on by default
  • Spoken intros: Practice Speaking and Pronunciation Practice modes now start with a spoken greeting
  • Admin settings reorganized: RAG, token cost, and conversation settings moved near the top
  • Save buttons: added at top and bottom of all custom settings pages
  • Starter settings fixed: resolved blank page (HTTP 500) on global and course level starter settings

Full changelog: v1.9.1...v1.9.2