Skip to content

List Model Node ​

Overview ​

The List Model node publishes the list of available AI models from the connected Firebase configuration. Similar to List Dataset, it automatically emits model lists on startup and when models change in Firebase.

Key Features ​

  • Auto-emit on startup: Sends model list when flow starts
  • Real-time updates: Emits when models change in Firebase
  • Manual trigger: Trigger via input message
  • Dataset resolution: Automatically links models to their datasets
  • Task normalization: Standardizes task types (detection, classification, etc.)
  • Sorted output: Models alphabetically sorted by name

Configuration ​

Properties ​

Output Field ​

  • Type: Message property path
  • Default: payload
  • Description: Where the model array will be stored

Firebase Config ​

  • Type: Node reference (firebase-config)
  • Required: Yes
  • Description: Reference to firebase-config node

Output ​

Message Structure ​

javascript
{
  payload: [
    {
      name: "yolo-v8-detection",
      datasetName: "Product Inspection",
      datasetId: "prod-inspect-v2",
      task: "det",               // Normalized task type
      updatedAt: "2024-01-15T10:00:00.000Z"
    },
    {
      name: "product-classifier",
      datasetName: "Quality Control",
      datasetId: "qc-dataset-001",
      task: "class",
      updatedAt: "2024-01-10T15:30:00.000Z"
    }
  ],
  reason: "startup",           // "startup", "update", "manual", "reset", "error"
  modelsCount: 2,
  timestamp: "2024-01-15T10:30:00.000Z"
}

Task Types ​

The node normalizes task types to standard values:

Input ValuesNormalized Output
detection, det, object_detection, object-detectiondet
segmentation, seg, semantic_segmentation, instance_segmentationseg
classification, class, multiclass, multilabelclass
ocr, text, text_detectionocr
anomaly, anomaly_detectionanomaly
Other valuesOriginal value (lowercase)

Usage Examples ​

Example 1: Filter Models by Task ​

javascript
// Function node after List Model
const detectionModels = msg.payload.filter(model => model.task === "det");
const classificationModels = msg.payload.filter(model => model.task === "class");

msg.payload = {
  detection: detectionModels,
  classification: classificationModels
};
return msg;

Example 2: Group by Dataset ​

javascript
// Function node: Group models by dataset
const grouped = msg.payload.reduce((acc, model) => {
  const dataset = model.datasetName || "Unknown";
  if (!acc[dataset]) acc[dataset] = [];
  acc[dataset].push(model);
  return acc;
}, {});

msg.payload = grouped;
return msg;

Example 3: Model Selection UI ​

javascript
// Function node: Format for dropdown
msg.options = msg.payload.map(model => ({
  label: `${model.name} (${model.task})`,
  value: model.name
}));
return msg;

Example 4: Find Latest Model ​

javascript
// Function node: Get most recently updated model
const latest = msg.payload.reduce((newest, model) => {
  if (!newest || new Date(model.updatedAt) > new Date(newest.updatedAt)) {
    return model;
  }
  return newest;
}, null);

msg.payload = latest;
return msg;

See Also ​