How it works
One app, nine colleges.
What you're using is one application that quietly serves nine different colleges. Each LACCD campus — Mission, City, East LA, Harbor, Pierce, Southwest, Trade-Tech, Valley, West — has its own branded chatbot, its own voice line, and its own catalog of answers. But under the hood, it's a single backend that figures out which campus you're on from the URL and tailors everything from there.
Three doorways
Students reach the assistant three ways. All three call into the same backend services, so the answers stay consistent whether you type or talk.
Web chat
The chat panel on the campus website.
Live voice agent
Click the mic and talk to the assistant in real time.
Phone
One shared number, IVR menu routes to the right campus.
Where the data comes from
Behind the chat are five data sources, each chosen for what it's actually good at.
-
1
Verified academic data Maintained
More than 20,000 course records across all nine colleges, including prerequisites, corequisites, advisories, GE placement, UC and CSU transferability, course renumberings, programs, and instructors. The records are maintained from official district and statewide sources.
-
2
ASSIST.org API Live
For any "does this transfer to UCLA?" question, we hit ASSIST directly so the answer reflects the current articulation agreement, not a stale snapshot.
-
3
LACCD class schedule API Live
When a student asks "what sections are open this term?" or "is there a zero-textbook-cost option?" we pull current sections in real time.
-
4
Program Mapper & eLumen Live
Degree and certificate requirements, and the official course-of-record catalog.
-
5
Gemini File Search Indexed
A per-campus retrieval store holding the crawled campus website plus the catalog as markdown. Catches everything the structured sources don't — "where's the financial aid office," "what are the library hours."
Beyond a retrieval-only chatbot
Traditional chatbots often use retrieval-augmented generation (RAG): they search a collection of documents, retrieve a few relevant passages, and ask a language model to summarize them. That is useful for questions such as "what time does the library open?" when the answer appears clearly on one page.
Retrieval alone is less reliable when an answer depends on several separate records, an old and new course number, a live schedule, or a chain of prerequisites. This assistant combines RAG with verified academic facts, deterministic planning rules, and live college services, so it can answer questions that cross those boundaries without relying on the model to infer the missing pieces.
STAT C1000 satisfies IGETC Area 2A
MATH 227 current code STAT C1000 (~2,700 renumberings)
MATH 261 transfers to UC, CSU
Computer Science AS includes MATH 261, CS 101, …
The language model explains the answer, but verified records and live sources supply the academic facts.
Where retrieval-only chatbots fall short
Typical RAG chatbot
"What's the prereq chain to Calculus II?" → retrieves the Calculus II catalog page and usually stops at the immediate prerequisite.
This assistant
Traces the complete verified sequence: Calculus II → Calculus I → Trigonometry → Algebra → Pre-Algebra.
Typical RAG chatbot
"Which IGETC Area 2A courses are offered this spring at Mission?" → no single document contains both the GE designation and current section availability.
This assistant
Combines verified GE eligibility with the live schedule and campus filter to return the actual offered sections.
Typical RAG chatbot
"Is MATH 227 transferable?" → the catalog still lists it under the old code. The renumbered version (STAT C1000) is in a different document. They don't share keywords; RAG sees them as unrelated.
This assistant
Resolves the historical course number to its current code before checking transferability, so either version can produce the right result.
Typical RAG chatbot
"Is BIOLOGY C100 UC-transferable?" → retrieves nearby text and asks the model to infer whether it applies to that exact course.
This assistant
Checks the course's verified transfer status directly and uses the model only to explain the result.
How verified academic intelligence improves every source
The assistant does more than retrieve text. It coordinates specialized academic sources so each one contributes what it is best suited to answer:
- ASSIST.org articulation If a student asks about MATH 227 but the current agreement lists STAT C1000, the assistant resolves the historical code before checking the live agreement.
- Live class schedule Current sections can be presented with verified GE, transferability, and prerequisite details instead of only a time and room.
- Program Mapper & eLumen A degree's required-course list becomes a usable plan that accounts for availability, transfer status, and prerequisite order.
- Gemini File Search (RAG) When a retrieved campus page mentions a course, the assistant can cross-check the current code, transfer status, and GE placement before answering.
- Course sequencing The pace-track planner uses verified prerequisites and unit limits to build term-by-term sequences without violating course dependencies.
In short: RAG is strong at finding and summarizing a relevant passage. This assistant can also reconcile course changes, check authoritative records, combine live and verified data, and follow academic dependencies. That is why a question like "I took MATH 227 last year — does that count toward my UCLA transfer for psychology?" can be handled as one connected academic question instead of several disconnected searches.
What's AI, what's deterministic, and how we prevent hallucinations
AI shows up in exactly two places, both at the edges of the system. Everything load-bearing — the facts, the routing, the resolution, the citations — is deterministic code reading from authoritative sources. That separation is the design, and it's what makes the answers trustworthy.
Deterministic (no AI)
- Intent classification — keyword patterns route the question; the model doesn't pick its own tools.
- Course code resolution — verified renumbering records map historical course codes to their current equivalents.
- Academic fact lookups — prerequisites, GE placement, and transfer status are checked against maintained records.
- Live API calls — ASSIST, class schedule, Program Mapper, eLumen return whatever the source returned.
- Course sequencing — pure algorithms apply prerequisite order and pace math to verified academic data.
- Citations — URLs and source IDs come from the handlers, never from the model.
AI (Gemini)
- Composition — takes the structured context the handlers returned and writes the final natural-language answer.
- RAG fallback — for unstructured questions ("library hours," "where's financial aid"), retrieves campus-website snippets and answers from them.
- Voice — speech-to-speech via Gemini Live, calling the same deterministic handlers as chat for facts.
Five mechanisms that keep the answers grounded
- Ground first, generate second. The deterministic handlers run before Gemini sees the question. The model writes prose over already-correct facts — it isn't asked to recall from training data. When a handler returns nothing, the prompt says so explicitly and the model is instructed to admit it doesn't know.
- Verified academic facts check RAG results. When a website snippet mentions a course code, the orchestrator adds maintained facts about that course (current name, transferability, GE area) to the prompt as authoritative. A stale catalog page that says "MATH 227" can be corrected to "STAT C1000" inline.
- Routing picks the authoritative source. ASSIST.org articulation runs before the assistant's maintained academic records on institution-specific transfer questions, because the live agreement is the authoritative source. Each question type is matched to the source best suited to answer it.
- Citations trace back to real documents. The model doesn't invent URLs. Every cited link came from a handler that retrieved a real document or source record. If you click a citation, it goes to the actual source the system used.
- Failure mode is "I don't know," not improvisation. The system prompt and the handler-empty path both push the model toward declining gracefully. Transient model errors trigger a clarifying question instead of a guess. There's also an OpenRouter tier-2 model as a budget fallback — same prompting, same grounding, just a different generator.
The honest edges
A few places where hallucination risk isn't fully eliminated, because no system can promise zero:
- The RAG fallback is still RAG. If a campus website is stale, the answer to a website-only question can be stale.
- Long compositions can drift on edge details when summarizing many items at once.
- Out-of-scope questions ("should I major in nursing?") are advice, not retrieval — grounding can't apply because there's nothing to ground in.
How a question flows through the system
When a question comes in, an orchestrator reads it, classifies the intent, and routes to the right service. The service returns structured context. Gemini composes the answer, cites the source, and hands it back.
- Entry layer. Web panel, voice agent, and phone IVR all hand off to the same backend. Voice runs in a separate process but calls the same services as chat — a question answered by typing matches the same question answered by speaking.
- Campus resolution. The URL the student arrived on (e.g.
lattc-chat.johnnyrobot.ai) maps to a campus config object that carries colors, sample questions, system prompt, retrieval store, voice agent, and phone number. Everything downstream reads from that single object. - Intent classification. The orchestrator scans the question for transfer, prereq, schedule, program, articulation, sequence, instructor, and general-info patterns — then picks one or more handlers.
- Specialized handlers. Each of the five data sources has its own service. They return structured context (course rows, articulation tables, live section listings, retrieval snippets) rather than free text.
- Composition. Gemini takes the structured context plus the campus's system prompt and writes the final answer with inline citations.
- Fallback. If the day's Gemini budget is exhausted, an OpenRouter tier-2 model takes over so the chat stays up.
How the data stays current
Structured academic records and campus documents follow separate update paths. This keeps exact course facts deterministic while allowing broad campus information to remain searchable.
- ASSIST.org extracts — official articulation data refreshed on the cadence ASSIST publishes.
- Catalog PDFs — each campus's annual catalog, parsed and checked against maintained academic records.
- eLumen scrape — official course-of-record details: units, descriptions, hours.
- CCN renumbering map — California's statewide course renumbering, so a question about an old course number resolves to the new one.
- Website crawls + catalog markdown — feed the per-campus retrieval store; this is what answers everything that isn't in the structured sources.
The live APIs — ASSIST, LACCD class schedule, Program Mapper, eLumen — are queried on demand at chat time, never cached past their freshness window, so transfer agreements and section availability always reflect the current state.
Nine schools, one codebase.
Answers grounded in live institutional data instead of guesswork.
Try the LATTC assistant →