Skip to content
View saadbutt's full-sized avatar

Block or report saadbutt

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
saadbutt/README.md

Saad Rasool Butt

AI agent and backend engineer. Eight years of backend work, plus a Master's in AI.

Most AI integration work fails in the same few places: unvalidated input going straight into the model, the model's output going straight into a database, nobody counting tokens until the bill arrives, and no record of what happened when it got something wrong. I'm a backend engineer first, so those are the parts I build for.

Most of what I've built is private: client systems under NDA, internal platforms, production backends that will never have a public URL. The repositories below are the ones I can show. Each is a working system with tests and CI, built around the parts that are genuinely hard rather than the parts that demo well.

AI agent infrastructure

The permission layer for the "unvalidated input" and "no record" failures. A gate between an AI agent and the systems it can change: deny-by-default policy, scoped capability grants that expire, confirmation on anything consequential, spend ceilings, and a hash-chained audit log you can verify. The demo is seven scenarios, each one an attack and the guardrail that stops it — including the one most "confirm before executing" implementations get wrong: if you re-ask the model for arguments after approval, you approved a description and executed something else.

Go, standard library only. A TypeScript port of the confirmation core hashes byte-for-byte identically.

The answer to "nobody counted the tokens," applied to RAG specifically. Measures retrieval before you try to fix it: hit rate, MRR, precision and context cost per chunking strategy, against one goldset. Prints the rank each question's first correct chunk landed at and lists what the misses retrieved instead — an average tells you something is wrong, the miss list tells you what.

The answer to "output straight into a database." Measures a brand's existing page, asks a model to assign roles and write copy, then forces that answer through a closed schema where it loses every argument it has with a measured fact. verify runs two different models over one source and exits non-zero if the kits differ.

A production LLM extraction pipeline with an eval harness attached, not a demo. WhatsApp group messages to validated structured JSON across English, Gulf Arabic and Arabizi. Closed schema, mock LLM and form API so it runs with no key, 15/15 exact field match on the goldset.

Backend systems

TCP ingest gateway for GPS and telemetry devices. Sliding-window replay deduplication, mid-stream frame resync, half-open socket detection, and an explicit backpressure policy instead of an unbounded queue. Go, zero dependencies. Real-time, high-volume device data is my day job, not something I read about — I work full time on a telematics platform ingesting this kind of traffic.

Fleet tracking REST API. JWT auth, PostgreSQL with migrations, Redis caching, Swagger docs, Docker Compose.

Ethereum transaction parser with address subscriptions and block querying.


toolgate and device-gateway run gofmt, vet, the full test suite and the race detector in CI, and cross-compile for arm64 — the target they'd actually ship to. ragcheck and brandkit run on Python 3.9 through 3.13, and their CI asserts the behaviour rather than just the tests: ragcheck gates the build on retrieval quality, brandkit builds twice with two different models and fails if the tokens differ.

Where clients bring me in: LLM features that have to work in production (OpenAI and Claude APIs, tool calling, RAG, streaming, retries and fallback, cost control), backend APIs in Python, Node, and Go, and the unglamorous parts most job posts leave out — idempotency, retries, duplicate messages, reconciliation, offline sync.

Available for contract work: Upwork

Pinned Loading

  1. toolgate toolgate Public

    A gate between an AI agent and the systems it can change. Go, zero dependencies. Validated tool calls, scoped authority, frozen-argument confirmation, budget ceilings, tamper-evident audit.

    Go

  2. device-gateway device-gateway Public

    TCP ingest gateway for GPS and telemetry devices. Go, zero dependencies. Sliding-window replay deduplication, reconnect-storm handling, half-open socket detection, explicit backpressure.

    Go

  3. fleet-tracking-backend fleet-tracking-backend Public

    Go REST API for GPS fleet tracking: JWT auth, PostgreSQL with migrations, Redis caching, Swagger docs, Docker Compose.

    Go

  4. ragcheck ragcheck Public

    Measure RAG retrieval before you try to fix it. Hit rate, MRR, precision and context cost per chunking strategy, against one goldset

    Python

  5. whatsapp-message-extractor whatsapp-message-extractor Public

    n8n workflow that turns WhatsApp group messages into validated structured JSON. English, Gulf Arabic and Arabizi. Closed schema, no API key needed to run.

    Python

  6. brandkit brandkit Public

    Measure a brand's existing page, assemble one kit, bind it onto locked skeletons. Two models, identical output.

    Python