Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | /** * Worksheet Parsing Module * * Provides LLM-powered parsing of abacus workbook page images. * Extracts arithmetic problems and student answers, then converts * them into practice session data. * * @example * ```typescript * import { * parseWorksheetImage, * convertToSlotResults, * type WorksheetParsingResult, * } from '@/lib/worksheet-parsing' * * // Parse the worksheet image * const result = await parseWorksheetImage(imageDataUrl, { * onProgress: (p) => setProgress(p.message), * }) * * // Review and correct if needed * if (result.data.needsReview) { * // Show review UI * } * * // Convert to session data * const { slotResults, summary } = convertToSlotResults(result.data) * * // Create session * await createSession({ playerId, slotResults, status: 'completed' }) * ``` */ // Schemas export { BoundingBoxSchema, ProblemFormatSchema, ProblemTermSchema, ParsedProblemSchema, PageMetadataSchema, WorksheetParsingResultSchema, ProblemCorrectionSchema, ReparseRequestSchema, ReviewProgressSchema, createInitialReviewProgress, type BoundingBox, type ProblemFormat, type ParsedProblem, type PageMetadata, type WorksheetParsingResult, type ProblemCorrection, type ReparseRequest, type ReviewProgress, } from './schemas' // Parser export { parseWorksheetImage, streamParseWorksheetImage, reparseProblems, computeParsingStats, applyCorrections, // Model configurations PARSING_MODEL_CONFIGS, getDefaultModelConfig, getModelConfig, type ModelConfig, type ParseWorksheetOptions, type ParseWorksheetResult, type StreamParseWorksheetOptions, type WorksheetParseStreamEvent, } from './parser' // Prompt Builder export { buildWorksheetParsingPrompt, buildReparsePrompt, type PromptOptions, } from './prompt-builder' // Session Converter export { convertToSlotResults, validateParsedProblems, computeSkillStats, type ConversionOptions, type ConversionResult, } from './session-converter' // Crop Utilities export { CROP_PADDING, calculateCropRegion, cropImageWithCanvas, type NormalizedBoundingBox, type CropRegion, } from './crop-utils' // State Machine (for context provider) export { parsingReducer, initialParsingState, isParsingAttachment, isAnyParsingActive, getStreamingStatus, type ParsingContextState, type ParsingAction, type ParsingStats, type CompletedProblem, type StreamType, type StreamingStatus, type StreamingState, } from './state-machine' // SSE Parser (shared streaming utility) export { parseSSEStream, extractCompletedProblemsFromPartialJson, type SSECallbacks, } from './sse-parser' |