
Security News
Risky Biz Podcast: Making Reachability Analysis Work in Real-World Codebases
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
ydf-inference
Advanced tools
With this package, you can generate predictions of machine learning models trained with YDF in browser and with NodeJS.
With this package, you can generate predictions of machine learning models trained with YDF in the browser and with NodeJS.
First, let's train a machine learning model in python. For more details, read YDF's documentation.
In Python in a Colab or in a Jupyter Notebook, run:
# Install YDF
!pip install ydf pandas
import ydf
import pandas as pd
# Download a training dataset
ds_path = "https://raw.githubusercontent.com/google/yggdrasil-decision-forests/main/yggdrasil_decision_forests/test_data/dataset/"
train_ds = pd.read_csv(ds_path + "adult_train.csv")
# Train a Gradient Boosted Trees model
learner = ydf.GradientBoostedTreesLearner(label="income", pure_serving_model=True)
model = learner.train(train_ds)
# Save the model
model.save("/tmp/my_model")
# Zip the model
# Important: Use -j to not include the directory structure.
!zip -rj /tmp/my_model.zip /tmp/my_model
Then:
(async function (){
// Load the YDF library
const ydf = await require("ydf-inference")();
// Load the model
const fs = require("node:fs");
let model = await ydf.loadModelFromZipBlob(fs.readFileSync("./model.zip"));
// Create a batch of examples.
let examples = {
"age": [39, 40, 40, 35],
"workclass": ["State-gov", "Private", "Private", "Federal-gov"],
"fnlwgt": [77516, 121772, 193524, 76845],
"education": ["Bachelors", "Assoc-voc", "Doctorate", "9th"],
"education_num": ["13", "11", "16", "5"],
"marital_status": ["Never-married", "Married-civ-spouse", "Married-civ-spouse", "Married-civ-spouse"],
"occupation": ["Adm-clerical", "Craft-repair", "Prof-specialty", "Farming-fishing"],
"relationship": ["Not-in-family", "Husband", "Husband", "Husband"],
"race": ["White", "Asian-Pac-Islander", "White", "Black"],
"sex": ["Male", "Male", "Male", "Male"],
"capital_gain": [2174, 0, 0, 0],
"capital_loss": [0, 0, 0, 0],
"hours_per_week": [40, 40, 60, 40],
"native_country": ["United-States", null, "United-States", "United-States"]
};
// Make predictions
let predictions = model.predict(examples);
console.log("predictions:", predictions);
// Release model
model.unload();
}())
import * as fs from "node:fs";
import YDFInference from 'ydf-inference';
// Load the YDF library
let ydf = await YDFInference();
// Load the model
let model = await ydf.loadModelFromZipBlob(fs.readFileSync("./model.zip"));
// Create a batch of examples.
let examples = {
"age": [39, 40, 40, 35],
"workclass": ["State-gov", "Private", "Private", "Federal-gov"],
"fnlwgt": [77516, 121772, 193524, 76845],
"education": ["Bachelors", "Assoc-voc", "Doctorate", "9th"],
"education_num": ["13", "11", "16", "5"],
"marital_status": ["Never-married", "Married-civ-spouse", "Married-civ-spouse", "Married-civ-spouse"],
"occupation": ["Adm-clerical", "Craft-repair", "Prof-specialty", "Farming-fishing"],
"relationship": ["Not-in-family", "Husband", "Husband", "Husband"],
"race": ["White", "Asian-Pac-Islander", "White", "Black"],
"sex": ["Male", "Male", "Male", "Male"],
"capital_gain": [2174, 0, 0, 0],
"capital_loss": [0, 0, 0, 0],
"hours_per_week": [40, 40, 60, 40],
"native_country": ["United-States", null, "United-States", "United-States"]
};
// Make predictions
let predictions = model.predict(examples);
console.log("predictions:", predictions);
// Release model
model.unload();
<script src="./node_modules/ydf-inference/dist/inference.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.0/jszip.min.js"></script>
<script>
YDFInference()
.then(ydf => ydf.loadModelFromUrl("http://localhost:3000/model.zip"))
.then(model => {
let examples = {
"age": [39, 40, 40, 35],
"workclass": ["State-gov", "Private", "Private", "Federal-gov"],
"fnlwgt": [77516, 121772, 193524, 76845],
"education": ["Bachelors", "Assoc-voc", "Doctorate", "9th"],
"education_num": ["13", "11", "16", "5"],
"marital_status": ["Never-married", "Married-civ-spouse", "Married-civ-spouse", "Married-civ-spouse"],
"occupation": ["Adm-clerical", "Craft-repair", "Prof-specialty", "Farming-fishing"],
"relationship": ["Not-in-family", "Husband", "Husband", "Husband"],
"race": ["White", "Asian-Pac-Islander", "White", "Black"],
"sex": ["Male", "Male", "Male", "Male"],
"capital_gain": [2174, 0, 0, 0],
"capital_loss": [0, 0, 0, 0],
"hours_per_week": [40, 40, 60, 40],
"native_country": ["United-States", null, "United-States", "United-States"]
};
predictions = model.predict(examples);
model.unload();
});
</script>
npm test
# Assume the shell is located in a clone of:
# https://github.com/google/yggdrasil-decision-forests.git
# Compile the YDF with WebAssembly
yggdrasil_decision_forests/port/javascript/tools/build_zipped_library.sh
# Extract the the content of `dist` in `yggdrasil_decision_forests/port/javascript/npm/dist`.
unzip dist/ydf.zip -d yggdrasil_decision_forests/port/javascript/npm/dist
FAQs
With this package, you can generate predictions of machine learning models trained with YDF in browser and with NodeJS.
The npm package ydf-inference receives a total of 11 weekly downloads. As such, ydf-inference popularity was classified as not popular.
We found that ydf-inference demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.