Skip to content

Reference Architecture for HVAC AI

Runs on the company's own server. Four constraints wired in: fixed role, fixed source, fixed scope, citation or refusal. Built and run inside one HVAC company.

Read the approach
Channels

The channel the assistant lives on.

Field crews carry phones with messaging apps already on them. The assistant lives inside that messaging app instead of asking anyone to open a new one.

Today the architecture runs through Telegram. The same four constraints — fixed role, fixed source, fixed scope, citation or refusal — apply to any channel. Adding another (Teams, Slack, SMS) means routing inbound messages through the same retrieve-and-cite pipeline.

Live channel

The crew's Telegram group becomes the interface. A field user sends a voice message describing what is in front of them, and the reply lands in the same thread. A photo of an unfamiliar fitting comes back with a name and a usage note. A PDF submittal dropped into the chat becomes a queryable document. Voice, photo, text, and document all enter the same retrieve-and-cite pipeline.

Voice, text, and photo inputs all carry the same four constraints: fixed role, fixed source, fixed scope, citation or refusal. The interface changes with the channel; the rules do not.

The channel needed three properties: voice as a first-class input, runs on every phone, no per-seat licensing. Four options were considered.

SMS / MMS. Carrier-level reliability is strongest in the field, but voice attachments are inconsistent, no read receipts, no threading, MMS payload limits break long answers. Out.

Microsoft Teams. Fits a company already standardized on Microsoft 365, but per-seat licensing forces every apprentice to be provisioned, which doubles onboarding friction. Voice-message UX is buried two taps deep. The bot framework is workable, but the channel is wrong for crews that come and go on projects.

Slack. Same per-seat problem; mobile UX is desktop-first; the workspace boundary fights against multi-employer crews common in union work.

Telegram. Voice messages as a primary input type, free at any scale, runs on the same phone the apprentice already carries, no provisioning. The trade-off accepted: Telegram's servers sit outside US borders, and the question text and final answer text transit those servers as message transport. The mitigation: retrieval, generation, the citation gate, and the audit log all run on the company's own server inside the company's office — document content and the model's reasoning over the corpus never leave the LAN. Telegram is the wire to the field, not where the corpus lives. See Controls & Data for the perimeter description.

The channel layer is an adapter contract: an inbound message resolves to a known user, a known role, and a known project, and is then handed to the same retrieve-and-cite pipeline. A Teams or Slack adapter implements the same contract. SMS would route through a separate provider, with voice transcription substituted for the Telegram-native voice path. The four constraints apply identically across channels — nothing about role, source, scope, or the citation gate depends on the channel.

The architecture →