arrow_back Back to Projects

2026-10-17

[Hackathon 2/3] ExecuTorch Hackathon — IDK Button, Context-Aware Interpretation on an NPU

Building a context-aware interpreter with Arduino VENTUNO Q and Qualcomm Hexagon NPU. My work as project lead covered model conversion, quantization, NPU inference, and validation.

Hackathon Series 2/3 — ExecuTorch Hackathon

This is the second of three hackathon stories. After campus accessibility at SF Hacks, we built a physical button for revisiting the context of something you just heard.

I joined the IoT track of the ExecuTorch Hackathon, starting on October 17, 2026, at Founders, Inc. in San Francisco. We built IDK Button — The button that knows what is being said using Arduino VENTUNO Q, Qualcomm Hexagon NPU, and the Qualcomm AI platform. I was project lead and handled the NPU pipeline, model conversion, quantization, inference, and validation.

Presenting beside the ExecuTorch Hackathon IoT track display
Introducing the project at the IoT track venue on October 18.
Item Details
Event ExecuTorch Hackathon
Track IoT
Start date October 17, 2026
Venue Founders, Inc., San Francisco Lab
Project IDK Button
Team Three members
Platform Arduino VENTUNO Q, Qualcomm Hexagon NPU, ExecuTorch, QNN/QAIRT, GenieX
My role Project lead; NPU pipeline, inference, quantization, conversion, validation

The submission record gives the final submission time as October 18 at 1:00:02 PM PDT. This article is dated by the event’s start date, 2026-10-17.

GitHub repository · Submitted demo

1. The Problem — Hearing Words Without Understanding the Context

Recognizing every word in a conversation does not guarantee understanding. Words such as ground, port, and bank have several meanings; expressions such as make it depend on the surrounding conversation.

IDK Button uses recent conversation to help explain the current sentence. It transcribes speech, interprets it with context, asks for clarification when the meaning is ambiguous, and lets users save translations and useful vocabulary.

A physical button and rotary knob provide an alternative to retyping a sentence on a phone. The user listens, requests an interpretation, makes any necessary choice, and reviews the result.

Participants developing projects at Founders, Inc.
The venue on October 17, with teams building at each table.

2. Team and My Contribution

Member Role
Minjae Kim (me) Project lead, NPU pipeline and inference, quantization, model conversion, validation
Satyam Sharma Backend, website hosting, SQLite database
Albert Chang Hardware, enclosure, firmware

I prepared and validated the paths for running models on the board. Speech recognition and language inference use different runtimes, so model preparation, inputs, outputs, and application calls had to be connected separately.

Satyam handled the backend, hosting, and SQLite storage. Albert built the physical device, enclosure, and firmware. Together these formed board inference → application processing on the Mac → physical-device and dashboard feedback.

3. Architecture — The Board and the Mac

ASR and LLM inference run on the board’s Qualcomm NPU; the dashboard, backend, and dictionary lookup run on the Mac. Model inference does not require internet access, but the complete application uses both devices.

Stage Location Implementation
Speech recognition VENTUNO Q Hexagon NPU Whisper tiny, ExecuTorch, QNN backend
Context and translation Board NPU Qwen3.5-2B Q4_0, GenieX, Qualcomm QAIRT runtime path
Coordination and UI Mac FastAPI backend, web dashboard
Dictionary and storage Mac Reviewed lexicons, OEWN 2025, SQLite
Button, knob, display Board MCU and peripherals Arduino firmware, RouterBridge, LED matrix

Recognized text goes to FastAPI on the Mac, which requests context analysis and translation from Qwen on the board. USB and ADB port forwarding connect these services. A 127.0.0.1 address alone does not identify the physical execution location; the forwarding path matters.

4. My Work — NPU Inference, Conversion, and Quantization

Whisper Through ExecuTorch

Speech recognition uses the precompiled whisper_qnn_fp16.pte artifact. The runtime loads it with ExecuTorch’s _load_for_executorch(), loads libqnn_executorch_backend.so, and checks that QnnBackend is registered.

Library paths, including ADSP_LIBRARY_PATH, point to the Qualcomm Hexagon runtime libraries. In the submitted architecture, Whisper encoder and decoder inference execute on Hexagon through the QNN/QAIRT HTP path. Audio preprocessing and token selection remain separate orchestration work.

My task extended beyond loading an artifact: checking backend availability, calling the model methods, and passing usable results to the next stage.

Qwen Through a Separate Runtime

Context analysis and translation use unsloth/Qwen3.5-2B-GGUF with Q4_0 quantization. Unlike Whisper’s .pte path, Qwen is served through GenieX’s llama.cpp-based engine and Qualcomm NPU runtime path, with --compute npu selected.

The two preparation and execution paths are distinct:

  • Whisper: ExecuTorch AOT artifact, QNN backend, FP16 execution.
  • Qwen: GGUF Q4_0 model, served through GenieX for context and translation.

Whisper’s FP16 execution and Qwen’s 4-bit quantization should not be conflated. Their file formats, runtimes, and calling conventions differ.

Token Decoding and Alternative Transcriptions

The ASR code calls encoder and decoder methods in a token-level loop. Alongside greedy decoding, it can branch at an uncertain position using a second-choice token to produce another transcription candidate.

No-speech probability and candidate score margins help flag uncertain recognition. Users can compare candidates before translating. An alternative is not guaranteed to be correct, but it exposes a possible recognition error instead of hiding it.

Submitted demo showing the live transcript dashboard and physical device
The demo dashboard separates live transcription from interpretation results.

5. Freezing Context and Resolving Meaning

Context at the Moment of the Button Press

New speech must not silently change a request that is already being processed. The app therefore separates the live transcript from a frozen snapshot captured when the button is pressed.

The code maintains a bounded 30-second audio buffer and sentence history. Recent sentences supply context while the target sentence is handled separately. Listening can continue after the request, while the frozen context remains unchanged.

Three Dictionary Stages

Timing Purpose Data
Before translation Resolve known word and phrase ambiguities Reviewed senses and expression rules
After translation Suggest vocabulary worth saving OEWN 2025 and the project glossary in SQLite
While selecting a word Explain the selected word Reviewed glosses, falling back to Qwen on the board

Known expressions use reviewed rules first. The model handles cases that need additional context rather than replacing every dictionary lookup.

Vote Share Is Not Translation Accuracy

A small model’s self-reported confidence is not a reliable accuracy score. The repository instead samples choices among candidate meanings repeatedly and reverses their order to examine consistency and reduce ordering bias.

The resulting number is the model’s vote share, not the probability that a meaning is correct. A model can consistently choose the wrong answer. Clarification remains part of the flow, and uncalibrated translation_confidence is left empty.

6. Connecting the Physical Device and Dashboard

Albert’s hardware uses a button, rotary knob, and LEDs to communicate state. The board’s 8×13 LED matrix distinguishes recording, ASR, LLM processing, and result selection. Knob input is reflected in the dashboard.

Enclosure front with input, green status LED, and rotary knob
The enclosure groups the input, status indicators, and rotary knob on one side.
A 24-second recording of the enclosure interior, board, power, and microphone connections.

Results provide three perspectives: natural translation, literal translation, and a short contextual explanation. These are different views of the same sentence, not confidence tiers. Saving and reviewing sentences and words connects to Satyam’s backend and SQLite layer.

Saved translations in the submitted demo
Reviewing previously saved interpretations.

7. What Validation Needed to Establish

Artifact loading, backend execution, response format, and semantic correctness need separate checks. Successful HTTP requests and valid JSON do not prove that a translation conveys the intended meaning.

The AI handoff records actual board outputs and their limitations. For example, translating You're grounded. as punishment can still miss the specific restriction on going out implied by the context.

The repository includes mocked model-response tests for APIs, context selection, dictionaries, storage, and hardware/transcript state handling. These complement actual board checks. Model weights, the Qualcomm SDK, and the complete runtime are not included, so cloning the repository alone does not reproduce the NPU environment.

8. What I Took Away

Running models on a device was a substantial part of building the product. Conversion, quantization, runtime configuration, and the board-to-Mac request path all had to work before a button press could produce an interpretation.

As project lead, my NPU work met Satyam’s application and storage layer and Albert’s hardware and firmware. The goal was to make inference available in a form users could review and act on.

Participants on stage with the completed IDK Button device
On stage with the completed device.

Previous: Hackathon 1/3 — SF Hacks 2026, GatorAccess

Next: Hackathon 3/3 — Cal Hacks 13.0, Drigil