Skip to main content

Reusable MLServer test utilities for aiSSEMBLE Inference

Project description

aiSSEMBLE Inference Common Test Utilities

Reusable MLServer test utilities for aiSSEMBLE Inference modules and examples.

Overview

This module provides consolidated MLServer lifecycle management utilities to eliminate code duplication across test suites. It offers two primary usage patterns:

  1. Simple mode: For examples with static model directories
  2. Dynamic mode: For module tests with temporary config generation

Installation

# As a test dependency in pyproject.toml
[dependency-groups]
test = [
    "aissemble-inference-common-test",
]

[tool.uv.sources]
aissemble-inference-common-test = { path = "../aissemble-inference-common-test", editable = true }

Usage

Simple Mode (Examples)

For tests that use pre-configured model directories:

# tests/features/environment.py
from pathlib import Path
from aissemble_inference_common_test.behave_helpers import (
    setup_mlserver_simple,
    teardown_mlserver,
)

def before_all(context):
    example_dir = Path(__file__).parent.parent.parent
    models_dir = example_dir / "models"

    setup_mlserver_simple(context, models_dir=models_dir, port=8080)
    context.mlserver_fixture.start()

def after_all(context):
    teardown_mlserver(context)

Dynamic Mode (Module Tests)

For tests that generate model configurations dynamically:

# tests/features/environment.py
from aissemble_inference_common_test.behave_helpers import (
    setup_mlserver_dynamic,
    teardown_mlserver,
    start_mlserver_with_model,
)

def before_all(context):
    setup_mlserver_dynamic(context)

def after_scenario(context, scenario):
    if hasattr(context, "mlserver_fixture") and context.mlserver_fixture.process:
        context.mlserver_fixture.stop()

def after_all(context):
    teardown_mlserver(context)

# In your step definitions:
start_mlserver_with_model(
    context,
    model_name="yolo",
    runtime="aissemble_inference_yolo.YOLORuntime",
    model="yolov8n.pt"
)

Features

  • Process Management: Robust MLServer subprocess handling with zombie process detection
  • Health Checking: Automatic polling of /v2/health/ready endpoint
  • Graceful Shutdown: Terminate with timeout, then kill if needed (with safety timeouts)
  • Dynamic Port Allocation: Automatic free port discovery
  • Config Generation: JSON settings and model-settings creation
  • Context Manager Support: Automatic cleanup with Python with statement
  • Error Logging: Detailed warnings for cleanup and shutdown failures
  • Backward Compatible: Drop-in replacement for existing test code

API Reference

MLServerFixture

Main fixture class for MLServer lifecycle management.

Basic Usage

from aissemble_inference_common_test import MLServerFixture

# Simple mode
fixture = MLServerFixture.simple(port=8080, models_dir=Path("models"))
fixture.start()

# Dynamic mode
fixture = MLServerFixture.dynamic()
fixture.start_with_model(
    model_name="yolo",
    runtime="aissemble_inference_yolo.YOLORuntime",
    model="yolov8n.pt"
)

# Cleanup
fixture.stop()
fixture.cleanup()

Context Manager Usage (Recommended)

For automatic cleanup even when tests fail:

from aissemble_inference_common_test import MLServerFixture
from pathlib import Path

# Simple mode with context manager
with MLServerFixture.simple(port=8080, models_dir=Path("models")) as fixture:
    fixture.start()
    # Run tests...
    # Automatic cleanup on exit

# Dynamic mode with context manager
with MLServerFixture.dynamic() as fixture:
    fixture.start_with_model(
        model_name="yolo",
        runtime="aissemble_inference_yolo.YOLORuntime",
        model="yolov8n.pt"
    )
    # Run tests...
    # Automatic stop() and cleanup() on exit, even if exception occurs

Behave Helpers

  • setup_mlserver_simple(context, models_dir, port) - Initialize simple fixture
  • setup_mlserver_dynamic(context) - Initialize dynamic fixture
  • start_mlserver_with_model(context, model_name, runtime, **params) - Start with config
  • teardown_mlserver(context) - Cleanup and shutdown

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz.

File metadata

  • Download URL: aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aissemble_inference_common_test-1.5.1.dev1770639896.tar.gz
Algorithm Hash digest
SHA256 ea18419fb2a0238c166796c4a2788aa6da3e0ef11aae586358d7458dcf7c4761
MD5 0ccf0eb90b2205aa4a0435a6f44b5bc4
BLAKE2b-256 8ba738ac2f370f7732422666aa38bf564deec5187deec772c3887f9ee6712272

See more details on using hashes here.

File details

Details for the file aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl.

File metadata

  • Download URL: aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aissemble_inference_common_test-1.5.1.dev1770639896-py3-none-any.whl
Algorithm Hash digest
SHA256 6c58306741d38d1623a3e66c43b95f4be62fb5c79a3e77365dd626a7891ff4b9
MD5 a29531bdbf96c599012173d3807675de
BLAKE2b-256 7357c73229513065a418a5f2ccb07e06a604f6193ef32e575484efc0a571c514

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page