educationai
Paquete Swift para apps de estudio: repetición espaciada FSRS-6, cola de estudio, comparación de respuestas escritas y cuestionarios.
Licencia: MIT
Resumen
- Lógica de aprendizaje para apps de flashcards: repetición espaciada FSRS-6, cola de estudio, calificación de respuestas escritas y cuestionarios.
- Los tests reproducen 2.400 repasos de py-fsrs 6.3.2 en ocho configuraciones y comparan los resultados tras cada repaso.
- SM2Scheduler mantiene operativos los datos SM-2 y convierte tarjetas SM-2 a FSRS conservando la fecha de vencimiento de cada tarjeta.
- Se ejecuta en el dispositivo solo con Foundation, está pensado para Swift 6 strict concurrency y no contiene ninguna red neuronal.
- 124 tests en 11 suites pasaron en la etiqueta v2.0.0 con Swift 6.4 en macOS 27.0.1.
EducationAI contiene la lógica de aprendizaje de una app de flashcards o de estudio. FSRSScheduler decide cuándo vuelve cada tarjeta con FSRS-6, el modelo de memoria detrás del planificador FSRS de Anki, y sus tests comparan 2.400 repeticiones con la implementación de referencia, py-fsrs 6.3.2. SM2Scheduler mantiene en funcionamiento los datos SM-2 y los convierte a FSRS. Alrededor del planificador hay una cola de estudio, la calificación de respuestas escritas con tolerancia a erratas, cuestionarios, un ajustador de dificultad, una previsión de carga de trabajo, estadísticas de repaso y rachas de estudio. Se ejecuta en el dispositivo, usa solo Foundation y está escrito para Swift 6 strict concurrency. No contiene ninguna red neuronal: FSRS es un modelo estadístico de la memoria.
Características
- FSRS-6 verificado contra la referencia: los tests reproducen 2.400 repeticiones calculadas por py-fsrs 6.3.2 en ocho configuraciones y comparan estabilidad, dificultad, fecha de vencimiento y recuperabilidad tras cada repetición
- Pasos de aprendizaje y reaprendizaje, retención deseada, intervalo máximo, fuzz de intervalos y pesos personalizados (21 de FSRS-6 o 19 de FSRS-5); una vista previa de las cuatro valoraciones para los botones de respuesta
- SM-2 tal como se publicó y una conversión de tarjetas SM-2 a FSRS que conserva la fecha de vencimiento de cada tarjeta
- Calificación de respuestas escritas que ignora mayúsculas, acentos, ancho de carácter y puntuación sin depender del idioma del dispositivo, perdona erratas según la longitud de la respuesta y hace un trabajo acotado ante entradas hostiles
- Cuestionarios de opción múltiple y de respuesta escrita generados a partir de tarjetas; cada resultado sugiere una valoración para el planificador, y un cuestionario guardado se vuelve a calificar al cargarlo
- Una cola de estudio con límites diarios, una previsión por día, estadísticas de retención, rachas contadas en los días naturales del estudiante y un ajustador de dificultad que mantiene la precisión dentro de una banda objetivo
- Tipos de valor Sendable y Codable: cada función recibe la fecha con la que trabaja, la aleatoriedad procede de un generador que puede inicializar con una semilla, y los valores almacenados se comprueban antes de usarse en lugar de provocar un fallo
- Sin dependencias, solo Foundation; referencia DocC con cuatro guías y la app de ejemplo StudyDeck para iOS y macOS
Inicio rápido
1struct FlashcardsView: View {2 @State private var cards = [3 Flashcard(front: "Capital of Japan", back: "Tokyo"),4 Flashcard(front: "Capital of Kenya", back: "Nairobi"),5 Flashcard(front: "Capital of Peru", back: "Lima")6 ]7 @State private var showsAnswer = false8 private let scheduler = FSRSScheduler.default9 10 var body: some View {11 if let card = StudyQueue.cards(from: cards).first,12 let index = cards.firstIndex(where: { $0.id == card.id }) {13 VStack(spacing: 24) {14 Text(card.front).font(.title)15 if showsAnswer {16 Text(card.back).font(.title2).bold()17 HStack {18 ForEach(Rating.allCases, id: \.self) { rating in19 Button(String(describing: rating).capitalized) {20 if let outcome = try? scheduler.review(card.review, rating: rating) {21 cards[index].review = outcome.state22 }23 showsAnswer = false24 }25 .buttonStyle(.bordered)26 }27 }28 } else {29 Button("Show Answer") { showsAnswer = true }30 .buttonStyle(.borderedProminent)31 }32 }33 .padding()34 } else {35 Text("All done for now")36 }37 }38}Instalación
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/educationai.gitSwift Package Manager (Package.swift)
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/educationai.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "EducationAI", package: "educationai")7 ])8]Capturas de pantalla




Cronología
Repositorio abierto; 1.0.0 etiquetada el 7 de agosto: una clase EducationAI con modelos de aprendizaje, dependiente de Alamofire, RxSwift, SnapKit y SDWebImage
Reescrito sin dependencias como planificador SM-2 y motores de cuestionarios, progreso, recomendaciones y gamificación
Se añadieron una dependencia a una carpeta local (../SwiftAI) y tipos de relleno «neural tutor» y «enterprise»; el paquete dejó de resolverse para cualquier otra persona
2.0.0: reconstruido en torno a un planificador FSRS-6 que coincide con py-fsrs 6.3.2; se eliminaron el código de junio y todos los tipos de 1.x