voice-mode 2.20.0__tar.gz → 2.20.1__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 (77) hide show
  1. {voice_mode-2.20.0 → voice_mode-2.20.1}/CHANGELOG.md +8 -0
  2. {voice_mode-2.20.0 → voice_mode-2.20.1}/PKG-INFO +1 -1
  3. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/__version__.py +1 -1
  4. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/converse.py +12 -0
  5. {voice_mode-2.20.0 → voice_mode-2.20.1}/.gitignore +0 -0
  6. {voice_mode-2.20.0 → voice_mode-2.20.1}/README.md +0 -0
  7. {voice_mode-2.20.0 → voice_mode-2.20.1}/pyproject.toml +0 -0
  8. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/__init__.py +0 -0
  9. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/__main__.py +0 -0
  10. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/cli.py +0 -0
  11. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/cli_commands/__init__.py +0 -0
  12. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/cli_commands/exchanges.py +0 -0
  13. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/config.py +0 -0
  14. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/conversation_logger.py +0 -0
  15. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/core.py +0 -0
  16. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/data/versions.json +0 -0
  17. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/__init__.py +0 -0
  18. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/conversations.py +0 -0
  19. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/filters.py +0 -0
  20. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/formatters.py +0 -0
  21. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/models.py +0 -0
  22. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/reader.py +0 -0
  23. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/exchanges/stats.py +0 -0
  24. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/prompts/README.md +0 -0
  25. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/prompts/__init__.py +0 -0
  26. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/prompts/converse.py +0 -0
  27. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/prompts/release_notes.py +0 -0
  28. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/prompts/services.py +0 -0
  29. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/provider_discovery.py +0 -0
  30. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/providers.py +0 -0
  31. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/__init__.py +0 -0
  32. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/audio_files.py +0 -0
  33. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/changelog.py +0 -0
  34. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/configuration.py +0 -0
  35. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/statistics.py +0 -0
  36. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/version.py +0 -0
  37. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/resources/whisper_models.py +0 -0
  38. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/server.py +0 -0
  39. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/shared.py +0 -0
  40. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/simple_failover.py +0 -0
  41. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/statistics.py +0 -0
  42. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/streaming.py +0 -0
  43. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/templates/launchd/com.voicemode.kokoro.plist +0 -0
  44. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/templates/launchd/com.voicemode.whisper.plist +0 -0
  45. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/templates/launchd/start-kokoro-with-health-check.sh +0 -0
  46. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/templates/launchd/start-whisper-with-health-check.sh +0 -0
  47. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/templates/systemd/voicemode-kokoro.service +0 -0
  48. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/templates/systemd/voicemode-whisper.service +0 -0
  49. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/__init__.py +0 -0
  50. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/configuration_management.py +0 -0
  51. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/dependencies.py +0 -0
  52. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/devices.py +0 -0
  53. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/diagnostics.py +0 -0
  54. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/providers.py +0 -0
  55. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/service.py +0 -0
  56. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/kokoro/install.py +0 -0
  57. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/kokoro/uninstall.py +0 -0
  58. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/list_versions.py +0 -0
  59. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/version_info.py +0 -0
  60. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/whisper/download_model.py +0 -0
  61. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/whisper/install.py +0 -0
  62. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/services/whisper/uninstall.py +0 -0
  63. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/statistics.py +0 -0
  64. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/tools/voice_registry.py +0 -0
  65. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/__init__.py +0 -0
  66. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/audio_diagnostics.py +0 -0
  67. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/event_logger.py +0 -0
  68. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/ffmpeg_check.py +0 -0
  69. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/format_migration.py +0 -0
  70. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/gpu_detection.py +0 -0
  71. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/migration_helpers.py +0 -0
  72. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/services/common.py +0 -0
  73. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/services/kokoro_helpers.py +0 -0
  74. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/services/whisper_helpers.py +0 -0
  75. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/utils/version_helpers.py +0 -0
  76. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/version.py +0 -0
  77. {voice_mode-2.20.0 → voice_mode-2.20.1}/voice_mode/voice_preferences.py +0 -0
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.20.1] - 2025-08-11
11
+
12
+ ### Fixed
13
+ - **Speed parameter validation error** - Fixed MCP validation error when passing speed parameter as string
14
+ - Added type conversion from string to float for speed parameter
15
+ - Now properly handles speed values passed by MCP clients (e.g., via uvx)
16
+ - Added comprehensive validation and error messages for invalid speed values
17
+
10
18
  ## [2.20.0] - 2025-08-10
11
19
 
12
20
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-mode
3
- Version: 2.20.0
3
+ Version: 2.20.1
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
@@ -1,3 +1,3 @@
1
1
  # This file is automatically updated by 'make release'
2
2
  # Do not edit manually
3
- __version__ = "2.20.0"
3
+ __version__ = "2.20.1"
@@ -1351,6 +1351,18 @@ async def converse(
1351
1351
  if isinstance(audio_feedback, str):
1352
1352
  audio_feedback = audio_feedback.lower() in ('true', '1', 'yes', 'on')
1353
1353
 
1354
+ # Convert string speed to float
1355
+ if speed is not None and isinstance(speed, str):
1356
+ try:
1357
+ speed = float(speed)
1358
+ except ValueError:
1359
+ return f"❌ Error: speed must be a number (got '{speed}')"
1360
+
1361
+ # Validate speed parameter range
1362
+ if speed is not None:
1363
+ if not (0.25 <= speed <= 4.0):
1364
+ return f"❌ Error: speed must be between 0.25 and 4.0 (got {speed})"
1365
+
1354
1366
  logger.info(f"Converse: '{message[:50]}{'...' if len(message) > 50 else ''}' (wait_for_response: {wait_for_response})")
1355
1367
 
1356
1368
  # Validate vad_aggressiveness parameter
File without changes
File without changes
File without changes