Skip to content
CAI
Software that uses CAICheck a score

airbnb/aerosolve

56.2

Adequate · 27 September 2026

22.4k

lines of production code

Scala

with Java

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This release introduces a comprehensive Gradle build system with Travis CI integration, replacing the previous build configuration. It significantly expands the machine learning capabilities by adding support for image feature extraction, XGBoost pipelines, and a wide variety of new model types including linear, tree-based, and kernel models. The update also brings a generic ML pipeline framework for training and scoring, alongside new demo workflows for image impressionism, income prediction, and text classification. Finally, the release includes extensive unit test coverage for the new features and utilities.

Features

Add Gradle build system and Travis CI configuration

The project now includes a Gradle wrapper (gradlew, gradlew.bat) and a .travis.yml configuration to automate builds and publish artifacts to Bintray. The build script installs the Thrift compiler and dependencies, runs checks on non-tag builds, and triggers a Slack notification upon successful tag builds. Additionally, the .gitignore is updated to exclude Gradle and IDE files, and the license header is updated to 2015.

(repo-wide) · high confidence

Add Image Impressionism demo

The image\_impressionism demo is now available, providing a complete workflow for training a regression model on an input image to recreate it. The demo includes a README with prerequisites and step-by-step instructions for running the training, model training, and impression generation tasks using Spark and Gradle. The implementation features a configuration file (image\_impressionism.conf) that defines the data pipeline, including a multiscale grid quantize transform for pixel locations and a cross transform combining color channels. Users can execute jobs like MakeTraining, TrainModel, and MakeImpression via a shell script, with the model learning to predict pixel colors based on location and channel features.

_demo/image\_impressionism, demo/income\_prediction, demo/income\prediction/src/main/scala · high confidence

Add PhotonML Avro data conversion job

Added a new Spark-based data conversion job that transforms internal Thrift \Example\ objects into PhotonML Avro format. This includes a new \ConvertExamplesToPhotonMLAvroJob\ entry point, utility classes for schema generation and feature mapping, and a metadata extractor implementation, enabling users to export training data in the format required by Photon ML.

training/src/main/scala/com/airbnb/aerosolve/training/photon · high confidence

Add Twenty News demo pipeline and runner

A new Twenty News demo is introduced, providing a complete end-to-end workflow for training and evaluating a text classification model on the 20 Newsgroups dataset. The change adds two Scala files: JobRunner, which serves as the entry point to execute specific pipeline stages (debugging, data preparation, training, and evaluation), and TwentyNewsPipeline, which implements the core logic for each stage. Users can now run the full lifecycle—preprocessing raw text into examples, training a linear ranker model, and evaluating its performance—using the provided configuration-driven commands.

_demo/twenty\news/src/main/scala · high confidence

Add Twenty News demo with data conversion and execution scripts

A new Twenty News demo has been added, providing a complete workflow for training a multiclass model on the 20 Newsgroups dataset. The change includes a Python script (convert\_to\_aerosolve.py) to convert the raw dataset into a flat text format, a shell script (job\_runner.sh) to execute the Spark job, and a README.md with setup instructions and example output.

_demo/twenty\news · high confidence

Add configuration for the Twenty News demo

A new configuration file (twenty\_news.conf) is added to the Twenty News demo, defining the pipeline for training and evaluating a full-rank linear model. The config specifies the training data source, model output paths, and a combined transform pipeline that includes tokenization, normalization, and string deletion. It also sets the loss function to 'softmax' and the solver to 'sparse\_boost' for the model training process.

_demo/twenty\news/src/main/resources · high confidence

Added generic pipeline demo configurations and submission script

Users can now run end-to-end training and scoring workflows using new demo configuration files for binary and multiclass classification, along with a Bash script to submit jobs to Spark. The package includes a conversion utility to transform Example data into PhotonML Avro format, providing ready-to-use templates for common machine learning pipelines.

training/src/main/resources · high confidence

Added image feature extraction capabilities

Introduced a new image processing module in the core library that enables extraction of visual features from images. The update adds a base \ImageFeature\ class and an \ImageFeatureExtractor\ orchestrator that computes histograms for RGB, HOG (Histogram of Oriented Gradients), LBP (Local Binary Patterns), and HSV (Hue, Saturation, Value) color spaces. These features are aggregated into dense feature vectors for downstream machine learning tasks.

core/src/main/java/com/airbnb/aerosolve/core/images · high confidence

Introduce XGBoost pipeline for training, evaluation, and scoring

Added a new XGBoost pipeline that enables training, evaluation, and scoring of XGBoost models within a Spark and Hive environment. The update includes a Monte Carlo parameter search to optimize model hyperparameters, along with scripts and configuration templates to manage the full lifecycle from data preparation to model output. This provides a structured way to handle XGBoost workloads, including saving models and results to HDFS and Hive.

airlearner/airlearner-xgboost · high confidence

Introduce binary regression strategy model training and evaluation framework

Added a new binary regression strategy model implementation, including configuration classes (BaseSearchConfig, EvalConfig, TrainingConfig, TrainingOptions), data models (BaseBinarySample, BinaryTrainingSample, BinaryScoringSample), parameter handling (BaseParam, StrategyParams), and the core training logic (BinaryRegressionTrainer, BaseBinaryRegressionTrainer). This enables training and evaluating binary regression models with configurable hyperparameters and evaluation metrics.

airlearner/airlearner-strategy · high confidence

Introduce generic ML pipeline for training, evaluation, and scoring

A new generic pipeline framework is introduced to standardize the workflow for generating, training, evaluating, and scoring machine learning models. This includes a main orchestrator (JobRunner) that dispatches to specific pipeline stages such as NDTreePipeline for building feature maps, GenericPipeline for training and evaluation, and utilities for model debugging and result reporting. The change adds support for multiclass and regression tasks, configurable sampling and shuffling, and integration with Hive for data ingestion and model dumping.

training/src/main/scala/com/airbnb/aerosolve/training/pipeline · high confidence

Introduce new feature generation and scoring infrastructure

Added new classes to the core features package to support structured feature handling and model scoring. This includes the \FeatureFamily\ hierarchy (\StringFamily\, \FloatFamily\) for organizing string and float features, along with \FeatureGen\, \FeatureMapping\, \FeatureVectorGen\, and \Features\ to manage feature generation and conversion. Additionally, new \ModelConfig\ and \ModelScorer\ classes were added to the scoring package to handle model loading and scoring operations.

core/src/main/java/com/airbnb/aerosolve/core/features · high confidence

New Thrift schemas for ML models and K-D trees

Added new Thrift schema files to define data structures for machine learning models and spatial indexing. MLSchema.thrift introduces definitions for FeatureVector, Example, ModelRecord, and related structures to support various model types (e.g., spline, linear, RBF, MLP) and evaluation metrics. KDTree.thrift defines the schema for K-D tree nodes, enabling storage and retrieval of spatial data structures.

core/src/main/thrift · high confidence

New feature transforms and utility classes for feature engineering

Added a suite of new feature engineering transforms to the core library, including ApproximatePercentileTransform, BucketFloatTransform, CapFloatTransform, CoalesceFloatTransform, ConvertStringCaseTransform, CrossTransform, CustomLinearLogQuantizeTransform, CustomMultiscaleQuantizeTransform, CustomRangeQuantizeTransform, CutFloatTransform, DateDiffTransform, DateValTransform, DecisionTreeTransform, DefaultStringTokenizerTransform, DeleteFloatFeatureFamilyTransform, DeleteFloatFeatureTransform, DeleteStringFeatureColumnTransform, DeleteStringFeatureFamilyTransform, DeleteStringFeatureTransform, DivideTransform, FloatCrossFloatTransform, FloatFamilyCrossToTwoDDenseTransform, FloatLabelTransform, FloatToDenseTransform, and FloatToStringTransform. These additions provide capabilities for quantization, date handling, string tokenization, feature deletion, and cross-product generation.

core/src/main/java/com/airbnb/aerosolve/core/transforms · high confidence

New model types and scoring infrastructure

The core library now supports a wider variety of machine learning models, including linear models (full-rank, low-rank, and standard), tree-based models (decision trees, random forests, and boosted stumps), kernel machines, and KD-trees. This update introduces the \AbstractModel\ base class to standardize model interfaces, enabling consistent scoring, serialization, and debug scoring across all model types. Users can now train and serve these new model architectures, which offer different trade-offs in terms of generalization, speed, and interpretability.

core/src/main/java/com/airbnb/aerosolve/core/models · high confidence

New training algorithms for additive models, boosted forests, and linear models

The training module now includes new implementations for several machine learning models: an AdditiveModelTrainer that uses backfitting with spline and linear functions, a BoostedForestTrainer for gradient boosted trees, a BoostedStumpsTrainer for simple tree priors, a DecisionTreeTrainer supporting classification, regression, and multiclass tasks, a ForestTrainer for random forests, and a FullRankLinearTrainer supporting softmax and hinge losses with rprop and sparse boost solvers. These additions expand the range of models users can train and evaluate within the Aerosolve framework.

training/src/main/scala/com/airbnb/aerosolve/training · high confidence

New utility classes for JSON parsing and quick-select algorithms

Added JsonParser, a utility for parsing JSON using Jackson, and Sort, which provides a quick-select algorithm with O(n) average time complexity for finding the nth element in an unsorted sequence. These new utilities are now available in the training package for use in training workflows.

training/src/main/scala/com/airbnb/aerosolve/training/utils · high confidence

New utility classes for configuration, data processing, and pipeline execution

This change introduces a suite of new utility classes to the \airlearner-utils\ library. A Java-based configuration loader (\AirCon\) and its associated macro executor are added to handle complex configuration loading and processing. Scala utilities are added for managing HDFS paths, parsing dates, and handling Hive table operations, including saving RDDs to Hive and updating partitions. Additionally, a generic \Job\ and \JobRunner\ framework is introduced to standardize the execution of Spark-based pipelines, while helper objects for sorting, random sampling, and logging are also included.

airlearner/airlearner-utils/src/main · high confidence

New utility classes for feature handling and model debugging

Added several new utility classes to the core library to support feature engineering and model debugging. The changes introduce a FloatVector class for efficient dense feature storage and manipulation, alongside helper classes like FeatureVectorUtil for computing kernel similarities. Additionally, new classes including Debug, DateUtil, Distance, and Weibull have been added to support debugging workflows, date range processing, geographic distance calculations, and statistical distributions respectively.

core/src/main/java/com/airbnb/aerosolve/core/util · high confidence

Behavioural changes

Additive model demo now supports dynamic bucketing and learning rate decay

The income prediction demo configuration has been updated to support an additive model trained with dynamic buckets, allowing the model to adapt feature binning during training. The configuration also introduces learning rate decay and a minimum learning rate threshold, providing more stable convergence. Additionally, the config includes parameters for spline and additive models, with specific settings for evaluation and training data paths, model output locations, and hyperparameters such as iterations, subsample rate, and dropout.

_demo/income\prediction/src/main/resources · medium confidence

Refactored function library with new base classes and specialized implementations

The function evaluation logic has been restructured by introducing an abstract base class \AbstractFunction\ and a \Function\ interface, providing a common foundation for all function types. New concrete implementations include \Linear\, \Point\, \Zero\, and \MultiDimensionSpline\, each handling specific feature representations (e.g., one-hot, constant, or multi-dimensional splines). The \FunctionUtil\ class was added to support polynomial fitting and smoothing operations. This refactoring standardizes how models are saved, loaded, and evaluated, enabling easier extension and more consistent behavior across different feature types.

core/src/main/java/com/airbnb/aerosolve/core/function · high confidence

Upgrade Gradle to version 4.0

The project now uses Gradle 4.0, as specified in the newly added gradle-wrapper.properties file. This update brings the build system to the 4.0 release, which may include new features, performance improvements, and compatibility changes for the build process.

gradle · high confidence

Test coverage

Added comprehensive unit tests for training algorithms; Added test logging configuration for unit tests; Added test resources for income prediction and logging configuration; Added unit tests and test utilities for ML utility classes; Added unit tests for JSON parsing and sorting utilities; Added unit tests for ModelScorer; Added unit tests for PhotonML data conversion utilities; Added unit tests for core feature transforms; Added unit tests for core function classes; Added unit tests for core utility classes; Added unit tests for feature generation and mapping logic; Added unit tests for image feature extractors and core ML models; Added unit tests for training pipeline components.

Dependencies

Initial commit for the core library

Added build configuration files for the Aerosolve project, including the root build.gradle, settings.gradle, and subproject build files for core, training, and demo modules. The configuration establishes a Gradle-based build system with dependencies on Apache Spark (version 3.1.1), Scala 2.12, and various utility libraries like Joda Time and SLF4J, while also configuring Bintray for artifact publishing.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 48 → 56 (+8.3)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 94 → 91 (-3.3)
  • Architecture 94 → 97 (+3.3)
  • Maturity 50 → 50 (-0.4)
  • Readiness 28 → 46 (+18.0)
  • Security 71 → 71 (+0.0)

Resolved (27)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • Duplicated block (152 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/util/FloatVector.java)
  • Duplicated block (187 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/function/MultiDimensionSpline.java)
  • Duplicated block (5 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/AdditiveModel.java)
  • Duplicated block (5 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/SplineModel.java)
  • Duplicated block (5 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/transforms/LinearLogQuantizeTransform.java)
  • Duplicated block (6 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/LinearModel.java)
  • Duplicated block (6 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/MaxoutModel.java)
  • Duplicated block (6 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/MaxoutModel.java)
  • Duplicated block (6 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/util/Debug.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/AdditiveModel.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/AdditiveModel.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/LinearModel.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/SplineModel.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/util/Debug.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/util/Debug.java)
  • Duplicated block (8 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/models/MaxoutModel.java)
  • Duplicated block (80 lines × 2) (core/src/main/java/com/airbnb/aerosolve/core/util/Util.java)
  • High: security finding (details withheld)
  • …and 7 more

New (121)

  • AdditiveModel.debugScoreItem (cognitive 17) (core/src/main/java/com/airbnb/aerosolve/core/models/AdditiveModel.java)
  • AdditiveModelTrainer.train (cognitive 24) (training/src/main/scala/com/airbnb/aerosolve/training/AdditiveModelTrainer.scala)
  • BinaryRegressionTrainer.train (cognitive 17) (airlearner/airlearner-strategy/src/main/scala/com/airbnb/common/ml/strategy/trainer/BinaryRegressionTrainer.scala)
  • BoostedForestTrainer.addNewTree (cognitive 21) (training/src/main/scala/com/airbnb/aerosolve/training/BoostedForestTrainer.scala)
  • BoostedForestTrainer.optionalExample (cognitive 17) (training/src/main/scala/com/airbnb/aerosolve/training/BoostedForestTrainer.scala)
  • DecisionTreeTrainer.evaluateClassificationSplit (cognitive 29) (training/src/main/scala/com/airbnb/aerosolve/training/DecisionTreeTrainer.scala)
  • DecisionTreeTrainer.getBestSplit (cognitive 16) (training/src/main/scala/com/airbnb/aerosolve/training/DecisionTreeTrainer.scala)
  • DecisionTreeTrainer.makeLeaf (cognitive 27) (training/src/main/scala/com/airbnb/aerosolve/training/DecisionTreeTrainer.scala)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no licence statement (README.md)
  • Documentation: no project overview (README.md)
  • Documentation: no usage examples (README.md)
  • Dormant codebase
  • Duplicated block (10 lines × 2) (airlearner/airlearner-utils/src/main/scala/com/airbnb/common/ml/util/HiveUtil.scala)
  • Duplicated block (10 lines × 2) (training/src/main/scala/com/airbnb/aerosolve/training/MaxoutTrainer.scala)
  • Duplicated block (11 lines × 2) (training/src/main/scala/com/airbnb/aerosolve/training/LinearRankerTrainer.scala)
  • Duplicated block (13 lines × 2) (training/src/main/scala/com/airbnb/aerosolve/training/BoostedForestTrainer.scala)
  • Duplicated block (14 lines × 2) (training/src/main/scala/com/airbnb/aerosolve/training/FullRankLinearTrainer.scala)
  • Duplicated block (14 lines × 3) (demo/image_impressionism/src/main/scala/JobRunner.scala)
  • …and 101 more

Architecture

  • Containers 0 added · 0 removed · contexts 2 added · 0 removed · edges 0 added · 0 removed

Added bounded contexts (2)

  • core
  • repository

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

airbnb/aerosolve was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 27 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 1eabbbc078de4b384e26445a06632189b71424bb — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d00c643c3f66.