Download src/components/study-chat/constants.ts from asnannp/DocDoeAI: direct link, hf CLI and curl.
- Browser
- Download file 6.64 kB
-
https://huggingface.co/spaces/asnannp/DocDoeAI/resolve/main/src/components/study-chat/constants.ts
- Command line
-
hf download hf://spaces/asnannp/DocDoeAI/src/components/study-chat/constants.ts
-
curl -L -o constants.ts https://huggingface.co/spaces/asnannp/DocDoeAI/resolve/main/src/components/study-chat/constants.ts
6.64 kB
| import type { ElementType } from "react"; | |
| import { | |
| BookOpen, | |
| ClipboardList, | |
| FileQuestion, | |
| FileText, | |
| Folder, | |
| GraduationCap, | |
| Layers3, | |
| Link as LinkIcon, | |
| Mic, | |
| Moon, | |
| Upload, | |
| Video, | |
| } from "lucide-react"; | |
| import type { StudyIntent } from "@/lib/study-intents"; | |
| import type { UploadMenuAction } from "./types"; | |
| export type PrimaryStudyAction = { | |
| label: string; | |
| intent: StudyIntent; | |
| prompt: string; | |
| icon: ElementType; | |
| }; | |
| export type UploadMenuItem = { | |
| label: string; | |
| description: string; | |
| icon: ElementType; | |
| action: UploadMenuAction; | |
| enabled: boolean; | |
| }; | |
| export const primaryChips: PrimaryStudyAction[] = [ | |
| { | |
| label: "Teach chapter", | |
| intent: "teach_topic", | |
| prompt: | |
| "Teach the most important chapter from {context}. Start from basics, then give scoring keywords, examples, common mistakes, and one practice question.", | |
| icon: BookOpen, | |
| }, | |
| { | |
| label: "Analyze uploaded PYQ", | |
| intent: "analyze_pyq", | |
| prompt: | |
| "Analyze repeated questions and paper signals from {context}. Base every pattern only on the papers I have uploaded, and if there is not enough evidence yet, say exactly what is missing.", | |
| icon: GraduationCap, | |
| }, | |
| { | |
| label: "Make quiz", | |
| intent: "generate_quiz", | |
| prompt: | |
| "Make an exam-focused quiz from {context}. Include answers, traps, and what each question helps me score.", | |
| icon: FileQuestion, | |
| }, | |
| { | |
| label: "Flashcards", | |
| intent: "generate_flashcards", | |
| prompt: | |
| "Make high-yield flashcards from {context}. Focus on definitions, formulas, diagrams, and common mistakes.", | |
| icon: Layers3, | |
| }, | |
| { | |
| label: "Study video", | |
| intent: "create_video_plan", | |
| prompt: | |
| "Create a 10-minute exam-focused study video plan from {context}. Break it into scenes, narration, on-screen text, and revision keywords.", | |
| icon: Video, | |
| }, | |
| { | |
| label: "Last night revision", | |
| intent: "create_revision_plan", | |
| prompt: | |
| "I have one night left. Make a last-night revision plan for {context}. Tell me what to study, skim, skip, and self-test. If the topic is missing, ask me one friendly question first.", | |
| icon: Moon, | |
| }, | |
| { | |
| label: "Study plan", | |
| intent: "continue_learning", | |
| prompt: | |
| "Build my study plan for {context}. Rank what scores, what to do first, weak areas, quick wins, and the next best action. If I did not give a topic yet, ask the smallest useful question.", | |
| icon: ClipboardList, | |
| }, | |
| ]; | |
| export const loadingMessages: Partial<Record<StudyIntent, string>> = { | |
| teach_topic: "Retrieving concepts and shaping an exam-focused explanation...", | |
| explain_source: "Searching your source and building a grounded answer...", | |
| generate_notes: "Extracting scoring points, traps, and revision hooks from your material...", | |
| generate_quiz: "Building practice questions with traps and mark-wise explanations...", | |
| generate_flashcards: "Creating active-recall cards with memory hooks...", | |
| generate_exam_answer: "Structuring mark-wise board answers and underline keywords...", | |
| create_revision_plan: "Ranking what to study, skim, and self-test before the exam...", | |
| create_video_plan: "Planning scenes, narration beats, and revision moments...", | |
| render_video: "Preparing a render-ready lesson plan from your material...", | |
| continue_learning: "Building a study path ranked by scoring impact...", | |
| analyze_pyq: "Fetching verified previous-year papers and pattern signals...", | |
| summarize_source: "Summarizing retrieved chunks from your selected source...", | |
| }; | |
| /** | |
| * Ordered "thinking" beats per intent — shown one at a time while the answer | |
| * is generating, so the wait reads like real work (StudyFetch's staged | |
| * loader) instead of one frozen spinner line. The last beat lingers until the | |
| * response actually lands. Falls back to loadingMessages for any intent not | |
| * listed here. | |
| */ | |
| export const loadingStages: Partial<Record<StudyIntent, string[]>> = { | |
| teach_topic: ["Reading your topic", "Pulling the core concepts", "Structuring the lesson", "Writing clear examples"], | |
| explain_source: ["Opening your source", "Finding the relevant passages", "Grounding the answer", "Writing it plainly"], | |
| generate_notes: ["Reading the material", "Extracting scoring points", "Marking traps and keywords", "Laying out the notes"], | |
| generate_quiz: ["Reading the topic", "Choosing what to test", "Writing questions and traps", "Adding mark-wise answers"], | |
| generate_flashcards: ["Reading the topic", "Picking the key ideas", "Writing fronts and backs", "Adding memory hooks"], | |
| generate_exam_answer: ["Reading the question", "Planning the mark scheme", "Writing the board answer", "Underlining keywords"], | |
| create_revision_plan: ["Checking time left", "Ranking by scoring impact", "Sequencing study and skim", "Adding self-test checkpoints"], | |
| create_video_plan: ["Reading the topic", "Blocking out scenes", "Writing narration beats", "Placing revision moments"], | |
| render_video: ["Reading your material", "Planning the lesson", "Preparing the render", "Finalizing scenes"], | |
| continue_learning: ["Reading your context", "Ranking by scoring impact", "Choosing the next move", "Writing the path"], | |
| analyze_pyq: ["Fetching verified papers", "Scanning for patterns", "Weighing repeated topics", "Summarizing honest signals"], | |
| summarize_source: ["Opening your source", "Reading the chunks", "Distilling the core", "Writing the summary"], | |
| predict_questions: ["Reading available papers", "Weighing question styles", "Avoiding false certainty", "Writing likely patterns"], | |
| show_formulas: ["Reading the chapter", "Collecting the formulas", "Noting when to use each", "Laying them out"], | |
| simplify_answer: ["Reading what's confusing", "Finding a simpler angle", "Rewriting in plain words"], | |
| }; | |
| export const uploadMenuItems: UploadMenuItem[] = [ | |
| { label: "Upload material", description: "Selectable-text PDF or TXT", icon: Upload, action: "material", enabled: true }, | |
| { label: "Question paper", description: "Selectable-text PDF for the PYQ pipeline", icon: FileQuestion, action: "paper", enabled: true }, | |
| { label: "Syllabus", description: "Paste syllabus text", icon: BookOpen, action: "syllabus", enabled: true }, | |
| { label: "Paste link", description: "Save a link source", icon: LinkIcon, action: "link", enabled: true }, | |
| { label: "Add text", description: "Paste syllabus or notes", icon: FileText, action: "text", enabled: true }, | |
| { label: "Record audio", description: "Coming soon", icon: Mic, action: "audio", enabled: false }, | |
| { label: "Import document", description: "Coming soon", icon: Folder, action: "import", enabled: false }, | |
| ]; | |