Skip to main content

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

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.

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.

Where Python stops and the product starts

Python is where the AI-heavy work happens. That is only an advantage if it stays there, so the boundary matters more than either language does.

Two overlapping sets. Node and NestJS hold the product spine: the product API, authentication, billing and realtime. Python holds the AI-heavy work: inference, embeddings and data pipelines. The overlap between them is deliberately thin, a single typed contract passed over a queue.
One typed contract over a queue keeps Python out of request handling and Node out of model code, so either side can be replaced without touching the other.

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.

Python engineering on your roadmap

A senior team that owns Python workstreams alongside yours: async-native, type-strict and observability-minded, built for real AI workloads.

Explore ongoing product 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.

Code detail on a screen

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.