Skip to main content

Craft ML Features

Project description

Fabra

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.

Fabra unifies all of this in one Python decorator.


The 30-Second Quickstart

pip install "fabra[ui]"
from fabra.core import FeatureStore, entity, feature
from fabra.context import context, ContextItem
from fabra.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),
    ]
fabra 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 Fabra?

Traditional Stack Fabra
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 Fabra Different

1. One Decorator for Everything

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

2. Local-First, Production-Ready

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

# Production: Postgres + Redis + pgvector
FABRA_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, fabra doctor

For Everyone

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

Architecture

Fabra 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{FABRA_ENV} -->|development| Dev
    Switch -->|production| Prod

Production in 60 Seconds

# Set environment variables
export FABRA_ENV=production
export FABRA_POSTGRES_URL=postgresql+asyncpg://...
export FABRA_REDIS_URL=redis://...

# Deploy
fabra 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 "fabra[ui]"

Try in Browser · Quickstart Guide · Full Documentation


Contributing

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

Fabra · 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

fabra_ai-2.0.2.tar.gz (677.7 kB view details)

Uploaded Source

Built Distribution

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

fabra_ai-2.0.2-py3-none-any.whl (160.1 kB view details)

Uploaded Python 3

File details

Details for the file fabra_ai-2.0.2.tar.gz.

File metadata

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

File hashes

Hashes for fabra_ai-2.0.2.tar.gz
Algorithm Hash digest
SHA256 a88063f6fa6664cf8a16e2f0f9a7b43228999f3ac0702b9d2529bf7067af813c
MD5 7af7cbed144d688ec36e114c7c10542d
BLAKE2b-256 cd5ca1a7ef28164f5535e0b835d06972e5fe4f6f76759931143ad081945c08ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabra_ai-2.0.2.tar.gz:

Publisher: release.yml on davidahmann/fabra

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

File details

Details for the file fabra_ai-2.0.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for fabra_ai-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1f4ce0823fef19d5befa500a322f9d960cefc24ad7ab617d2e062c8760c9aad0
MD5 4b5728f1f85202ef2ae07431c4a45e56
BLAKE2b-256 a445791f506d84c0314b100f4d568079576447abe323c1dd40f45268f17a5f03

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabra_ai-2.0.2-py3-none-any.whl:

Publisher: release.yml on davidahmann/fabra

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