Skip to main content

Functions related to Haystack ML

Project description

Haystack ML Stack

Currently this project contains a FastAPI-based service designed for low-latency scoring of streams data coming from http requests

🚀 Features

  • FastAPI Service: Lightweight and fast web service for ML inference.
    • Asynchronous I/O: Utilizes aiobotocore for non-blocking S3 and DynamoDB operations.
    • Model Loading: Downloads and loads the ML model (using cloudpickle) from a configurable S3 path on startup.
    • Feature Caching: Implements a thread-safe Time-To-Live (TTL) / Least-Recently-Used (LRU) cache (cachetools.TLRUCache) for DynamoDB features, reducing latency and database load.
    • DynamoDB Integration: Fetches stream-specific features from DynamoDB to enrich the data before scoring.
    • Health Check: Provides a /health endpoint to monitor service status and model loading.

📦 Installation

This project requires Python 3.11 or later.

  1. Install package: The dependencies associated are listed in pyproject.toml.

    pip install haystack-ml-stack
    

⚙️ Configuration

The service is configured using environment variables, managed by pydantic-settings. You can use a .env file for local development.

Variable Name Alias Default Description
S3_MODEL_PATH S3_MODEL_PATH None Required. The s3://bucket/key URL for the cloudpickled ML model file.
FEATURES_TABLE FEATURES_TABLE "features" Name of the DynamoDB table storing stream features.
LOGS_FRACTION LOGS_FRACTION 0.01 Fraction of requests to log detailed stream data for sampling/debugging (0.0 to 1.0).
CACHE_MAXSIZE (none) 50000 Maximum size of the in-memory feature cache.

Example env vars

S3_MODEL_PATH="s3://my-ml-models/stream-scorer/latest.pkl"
FEATURES_TABLE="features"
LOGS_FRACTION=0.05

🌐 Endpoints

Method Path Description
GET / Root endpoint, returns a simple running message.
GET /health Checks if the service is running and if the ML model has been loaded.
POST /score Main scoring endpoint. Accepts stream data and returns model predictions.

💻 Technical Details

Model Structure

The ML model file downloaded from S3 is expected to be a cloudpickle-serialized Python dictionary with the following structure:

model = {
    "preprocess": <function>,  # Function to transform request data into model input.
    "predict": <function>,     # Function to perform the actual model inference.
    "params": <dict/any>,      # Optional parameters passed to preprocess/predict.
    "stream_features": <list[str]>, # Optional list of feature names to fetch from DynamoDB.
}

Feature Caching (cache.py)

The ThreadSafeTLRUCache ensures that feature lookups and updates are thread-safe. The _ttu (time-to-use) policy allows features to specify their own TTL via a cache_ttl_in_seconds key in the stored value.

DynamoDB Feature Fetching (dynamo.py)

The set_stream_features function handles:

  • Checking the in-memory cache for required stream_features.

  • Batch-fetching any missing features from DynamoDB.

  • Parsing the low-level DynamoDB items into Python types.

  • Populating the cache with the fetched data, respecting the feature's TTL.

  • Injecting the fetched feature values back into the streams list in the request payload.

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

haystack_ml_stack-0.3.1.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

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

haystack_ml_stack-0.3.1-py3-none-any.whl (21.8 kB view details)

Uploaded Python 3

File details

Details for the file haystack_ml_stack-0.3.1.tar.gz.

File metadata

  • Download URL: haystack_ml_stack-0.3.1.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for haystack_ml_stack-0.3.1.tar.gz
Algorithm Hash digest
SHA256 c9a2bf7dedcd6e0674958e63845c4f5a85ae3ff5b8e831f173828d27548c7d61
MD5 f6175897e9a4508fddd68d87a270dcbb
BLAKE2b-256 5f7c49026a5a751b62259397a96e5cb50399899248ca034dc49dd03c0213f890

See more details on using hashes here.

File details

Details for the file haystack_ml_stack-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for haystack_ml_stack-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fea05c5882a5f1f72d3f1bf4f5749dcb57092d9167c5ad9f04a7a9fd72044d0c
MD5 0a74a2b67b170aa21bbfbd6b884e7ded
BLAKE2b-256 4846e232dc2c317aadf4d7b91042a7a61427476853c7c55468e7f47ca1ff6a1d

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