Workflow: Small Language Model for Amateur Radio Repeater Operations (Linux)

A practical, Part 97-aware architecture and implementation sequence for integrating an on-prem Small Language Model (SLM) with a Linux-based repeater controller stack.

Revision date: 9 January 2026  |  Audience: Repeater trustees, sysops, and club technical committees

1. Scope and goals

This document describes a repeatable workflow for deploying a Small Language Model (SLM) alongside an amateur radio repeater controller in a Linux environment. The intent is to improve operational ergonomics (sysop assistance, configuration support, incident response, and status automation) while maintaining clear compliance boundaries for transmissions over the amateur service.

Operating principle: Treat the SLM as a control-plane assistant first, and only a radio-plane transmitter by explicit, tightly bounded design.

In practice: log, summarize, and recommend automatically; transmit automatically only for well-defined, policy-allowed announcements such as station ID and pre-approved telemetry, under control operator responsibility.

Primary SLM use cases

  • Sysop copiloting: Natural-language interface for common maintenance tasks, “what changed” summaries, and step-by-step troubleshooting suggestions.
  • Operational logging: Convert received audio into searchable text for post-incident review and trend analysis (local-only storage).
  • Policy-aware moderation: Assist in identifying patterns that may warrant human intervention (stuck carrier, repeated kerchunking, abusive behavior), without automated punitive actions unless you explicitly enable them.
  • Announcement generation: Generate or select pre-approved announcements (e.g., “link established,” “site on generator power,” “scheduled net starts in 10 minutes”) and optionally render via TTS.
  • Command translation: Convert a sysop’s typed request into a validated command (DTMF sequence, AllStar command, or SvxLink event) using an allowlist.

2. Regulatory and operational constraints (U.S. context)

Before integrating AI with RF, write down what the system is allowed to do. In the United States, Part 97 provides key constraints on transmissions, including prohibited transmissions and requirements for station identification.1, 2 The FCC also publishes operational guidance for amateur communications and operations.3

Design rules of thumb

  • No “meaning-obscuring” encoding: Do not encrypt, scramble, or otherwise obscure the meaning of content carried over RF. Keep all transmitted content plainly intelligible to ordinary amateur operators.1
  • Station ID is non-negotiable: Ensure the transmitter identifies at the required cadence and circumstances. Treat ID as a core feature that the AI must never disable.2
  • Human accountability remains: The SLM does not become a “control operator.” It produces recommendations and executes only those actions you explicitly permit via configuration and safeguards.
  • Prefer “assistive” over “autonomous” RF: Restrict autonomous RF output to pre-approved, template-based content, reviewed by the licensee/trustee.

Practical compliance pattern: Separate the system into (1) a receive-side intelligence pipeline (STT → log → summarize) and (2) a bounded transmit pipeline (allowlisted events → pre-approved phrases → optional TTS).

This is a technical design choice that reduces the risk of accidental prohibited content transmission.

3. Reference architecture

The safest integration pattern is to run the repeater controller and the SLM as separate services connected by a narrow, policy-checked interface.

High-level block diagram (control plane vs RF plane)

RF Rx audio + COR/COS
        |
        v
[Repeater controller: AllStar/app_rpt or SvxLink]
        |                    \
        | audio tap (ALSA/UDP) \  control adapter (commands/events)
        v                       v
[STT service] ---> [Local log store / vector index] ---> [SLM service]
    |                         ^                             |
    |                         |                             |
    +---- alerts/metrics -----+------ policy guardrails ----+
                                  |
                                  v
                      [TX actions: allowlist only]
                      (play pre-approved audio / TTS)

Linux repeater controller options

Option Strengths SLM integration “hooks”
AllStarLink Widely used VoIP-linked repeater/node ecosystem built on Asterisk + app_rpt.6, 7 DTMF command model (standard commands), Asterisk interfaces, audio playback and telemetry patterns.8
SvxLink Linux repeater controller / EchoLink stack with flexible configuration and modules.4, 5 ALSA/UDP audio devices and module configuration (e.g., DTMF handling) provide control integration points.5, 9

You can run both stacks in parallel (e.g., SvxLink for local RF control and AllStar for linking) but you should only introduce that complexity if you already have strong operational reasons to do so.

4. Implementation workflow

This workflow assumes you already have a functioning repeater controller and RF chain. The SLM is added incrementally, starting with passive observation and moving toward bounded automation.

Phase 0 — Write requirements and “do not transmit” boundaries

  1. Define your automation envelope: List which events may trigger automatic RF audio (e.g., ID, link status, site power state). Everything else is “recommend-only.”
  2. Define your command allowlist: Enumerate permissible control actions (e.g., enable/disable a link, adjust courtesy tone profile, enable timeout timer). Assign each action to a concrete controller command (DTMF, CLI, or API call).
  3. Decide on your retention policy: If you log audio/text, decide how long you keep it and who can access it. Document it for club governance and transparency.

Phase 1 — Provision and harden the Linux host

  1. Choose a stable distro: Debian or Ubuntu LTS are typical for repeaters and local AI stacks.
  2. Segment networks: Put controller management interfaces on an admin VLAN. If you use internet linking, keep that path separate from admin access.
  3. Implement least privilege: Run each service (controller, STT, SLM, adapters) under a dedicated user, with systemd unit hardening (no new privileges, restricted filesystem access).
  4. Establish observability: Journald + log rotation + simple metrics (CPU, disk, temperature). Ensure you can remote in out-of-band.

Phase 2 — Create an audio “tap” and event feed

Your SLM cannot reason about on-air activity unless you give it structured inputs. Start with (a) received audio and (b) explicit events (COR/COS changes, transmitter keyed, link state changes).

  • Audio capture: Use ALSA devices or UDP audio streaming where supported. SvxLink explicitly supports audio devices specified as alsa:…, oss:…, or udp:… in configuration.9
  • Segmentation: Use COR/COS (or squelch logic) to bound “utterances” and avoid transcribing dead air.
  • Event normalization: Represent events as JSON lines (local file or message bus) so downstream services can subscribe without coupling.

Phase 3 — Add offline speech-to-text (STT)

STT provides the most value early because it is passive and supports logging, summaries, and searchable incident timelines.

STT option What it is When to choose
whisper.cpp High-performance C/C++ inference implementation of Whisper ASR with CPU-only support and quantization options.12 You want strong accuracy on mixed conditions, can afford more CPU, and prefer a mature offline pipeline.
Vosk Offline speech recognition toolkit with APIs and a variety of language models.13 You want lower compute overhead, real-time streaming integration, and controllable vocabulary adaptation.

Best practice: Store the raw audio locally for a short window (e.g., 24–72 hours) and keep longer-term text summaries. This provides auditability without indefinite retention of audio.

Phase 4 — Stand up the SLM runtime

For small, on-prem models, prefer runtimes designed for local inference and quantized weights.

  • llama.cpp: A C/C++ inference engine designed to run LLMs efficiently on a wide range of hardware with minimal setup.10
  • Ollama: A local model runner with a straightforward workflow and API for integrating models into services on Linux.11

Phase 5 — Add policy guardrails and “tool calling”

The SLM should not directly execute shell commands, key transmitters, or change configurations. Instead, implement a narrow adapter that exposes a small set of tools that the SLM can request, and enforce a strict allowlist.

  1. Create a command schema: Define commands like link.connect(node), link.disconnect(node), status.read(), announce.play(template_id).
  2. Enforce allowlists and rate limits: Reject any tool invocation not explicitly allowed. Apply “cooldowns” to prevent repeated actions.
  3. Require confirmation for sensitive actions: For actions that could affect access (e.g., disabling links, changing timers), require human approval (web UI button, SMS, or SSH confirmation).
  4. Log every tool invocation: Store “who/what/when/why” for later review.

Phase 6 — Add bounded transmit capability (optional)

If you choose to transmit AI-generated audio, do so conservatively. The simplest, safest path is template selection (pre-recorded voice files) instead of unconstrained generation.

  • Tier 1 (recommended): Pre-recorded WAV prompts (human voice) selected by the SLM.
  • Tier 2: Offline TTS with a fixed voice and fixed phrase templates, such as Piper (noting project lineage/migration).14
  • Tier 3 (not recommended): Fully generative free-form speech over RF.

Regardless of tier, ensure station identification timing remains correct and cannot be suppressed by the AI.2

Phase 7 — Integrate with your controller stack

Use controller-native mechanisms first; do not “hack around” them. Examples include:

  • AllStarLink: Leverage standard command conventions and DTMF-based control models as your interface contract.8
  • SvxLink: Use module configuration and supported audio device interfaces (ALSA/UDP) to inject or route audio appropriately.5, 9

Phase 8 — Operationalize: testing, monitoring, and maintenance

  1. Offline test harness: Feed recorded audio into the STT pipeline; verify transcripts and SLM actions without keying the transmitter.
  2. Chaos tests: Simulate network loss, high CPU load, full disk, and stuck audio device; verify the repeater controller remains stable.
  3. Watchdogs: Use systemd watchdogs and health endpoints for each service.
  4. Update cadence: Patch OS and dependencies; pin model versions and store hashes so you know exactly what changed between revisions.

5. Rack-mount hardware guidance

For repeaters, “suitable” hardware is defined less by peak performance and more by reliability, manageability, and environmental tolerance. Your design should assume unattended operation, power cycling, and intermittent network reachability.

Compute sizing (practical guidance)

  • Baseline controller only: 2–4 modern CPU cores, 4–8 GB RAM, SSD storage.
  • Controller + offline STT: 4–8 cores, 16 GB RAM, NVMe preferred.
  • Controller + STT + SLM: 8+ cores, 32 GB RAM (especially if hosting multiple quantized models and an index), NVMe, strong cooling.

Rack patterns (with concrete examples)

Pattern What it looks like Why it works
Short-depth 1U edge server Example: Supermicro SYS-5019D-4C-FN8TP (Xeon D-class CPU, M.2 support, PCIe expansion).16 High reliability, better NIC options, and “appliance-like” behavior for remote sites.
Entry 1U enterprise server Example: Dell PowerEdge R240 (1U, iDRAC management; deeper chassis).17 Strong remote management and parts ecosystem; good for climate-controlled racks and club sites.
1U + low-power GPU (optional) Low-profile, low-power GPU such as NVIDIA T400 (30 W class) in a compatible chassis.18 Can accelerate certain inference backends while staying within modest thermal/power budgets.

Non-negotiable hardware features for repeater sites

  • Remote management: IPMI/iKVM or vendor out-of-band management (especially if the site is hard to reach).
  • Storage resilience: Mirror SSD/NVMe if feasible; at minimum, keep a known-good image for fast restore.
  • Power conditioning: UPS sized for graceful shutdown and short outages; surge protection; consider DC-native power if the site is DC-backed.
  • Thermal margin: Assume dust, filters, and seasonal temperature variation; avoid designs that run near thermal limits.
  • Audio I/O stability: Prefer known-stable USB audio interfaces; consider redundancy (spare interface in the kit) due to field failure rates.

RF/EMI and site engineering considerations

  • Physical separation: Keep the compute chassis, switching supplies, and Ethernet switching as far from receiver front-ends, preamps, and cavities as practical.
  • Cable hygiene: Use shielded audio cabling where appropriate, avoid ground loops, and apply ferrites on USB/audio/Ethernet leads if you observe conducted RF issues.
  • Bonding and grounding: Bond racks, chassis, and surge protectors to the site grounding system. Treat the server as a noise source until proven otherwise.
  • Fans and airflow direction: Prefer front-to-back airflow consistency across the rack to avoid hot spots. Avoid consumer gear that exhausts sideways into adjacent RF equipment.

Rack layout checklist

  • Top-down layout: RF cavities/filters and receivers away from switching supplies; compute and network lower in the rack when possible.
  • Serviceability: Label all audio, PTT/COR, and network connections; keep a printed “as-built” diagram inside the rack door.
  • Spare strategy: Stock a spare SSD/NVMe with a tested image, plus a spare USB audio interface, to reduce mean time to restore.
  • Time source: Ensure stable timekeeping (NTP where available; local RTC otherwise) so logs and incident timelines remain reliable.

Practical recommendation: If you are deploying to a mountaintop or unattended site, prioritize (1) short-depth chassis, (2) low power draw, (3) out-of-band management, and (4) “simple-to-restore” images over raw compute.

6. Suggested service decomposition

Keep each component small and observable. A simple split that scales from “passive logging” to “bounded automation” looks like this:

Service Responsibilities Failure impact
controller AllStar/app_rpt or SvxLink: RF control, IDs, linking, telemetry. Critical. Must continue operating without SLM/STT.
audio-tap Copies Rx audio (and optionally Tx audio) to a local stream for processing. Non-critical. Logging may be degraded; RF remains functional.
stt Transcribes audio to text (whisper.cpp or Vosk), timestamps segments. Non-critical. Summaries/search unavailable if down.
slm Summarizes, classifies, suggests actions; requests tool calls via a strict schema. Non-critical. RF remains functional if down.
policy-gateway Allowlist, rate limits, human-approval gates, and command execution adapter. Important for safety. Should fail closed (no actions).
announcer Plays pre-approved audio or bounded TTS into controller audio path. Should fail safe (no unexpected TX audio).

Packet / messaging add-ons (optional)

If your site includes APRS or packet workflows, Dire Wolf is a common Linux packet modem/TNC component that can be integrated into the same observability and event pipeline.15

Footnotes (MLA) and live links

  1. “47 CFR § 97.113 — Prohibited Transmissions.” Legal Information Institute, Cornell Law School, https://www.law.cornell.edu/cfr/text/47/97.113. Accessed 9 Jan. 2026. https://www.law.cornell.edu/cfr/text/47/97.113 back
  2. “47 CFR § 97.119 — Station Identification.” eCFR, National Archives, https://www.ecfr.gov/current/title-47/chapter-I/subchapter-D/part-97/subpart-B/section-97.119. Accessed 9 Jan. 2026. https://www.ecfr.gov/current/title-47/chapter-I/subchapter-D/part-97/subpart-B/section-97.119 back
  3. “Amateur Communications & Operations FAQ.” Federal Communications Commission, 21 Apr. 2017, https://www.fcc.gov/wireless/bureau-divisions/mobility-division/amateur-radio-service/amateur-communications-operations. Accessed 9 Jan. 2026. https://www.fcc.gov/wireless/bureau-divisions/mobility-division/amateur-radio-service/amateur-communications-operations back
  4. “SvxLink.” svxlink.org, https://www.svxlink.org/. Accessed 9 Jan. 2026. https://www.svxlink.org/ back
  5. “svxlink.conf(5) — Configuration File for the SvxLink Server.” svxlink.org Documentation, https://www.svxlink.org/doc/man/man5/svxlink.conf.5.html. Accessed 9 Jan. 2026. https://www.svxlink.org/doc/man/man5/svxlink.conf.5.html back
  6. “AllStarLink Wiki — Main Page.” AllStarLink, 13 May 2025, https://wiki.allstarlink.org/wiki/Main_Page. Accessed 9 Jan. 2026. https://wiki.allstarlink.org/wiki/Main_Page back
  7. “AllStarLink.org.” AllStarLink, https://www.allstarlink.org/. Accessed 9 Jan. 2026. https://www.allstarlink.org/ back
  8. “AllStarLink Standard Commands.” AllStarLink Wiki, 11 July 2025, https://wiki.allstarlink.org/wiki/AllStarLink_Standard_Commands. Accessed 9 Jan. 2026. https://wiki.allstarlink.org/wiki/AllStarLink_Standard_Commands back
  9. “svxlink.conf(5) — Audio Device Specifications.” Ubuntu Manpages, https://manpages.ubuntu.com/manpages/xenial/man5/svxlink.conf.5.html. Accessed 9 Jan. 2026. https://manpages.ubuntu.com/manpages/xenial/man5/svxlink.conf.5.html back
  10. “ggml-org/llama.cpp: LLM Inference in C/C++.” GitHub, https://github.com/ggml-org/llama.cpp. Accessed 9 Jan. 2026. https://github.com/ggml-org/llama.cpp back
  11. “Ollama’s Documentation.” Ollama, https://docs.ollama.com/. Accessed 9 Jan. 2026. https://docs.ollama.com/ back
  12. “ggml-org/whisper.cpp.” GitHub, https://github.com/ggml-org/whisper.cpp. Accessed 9 Jan. 2026. https://github.com/ggml-org/whisper.cpp back
  13. “Vosk Offline Speech Recognition API.” Alpha Cephei, https://alphacephei.com/vosk/. Accessed 9 Jan. 2026. https://alphacephei.com/vosk/ back
  14. “rhasspy/piper: A Fast, Local Neural Text to Speech System.” GitHub, archived 6 Oct. 2025, https://github.com/rhasspy/piper. Accessed 9 Jan. 2026. https://github.com/rhasspy/piper back
  15. Brennan, John (WB2OSZ). “Dire Wolf.” GitHub, https://github.com/wb2osz/direwolf. Accessed 9 Jan. 2026. https://github.com/wb2osz/direwolf back
  16. “SYS-5019D-4C-FN8TP.” Supermicro, https://www.supermicro.com/en/products/system/1u/5019/sys-5019d-4c-fn8tp.php. Accessed 9 Jan. 2026. https://www.supermicro.com/en/products/system/1u/5019/sys-5019d-4c-fn8tp.php back
  17. “PowerEdge R240 Spec Sheet.” Dell Technologies, https://i.dell.com/sites/csdocuments/product_docs/en/poweredge-r240-spec-sheet.pdf. Accessed 9 Jan. 2026. https://i.dell.com/sites/csdocuments/product_docs/en/poweredge-r240-spec-sheet.pdf back
  18. “NVIDIA T400 Datasheet.” NVIDIA, https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/productspage/quadro/quadro-desktop/proviz-print-nvidia-T400-datasheet-us-nvidia-1670004-r5-web.pdf. Accessed 9 Jan. 2026. https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/productspage/quadro/quadro-desktop/proviz-print-nvidia-T400-datasheet-us-nvidia-1670004-r5-web.pdf back

Note: This document is technical guidance, not legal advice. Consult the primary FCC rules and qualified counsel for formal interpretations.


Print tip: Use your browser’s print dialog, select “Letter” paper, and ensure margins are not overridden (the stylesheet defines 1-inch margins via @page).