use std::string::String;
use std::vec::Vec;
pub use std::borrow;
pub mod model;
pub mod pipeline;
pub mod tensor;
pub mod tokenizer;
pub mod utils;
pub use tensor::WasmTensor;
pub use model::{ModelArchitecture, ModelConfig, ModelFormat, QuantizedModel, WasmModel};
pub use pipeline::{
GenerationConfig, PipelineType, QuestionAnsweringPipeline, TextClassificationPipeline,
TextGenerationPipeline,
};
pub use tokenizer::{SpecialTokens, TokenizerType, WasmTokenizer};
pub use utils::*;
pub fn initialize() -> Result<(), CoreError> {
web_sys::console::log_1(&"Initializing TrustformeRS WASM core module".into());
let _test_tensor = tensor::WasmTensor::zeros(vec![2, 2]);
let _test_config = model::ModelConfig::bert_base();
let _test_tokenizer = tokenizer::WasmTokenizer::new(tokenizer::TokenizerType::WordPiece);
web_sys::console::log_1(&"TrustformeRS WASM core module initialized successfully".into());
Ok(())
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CoreError {
TensorError(String),
ModelError(String),
PipelineError(String),
TokenizerError(String),
InitializationError(String),
}
impl core::fmt::Display for CoreError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
CoreError::TensorError(msg) => write!(f, "Tensor error: {}", msg),
CoreError::ModelError(msg) => write!(f, "Model error: {}", msg),
CoreError::PipelineError(msg) => write!(f, "Pipeline error: {}", msg),
CoreError::TokenizerError(msg) => write!(f, "Tokenizer error: {}", msg),
CoreError::InitializationError(msg) => {
write!(f, "Initialization error: {}", msg)
},
}
}
}
#[derive(Debug, Clone)]
pub struct CoreConfig {
pub enable_gpu: bool,
pub enable_simd: bool,
pub memory_limit_mb: Option<u32>,
pub debug_mode: bool,
}
impl Default for CoreConfig {
fn default() -> Self {
Self {
enable_gpu: true,
enable_simd: true,
memory_limit_mb: None,
debug_mode: false,
}
}
}
#[derive(Debug, Clone)]
pub struct CoreCapabilities {
pub has_webgl: bool,
pub has_webgpu: bool,
pub has_simd: bool,
pub has_threads: bool,
pub memory_mb: u32,
pub supported_tensor_types: Vec<String>,
}
impl CoreCapabilities {
pub fn detect() -> Self {
Self {
has_webgl: utils::has_webgl(),
has_webgpu: utils::has_webgpu(),
has_simd: utils::has_simd(),
has_threads: utils::has_threads(),
memory_mb: utils::get_memory_mb() as u32,
supported_tensor_types: tensor::get_supported_types(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_core_config_default() {
let config = CoreConfig::default();
assert!(config.enable_gpu);
assert!(config.enable_simd);
assert!(config.memory_limit_mb.is_none());
assert!(!config.debug_mode);
}
#[test]
#[cfg(target_arch = "wasm32")]
fn test_core_capabilities_detect() {
let capabilities = CoreCapabilities::detect();
assert!(capabilities.memory_mb > 0);
assert!(!capabilities.supported_tensor_types.is_empty());
assert!(capabilities.supported_tensor_types.contains(&"f32".to_string()));
}
#[test]
#[cfg(not(target_arch = "wasm32"))]
fn test_core_config_validation() {
let config = CoreConfig::default();
assert!(config.enable_gpu == config.enable_gpu); assert!(config.enable_simd == config.enable_simd); }
}