# soniqo/speech-swift architecture

> Architecture diagram of the GitHub repository soniqo/speech-swift, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/soniqo/speech-swift
- Repository: https://github.com/soniqo/speech-swift

## Overview

Speech Swift is a local Apple Silicon speech-AI library and command-line product, spanning transcription, alignment, speech generation, language models, and audio understanding and processing. A user can invoke the CLI for audio tasks, while the library also exposes a real-time voice pipeline: microphone audio enters the pipeline, which coordinates recognition, optional language-model response, and speech generation. The README documents additional model families and capabilities beyond the sampled source; those are represented at subsystem level. Connections among most CLI commands and model implementations are not established by the excerpts, so they are not drawn.

Main entry points: [`Sources/SpeechCore/VoicePipeline.swift`](https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechCore/VoicePipeline.swift) (Voice pipeline), [`Sources/AudioCommon/PipelineLLM.swift`](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/PipelineLLM.swift) (Pipeline LLM), [`Sources/AudioCLILib/AudioCLI.swift`](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCLILib/AudioCLI.swift) (Speech CLI), [`Sources/Qwen3Chat`](https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3Chat) (On-device chat)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Product entry"]
  node_cli["Speech CLI<br/>[AudioCLI.swift]"]
  node_commands["Audio commands"]
  node_server["Audio server<br/>[AudioServer.swift]"]
end

subgraph group_speech["Speech models"]
  node_asr["Speech recognition"]
  node_streamasr["Streaming ASR"]
  node_align["Forced alignment"]
  node_tts["Speech generation"]
  node_ttsmodels["TTS model families"]
end

subgraph group_language["Language models"]
  node_chat["On-device chat"]
  node_functiongemma["Tool-call LLM"]
  node_translation["Translation models"]
end

subgraph group_audio["Audio understanding"]
  node_vad["Voice activity"]
  node_diarization["Speaker diarization"]
  node_languageid["Language identification"]
  node_enhancement["Enhance and restore"]
  node_separation["Source separation"]
  node_music["Music generation"]
end

subgraph group_runtime["Runtime layers"]
  node_voicepipeline["Voice pipeline"]
  node_llmprotocol["Pipeline LLM<br/>[PipelineLLM.swift]"]
  node_audioio["Audio I/O<br/>[AudioIO.swift]"]
  node_modelio["Model loading<br/>[ModelLoader.swift]"]
end

node_user(("User"))

node_user -->|"invokes"| node_cli
node_cli -->|"dispatches"| node_commands
node_user -->|"requests"| node_server
node_user -->|"feeds audio"| node_voicepipeline
node_voicepipeline -->|"recognizes audio"| node_asr
node_voicepipeline -->|"detects speech"| node_vad
node_voicepipeline -->|"requests response"| node_llmprotocol
node_voicepipeline -->|"generates speech"| node_tts
node_functiongemma -->|"implements"| node_llmprotocol
node_chat -.->|"Qwen bridge"| node_llmprotocol
node_voicepipeline -->|"emits events"| node_user

click node_cli "https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCLILib/AudioCLI.swift"
click node_commands "https://github.com/soniqo/speech-swift/tree/main/Sources/AudioCLILib"
click node_server "https://github.com/soniqo/speech-swift/blob/main/Sources/AudioServer/AudioServer.swift"
click node_asr "https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3ASR"
click node_streamasr "https://github.com/soniqo/speech-swift/tree/main/Sources/NemotronStreamingASR"
click node_align "https://github.com/soniqo/speech-swift/blob/main/Sources/Qwen3ASR/ForcedAligner.swift"
click node_tts "https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3TTS"
click node_ttsmodels "https://github.com/soniqo/speech-swift/tree/main/Sources/CosyVoiceTTS"
click node_chat "https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3Chat"
click node_functiongemma "https://github.com/soniqo/speech-swift/blob/main/Sources/FunctionGemma/FunctionGemmaPipelineLLM.swift"
click node_translation "https://github.com/soniqo/speech-swift/tree/main/Sources/HibikiTranslate"
click node_vad "https://github.com/soniqo/speech-swift/tree/main/Sources/SpeechVAD"
click node_diarization "https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechVAD/DiarizationPipeline.swift"
click node_languageid "https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechLanguageID/SpeechLanguageIdentifier.swift"
click node_enhancement "https://github.com/soniqo/speech-swift/tree/main/Sources/SpeechEnhancement"
click node_separation "https://github.com/soniqo/speech-swift/blob/main/Sources/SourceSeparation/SourceSeparation.swift"
click node_music "https://github.com/soniqo/speech-swift/blob/main/Sources/StableAudio3MusicGen/StableAudio3MusicGen.swift"
click node_voicepipeline "https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechCore/VoicePipeline.swift"
click node_llmprotocol "https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/PipelineLLM.swift"
click node_audioio "https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/AudioIO.swift"
click node_modelio "https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/ModelLoader.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_commands,node_server,node_user toneBlue
class node_asr,node_streamasr,node_align,node_tts,node_ttsmodels toneAmber
class node_chat,node_functiongemma,node_translation toneMint
class node_vad,node_diarization,node_languageid,node_enhancement,node_separation,node_music toneRose
class node_voicepipeline,node_llmprotocol,node_audioio,node_modelio toneIndigo
```

## Components

### Product entry

- [Speech CLI](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCLILib/AudioCLI.swift): `Sources/AudioCLILib/AudioCLI.swift`
- [Audio commands](https://github.com/soniqo/speech-swift/tree/main/Sources/AudioCLILib): `Sources/AudioCLILib`
- [Audio server](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioServer/AudioServer.swift): `Sources/AudioServer/AudioServer.swift`

### Speech models

- [Speech recognition](https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3ASR): `Sources/Qwen3ASR`
- [Streaming ASR](https://github.com/soniqo/speech-swift/tree/main/Sources/NemotronStreamingASR): `Sources/NemotronStreamingASR`
- [Forced alignment](https://github.com/soniqo/speech-swift/blob/main/Sources/Qwen3ASR/ForcedAligner.swift): `Sources/Qwen3ASR/ForcedAligner.swift`
- [Speech generation](https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3TTS): `Sources/Qwen3TTS`
- [TTS model families](https://github.com/soniqo/speech-swift/tree/main/Sources/CosyVoiceTTS): `Sources/CosyVoiceTTS`

### Language models

- [On-device chat](https://github.com/soniqo/speech-swift/tree/main/Sources/Qwen3Chat): `Sources/Qwen3Chat`
- [Tool-call LLM](https://github.com/soniqo/speech-swift/blob/main/Sources/FunctionGemma/FunctionGemmaPipelineLLM.swift): `Sources/FunctionGemma/FunctionGemmaPipelineLLM.swift`
- [Translation models](https://github.com/soniqo/speech-swift/tree/main/Sources/HibikiTranslate): `Sources/HibikiTranslate`

### Audio understanding

- [Voice activity](https://github.com/soniqo/speech-swift/tree/main/Sources/SpeechVAD): `Sources/SpeechVAD`
- [Speaker diarization](https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechVAD/DiarizationPipeline.swift): `Sources/SpeechVAD/DiarizationPipeline.swift`
- [Language identification](https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechLanguageID/SpeechLanguageIdentifier.swift): `Sources/SpeechLanguageID/SpeechLanguageIdentifier.swift`
- [Enhance and restore](https://github.com/soniqo/speech-swift/tree/main/Sources/SpeechEnhancement): `Sources/SpeechEnhancement`
- [Source separation](https://github.com/soniqo/speech-swift/blob/main/Sources/SourceSeparation/SourceSeparation.swift): `Sources/SourceSeparation/SourceSeparation.swift`
- [Music generation](https://github.com/soniqo/speech-swift/blob/main/Sources/StableAudio3MusicGen/StableAudio3MusicGen.swift): `Sources/StableAudio3MusicGen/StableAudio3MusicGen.swift`

### Runtime layers

- [Voice pipeline](https://github.com/soniqo/speech-swift/blob/main/Sources/SpeechCore/VoicePipeline.swift): `Sources/SpeechCore/VoicePipeline.swift`
- [Pipeline LLM](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/PipelineLLM.swift): `Sources/AudioCommon/PipelineLLM.swift`
- [Audio I/O](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/AudioIO.swift): `Sources/AudioCommon/AudioIO.swift`
- [Model loading](https://github.com/soniqo/speech-swift/blob/main/Sources/AudioCommon/ModelLoader.swift): `Sources/AudioCommon/ModelLoader.swift`

### Other components

- **User**

## Connections

- User → Speech CLI: invokes
- Speech CLI → Audio commands: dispatches
- User → Audio server: requests
- User → Voice pipeline: feeds audio
- Voice pipeline → Speech recognition: recognizes audio
- Voice pipeline → Voice activity: detects speech
- Voice pipeline → Pipeline LLM: requests response
- Voice pipeline → Speech generation: generates speech
- Tool-call LLM → Pipeline LLM: implements
- On-device chat → Pipeline LLM: Qwen bridge
- Voice pipeline → User: emits events
