Skip to content
View shaischaudhry's full-sized avatar

Highlights

  • Pro

Block or report shaischaudhry

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
shaischaudhry/README.md
Shais Chaudhry

LinkedIn Email

Senior AI engineer, five years in, mostly remote with US teams.

My work tends to sit between machine learning and backend infrastructure. Computer vision models, retrieval systems, and the services that have to keep them alive once they leave the notebook. Healthcare and industrial platforms for the most part, which is a nice way of saying the output has to be right and somebody will ask you why it wasn't.

I do my own deployment. AWS, Azure and GCP, containers, IaC, the boring parts.

Currently at Devsinc. Before that, four years at Devntech.

Stack

ML and vision   Python PyTorch TensorFlow Keras OpenCV scikit-learn NumPy Pandas

Cloud and infra   Azure AWS GCP Docker Kubernetes Terraform Actions Linux

Services and data   FastAPI Django Node.js PostgreSQL Elasticsearch Neo4j Redis

Models   Whisper Claude OpenAI Gemini Llama Ollama LangChain

How I usually wire a model into a service
                      ┌───────────────────────────────────────┐
  request ──────────► │  durable workflow  (replayable, typed) │
                      └──────────────────┬────────────────────┘
                                         │
                ┌────────────────────────┴────────────────────────┐
                ▼                                                 ▼
    ┌───────────────────────┐                    ┌────────────────────────────┐
    │   DETERMINISTIC       │                    │        MODEL               │
    │  ───────────────────  │                    │  ────────────────────────  │
    │  scoring              │ ◄──── gate ─────── │  inference / generation    │
    │  thresholds           │                    │  behind one interface, so  │
    │  business rules       │                    │  the backend is swappable  │
    │  schema validation    │                    │                            │
    └──────────┬────────────┘                    └─────────────┬──────────────┘
               │                                               │
               │                              typed contract + repair loop
               │                                               │
               │                    ┌──────────────────────────┴──────────┐
               │                    │  retry → reprompt → cheaper model →  │
               │                    │  deterministic path → human queue    │
               │                    └──────────────────────────┬──────────┘
               ▼                                               ▼
    ┌──────────────────────────────────────────────────────────────────────┐
    │  traces: tokens, latency, cost per tenant, full call tree            │
    └──────────────────────────────────────────────────────────────────────┘

Two things I keep coming back to.

The model produces output, it never decides an outcome. Scoring and thresholds stay on the deterministic side of that wall, which is what makes the whole thing auditable when somebody asks how a result was reached.

A retry is step one of five, not a recovery strategy. Reprompt, fall back to something cheaper, fall back to a deterministic path, then put it in front of a human. Each tier logs why it fell through, so failure modes end up as data rather than anecdotes.


contribution graph

Pinned Loading

  1. eslint eslint Public

    Forked from eslint/eslint

    Find and fix problems in your JavaScript code.

    JavaScript