FM-03 // ENGINEERING

Tech Stack

Updated Jan 15, 2025 · Contributors: nikhil
Table of Contents

Philosophy

We choose technologies based on:

  • Developer productivity - How fast can we ship with this tool?
  • Ecosystem maturity - Is this battle-tested with good documentation and community support?
  • Operational simplicity - Can we run and debug this without a dedicated platform team?
  • Right tool for the job - We don’t use a single language or framework for everything

Platform Backend

  • Python - Primary backend language. The AI/ML ecosystem lives in Python, and our platform is deeply integrated with model inference, evaluation pipelines, and data processing.
  • FastAPI - API framework. Async, typed, and fast.
  • PostgreSQL - Primary database for structured data.
  • Redis - Caching, rate limiting, and real-time features.
  • Celery - Background task processing for evaluations and simulations.

AI/ML Pipeline

  • Custom evaluation framework - Built in-house for hallucination detection, factual accuracy, and custom metrics.
  • LangChain / LlamaIndex integrations - First-class support for the major agent frameworks.
  • OpenTelemetry - Tracing standard for our monitoring pipeline.

Frontend

  • Astro - Static site generation for the marketing site and docs.
  • React - Interactive components and the application dashboard.
  • Tailwind CSS - Utility-first styling.
  • TypeScript - Type safety across the frontend.

Infrastructure

  • AWS - Primary cloud provider.
  • Docker - Containerization for all services.
  • GitHub Actions - CI/CD pipelines.
  • Terraform - Infrastructure as code.

How We Choose New Tools

Adding a new tool or dependency is a decision with long-term maintenance implications. Before adding something new:

  1. Can an existing tool in our stack solve this?
  2. Is this widely adopted with active maintenance?
  3. Are we willing to own the operational complexity?
  4. Does anyone on the team have experience with it?

If you want to introduce a new technology, write a short RFC explaining the problem, why existing tools don’t work, and the trade-offs of the proposed solution.