Skip to main content

Heroku for ML Features

Project description

Meridian

The Context Store for LLMs & ML Features

PyPI version CI Status Security License Python Version


Unify RAG pipelines and ML features in a single Python decorator.

From notebook prototype to production in 30 seconds. No Kubernetes. No Spark. No YAML.


🎮 Try in Browser | 📚 Docs | 🤖 Context Store


The Problem

You're building an AI app. You need:

  • Structured features (user tier, purchase history) for personalization
  • Unstructured context (relevant docs, chat history) for your LLM
  • Vector search for semantic retrieval
  • Token budgets to fit your context window

Today, this means stitching together LangChain, Pinecone, a feature store, Redis, and prayer.

Meridian unifies all of this in one Python decorator.


The 30-Second Quickstart

pip install "meridian-oss[ui]"
from meridian.core import FeatureStore, entity, feature
from meridian.context import context, ContextItem
from meridian.retrieval import retriever

store = FeatureStore()

@entity(store)
class User:
    user_id: str

@feature(entity=User, refresh="daily")
def user_tier(user_id: str) -> str:
    return "premium" if hash(user_id) % 2 == 0 else "free"

@retriever(index="docs", top_k=3)
async def find_docs(query: str):
    pass  # Automatic vector search via pgvector

@context(store, max_tokens=4000)
async def build_prompt(user_id: str, query: str):
    tier = await store.get_feature("user_tier", user_id)
    docs = await find_docs(query)
    return [
        ContextItem(content=f"User is {tier}.", priority=0),
        ContextItem(content=str(docs), priority=1),
    ]
meridian serve features.py
# Server running on http://localhost:8000

That's it. No infrastructure. No config files. Just Python.

Context Accountability (v1.4+): Every context assembly is tracked with full lineage:

ctx = await build_prompt("user_123", "How do I upgrade?")
print(ctx.id)       # UUIDv7 identifier for replay
print(ctx.lineage)  # Full audit trail: features, retrievers, freshness

Freshness SLAs (v1.5+): Ensure your AI decisions are based on fresh data:

@context(store, max_tokens=4000, freshness_sla="5m")  # Features must be <5m old
async def build_prompt(user_id: str, query: str):
    tier = await store.get_feature("user_tier", user_id)
    return [ContextItem(content=f"User is {tier}.", priority=0)]

ctx = await build_prompt("user_123", "query")
print(ctx.is_fresh)                    # True if all features within SLA
print(ctx.meta["freshness_violations"])  # Details on any stale features

Why Meridian?

Traditional Stack Meridian
Config 500 lines of YAML Python decorators
Infrastructure Kubernetes + Spark + Pinecone Your laptop (DuckDB)
RAG Pipeline LangChain spaghetti @retriever + @context
Feature Serving Separate feature store Same @feature decorator
Time to Production Weeks 30 seconds

What Makes Meridian Different

1. One Decorator for Everything

Other tools make you choose: LangChain for RAG, Feast for features, separate vector DB. Meridian gives you @feature, @retriever, and @context — all wired together, all in Python.

2. Local-First, Production-Ready

# Development (default): DuckDB + In-Memory
MERIDIAN_ENV=development

# Production: Postgres + Redis + pgvector
MERIDIAN_ENV=production

Same code. Zero changes. Just flip an environment variable.

3. Point-in-Time Correctness

Training ML models? We use ASOF JOIN (DuckDB) and LATERAL JOIN (Postgres) to ensure your training data reflects the world exactly as it was — no data leakage, ever.

4. Token Budget Management

@context(store, max_tokens=4000)
async def build_prompt(user_id: str, query: str):
    return [
        ContextItem(content=critical_info, priority=0, required=True),
        ContextItem(content=nice_to_have, priority=2),  # Dropped if over budget
    ]

Automatically assembles context that fits your LLM's window. Priority-based truncation. No more "context too long" errors.


Key Capabilities

For AI Engineers

  • Vector Search: Built-in pgvector with automatic chunking and embedding
  • Magic Retrievers: @retriever auto-wires to your vector index
  • Context Assembly: Token budgets, priority truncation, explainability API
  • Semantic Cache: Cache expensive LLM calls and retrieval results
  • Context Accountability: Full lineage tracking, context replay, and audit trails for AI decisions
  • Freshness SLAs: Ensure data freshness with configurable SLAs and degraded mode handling

For ML Engineers

  • Hybrid Features: Mix Python logic and SQL in the same pipeline
  • Event-Driven: Trigger updates via Redis Streams
  • Observability: Prometheus metrics, OpenTelemetry tracing
  • Self-Healing: Circuit breakers, fallback chains, meridian doctor

For Everyone

  • One-Command Deploy: meridian deploy fly|cloudrun|ecs|railway|render
  • Visual UI: Dependency graphs, live metrics, context debugging
  • Shell Completion: meridian --install-completion

Architecture

Meridian scales from laptop to production without code changes.

graph TD
    subgraph Dev [Development]
        A[Your Code] -->|Uses| B(DuckDB)
        A -->|Uses| C(In-Memory Cache)
    end

    subgraph Prod [Production]
        D[Your Code] -->|Async| E[(Postgres + pgvector)]
        D -->|Async| F[(Redis)]
    end

    Switch{MERIDIAN_ENV} -->|development| Dev
    Switch -->|production| Prod

Production in 60 Seconds

# Set environment variables
export MERIDIAN_ENV=production
export MERIDIAN_POSTGRES_URL=postgresql+asyncpg://...
export MERIDIAN_REDIS_URL=redis://...

# Deploy
meridian deploy fly --name my-app

Full Deployment Guide →


Roadmap

  • v1.0: Core Feature Store (DuckDB, Postgres, Redis, FastAPI)
  • v1.2: Context Store (pgvector, retrievers, token budgets)
  • v1.3: UI, Magic Retrievers, One-Command Deploy
  • v1.4: Context Accountability (lineage tracking, context replay, audit trails)
  • v1.5: Freshness SLAs (data freshness guarantees, degraded mode, strict mode)
  • v1.6: Drift detection, RBAC, multi-region

Get Started

pip install "meridian-oss[ui]"

Try in Browser · Quickstart Guide · Full Documentation


Contributing

We love contributions! See CONTRIBUTING.md to get started.

Meridian · Apache 2.0 · 2025

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

meridian_oss-1.5.2.tar.gz (677.8 kB view details)

Uploaded Source

Built Distribution

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

meridian_oss-1.5.2-py3-none-any.whl (160.6 kB view details)

Uploaded Python 3

File details

Details for the file meridian_oss-1.5.2.tar.gz.

File metadata

  • Download URL: meridian_oss-1.5.2.tar.gz
  • Upload date:
  • Size: 677.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for meridian_oss-1.5.2.tar.gz
Algorithm Hash digest
SHA256 757f2a636ec1a704a480849ca92b970b93c4b2a234ae61d462864d585f812824
MD5 857aa019120eee29fbad5de3a9a600fd
BLAKE2b-256 9ae6a69ab0ced935e5ea59292f0b51b2e828ca278e56c5db26dd0cf4f97ed222

See more details on using hashes here.

Provenance

The following attestation bundles were made for meridian_oss-1.5.2.tar.gz:

Publisher: release.yml on davidahmann/meridian

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meridian_oss-1.5.2-py3-none-any.whl.

File metadata

  • Download URL: meridian_oss-1.5.2-py3-none-any.whl
  • Upload date:
  • Size: 160.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for meridian_oss-1.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 668b59cd3ee7c39a933fd9b96777e93ff0e34ade20fc85999c59e2f4473ec386
MD5 7bc938dcbebde7671a22827cffa66051
BLAKE2b-256 8610eea57933eb87d2ba0213d5ee7380265211435ca2a6f38671d720c3fd4bfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for meridian_oss-1.5.2-py3-none-any.whl:

Publisher: release.yml on davidahmann/meridian

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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