Files
classroomio/packages/ai-assistant/src/prompt/index.ts
T

45 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-04-27 11:40:38 +01:00
import { AgentRole, type AgentContext } from '../types';
import { buildTeacherSystemPrompt, buildTeacherContextMessage } from './teacher';
import { buildStudentSystemPrompt, buildStudentContextMessage } from './student';
import type { CourseTemplate } from '../templates';
import type { AiTutorSettings } from '../tutor-config';
2026-04-27 11:40:38 +01:00
/**
* Builds a role-aware system prompt for the AI assistant. The output is stable
* across requests (no per-request context) so it can be cached as a long-lived
* Anthropic prompt-cache prefix. Per-request volatile context belongs in
* `buildContextMessage` and is sent as a user-turn message.
2026-04-27 11:40:38 +01:00
*/
export function buildSystemPrompt(context: AgentContext, options?: { tutorSettings?: AiTutorSettings }): string {
2026-04-27 11:40:38 +01:00
switch (context.role) {
case AgentRole.TEACHER:
return buildTeacherSystemPrompt(context);
case AgentRole.STUDENT:
return buildStudentSystemPrompt(context, options?.tutorSettings);
2026-04-27 11:40:38 +01:00
default:
return buildTeacherSystemPrompt(context);
}
}
/**
* Builds the volatile per-request context (current course/lesson/exercise,
* uploaded documents, section count, active template flow, latest approved
* plan). Send this as a user-turn message at the front of `messages` so the
* stable system + tools prefix stays cacheable across navigation and section
* mutations.
*/
export function buildContextMessage(
context: AgentContext,
options?: { template?: CourseTemplate; approvedPlan?: unknown }
): string {
switch (context.role) {
case AgentRole.STUDENT:
return buildStudentContextMessage(context);
case AgentRole.TEACHER:
default:
return buildTeacherContextMessage(context, options);
}
}
export { buildTeacherSystemPrompt, buildStudentSystemPrompt, buildTeacherContextMessage, buildStudentContextMessage };