All files / web/src/lib/worksheet-parsing index.ts

0% Statements 0/120
0% Branches 0/1
0% Functions 0/1
0% Lines 0/120

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'