SMILE (Statistical Machine Intelligence & Learning Engine) is a comprehensive, high-performance machine learning and AI platform for the JVM. Built on Java 25 with idiomatic APIs for Kotlin and Scala (v4.x supports Java 21; earlier versions support Java 8), SMILE covers the entire lifecycle of machine intelligence: building models with agentic AutoML, embedding algorithms directly in your application, and serving classical ML, ONNX graphs, and LLMs on your own machines.
A decision should not require a cloud round-trip or a fragile bridge to an external Python stack. The score, the explanation, and the model update belong on the machine that already holds the facts: inside a JVM microservice, a branch server, a payment terminal, a vehicle gateway, or an air-gapped node. SMILE makes real-time, autonomous machine intelligence native to the systems enterprises already run, from resource-constrained edge gateways to multi-GPU clusters.
- Sovereign & Self-Hosted by Default: Your data, models, API keys, and telemetry stay on your machines and your network. Everything is built to run locally and keep working when the external link is down.
- Zero-Bloat Craftsmanship: The core engine is pure, self-contained JVM bytecode built on compact, cache-friendly data structures. You get deterministic low latency and a tiny memory footprint by default, with optional plug-and-play native acceleration (OpenBLAS/LAPACK, ONNX Runtime, LibTorch/CUDA) when hardware is available.
- Explainable & Auditable in Place: High-stakes decisions cannot be black boxes. SMILE provides both exact TreeSHAP for tree ensembles and model-agnostic KernelSHAP for any classifier or regressor, computing local feature attributions in-process alongside predictions, while AutoML workflows generate readable Java, Scala, Kotlin, or Python notebooks you can inspect line by line.
- Open Source with Enterprise Backing: Open-source licensing supports academic research and community collaboration, while commercial licensing from HALO.AI removes copyleft and source-disclosure obligations for proprietary, embedded, and mission-critical production deployments.
- Comprehensive Breadth in One Engine: Hundreds of algorithms spanning classification, regression, clustering, manifold learning, time series, anomaly detection, NLP, statistical testing, linear algebra, deep learning, computer vision, and native LLM inference (
MiniMax M3,Qwen,Llama, tiktoken, Radix KV cache, MTP speculative decoding). - State-of-the-Art Speed & Footprint: Engineered with primitive-backed memory layouts, Panama FFM, and the Java Vector API (SIMD), SMILE routinely outperforms R, Python, Spark, and H2O while scaling down to a 0.2 GB GraalVM native micro-container that boots in 0.4 s and idles at ~80 MiB RAM.
- On-Device Training & Adaptation: Unlike static inference-only runtimes, SMILE trains and updates models (Random Forests, Gradient Boosting, K-Means, DBSCAN, anomaly detectors) directly on live edge or application data.
- Built for Agentic & Production Workloads: Continuous batching, prefix-preserving Radix KV caches, and speculative decoding that retains its speedup under full batch load, paired with atomic model hot-swapping, Kubernetes health probes, and Prometheus metrics.
Call classification, regression, clustering, deep learning, NLP, and visualization directly in-process from Java, Scala, or Kotlin with no separate service to operate.
A production-ready, Quarkus-based inference server (available as JVM, CUDA GPU, and GraalVM native containers) that brings together three complementary inference capabilities in a single process:
| Capability | API prefix | Description |
|---|---|---|
| Classic ML | /api/v1/smile |
Serialized SMILE models (.sml) — classification, regression, clustering (ClusteringModel), vector quantization (VectorQuantizerModel), and anomaly detection (AnomalyModel), with local SHAP explanations (TreeSHAP & KernelSHAP) |
| ONNX Runtime | /api/v1/onnx |
Any model in the ONNX open format (.onnx) |
| LLM Chat | /api/v1/chat |
OpenAI-compatible chat completions, tool calling, and SSE streaming |
| Models | /api/v1/models |
OpenAI-compatible list and retrieve for every loaded model — chat, ONNX, and SMILE |
| Metrics | /q/metrics |
Prometheus scrape for classic, ONNX, and LLM models |
A React-based web UI is bundled and served from the same process. See serve/README.md for how to build and run the service.
A local-first desktop workspace that unites a coordinated team of 9 specialized AI agents (spanning executive chief-of-staff, product management, developer evangelism, B2B sales, data science, software architecture, Java/Python engineering, and desktop GUI automation), the always-on Agent Hub (smile hub) for scheduled and event-driven background bots with human-in-the-loop approval queues, and a polyglot IDE with interactive notebooks (Java, Scala, Kotlin, and Python/Jupyter) and code/data explorers. Studio is fully extensible: drop custom agent specs (AGENT.md), skills, MCP servers, or plugins into your workspace to add domain-specific specialists and routines with zero code changes.
See studio/README.md and studio/BOT.md to get your workspace and bots running in minutes.
- Features
- Module Map
- Installation
- Quick Start
- SMILE Studio & Shell
- Model Serialization
- Visualization
- License
- Issues & Discussions
- Contributing
- Maintainers
- Gallery
| Area | Highlights |
|---|---|
| LLM | LLaMA-3 inference, tiktoken BPE tokenizer, OpenAI-compatible REST server, SSE chat streaming |
| Deep Learning | LibTorch/GPU backend, EfficientNet-V2 image classification, custom layer API |
| Classification | SVM, Decision Trees, Random Forest, AdaBoost, Gradient Boosting, Logistic Regression, Neural Networks, RBF Networks, MaxEnt, KNN, Naïve Bayes, LDA/QDA/RDA |
| Regression | SVR, Gaussian Process, Regression Trees, GBDT, Random Forest, RBF, OLS, LASSO, ElasticNet, Ridge |
| Clustering | BIRCH, CLARANS, DBSCAN, DENCLUE, Deterministic Annealing, K-Means, X-Means, G-Means, Neural Gas, Growing Neural Gas, Hierarchical, SIB, SOM, Spectral, Min-Entropy |
| Manifold Learning | IsoMap, LLE, Laplacian Eigenmap, t-SNE, UMAP, PCA, Kernel PCA, Probabilistic PCA, GHA, Random Projection, ICA |
| Feature Engineering | Genetic Algorithm selection, Ensemble selection, TreeSHAP, KernelSHAP, SNR, Sum-Squares ratio, data transformations, formula API |
| NLP | Sentence / word tokenization, Bigram test, Phrase & Keyword extraction, Stemmer, POS tagging, Relevance ranking |
| Association Rules | FP-growth frequent itemset mining |
| Sequence Learning | Hidden Markov Model, Conditional Random Field |
| Nearest Neighbor | BK-Tree, Cover Tree, KD-Tree, SimHash, LSH |
| Numerical Methods | Linear algebra, numerical optimization (BFGS, L-BFGS), interpolation, wavelets, RBF, distributions, hypothesis tests |
| Visualization | Swing plots (scatter, line, bar, box, histogram, surface, heatmap, contour, …) and declarative Vega-Lite charts |
Each module has its own detailed user guide. Click the README link for the module overview, or drill into individual topic guides.
Data structures, math, linear algebra, statistical utilities, I/O
| Document | Topics |
|---|---|
| README | Module overview and dependency setup |
| DATA_FRAME.md | DataFrame API — creation, selection, transformation |
| DATA_IO.md | CSV, JSON, Parquet, Arrow, JDBC, Avro readers/writers |
| DATA_TRANSFORMATION.md | Scalers, encoders, imputers, feature transforms |
| DATASET.md | Built-in benchmark and real-world datasets |
| FORMULA.md | R-style formula language for model matrices |
| DISTRIBUTIONS.md | Probability distributions (Normal, Poisson, Beta, …) |
| HYPOTHESIS_TESTING.md | t-test, chi-squared, ANOVA, KS-test, … |
| DISTANCES.md | Euclidean, Mahalanobis, Hamming, edit distance, … |
| NEAREST_NEIGHBOR.md | KD-Tree, Cover Tree, BK-Tree, LSH |
| KERNELS.md | Gaussian, polynomial, Laplacian, and other kernel functions |
| RBF.md | Radial basis function networks |
| INTERPOLATION.md | Linear, cubic spline, bilinear, bicubic |
| GRAPH.md | Adjacency list/matrix graph, BFS/DFS, spanning trees |
| SORT.md | Quick sort, heap sort, counting sort, index sort |
| HASH.md | Locality-sensitive hashing, SimHash |
| RNG.md | Random number generators, sampling, permutations |
| BFGS.md | L-BFGS and BFGS numerical optimizers |
| ICA.md | Independent Component Analysis |
| TENSOR.md | N-dimensional array (CPU tensor without LibTorch) |
| WAVELET.md | DWT, CWT, and wavelet families |
| GAP.md | GAP statistic for optimal cluster count estimation |
| COMPRESSED_SENSING.md | Compressed sensing and basis pursuit |
Classification, regression, clustering, manifold learning, and more
| Document | Topics |
|---|---|
| README | Module overview |
| CLASSIFICATION.md | SVM, Random Forest, AdaBoost, GBDT, KNN, Naïve Bayes, LDA, … |
| REGRESSION.md | SVR, Gaussian Process, LASSO, Ridge, ElasticNet, GBDT, … |
| CLUSTERING.md | K-Means, DBSCAN, BIRCH, SOM, Spectral Clustering, … |
| FEATURE_ENGINEERING.md | Feature selection, PCA, ICA, projection, encoding |
| MANIFOLD.md | t-SNE, UMAP, IsoMap, LLE, Laplacian Eigenmap |
| ANOMALY_DETECTION.md | IsolationForest, one-class SVM, local outlier factor |
| ASSOCIATION_RULE_MINING.md | FP-growth, association rules, frequent itemsets |
| SEQUENCE.md | HMM (Baum-Welch, Viterbi), CRF |
| TIME_SERIES.md | ARIMA, box-plots, autocorrelation |
| REGRESSION.md | Full regression API reference |
| TRAINING.md | Cross-validation, bootstrap, hyper-parameter search |
| VALIDATION.md | Hold-out, k-fold, leave-one-out evaluation |
| VALIDATION_METRICS.md | Accuracy, AUC, F1, RMSE, MAE, confusion matrix |
| HYPER_PARAMETER_OPTIMIZATION.md | Grid search, random search, Bayesian optimization |
| VECTOR_QUANTIZATION.md | LVQ, Neural Gas, SOM as vector quantizers |
LibTorch-backed GPU/CPU tensor operations, neural network layers, LLaMA-3 inference, EfficientNet, ONNX Runtime & GenAI
| Document | Topics |
|---|---|
| README | Core deep-learning guide (tensors, layers, loss, optimizer, model, metrics, data loading) |
| LLM.md | smile.llm — tokenizer, LLaMA-3, Qwen3.5, inference engine, KV cache, quantization, tensor parallelism |
| VISION.md | smile.vision — transforms, ImageDataset, EfficientNet-V2, ImageNet labels |
| ONNX.md | ONNX Runtime inference (smile.onnx) — sessions, tensors, execution providers |
| ONNX_GENAI.md | ONNX Runtime GenAI (smile.onnx.genai) — generate loop, chat model, multimodal |
The deep/README.md covers:
smile.deep.tensor— Tensor factory, indexing, arithmetic, AutoScope memory management, dtype/devicesmile.deep.layer— Linear, Conv2d, pooling, normalization (BN/GN/RMS), dropout, embedding, sequential blockssmile.deep.activation— ReLU, GELU, SiLU, Tanh, Sigmoid, Softmax, GLU, HardShrink, …smile.deep.Loss— MSE, cross-entropy, BCE, Huber, KL, hinge, and moresmile.deep.Optimizer— SGD, Adam, AdamW, RMSpropsmile.deep.Model— Abstract base class + training loopsmile.deep.metric— Accuracy, Precision, Recall, F1Score with macro/micro/weighted averagingsmile.deep.Dataset— Dataset interface,DataSampler,SampleBatch
The deep/LLM.md covers:
smile.llm—Message,Role,FinishReason,ChatCompletion,ChatOptions,LanguageModelsmile.llm.tokenizer—Tokenizerinterface,TiktokenBPE implementation (LLaMA-3 compatible)smile.llm.model.llama— Full LLaMA-3 stack:Llama.build(),generate(),chat(), streamingsmile.llm.model.qwen— Qwen3.5 hybrid stack (Gated DeltaNet + gated attention), MTP, vision towersmile.llm.engine— Continuous-batchingInferenceEngine,GenerationRequest/GenerationHandle, speculative decodingsmile.llm.cache— PagedKvCachePool,RadixCacheprefix reusesmile.llm.quant/smile.llm.parallel— FP8/NVFP4/Marlin quantization, tensor parallelism
The deep/VISION.md covers:
smile.vision—VisionModel,ImageDataset,EfficientNet.V2S/M/L()pretrained models, ImageNet labelssmile.vision.transform—Transforminterface,ImageClassificationpipeline, resize/crop/toTensor helpers
Text normalization, tokenization, POS tagging, stemming, relevance ranking
| Document | Topics |
|---|---|
| README | Module overview |
| TOKENIZER.md | Sentence splitter, word tokenizer, regex tokenizer |
| POS.md | Part-of-speech tagging (Brill tagger, HMM tagger) |
| STEM.md | Porter, Lancaster, Lovins stemmers; lemmatization |
| COLLOCATION.md | Bigram/trigram statistical tests, phrase extraction |
| RELEVANCE.md | TF-IDF, BM25, keyword extraction |
| TAXONOMY.md | WordNet integration, synsets, hypernyms |
Swing-based interactive plots and declarative Vega-Lite charts
| Document | Topics |
|---|---|
| README | Swing plotting API — scatter, line, bar, box, histogram, heatmap, surface, contour, wireframe |
| VEGA.md | Declarative smile.plot.vega (Vega-Lite) — JSON spec generation, web/Jupyter rendering |
Quarkus-based REST inference service with OpenAI-compatible API and SSE streaming
| Document | Topics |
|---|---|
| README | Building and running the server, /chat/completions endpoint, SSE streaming, configuration |
An agentic IDE for data science using Python or SMILE
| Document | Topics |
|---|---|
| README.md | Desktop Studio UX |
| CLI | CLI entry points (smile, smile shell, smile scala, smile serve) |
Idiomatic Scala shim — concise wrappers, symbolic operators, Scala collections integration
| Document | Topics |
|---|---|
| README | API overview, smile.classification, smile.regression, smile.clustering, smile.plot in Scala |
Idiomatic Kotlin shim — extension functions, named parameters, builder DSLs
| Document | Topics |
|---|---|
| README | API overview, extension functions, Kotlin-style builders |
| packages.md | Full package-by-package listing of all Kotlin extension functions |
Lightweight zero-dependency JSON library for Scala with a clean DSL
| Document | Topics |
|---|---|
| README | Parsing, building, pattern matching, path navigation, serialization |
Use SMILE models inside Spark ML pipelines
| Document | Topics |
|---|---|
| README | SmileTransformer, SmileClassifier, SmileRegressor; training and scoring in Spark DataFrames |
<!-- Core ML algorithms -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-core</artifactId>
<version>7.1.0</version>
</dependency>
<!-- Deep learning + LLMs (requires LibTorch) -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-deep</artifactId>
<version>7.1.0</version>
</dependency>
<!-- Natural language processing -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-nlp</artifactId>
<version>7.1.0</version>
</dependency>
<!-- Data visualization -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-plot</artifactId>
<version>7.1.0</version>
</dependency>libraryDependencies += "com.github.haifengl" %% "smile-scala" % "7.1.0"dependencies {
implementation("com.github.haifengl:smile-kotlin:7.1.0")
}Several algorithms (manifold learning, Gaussian Process, MLP, some clustering) require BLAS and LAPACK.
Linux (Ubuntu / Debian)
sudo apt update
sudo apt install libopenblas-dev libarpack2-devmacOS (Homebrew)
brew install arpackDo not rely on DYLD_LIBRARY_PATH: macOS System Integrity Protection (SIP)
strips DYLD_* variables when the JVM is started through the /usr/bin/java
stub, so dyld never sees them. SMILE reaches libarpack through the FFM
bindings, whose SymbolLookup.libraryLookup("arpack") calls dlopen on the bare
name libarpack.dylib; this does not consult java.library.path, so
-Djava.library.path=... and LD_LIBRARY_PATH have no effect either. SMILE
therefore preloads the library by absolute path through
smile.linalg.NativeLibrary, which finds it under /opt/homebrew/lib or
/usr/local/lib with no copy or symlink. To point it somewhere else, set the
arpack.native.path system property or the ARPACK_NATIVE_PATH environment
variable.
Windows — pre-built DLLs are included in the bin/ directory of the
release package.
Add that directory to PATH.
GPU (CUDA) — make sure the LibTorch CUDA native libraries are on PATH (Windows) or LD_LIBRARY_PATH (Linux).
import smile.classification.RandomForest;
import smile.data.formula.Formula;
import smile.io.Read;
// Load data
var data = Read.csv("src/test/resources/iris.csv");
// Train a random forest
var forest = RandomForest.fit(Formula.lhs("species"), data);
// Predict
int label = forest.predict(data.get(0));
System.out.println("Predicted class: " + label);For deep learning examples, see deep/README.md; for LLM and computer-vision examples, see deep/LLM.md and deep/VISION.md. For visualization examples, see plot/README.md.
SMILE Agent Studio is the local-first AI agent workspace, 24/7 autonomous Bot Hub (smile hub), and polyglot IDE (Java, Scala, Kotlin, and Python/Jupyter). It pairs 9 built-in specialist agents (Frank Chief of Staff, Steve Product Manager, Julien Evangelist, Mike B2B Sales, Clair Data Scientist, Ada Architect, James Java Guru, Guido Pythonista, and Chuck Desktop Operator), human-in-the-loop batch draft queues, and zero-code extensibility for custom agents, skills, plugins, and bot routines with interactive notebooks and code/data editors.
See studio/README.md, studio/BOT.md, and studio/CLI.md for full documentation.
Download a pre-packaged release from the releases page, then:
path/to/smile/bin/setup # install required native dependencies
path/to/smile/bin/smile # launch SMILE Agent Studio from your project directoryCLI entry points:
| Command | Description |
|---|---|
smile |
Launch SMILE Agent Studio (desktop AI workspace, Bot Hub & polyglot IDE) |
smile hub |
Start the always-on Agent Hub & Bot runtime service (BOT.md) |
smile shell |
Java (JShell) REPL with all SMILE packages pre-imported |
smile scala |
Scala 3 REPL |
smile train |
Train a classification, regression, clustering, VQ, or anomaly model |
smile predict |
Run batch inference (with optional probabilities and SHAP explanations) |
smile serve |
Start the unified HTTP inference server (Classic ML, ONNX, and LLM chat) |
To increase the JVM heap:
path/to/smile/bin/smile -J-Xmx30GMost SMILE models implement java.io.Serializable. You can serialize a
trained model to disk and load it in a production environment or inside a
Spark job:
// Save
try (var out = new ObjectOutputStream(new FileOutputStream("model.ser"))) {
out.writeObject(forest);
}
// Load
try (var in = new ObjectInputStream(new FileInputStream("model.ser"))) {
var loaded = (RandomForest) in.readObject();
}SMILE provides two visualization layers:
smile.plot.swing— Swing-based interactive 2D/3D plots. See plot/README.md.smile.plot.vega— Declarative Vega-Lite charts for browsers and Jupyter. See plot/VEGA.md.
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-plot</artifactId>
<version>7.1.0</version>
</dependency>SMILE uses a multi-license model that keeps academic research and open-source collaboration free while providing standard, upfront commercial licenses—administered by HALO.AI LLC—for proprietary distribution and production deployments:
| Component | Open Source / Evaluation ($0) | Commercial License Tier |
|---|---|---|
Core Engine (base, core, nlp, deep, plot, kotlin, scala) |
GPLv3 — Free for open-source projects | OEM & Embedded ($25,000 one-time) — Perpetual right to embed and ship in proprietary products free of GPLv3 disclosure, plus Year 1 Maintenance & 10 Agent Studio seats (optional 20% / $5,000 yr renewal) |
SMILE Serve (serve) |
AGPLv3 — Free when complying with §13 network source disclosure | Production Runtime ($12,000 / year) — Covers up to 4 production server nodes ($250/node/mo) + internal Core Engine + 5 free Agent Studio seats, with zero AGPLv3/GPLv3 disclosure |
SMILE Agent Studio (studio) |
BSL 1.1 — Free for personal, academic, and non-production evaluation (converts to AGPLv3 after 4 years) | Bundled Free with Runtime (5 seats), OEM (10 seats), and Enterprise (25 seats), or $95 / seat / mo ($995/seat/yr paid annually, 5-seat standalone min) |
| Enterprise & Edge Fleet | — | From $50,000 / year — Volume edge-node licensing (100–5,000+ gateways), site-wide OEM rights, 25 Studio seats, and optional $15k 30-day Turnkey Pilot |
All commercial tiers include Critical & High CVE resolution SLAs and a 12-month capped IP indemnity. See LICENSE and Commercial Licensing & Pricing, or contact [email protected].
| Channel | Purpose |
|---|---|
| GitHub Discussions | Questions, ideas, show-and-tell |
Stack Overflow [smile] |
Technical Q&A |
| Issue Tracker | Bug reports and feature requests |
| Online Docs | Tutorials and programming guides |
| Java API · Scala API · Kotlin API · Clojure API | API Javadoc |
Please read CONTRIBUTING.md for build and test instructions.
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||

























