Python development for AI workloads

LLM orchestration, RAG pipelines, data engineering, and ML inference. FastAPI-first, async-native, with observability built in from the start.

Where it fits in our builds

Where the AI-heavy work happens

When a product has real ML in it, the Python service is where that lives: FastAPI in front, embedding and inference pipelines behind, deployed in containers next to the product API.

  • FastAPI endpoints with typed contracts.
  • Batch and queue work kept off the request path.
  • Paired with NestJS, which owns the product API.

FastAPI

PyTorch

Docker

AWS

Supabase

GitHub

Our stance

Why we picked this stack

Python is the lingua franca of AI/ML: every major LLM provider, vector DB, and embedding model ships best-in-class Python SDKs. FastAPI gives us TypeScript-like DX (type hints, OpenAPI auto-generation) without leaving Python, and the ecosystem of PyTorch, Hugging Face, and scientific computing is unmatched for ML work. Async support means Python no longer means slow: FastAPI on Uvicorn handles real production load. We reach for Python when the AI/ML work is heavy, and pair it with NestJS for the product API.

Capabilities

What we build with it

FastAPI backends for AI workloads

Async-native APIs with type hints and auto-generated OpenAPI. The front door for AI services.

LLM orchestration pipelines

LangChain and LlamaIndex where they earn their place, custom orchestration for production.

RAG ingestion + retrieval

Embedding pipelines, vector stores, and retrieval orchestration with grounding signals.

ML inference services

PyTorch and Hugging Face Transformers served behind monitored, cost-aware endpoints.

Data engineering pipelines

Pandas, Polars, and DuckDB for transformation, enrichment, and analytical workloads.

Background processing

Celery and RQ for distributed task queues, long-running jobs, and async workloads.

Server racks in a data centre

Infrastructure that holds up when traffic arrives

Tooling

Versions and libraries we use

  • 01Python 3.11+3.12 is our default: modern typing, performance, and tooling support.
  • 02FastAPIOur default web framework, async-native with auto-generated OpenAPI.
  • 03Pydantic v2Data validation and settings: fast, strict, and type-safe.
  • 04SQLAlchemy 2.0 / SQLModelORM layer: typed models and async sessions.
  • 05AlembicSchema migrations, versioned and reviewable.
  • 06CeleryDistributed task queue for background and scheduled work.
  • 07pytest + pytest-asyncioTest suites with first-class async support.
  • 08OpenAI / Anthropic / Vertex SDKsProvider-agnostic LLM access, chosen per workload.
  • 09LangChain / LlamaIndexUsed selectively; we lean toward custom orchestration for production.
  • 10PyTorch, Hugging Face Transformers, sentence-transformersInference and embeddings, including open-weight models when justified.
  • 11PolarsPreferred over Pandas for large data: faster and more memory-efficient.

Hard lines

Anti-patterns we avoid

Saying no to these is part of the service. Each one is a production incident we would rather not relive.

  • Python for plain CRUD APIs

    When there is no AI/ML work, NestJS does standard product APIs better, and our team is denser there.

  • Sync code where async makes sense

    FastAPI is async-native. Writing blocking code throws away the framework’s biggest advantage.

  • Jupyter notebooks shipped to production

    Notebooks are for exploration. Production code lives in modules with tests and types.

  • Skipping type hints

    Pydantic plus mypy in CI is the standard. Untyped Python rots fast.

  • Reinventing what LangChain does well

    We write custom orchestration where it matters, not where a maintained library already solves it.

Hire senior Python engineers

Need to extend your team with engineers who have shipped production Python for AI workloads? We embed senior FastAPI and ML engineers into your team: async-native, type-strict, and observability-minded from day one.

Explore staff augmentation
Code detail on a screen

Production engineering

The tech stack is the starting point, not the pitch

We pick tools because they ship, not because they trend. Every technology we list is one we have deployed to production, debugged under load, and would choose again for the right problem.

Frequently asked questions

Straight answers on how we run Python in production, from frameworks to deploys.

  • Python for AI/ML and data work; NestJS for product APIs. We pick per workload, not per dogma.

Building AI-heavy backends? Schedule a meeting.

No account managers. No discovery theatre. A direct conversation about your Python stack and what it takes to ship it to production.