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-ai[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-ai[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.3.tar.gz (680.6 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.3-py3-none-any.whl (160.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fabra_ai-2.0.3.tar.gz
  • Upload date:
  • Size: 680.6 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.3.tar.gz
Algorithm Hash digest
SHA256 e2a2e41d47f528f3537d20034f7be960f67e7a7cad03f520b1054e765cdc088e
MD5 b2c6c97a34e54737c0a85e6b03aac839
BLAKE2b-256 b8e24744b24fff7ffed8d54e13429f5d77e8d659e4ef8e3ef777162fd0e83b28

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabra_ai-2.0.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: fabra_ai-2.0.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c3c2f71705e4d4349546a5a58d06dce40d692b06ea9e40e11c704f4222ef8955
MD5 4d38b4dafb084fe0a4f8926753ff08a3
BLAKE2b-256 ce0059157f0b42217212549c998d3a8262b060008497cd7eec526df946d5845c

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabra_ai-2.0.3-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