> init engineering.profile

agents · retrieval · infrastructure

4 systems in production · 3 independent builds

AuraRad independent research · ongoing

Debanna Das

I build AI systems that hold up once real traffic hits them. The interesting work is never the model call: it is the routing, the cache invalidation, the schema that rejects a bad response, and the tests that catch it all before a user does.

$ systemctl status --all

# production systems, inspected by view

routechef/travel-agent-apishipped

Routechef — Travel Assistant

AI engineer

A conversational agent that turns "Mumbai to Delhi next week" into curated flight and train options.

Travel sites answer a query with hundreds of undifferentiated results. This agent answers it with a recommendation. A LangGraph state machine drives the conversation: an entry node classifies intent and loops back for anything missing, GPT-4o-mini parses the exchange into a Pydantic-validated query, and a smart router decides via MD5 route hash, a 30-minute cache TTL, and an LLM judgement on freshness keywords, whether to serve cached data or open a WebSocket for live flight and train availability. Geocoding resolves place names against a local database of 8,000+ Indian railway stations before falling back to the Google Maps API, so the common case never leaves the process. The routing decision is the whole design: it is what keeps latency and API spend down without ever serving a stale fare.

routechef/chat-analyticsshipped

Routechef — Analytics Engine

AI engineer

A pipeline that turns the assistant’s raw conversation logs into decisions the product team can act on.

The assistant generated thousands of conversations a week and none of it was being read. This engine makes it legible. A three-stage pipeline ingests raw CSV logs, cleans and caches them, then derives features: temporal buckets, session boundaries from idle gaps, and language detection done by Unicode range rather than a model, Hindi and Tamil are identifiable by script, so a dependency on spaCy or TensorFlow buys nothing. On top of that sit a Random Forest that predicts reply type, K-Means segmentation over user-level features, and rolling DAU/WAU/MAU with stickiness and retention cohorts. The modelling is deliberately shallow: a product team can act on an explainable cluster and cannot act on an embedding.

genie/gencanvasshipped

GENIE AI

ML engineer

Fine-tuned domain models, an evaluation harness to keep them honest, and the GenCanvas architecture behind both.

At GENIE AI, I worked across the full ML development lifecycle from studying LLM architecture fundamentals (transformer attention mechanisms, positional encodings, and layer normalization strategies) to fine-tuning GPT models for domain specific applications in healthcare diagnostics and educational content generation. Developed systematic evaluation frameworks that benchmarked fine-tuned outputs against ground-truth behaviors across precision, recall, and domain specific accuracy metrics. Led the system architecture design for GenCanvas, defining the end-to-end data flow: user natural language inputs processed through spaCy NLP pipelines for entity extraction, routed to domain specific GPT endpoints with custom system prompts, validated against JSON schemas, and rendered as interactive canvas elements via real-time WebSocket connections.

reddit-agent/scheduled-runlive · phase 1

Reddit Growth Agent

Solo: architecture, agent, deployment

An unattended agent that grows a Reddit presence, built so that posting nothing is a valid outcome.

Reddit closed self-service API app creation in June 2026, so PRAW is unavailable: there is no client_id left to obtain. This agent reaches Reddit through Composio’s managed OAuth app instead, which is the ordinary third-party-client model rather than a way around the policy. It runs twice a day with no server, no database and no always-on process: Actions cron is the scheduler, the runner is the compute, and a state.json committed back to git is the store, which also produces the activity that stops GitHub disabling a scheduled workflow after sixty days. Access was never the hard part though. Automating a social presence usually produces spam, and a bot that replies to N posts a day is indistinguishable from one, so the whole architecture is built around restraint. Nine cheapest-first guard clauses throw out most candidates on pure arithmetic before any model call costs anything, and the pass rate is a diagnostic rather than just an outcome: 6% with well-chosen keywords against 40% with generic ones, measured over 168 live posts. What survives is scored with relevance weighted three times above velocity, freshness and crowding, with log1p damping the last two so a single runaway thread cannot dominate the ranking. The ranking schema then carries an explicit skip_all escape hatch, so the model is allowed to answer that nothing today deserves a reply. reddit_io.py is the one hard boundary in the codebase: agent.py never sees a Composio object, a tool slug or a raw Reddit payload, only Candidate dataclasses, so if the vendor disappears it is one file to rewrite rather than the agent.

$ systemctl status aurarad.service

# independent research, running now — not production

aurarad/agent-orchestratorprototype

AuraRad — Radiology Agent

Solo — architecture, agent, viewer

The LLM orchestrates and writes; deterministic tools compute.

Three cooperating planes. A client plane where the entire study lives in browser memory: JSZip extraction, Cornerstone3D rendering with HU-accurate windowing, nothing persisted, so there is no PHI at rest. An API plane of Next.js route handlers that hold the keys, gate every request behind a shared secret and a fixed-window per-IP rate limiter, and route server-to-server fetches through an SSRF host:port allowlist. And an intelligence plane split in two on purpose: one providers.ts facade over three OpenAI-compatible vendors: OpenRouter, NVIDIA Build and Google Gemini, so swapping a provider is a config change rather than a code change, beside an in-process ToolRegistry of seven deterministic radiology tools driven by a ReAct loop. The registry mirrors MCP’s name/description/inputSchema/execute contract without the transport, so it ports to real MCP later. runAgent takes its chat-completion function and its registry as injected dependencies, which is why 360+ tests exercise tool dispatch, error paths, the turn budget and the trace shape with no network at all. Every tool returns evidence carrying the slice it came from, and that one field is the reason a finding in the report is clickable back to the pixels behind it.

# A research prototype, not a validated medical device, with no HIPAA controls. The disease classifier is a keyword stub awaiting a real model; most current VLMs will not return CT bounding boxes, so approximate markers dominate and true localisation needs a detection model.

$ git log --grep=decision --format=full

# what I turned down, and the defence for turning it down

--unit
  • routechef/travel-agent-api

    LangGraph state machine
    plain function calls
    Explicit state machines are more maintainable than implicit control flow. LangGraph provides visualization, debugging, and clear separation of concerns.
  • routechef/travel-agent-api

    GPT-4o-mini to parse, GPT-4o to respond
    one model for both
    Cost optimization without sacrificing quality where it matters. Parsing needs consistency (cheap model, low temp), responses need quality (better model, higher temp).
  • routechef/travel-agent-api

    In-memory cache
    Redis
    For the current scale and demo nature, in-memory is simpler and faster. Redis would be the first upgrade for production horizontal scaling.
  • routechef/travel-agent-api

    Mock-data fallback
    error pages
    User experience priority: partial functionality is better than complete failure. Users get sample data and can see the system’s potential.
  • routechef/chat-analytics

    Regex and Unicode ranges
    an NLP model
    Regex is deterministic, fast, and requires no training data. For domain-specific tasks like detecting train numbers (5 digits), it’s actually more accurate than generic NLP.
  • routechef/chat-analytics

    CSV files
    a database
    For a CLI tool processing files under 100MB, SQLite or CSV is sufficient. Adding a database adds operational complexity without benefit for this use case.
  • routechef/chat-analytics

    matplotlib for static plots
    Plotly for everything
    Matplotlib is better for publication-quality static images. Plotly is used separately for interactive dashboards where its JavaScript interactivity shines.
  • aurarad/agent-orchestrator

    In-process tool registry
    real MCP
    Same contract, zero transport overhead; trivially portable to MCP later.
  • aurarad/agent-orchestrator

    Turn cap of 8
    the original 20
    One malicious request could burn ~20 LLM calls; 8 bounds wallet exposure and matches practical convergence (agent is told to aim for 2–5 tool calls).
  • aurarad/agent-orchestrator

    One model for draft and agent turns
    switching models mid-run
    No silent model switching mid-run: the trace honestly reflects one model’s work.
  • aurarad/agent-orchestrator

    No database
    persisting studies
    Simplicity + no PHI-at-rest; contexts made the swap-in path clear.
  • aurarad/agent-orchestrator

    Keyword-stub disease classifier
    waiting for a real model
    Ships the agent architecture now; the signature is stable so a real model is a drop-in body swap.
  • aurarad/agent-orchestrator

    window.print()
    a PDF library
    Zero dependencies, browser-native pagination, robust one-ID CSS strategy.
  • aurarad/agent-orchestrator

    Shared secret in the browser bundle
    full session auth
    Prototype tradeoff, explicitly documented; keeps casual abusers off the LLM wallet; sessions are the stated production path.
  • reddit-agent/scheduled-run

    Composio
    PRAW
    Not a preference: PRAW is unavailable post-June-2026. Isolated behind one file. Named the tradeoff before being asked.
  • reddit-agent/scheduled-run

    Caps that ship deliberately low
    a schedule for raising them
    A new low-karma account that comments aggressively gets spam-filtered. Currently 1 comment/day and posting off. Raise on observed gates, not on a calendar.
  • reddit-agent/scheduled-run

    Claude Opus 5
    a cheaper model
    Only 3–4 calls a day, so cost is negligible, and quality is the entire product: a generic comment is worse than no comment. The prefilter is what keeps the bill down, not the model tier.
  • reddit-agent/scheduled-run

    Runtime tool discovery
    hardcoded slugs
    Slugs are unpublished and mutable; hardcoding kills the unattended run. The read/write enforcement caught a real bug.
  • reddit-agent/scheduled-run

    state.json in git
    a database
    Tiny data, one writer, serialised by a concurrency group, free audit trail, and the commit doubles as the 60-day keep-alive. Revisit at multiple accounts.
  • reddit-agent/scheduled-run

    31 asserts and a __main__ loop
    pytest
    Zero dependencies, zero config, runs anywhere. 31 asserts and a __main__ loop. If it needed fixtures or parametrisation, I’d add pytest.
  • reddit-agent/scheduled-run

    Scoring weights as module constants
    config
    Changing them requires understanding the formula, so they live next to it. Everything a non-programmer would tune is in config.toml.
  • reddit-agent/scheduled-run

    Two files
    a package layout
    Split on replaceable boundaries, not word count. The one boundary that matters is enforced absolutely.
  • reddit-agent/scheduled-run

    Feeding subreddit rules to the model
    automating a no-bots policy judgement
    I feed the rules to the model but don’t pretend to automate a policy judgement. Which subreddits get touched is a human decision, documented in three places.
  • reddit-agent/scheduled-run

    print() and a CI summary
    a logging framework
    Output is "here’s my draft"; report() prints and writes the CI summary. git log -p state.json is the audit trail.

# every defence above is quoted from the project documentation, not written for this page

$ python train.py --model mlp --data spirals

# a real network, training in your browser: no server, no pretrained weights

mlp/spirals · 2-8-1 · tanhpaused

shaded by confidence · points are the training set

epoch
0
loss
acc

loss

waiting for first epoch
activation
retrieval/bm25-vs-embeddingsloading index

fetching vectors…

$ gh repo list --owner dasdebanna

# independent builds, techniques taken end to end

$ journalctl --unit teams

# what I ran, and how it stayed shippable

Team LeadBITS Alumni Association (BITSAA International)

Led strategic initiatives to grow global alumni engagement across 50+ countries, coordinating a distributed team to launch mentorship programs and regional chapters that strengthened the BITS alumni network.

Technical Team LeadTeam BITS

Led a 12-person development team to deliver five flagship campus projects including event management systems and student portals, establishing code review processes and sprint planning that kept technical quality high as the team scaled.

Latest

News

2 pinned · 6 entries
AchievementPinned

Submitted Undergraduate Thesis at UPenn on CT-Based Hemothorax Detection: Comparing Transfer Learning and From-Scratch Training Approaches with nnU-Net

Read the thesis
ExperiencePinned

Joined the Advanced Cardiovascular Imaging Lab at Penn Medicine

Began working on AI-assisted hemothorax detection in trauma CT, supported by NIH R01 funding through UPenn and the Reliance Foundation Undergraduate Scholars Program.

Lab page
Experience

Joined RouteChef as an AI Engineer Intern

Working on AI and vernacular language support to help Tier 2/3 city travelers in India find confirmed itineraries across WhatsApp, Android, and web—making travel booking accessible in the language they're most comfortable with.

LinkedIn Post
Achievement

Ranked among the top 1% and 2% globally in Kaggle competitions

Ranked top 1% in Kaggle's Predict Future Sales competition (score: 0.75) and top 2% in the Loan Approval competition (score: 0.96).

Kaggle Profile
Achievement

Promoted to Team Leader, BITSAA International

Recognized with a promotion for demonstrating outstanding leadership and commitment to the BITSAA mission.

Promotions at BITSAA
Achievement

Newcomer Award, BITSAA International

Recognised for volunteer work with the People Strategy Team, supporting alumni engagement across 50+ countries.

Newcomers Awards

$ open ~/journey/*.jpeg

# click a logo to see pictures

$ whoami --contact

# open to agentic systems, retrieval, ML infrastructure

Location
University of Pennsylvania, Pennsylvania 19104, USA (map)

$ exit 0