rishi kanajam
Rishi Kanajam · Full-stack & AI engineerSydney, Australia · Full Australian work rights through Sept 2028

I build AI systems that know what they don’t know.

Retrieval pipelines, LLM benchmarks, and health-data infrastructure: each one shipped with the evaluation harness, escalation path, or audit trail that tells you when it's wrong.

Open to engineering roles in Sydney · Krama Core v1.0.0-alpha.3 live on PyPI · Now building: DeceptionArena benchmark harness

Krama Core
v1.0.0-alpha.3
live on PyPI · Apache 2.0
DeceptionArena
1000 / 1000
engine stress tests passing
PathFinder
Idea Disruptor
NGM Group hackathon · 2026
Students Mentored
50+
per semester · USyd

Four of these get the full treatment: the problem, the build, and the one decision worth remembering. Everything else is listed underneath. Each entry links to source, or says why it can’t.

Krama Core

Shipped

Python · FHIR R4 · Pydantic · Cryptography · GitHub Actions · PyPI

Open-source FHIR R4 and compliance SDK for India's ABDM health network. Published to PyPI, Apache 2.0 licensed.

The problem. A clinic in rural Andhra Pradesh wants to send a discharge summary to a hospital in the next district. Between them sits ABDM: ABHA identity, consent artefacts, encrypted exchange, and a gateway with strict async callback contracts. A two-person team can't build all of that before they build the thing they actually set out to build.

What I built. A Python SDK covering the whole path: ABHA identity, HIP/HIU consent and data-exchange flows, FHIR R4 bundle builders, ECDH X25519 key exchange with AES-GCM encryption, gateway resilience through retries and circuit breakers, clinical templates across 12 medical domains, WhatsApp and AI-assisted clinical workflow helpers, and a compliance engine with rule packs for India, Australia, the US and the UK. India's ABDM adapter is the one that talks to a live network; the Australia, UK and US adapters expose identifier and formulary metadata and raise NotImplementedError on network calls. v1.0.0-alpha.3 on PyPI, Apache 2.0, 128 tests, CI on Python 3.10–3.12 with pytest, ruff, bandit and pip-audit.

One decision. Compliance returns blockers, not warnings. The compliance engine is a pre-flight check: purpose, lawful basis, encryption, residency, minimum-necessary sharing. Each failed check comes back as a blocker with a source URL, and the result only passes when the blocker list is empty. It would have been friendlier to emit warnings and let the caller proceed, but the failure mode you're designing against is an engineer shipping on a deadline, and a warning is something you ship past. Country rules live in swappable policy packs, so the same call site is legal in India and refuses in Australia when it should be.

DeceptionArena

In progress

Python · asyncio · aiohttp · SQLite · React · OpenAI · Anthropic · Groq · OpenRouter

Source not public yet

Cross-game LLM deception benchmark: five social deduction games behind one engine interface, with structured decision traces.

The problem. If a model is persuasive under incomplete information, you want to know that before you put it somewhere consequential. Most evaluations ask a model to answer honestly. Almost none put it in a game where deceiving another player is the winning move and then measure what it does.

What I built. Skull, Coup, The Resistance, One Night Ultimate Werewolf and Secret Hitler implemented as pure state machines behind a single interface; 1000/1000 randomised stress tests, 200 seeded games per engine. On top of that: Deception ELO ratings, a 10-axis capability taxonomy, an aiohttp WebSocket server, SQLite run persistence, and a four-screen React dashboard for run setup, live monitoring, analytics, and replay. 15 models across 5 providers are wired in.

One decision. Score the public rationale, not the chain-of-thought. Every model turn writes a structured decision trace: stated rationale, confidence, suspected deceivers, tactic, risk assessment, latency, provider. The dashboard deliberately surfaces the public rationale and not hidden reasoning. A deception benchmark that scores a model on its private thoughts is measuring the wrong object: deception is made of what the other players can observe. Each engine also carries a simulation-fidelity label, so a number never implies more game than the engine actually implements.

Scope, honestly. Real-API runs so far are small: one game per level, two models. The larger multi-model run was an offline deterministic stand-in, and the exports say so. What exists is benchmark infrastructure, not findings.

PathFinder

ShippedIdea Disruptor Award · NGM GroupBuilt with a teammate

FastAPI · Azure AI Language · React · Python

AI triage and referral platform for the Lake Macquarie & Newcastle Suicide Prevention Network. Built with a teammate at NGM Group's hackathon, May 2026.

The problem. Someone reaches out to a small suicide-prevention network at 11pm. The staff who could help are asleep, the intake form is a PDF, and whoever picks it up tomorrow has no way to tell whether this person needs a callback next week or a phone call right now.

What I built. A 24/7 intake chatbot, a QR-based referral portal for frontline staff, and a dashboard that gave the organisation its first analytics. Rule-based risk scoring routes each referral to staff by the training level it requires, across 14 programs, backed by a five-layer escalation protocol and 35+ documented edge cases. FastAPI, Azure AI Language, React. LMNSPN's CEO has since met with us about taking it into production.

One decision. Crisis numbers survive the backend. Lifeline's number is hardcoded in static HTML. If the API is down, the model is rate-limited, or the deploy is broken, the page still shows a human being to call. Everything else in the system is best-effort; that one element is not permitted to depend on anything. The same instinct drove the risk engine: it's rules, not a model, because when it's wrong we need to be able to read why, and borderline cases escalate rather than resolve.

ChronoLens

Shipped

Next.js 14 · TypeScript · GPT-4.1 · Multi-API

Cultural research workspace that labels every AI claim by how far you should trust it. Built solo in about five hours at the OpenAI Codex Hackathon, Sydney.

The problem. A researcher asking about a 14th-century trade route gets back a fluent paragraph with no way to tell which sentence came out of an archive and which one the model inferred. The fluency is the problem: it makes an inference and a citation look identical.

What I built. One query fans out to ten analysis surfaces and six live archive APIs, producing a knowledge graph, geographic transmission flows, image analysis with bounding boxes, and PDF/PowerPoint export. Next.js 14, TypeScript, GPT-4.1.

One decision. Every claim carries its epistemic status. Output is labelled fact, context, hypothesis, or needs-expert-review, and the label travels with the claim all the way into the exported deck. It makes the system look less confident than a plain summary would, which is the point: a researcher can act on a fact and go verify a hypothesis, but a paragraph that blends the two can't be checked at all.

Also built

PDF-Rag

Python · LangChain · ChromaDB · BM25 · Cross-Encoder · Groq · Streamlit

Hybrid retrieval done properly: BM25 and dense search merged with Reciprocal Rank Fusion, then cross-encoder re-ranking. Sentence-aware NLTK chunking, conversational memory, and an LLM-as-judge harness that scores faithfulness, relevancy and context quality.

MangRAG

Python · FastAPI · MongoDB Atlas · HuggingFace · Groq · Streamlit · Docker

Production RAG service over your PDFs: MongoDB Atlas Vector Search, Groq (LLaMA 3.3), local HuggingFace embeddings, served three ways through FastAPI, Streamlit and a CLI. Dockerised, with pytest.

Pinch Recovery Engine

Python · FastAPI · PostgreSQL · Alembic · Jinja2 · Docker

Failed direct debits aren't all the same: insufficient funds is a timing problem, a cancelled authority is churn. Reads the dishonour code, picks a strategy per failure class, never retries a hard failure, never schedules a retry on a day the banks are shut, and attaches a human-readable reasoning string to every decision.

MedVault

Next.js 15 · TypeScript · Firebase · Gemini Pro Vision · Cloud Run · IndexedDB

Multi-tenant clinical platform: Gemini Pro Vision multimodal decision support, IoT cold-chain monitoring, offline-first via IndexedDB, and tenant isolation enforced through Firebase custom claims and Firestore security rules rather than application code.

anomaly-detector

Python · Flask · scikit-learn · Isolation Forest

Log AIOps: a Flask app that reads cloud log files and flags anomalies via Isolation Forest, One-Class SVM, and an ensemble vote across both.

DSA_Learning_Web

React · Vite · Tailwind · Framer Motion · Recharts

Interactive platform for learning data structures: write code, watch the structure change step by step. Built out of two years of tutoring COMP2123, for the concepts students got stuck on most.

The rest of it on GitHub

Every system I've built has the same signature: it tells you how much to trust it. I build AI systems that know what they don't know.

What that looks like. PDF-Rag ships with an LLM-as-judge harness that scores its own faithfulness. ChronoLens labels every claim fact, context, hypothesis, or needs-review. PathFinder hardcodes crisis phone numbers into static HTML so they outlive a backend outage. Pinch Recovery attaches a human-readable reasoning string to every decision it makes about someone's money. Krama Core runs a compliance check that returns blockers before health data moves. DeceptionArena labels each game engine by simulation fidelity so no claim outruns what's actually implemented.

None of that is the interesting part of building a model. It's the part that decides whether anyone can use it.

Day-to-day. I'm from Andhra Pradesh (Telugu), with family in villages where the nearest hospital is 60 kilometres away. When my grandmother needed care, our records travelled on paper. That's why I maintain Krama Core, an open-source FHIR and compliance SDK for India's ABDM health network, published under Nirvya Labs.

I tutor Data Structures & Algorithms to 50+ students a semester at the University of Sydney. Before that: the Data team at St Vincent de Paul Society NSW, and a real-time computer-vision pipeline for autonomous maritime craft at Ocius.

If you're building AI systems, developer tooling, or health infrastructure, I'd like to talk.

BASED
SYDNEY, AU · ROOTS · ANDHRA PRADESH, IN
RIGHTS
SUBCLASS 485 · FULL WORK RIGHTS TO SEP 2028
EDU
M.IT (DATA ANALYTICS) · UNIVERSITY OF SYDNEY
EDU
B.TECH (HONS) CSE · GMR INSTITUTE OF TECHNOLOGY
Apr 2026 – presentCurrent

Engineer & Maintainer, Krama Core (open source)

Nirvya Labs

  • Maintain Krama Core, a Python SDK for India's ABDM health network: ABHA identity, HIP/HIU consent and data-exchange flows, FHIR R4 bundle builders, and clinical templates across 12 medical domains.
  • Built the security and resilience layer (ECDH X25519 key exchange with AES-GCM encryption, gateway retries and circuit breakers) and a compliance engine with rule packs for India, Australia, the US and the UK.
  • Published v1.0.0-alpha.3 to PyPI (`pip install --pre krama-core`). Apache 2.0 licensed, 128 tests, CI across Python 3.10–3.12 with pytest, ruff, bandit and pip-audit.

Python · FHIR R4 · Pydantic · Cryptography · GitHub Actions

Jan 2024 – Nov 2026Current

Academic Tutor, Data Structures & Algorithms

University of Sydney

  • Teach COMP2123 / COMP9123 tutorials (binary trees, priority queues, graph traversals, dynamic programming, complexity analysis) to 50+ students per semester across undergraduate and postgraduate cohorts.
  • Lead improvements to lab materials, grading aids, and test cases; designing better tooling with iterative testing and feedback loops.
  • 2+ years translating complex algorithmic concepts to varied audiences, mentoring on debugging and problem-solving in C++ and Python.

C++ · Python · DSA

Apr 2025 – Apr 2026

Systems Engineer · Data Team

St Vincent de Paul Society NSW

  • Built Python scripts to automate routine data extraction and cleansing, reducing manual effort in the team's ETL processes.
  • Assisted with data integration workflows across SAP, Workday, and Azure data services, ensuring data consistency across source systems.
  • Supported the data team in troubleshooting pipeline issues, validating outputs, and documenting data flows and transformation logic.

Python · SQL · Azure · SAP · Workday

Aug 2024 – Nov 2024

Computer Vision Engineer

Ocius Technology

  • Industry capstone in a team of 4: delivered a real-time maritime object detection pipeline for autonomous unmanned surface vehicles (Bluebottle USVs).
  • Led the model-optimisation workstream: INT8 quantisation, TensorRT, and inference batching. Team-wide effort achieved a 9× throughput gain on NVIDIA Jetson edge hardware.
  • Containerised the pipeline with Docker and shipped to production at Ocius Technology.

Python · YOLOv8 · TensorRT · Docker · CUDA

Apr 2023 – Jul 2023

Frontend Developer Intern

HRVITE Services Pvt Ltd

  • Re-engineered Angular UI components and interaction flows, improving usability and contributing to a measured ~15% increase in user retention.
  • Built data-driven UI components consuming REST APIs; implemented client-side data transformation and state management for complex nested HR datasets.
  • Implemented front-end unit tests and participated in code reviews to reduce regressions and improve maintainability.

Angular · TypeScript · REST APIs

Jul 2022 – Jan 2023

Software Engineer Trainee

Revidd

  • Built 15+ responsive interfaces with ReactJS integrated to REST APIs, contributing to a reported ~25% uplift in user engagement.
  • Operated in Agile teams (stand-ups, sprint planning) and led peer code reviews to accelerate delivery and knowledge transfer.
  • Contributed to backend data services and API development, handling data serialisation and transformation across system boundaries.

React · JavaScript · REST APIs

Nirvya Labs

Engineer & Maintainer, Krama Core (open source)

Open-source healthcare integration tooling

Nirvya Labs is the org the work is published under. Krama Core is its first release: a Python SDK for FHIR R4, consent and data-exchange flows, encryption, and country-aware compliance, starting with India's ABDM network and architected so the same call site works elsewhere.

  • Layered on purpose: clinical domains define what care is documented, country adapters define how it's identified and protected, compliance policies define what must be checked before data moves. India's ABDM adapter is the one wired for live exchange; Australia, the UK and the US carry identifier and formulary metadata only.
  • Apache 2.0 licensed, published to PyPI, CI across Python 3.10–3.12 with pytest, ruff, bandit and pip-audit. Contributions welcome.

OldTalkies

Solo Founder, side project

In build

A Timeless Space

A platform for Telugu cinema, built nights and weekends: editorial content, a verified marketplace of industry professionals (DOPs, music directors, editors, lyricists), craft tools, and community.

  • Anti-toxicity by design: no star comparisons, no box-office tracking, film-centric organisation, AI moderation on community surfaces.
  • Not launched. Target: mid-to-late September 2026.
Languages

Python · TypeScript · JavaScript · SQL · C++

AI / ML

PyTorch · Hugging Face · LangChain · RAG · OpenAI API · Anthropic API · Groq · Evaluation harnesses

Healthcare Data

FHIR R4 · ABDM · HL7

Web & Backend

Next.js · React · FastAPI · Flask · Node.js · Streamlit

Data

PostgreSQL · MongoDB Atlas · ChromaDB · SQLite · Pandas · NumPy

Cloud & DevOps

AWS · Azure · GCP · Firebase · Docker · GitHub Actions · Vercel · TensorRT

Master of Information Technology (Data Analytics & Management)
University of Sydney
2023 – 2025 · Sydney, Australia
B.Tech (Honours) in Computer Science & Engineering
GMR Institute of Technology
2019 – 2023 · India · Bioinformatics focus
AWS Certified AI Practitioner
Sep 2025
Amazon Web Services
McKinsey Forward Program
Apr–Jun 2026 · enrolled
McKinsey & Company

Let’s build something together.

I'm looking for engineering roles at startups: AI/ML, backend, or full stack. Sydney-based, full Australian work rights through Sept 2028. If you're building something where being right matters, let's talk.