Tier course contents by relevance, only sending video titles for matched courses

Split the relevant courses into two tiers: ~25 courses described in detail
(paths, tags, about), and ~6 of those get their full video titles when the
question points at them specifically. This lets the advisor answer what a
course covers without sending the entire library's 3,000 video titles every
time. Video titles now become searchable terms weighted alongside tags and
learning paths, so courses are found by their actual content.
This commit is contained in:
Harwinder Sekhon
2026-09-18 19:58:13 -04:00
parent 07b7aa758c
commit c0c626f61d
2 changed files with 143 additions and 47 deletions
+21 -11
View File
@@ -42,9 +42,9 @@ plain HTTP resources.
belongs to) from the vendor's catalogue or the downloader's sidecar file —
see *Course catalogue* below.
- An optional **AI course advisor**, a bubble in the corner of every screen:
"I want to learn SD-WAN, where do I start?" answered with courses from your
own library, in order, with links. Off unless you switch it on — see
*Course advisor* below.
"I want to learn SD-WAN, where do I start?" or "what does Core MPLS cover?"
answered with courses from your own library, in order, with links. Off unless
you switch it on — see *Course advisor* below.
- **Reset progress** for one video, one quiz, a whole course/section, or the
entire account.
- Course and section listings switch between **grid and list** layout, and the
@@ -312,9 +312,10 @@ lesson) is ignored.
A bubble in the bottom-right corner of every screen — bar the player and a
quiz, where it would be in the way — opening a chat panel that answers
questions like *"I want to learn SD-WAN, where do I start?"* or *"what should
I know before Core MPLS?"* with courses from your own library, in a suggested
order, each linking to its course page with your progress on it. Courses named
questions like *"I want to learn SD-WAN, where do I start?"*, *"what should I
know before Core MPLS?"* or *"what topics does Core MPLS cover?"* with courses
from your own library, in a suggested order, each linking to its course page
with your progress on it. Courses named
in the answer itself are links too. When something you need is not on the
server but is in the seeded catalogue, it says so and links to the vendor's
page; topics covered nowhere are listed too.
@@ -340,15 +341,24 @@ user can also hide the button for their browser from Settings.
What leaves the server when it is on: the name, category, difficulty, vendor
and size of every course, a short blurb, tags and learning paths for the
handful judged relevant to the question, the catalogue titles of courses you
have access to but have not downloaded, your progress percentage per course,
and the conversation you type. Never video files, section or lesson names,
subtitles, or quiz contents.
handful judged relevant to the question, the section and video **titles** of
the few courses that question is actually about, the catalogue titles of
courses you have access to but have not downloaded, your progress percentage
per course, and the conversation you type. Never video files, subtitles, or
quiz contents.
How it works: every course goes out as a one-line index, which is the same
bytes for every user and every question, so the provider's prefix cache covers
it and a question costs a fraction of a cent; only the courses that match the
question are described in any depth. The model replies in JSON; the server
question are described in any depth. Depth comes in two tiers: about 25 courses
get their learning paths, tags and blurb, and of those the half-dozen the
question actually names or points at also get every video title, grouped by
section — which is what lets it answer what a course covers without sending the
whole library's 3,000-odd titles every time. The question's own words are
matched against those titles as well, so a course is found by what its videos
teach and not only by what its blurb says. Being part-way through a course puts
it in the first tier but not the second: that is a reason to describe a course,
not a question about what is in it. The model replies in JSON; the server
drops any course id it made up before the browser sees it, and links are built
only from ids that exist. That applies to the prose as well — an id the model
writes inline as `#412` is resolved against the same check and becomes a link