bindings/node/src/tasks/models.rs (67 lines of code) (raw):

extern crate tokenizers as tk; use crate::models::Model; use napi::bindgen_prelude::*; use std::sync::{Arc, RwLock}; use tokenizers::models::bpe::{BpeBuilder, BPE}; use tokenizers::models::wordlevel::{WordLevel, WordLevelBuilder}; use tokenizers::models::wordpiece::{WordPiece, WordPieceBuilder}; pub struct BPEFromFilesTask { pub(crate) builder: Option<BpeBuilder>, } impl Task for BPEFromFilesTask { type Output = BPE; type JsValue = Model; fn compute(&mut self) -> Result<Self::Output> { self .builder .take() .ok_or(Error::from_reason("Empty builder".to_string()))? .build() .map_err(|e| Error::from_reason(format!("{}", e))) } fn resolve(&mut self, _env: Env, output: Self::Output) -> Result<Self::JsValue> { Ok(Model { model: Some(Arc::new(RwLock::new(output.into()))), }) } } pub struct WordPieceFromFilesTask { pub(crate) builder: Option<WordPieceBuilder>, } impl Task for WordPieceFromFilesTask { type Output = WordPiece; type JsValue = Model; fn compute(&mut self) -> Result<Self::Output> { self .builder .take() .ok_or(Error::from_reason("Empty builder".to_string()))? .build() .map_err(|e| Error::from_reason(format!("{}", e))) } fn resolve(&mut self, _env: Env, output: Self::Output) -> Result<Self::JsValue> { Ok(Model { model: Some(Arc::new(RwLock::new(output.into()))), }) } } pub struct WordLevelFromFilesTask { pub(crate) builder: Option<WordLevelBuilder>, } impl Task for WordLevelFromFilesTask { type Output = WordLevel; type JsValue = Model; fn compute(&mut self) -> Result<Self::Output> { self .builder .take() .ok_or(Error::from_reason("Empty builder".to_string()))? .build() .map_err(|e| Error::from_reason(format!("{}", e))) } fn resolve(&mut self, _env: Env, output: Self::Output) -> Result<Self::JsValue> { Ok(Model { model: Some(Arc::new(RwLock::new(output.into()))), }) } }