voice-mode 2.26.0__tar.gz → 2.28.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. {voice_mode-2.26.0 → voice_mode-2.28.0}/.gitignore +6 -0
  2. {voice_mode-2.26.0 → voice_mode-2.28.0}/CHANGELOG.md +131 -0
  3. {voice_mode-2.26.0 → voice_mode-2.28.0}/PKG-INFO +5 -1
  4. {voice_mode-2.26.0 → voice_mode-2.28.0}/README.md +4 -0
  5. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/__version__.py +1 -1
  6. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/cli.py +730 -7
  7. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/cli_commands/exchanges.py +6 -0
  8. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/config.py +11 -3
  9. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/configuration.py +8 -4
  10. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/whisper_models.py +10 -13
  11. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/systemd/voicemode-frontend.service +1 -1
  12. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/configuration_management.py +7 -2
  13. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/converse.py +75 -24
  14. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/service.py +30 -3
  15. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/kokoro/install.py +4 -3
  16. voice_mode-2.28.0/voice_mode/tools/services/whisper/__init__.py +23 -0
  17. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/whisper/install.py +43 -11
  18. voice_mode-2.28.0/voice_mode/tools/services/whisper/list_models.py +70 -0
  19. voice_mode-2.28.0/voice_mode/tools/services/whisper/model_active.py +54 -0
  20. voice_mode-2.28.0/voice_mode/tools/services/whisper/model_benchmark.py +159 -0
  21. voice_mode-2.26.0/voice_mode/tools/services/whisper/download_model.py → voice_mode-2.28.0/voice_mode/tools/services/whisper/model_install.py +72 -11
  22. voice_mode-2.28.0/voice_mode/tools/services/whisper/model_remove.py +36 -0
  23. voice_mode-2.28.0/voice_mode/tools/services/whisper/models.py +473 -0
  24. voice_mode-2.28.0/voice_mode/utils/services/whisper_helpers.py +446 -0
  25. voice_mode-2.28.0/voice_mode/utils/services/whisper_version.py +138 -0
  26. voice_mode-2.26.0/voice_mode/utils/services/whisper_helpers.py +0 -259
  27. {voice_mode-2.26.0 → voice_mode-2.28.0}/build_hooks.py +0 -0
  28. {voice_mode-2.26.0 → voice_mode-2.28.0}/pyproject.toml +0 -0
  29. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/__init__.py +0 -0
  30. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/__main__.py +0 -0
  31. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/cli_commands/__init__.py +0 -0
  32. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/conversation_logger.py +0 -0
  33. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/core.py +0 -0
  34. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/data/versions.json +0 -0
  35. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/__init__.py +0 -0
  36. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/conversations.py +0 -0
  37. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/filters.py +0 -0
  38. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/formatters.py +0 -0
  39. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/models.py +0 -0
  40. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/reader.py +0 -0
  41. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/exchanges/stats.py +0 -0
  42. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/README.md +0 -0
  43. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/app/api/connection-details/route.ts +0 -0
  44. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/app/favicon.ico +0 -0
  45. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/app/globals.css +0 -0
  46. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/app/layout.tsx +0 -0
  47. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/app/page.tsx +0 -0
  48. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/components/CloseIcon.tsx +0 -0
  49. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/components/NoAgentNotification.tsx +0 -0
  50. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/components/TranscriptionView.tsx +0 -0
  51. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/hooks/useCombinedTranscriptions.ts +0 -0
  52. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/hooks/useLocalMicTrack.ts +0 -0
  53. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/next-env.d.ts +0 -0
  54. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/next.config.mjs +0 -0
  55. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/package-lock.json +0 -0
  56. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/package.json +0 -0
  57. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/pnpm-lock.yaml +0 -0
  58. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/postcss.config.mjs +0 -0
  59. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/tailwind.config.ts +0 -0
  60. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/frontend/tsconfig.json +0 -0
  61. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/prompts/README.md +0 -0
  62. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/prompts/__init__.py +0 -0
  63. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/prompts/converse.py +0 -0
  64. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/prompts/release_notes.py +0 -0
  65. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/prompts/services.py +0 -0
  66. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/provider_discovery.py +0 -0
  67. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/providers.py +0 -0
  68. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/__init__.py +0 -0
  69. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/audio_files.py +0 -0
  70. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/changelog.py +0 -0
  71. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/statistics.py +0 -0
  72. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/resources/version.py +0 -0
  73. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/server.py +0 -0
  74. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/shared.py +0 -0
  75. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/simple_failover.py +0 -0
  76. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/statistics.py +0 -0
  77. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/streaming.py +0 -0
  78. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/launchd/com.voicemode.frontend.plist +0 -0
  79. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/launchd/com.voicemode.kokoro.plist +0 -0
  80. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/launchd/com.voicemode.livekit.plist +0 -0
  81. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/launchd/com.voicemode.whisper.plist +0 -0
  82. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/launchd/start-kokoro-with-health-check.sh +0 -0
  83. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/launchd/start-whisper-with-health-check.sh +0 -0
  84. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/systemd/voicemode-kokoro.service +0 -0
  85. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/systemd/voicemode-livekit.service +0 -0
  86. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/templates/systemd/voicemode-whisper.service +0 -0
  87. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/__init__.py +0 -0
  88. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/dependencies.py +0 -0
  89. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/devices.py +0 -0
  90. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/diagnostics.py +0 -0
  91. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/providers.py +0 -0
  92. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/kokoro/uninstall.py +0 -0
  93. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/list_versions.py +0 -0
  94. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/livekit/__init__.py +0 -0
  95. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/livekit/frontend.py +0 -0
  96. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/livekit/install.py +0 -0
  97. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/livekit/production_server.py +0 -0
  98. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/livekit/uninstall.py +0 -0
  99. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/version_info.py +0 -0
  100. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/services/whisper/uninstall.py +0 -0
  101. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/statistics.py +0 -0
  102. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/tools/voice_registry.py +0 -0
  103. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/__init__.py +0 -0
  104. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/audio_diagnostics.py +0 -0
  105. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/event_logger.py +0 -0
  106. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/ffmpeg_check.py +0 -0
  107. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/format_migration.py +0 -0
  108. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/gpu_detection.py +0 -0
  109. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/migration_helpers.py +0 -0
  110. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/services/common.py +0 -0
  111. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/services/kokoro_helpers.py +0 -0
  112. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/services/livekit_helpers.py +0 -0
  113. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/utils/version_helpers.py +0 -0
  114. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/version.py +0 -0
  115. {voice_mode-2.26.0 → voice_mode-2.28.0}/voice_mode/voice_preferences.py +0 -0
@@ -111,3 +111,9 @@ testdir/
111
111
 
112
112
  # Profiling output
113
113
  *.prof
114
+
115
+ # Model files (should be downloaded, not committed)
116
+ models/
117
+ *.mlpackage/
118
+ *.mlmodel
119
+ *.mlmodelc/
@@ -7,6 +7,137 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.28.0] - 2025-08-23
11
+
12
+ ### Added
13
+ - **Comprehensive CLI help support**
14
+ - Added `-h` and `--help` options to all CLI commands and subcommands
15
+ - Consistent help functionality across all command groups (kokoro, whisper, livekit, config, etc.)
16
+ - Help options available for both groups and individual commands
17
+ - Improved user experience with quick access to command documentation
18
+
19
+ - **Core ML support for whisper.cpp installation**
20
+ - Whisper install now uses CMake instead of Make for better control
21
+ - Automatically enables Core ML support on Apple Silicon Macs
22
+ - Provides ~3x faster encoding performance with Core ML acceleration
23
+ - Core ML models automatically converted during installation
24
+ - Falls back gracefully if Core ML conversion fails
25
+
26
+ - **Enhanced whisper status command**
27
+ - Shows whisper.cpp version information
28
+ - Displays Core ML support status (enabled/disabled)
29
+ - Shows if Core ML model is active for current model
30
+ - Reports GPU acceleration type (Metal/CUDA)
31
+ - Helper utility in `whisper_version.py` for capability detection
32
+
33
+ - **Audio conversion optimization for local whisper**
34
+ - Automatically detects truly local whisper (not SSH-forwarded)
35
+ - Skips WAV to MP3 conversion for local whisper, sending WAV directly
36
+ - Adds timing measurements for audio format conversion
37
+ - Logs conversion time at INFO level for performance monitoring
38
+ - Significantly reduces STT processing time for local deployments
39
+
40
+ - **Whisper model benchmark command**
41
+ - New `whisper model benchmark` CLI command
42
+ - Compares performance across multiple models
43
+ - Shows load time, encode time, and total processing time
44
+ - Calculates real-time factor for each model
45
+ - Fixed timing output by removing --no-prints flag
46
+ - Helps users choose optimal model for speed/accuracy tradeoffs
47
+ - Provides personalized recommendations based on results
48
+
49
+ ### Fixed
50
+ - **MCP server configuration**
51
+ - Fixed .mcp.json to use `uv run voicemode` for local development
52
+ - Removed hardcoded paths for better portability
53
+ - Works correctly with project-local development version
54
+
55
+ - **Whisper model management**
56
+ - Fixed model active command to properly update configuration
57
+ - Fixed naming conflict in model install CLI command
58
+ - Benchmark now correctly shows timing information
59
+ - Core ML conversion errors are now properly reported and handled
60
+
61
+ ## [2.27.0] - 2025-08-20
62
+
63
+ ### Added
64
+ - **CLI version and update commands**
65
+ - New `voice-mode version` command to display current version
66
+ - New `voice-mode update` command to upgrade to latest version
67
+ - Comprehensive bats tests for version and update functionality
68
+ - Automatic version detection from package metadata
69
+
70
+ - **Shell completion support for CLI**
71
+ - New `voice-mode completion` command group with bash, zsh, and fish subcommands
72
+ - Automatic tab completion for all commands, options, and arguments
73
+ - Install.sh automatically configures shell completions during setup
74
+ - Native Click completion mechanism for dynamic suggestions
75
+
76
+ - **Parallel operations documentation**
77
+ - Documented `wait_for_response=False` pattern in converse tool
78
+ - Enables speaking while performing other operations simultaneously
79
+ - Creates more natural conversations by eliminating dead air
80
+ - Marked as RECOMMENDED pattern with clear usage examples
81
+
82
+ - **Comprehensive Whisper model management system**
83
+ - New `whisper models` CLI command to list all available models with status
84
+ - `whisper model active` command to get/set the active model
85
+ - `whisper model install` and `whisper model remove` commands
86
+ - Model registry with complete size/hash metadata for all Whisper models
87
+ - Color-coded output showing installed/available models (green=installed, yellow=selected)
88
+ - Support for English-only models and all multilingual variants
89
+ - Automatic Core ML conversion on Apple Silicon for improved performance
90
+ - Shell completion support for all model management commands
91
+
92
+ - **MCP tools for model management**
93
+ - `list_models` tool to list all available Whisper models with status
94
+ - Enhanced `download_model` tool with registry validation
95
+ - Force download option to re-download corrupted models
96
+ - Skip Core ML option for testing
97
+ - Parity between CLI and MCP interfaces
98
+
99
+ - **Infrastructure improvements**
100
+ - Centralized model registry in `whisper/models.py` with all model metadata
101
+ - Model categorization: tiny, base, small, medium, large, turbo
102
+ - Size information for all models (39MB to 3.1GB)
103
+ - SHA256 hashes for integrity verification
104
+ - Shared download logic extracted to helpers module
105
+ - Dynamic Click-based shell completions replacing static files
106
+ - Comprehensive test suite for model management
107
+
108
+ ### Changed
109
+ - **Configuration file naming**
110
+ - Renamed `.voicemode.env` to `voicemode.env` (removed leading dot)
111
+ - Added backwards compatibility to check for old filename
112
+ - Shows deprecation warning when old filename is used
113
+ - Updated all documentation to reference new filename
114
+ - Updated systemd service templates
115
+
116
+ - Replaced static shell completions with Click-generated dynamic completions
117
+ - Shell completion files now generated from CLI structure
118
+ - Whisper model downloads now use centralized registry for validation
119
+ - Model status checks now verify both file existence and selection
120
+
121
+ ### Fixed
122
+ - **macOS installation improvements**
123
+ - Added coreutils dependency for timeout command support
124
+ - Fixed duplicate launchctl load in service installers
125
+ - Improved zsh PATH configuration by sourcing profile after UV/npm additions
126
+ - Skip sudo prompts on macOS to prevent installation issues
127
+
128
+ - **Test suite fixes**
129
+ - Fixed deprecation warning appearing in help output
130
+ - Renamed deprecated `.voicemode.env` to `voicemode.env` to fix test failures
131
+
132
+ - Whisper model management now properly uses voicemode.env configuration file
133
+ - Test suite updated for all API changes and return value structures
134
+ - Resolved all CI test failures related to service status and diagnostics
135
+
136
+ ### Removed
137
+ - Old static shell completion files
138
+ - SERVICE_COMMANDS.md (replaced by integrated CLI commands)
139
+ - Shell aliases file (functionality moved to Click commands)
140
+
10
141
  ## [2.26.0] - 2025-08-18
11
142
 
12
143
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-mode
3
- Version: 2.26.0
3
+ Version: 2.28.0
4
4
  Summary: VoiceMode - Voice interaction capabilities for AI assistants (formerly voice-mcp)
5
5
  Project-URL: Homepage, https://github.com/mbailey/voicemode
6
6
  Project-URL: Repository, https://github.com/mbailey/voicemode
@@ -98,6 +98,10 @@ Natural voice conversations for AI assistants. Voice Mode brings human-like voic
98
98
  1. **🎤 Computer with microphone and speakers** OR **☁️ LiveKit server** ([LiveKit Cloud](https://docs.livekit.io/home/cloud/) or [self-hosted](https://github.com/livekit/livekit))
99
99
  2. **🔑 OpenAI API Key** (optional) - Voice Mode can install free, open-source transcription and text-to-speech services locally
100
100
 
101
+ **Optional for enhanced performance:**
102
+
103
+ - **🍎 Xcode** (macOS only) - Required for Core ML acceleration of Whisper models (2-3x faster inference). Install from [Mac App Store](https://apps.apple.com/app/xcode/id497799835) then run `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer`
104
+
101
105
  ## Quick Start
102
106
 
103
107
  > 📖 **Using a different tool?** See our [Integration Guides](docs/integrations/README.md) for Cursor, VS Code, Gemini CLI, and more!
@@ -29,6 +29,10 @@ Natural voice conversations for AI assistants. Voice Mode brings human-like voic
29
29
  1. **🎤 Computer with microphone and speakers** OR **☁️ LiveKit server** ([LiveKit Cloud](https://docs.livekit.io/home/cloud/) or [self-hosted](https://github.com/livekit/livekit))
30
30
  2. **🔑 OpenAI API Key** (optional) - Voice Mode can install free, open-source transcription and text-to-speech services locally
31
31
 
32
+ **Optional for enhanced performance:**
33
+
34
+ - **🍎 Xcode** (macOS only) - Required for Core ML acceleration of Whisper models (2-3x faster inference). Install from [Mac App Store](https://apps.apple.com/app/xcode/id497799835) then run `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer`
35
+
32
36
  ## Quick Start
33
37
 
34
38
  > 📖 **Using a different tool?** See our [Integration Guides](docs/integrations/README.md) for Cursor, VS Code, Gemini CLI, and more!
@@ -1,3 +1,3 @@
1
1
  # This file is automatically updated by 'make release'
2
2
  # Do not edit manually
3
- __version__ = "2.26.0"
3
+ __version__ = "2.28.0"