Once you have successfully built a plexe.Model (model.state == ModelState.READY), you can save its state, including the trained predictor, source code, artifacts, and metadata, to a file. You can then load this file later to reuse the model without rebuilding it.

Plexe saves models as .tar.gz archives.

Saving a Model

Use the plexe.save_model() function.

import plexe
import pandas as pd
import os

# --- Build a model first (Example steps) ---
# (Assume df and model are defined and built successfully)
try:
    df = pd.read_csv("housing_data.csv")
except FileNotFoundError:
    df = pd.DataFrame({ # Dummy data
        'square_footage': [1500, 2100, 1800, 2500, 1200], 'bedrooms': [3, 4, 3, 5, 2],
        'bathrooms': [2, 2.5, 2, 3, 1.5], 'price': [300000, 450000, 380000, 550000, 250000]
    })
datasets = [df]
model = plexe.Model(intent="Predict house prices")
model.build(datasets=datasets, max_iterations=1)
# ---------------------------------------------

# Check if the model is ready before saving
if model.get_state() == plexe.internal.common.utils.model_state.ModelState.READY:
    # Define a path for the saved model archive
    # It's good practice to include the model identifier or name
    model_filename = f"house_price_model_{model.identifier}.tar.gz"
    save_directory = "./saved_models"
    os.makedirs(save_directory, exist_ok=True) # Ensure directory exists
    full_save_path = os.path.join(save_directory, model_filename)

    try:
        # Save the model
        saved_path = plexe.save_model(model, full_save_path)
        print(f"Model successfully saved to: {saved_path}")
    except Exception as e:
        print(f"Error saving model: {e}")
else:
    print("Model is not in READY state, cannot save.")

The save_model function requires the full path including the .tar.gz extension. It will create the necessary parent directories if they don’t exist.

The saved archive contains:

  • Metadata (intent, state, metrics, identifier)
  • Schemas (input, output)
  • Code (trainer source, predictor source)
  • Artifacts (serialized model files, e.g., .joblib, .pkl, .pt)
  • Constraints (if any were defined)

Loading a Model

Use the plexe.load_model() function, providing the path to the .tar.gz archive.

import plexe
import os

# Assuming 'full_save_path' is the path where the model was saved previously
# Example: full_save_path = "./saved_models/house_price_model_model-....tar.gz"
saved_model_path = full_save_path # Replace with your actual path if running separately

if 'full_save_path' in locals() and os.path.exists(saved_model_path):
    try:
        # Load the model from the archive
        loaded_model = plexe.load_model(saved_model_path)
        print(f"\nModel loaded successfully from: {saved_model_path}")
        print(f"Loaded model intent: {loaded_model.intent}")
        print(f"Loaded model state: {loaded_model.get_state()}")

        # The loaded model is ready for prediction if it was saved in a READY state
        if loaded_model.get_state() == plexe.internal.common.utils.model_state.ModelState.READY:
            # Example prediction with the loaded model
            input_data = {
                "square_footage": 1750.0,
                "bedrooms": 3,
                "bathrooms": 2.0
            }
            prediction = loaded_model.predict(input_data)
            print(f"Prediction using loaded model: {prediction}")
        else:
             print("Loaded model is not in READY state.")

    except ValueError as e:
        print(f"Error loading model: {e} - File not found or invalid.")
    except Exception as e:
        print(f"An unexpected error occurred during loading: {e}")
else:
    print("\nSaved model path not found or not defined. Skipping loading example.")

Loading a model reconstructs the plexe.Model instance, including its state, predictor, and associated data, allowing you to immediately use it for inference or further inspection.