Releases: saylordotorg/moodle-local_ai_course_assistant
Releases · saylordotorg/moodle-local_ai_course_assistant
v3.1.0: User Testing
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_nameadmin 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
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
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
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
What's New in v2.3.0
Features ported from David Ta's fork
- Google Gemini provider via OpenAI-compatible endpoint (
gemini-2.5-flashdefault) - GPT-5 / o1 / o3 / o4 support: sends
max_completion_tokensinstead ofmax_tokensfor 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
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-previewtogpt-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
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.phpendpoint 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-previewupdated togpt-4o-mini-realtime(GA version)
Technical
- SSE metadata event emits page URL and course URL for source link resolution
- New
redash_api_keyadmin 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
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
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
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