agent-cli 0.75.0__tar.gz → 0.76.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.
- {agent_cli-0.75.0 → agent_cli-0.76.0}/PKG-INFO +3 -3
- {agent_cli-0.75.0 → agent_cli-0.76.0}/README.md +1 -1
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_extras.json +2 -2
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/vad.txt +20 -2
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/vad.py +121 -13
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/install/extras.py +2 -2
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/sync_extras.py +4 -3
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/architecture/index.md +1 -1
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/install-extras.md +1 -1
- {agent_cli-0.75.0 → agent_cli-0.76.0}/pyproject.toml +1 -1
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/core/test_vad.py +14 -24
- {agent_cli-0.75.0 → agent_cli-0.76.0}/uv.lock +2 -22
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude-plugin/README.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.cursorrules +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.dockerignore +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.env.example +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/logo.svg +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/release-drafter.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/renovate.json +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/release.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.gitignore +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.jscpd.json +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.prompts/docs-review.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/.prompts/pr-review.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/CLAUDE.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/LICENSE +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/__main__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/_tools.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/transcribe_daemon.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/cli.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/config.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/constants.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/process.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/install/common.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/install/services.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/opts.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/py.typed +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-piper-windows.ps1 +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-piper.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-whisper-linux.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-whisper-macos.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-whisper-windows.ps1 +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run-whisper.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/run_faster_whisper_server.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/common.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docker/docker-compose.yml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/CNAME +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/architecture/memory.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/architecture/rag.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/assistant.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/chat.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/config.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/dev.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/index.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/install-services.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/memory.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/server/index.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/speak.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/start-services.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/transcribe-daemon.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/configuration.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/getting-started.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/index.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/installation/docker.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/installation/index.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/installation/linux.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/installation/macos.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/installation/nixos.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/installation/windows.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/logo-clean.svg +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/docs/system-integration.md +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/justfile +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/shell.nix +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_transcribe_daemon.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/conftest.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/core/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/core/test_sse.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/core/test_watch.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_project.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/install/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/install/test_extras.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_client.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_files.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_store.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/mocks/audio.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/mocks/llm.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/__init__.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_history.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_store.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_api.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_api_integration.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_asr.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_cli.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_config.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_env_vars.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_json_output.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_llm.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_process_manager.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_server_tts.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_services.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_tools.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_tts.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_wake_word.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.75.0 → agent_cli-0.76.0}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.76.0
|
|
4
4
|
Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
|
|
5
5
|
Project-URL: Homepage, https://github.com/basnijholt/agent-cli
|
|
6
6
|
Author-email: Bas Nijholt <bas@nijho.lt>
|
|
@@ -83,7 +83,7 @@ Requires-Dist: pytest-mock; extra == 'test'
|
|
|
83
83
|
Requires-Dist: pytest-timeout; extra == 'test'
|
|
84
84
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
85
85
|
Provides-Extra: vad
|
|
86
|
-
Requires-Dist:
|
|
86
|
+
Requires-Dist: onnxruntime>=1.16.0; extra == 'vad'
|
|
87
87
|
Provides-Extra: whisper-transformers
|
|
88
88
|
Requires-Dist: fastapi[standard]; extra == 'whisper-transformers'
|
|
89
89
|
Requires-Dist: torch>=2.0.0; extra == 'whisper-transformers'
|
|
@@ -516,7 +516,7 @@ agent-cli install-extras rag memory vad
|
|
|
516
516
|
|
|
517
517
|
• rag - RAG proxy server (ChromaDB, embeddings)
|
|
518
518
|
• memory - Long-term memory proxy (ChromaDB)
|
|
519
|
-
• vad - Voice Activity Detection (
|
|
519
|
+
• vad - Voice Activity Detection (Silero VAD via ONNX)
|
|
520
520
|
• audio - Local audio recording/playback
|
|
521
521
|
• piper - Local Piper TTS engine
|
|
522
522
|
• kokoro - Kokoro neural TTS engine
|
|
@@ -422,7 +422,7 @@ agent-cli install-extras rag memory vad
|
|
|
422
422
|
|
|
423
423
|
• rag - RAG proxy server (ChromaDB, embeddings)
|
|
424
424
|
• memory - Long-term memory proxy (ChromaDB)
|
|
425
|
-
• vad - Voice Activity Detection (
|
|
425
|
+
• vad - Voice Activity Detection (Silero VAD via ONNX)
|
|
426
426
|
• audio - Local audio recording/playback
|
|
427
427
|
• piper - Local Piper TTS engine
|
|
428
428
|
• kokoro - Kokoro neural TTS engine
|
|
@@ -14,14 +14,20 @@ click==8.3.1
|
|
|
14
14
|
# typer-slim
|
|
15
15
|
colorama==0.4.6 ; sys_platform == 'win32'
|
|
16
16
|
# via click
|
|
17
|
+
coloredlogs==15.0.1
|
|
18
|
+
# via onnxruntime
|
|
17
19
|
dotenv==0.9.9
|
|
18
20
|
# via agent-cli
|
|
21
|
+
flatbuffers==25.12.19
|
|
22
|
+
# via onnxruntime
|
|
19
23
|
h11==0.16.0
|
|
20
24
|
# via httpcore
|
|
21
25
|
httpcore==1.0.9
|
|
22
26
|
# via httpx
|
|
23
27
|
httpx==0.28.1
|
|
24
28
|
# via agent-cli
|
|
29
|
+
humanfriendly==10.0
|
|
30
|
+
# via coloredlogs
|
|
25
31
|
idna==3.11
|
|
26
32
|
# via
|
|
27
33
|
# anyio
|
|
@@ -30,6 +36,16 @@ markdown-it-py==4.0.0
|
|
|
30
36
|
# via rich
|
|
31
37
|
mdurl==0.1.2
|
|
32
38
|
# via markdown-it-py
|
|
39
|
+
mpmath==1.3.0
|
|
40
|
+
# via sympy
|
|
41
|
+
numpy==2.3.5
|
|
42
|
+
# via onnxruntime
|
|
43
|
+
onnxruntime==1.20.1
|
|
44
|
+
# via agent-cli
|
|
45
|
+
packaging==25.0
|
|
46
|
+
# via onnxruntime
|
|
47
|
+
protobuf==6.33.4
|
|
48
|
+
# via onnxruntime
|
|
33
49
|
psutil==7.2.1 ; sys_platform == 'win32'
|
|
34
50
|
# via agent-cli
|
|
35
51
|
pydantic==2.12.5
|
|
@@ -40,6 +56,8 @@ pygments==2.19.2
|
|
|
40
56
|
# via rich
|
|
41
57
|
pyperclip==1.11.0
|
|
42
58
|
# via agent-cli
|
|
59
|
+
pyreadline3==3.5.4 ; sys_platform == 'win32'
|
|
60
|
+
# via humanfriendly
|
|
43
61
|
python-dotenv==1.2.1
|
|
44
62
|
# via dotenv
|
|
45
63
|
rich==14.2.0
|
|
@@ -53,8 +71,8 @@ shellingham==1.5.4
|
|
|
53
71
|
# via
|
|
54
72
|
# typer
|
|
55
73
|
# typer-slim
|
|
56
|
-
|
|
57
|
-
# via
|
|
74
|
+
sympy==1.14.0
|
|
75
|
+
# via onnxruntime
|
|
58
76
|
typer==0.21.1
|
|
59
77
|
# via agent-cli
|
|
60
78
|
typer-slim==0.21.1
|
|
@@ -1,24 +1,130 @@
|
|
|
1
|
-
"""Voice Activity Detection using Silero VAD for speech segmentation.
|
|
1
|
+
"""Voice Activity Detection using Silero VAD for speech segmentation.
|
|
2
|
+
|
|
3
|
+
Uses ONNX model with pure numpy inference (no torch dependency).
|
|
4
|
+
"""
|
|
2
5
|
|
|
3
6
|
from __future__ import annotations
|
|
4
7
|
|
|
5
8
|
import logging
|
|
9
|
+
import urllib.request
|
|
6
10
|
from collections import deque
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
7
13
|
|
|
8
14
|
from agent_cli import constants
|
|
9
15
|
|
|
10
|
-
|
|
16
|
+
if TYPE_CHECKING:
|
|
11
17
|
import numpy as np
|
|
12
|
-
from
|
|
13
|
-
except ImportError as e:
|
|
14
|
-
msg = (
|
|
15
|
-
"silero-vad-lite is required for the transcribe-daemon command. "
|
|
16
|
-
"Install it with: `pip install agent-cli[vad]` or `uv sync --extra vad`."
|
|
17
|
-
)
|
|
18
|
-
raise ImportError(msg) from e
|
|
18
|
+
from numpy.typing import NDArray
|
|
19
19
|
|
|
20
20
|
LOGGER = logging.getLogger(__name__)
|
|
21
21
|
|
|
22
|
+
# Silero VAD model URL and cache location
|
|
23
|
+
SILERO_VAD_VERSION = "v6.2"
|
|
24
|
+
SILERO_VAD_URL = (
|
|
25
|
+
f"https://github.com/snakers4/silero-vad/raw/{SILERO_VAD_VERSION}"
|
|
26
|
+
"/src/silero_vad/data/silero_vad.onnx"
|
|
27
|
+
)
|
|
28
|
+
SILERO_VAD_CACHE = Path.home() / ".cache" / "agent-cli" / f"silero_vad_{SILERO_VAD_VERSION}.onnx"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _get_model_path() -> Path:
|
|
32
|
+
"""Get path to Silero VAD ONNX model, downloading if needed."""
|
|
33
|
+
if SILERO_VAD_CACHE.exists():
|
|
34
|
+
return SILERO_VAD_CACHE
|
|
35
|
+
|
|
36
|
+
LOGGER.info("Downloading Silero VAD model...")
|
|
37
|
+
SILERO_VAD_CACHE.parent.mkdir(parents=True, exist_ok=True)
|
|
38
|
+
|
|
39
|
+
# Download with progress
|
|
40
|
+
urllib.request.urlretrieve(SILERO_VAD_URL, SILERO_VAD_CACHE) # noqa: S310
|
|
41
|
+
LOGGER.info("Silero VAD model downloaded to %s", SILERO_VAD_CACHE)
|
|
42
|
+
return SILERO_VAD_CACHE
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class _SileroVADOnnx:
|
|
46
|
+
"""Pure numpy wrapper for Silero VAD ONNX model."""
|
|
47
|
+
|
|
48
|
+
def __init__(self, *, force_cpu: bool = True) -> None:
|
|
49
|
+
"""Initialize the ONNX model session."""
|
|
50
|
+
import onnxruntime # noqa: PLC0415
|
|
51
|
+
|
|
52
|
+
model_path = _get_model_path()
|
|
53
|
+
|
|
54
|
+
opts = onnxruntime.SessionOptions()
|
|
55
|
+
opts.inter_op_num_threads = 1
|
|
56
|
+
opts.intra_op_num_threads = 1
|
|
57
|
+
|
|
58
|
+
providers = ["CPUExecutionProvider"] if force_cpu else None
|
|
59
|
+
self._session = onnxruntime.InferenceSession(
|
|
60
|
+
str(model_path),
|
|
61
|
+
providers=providers,
|
|
62
|
+
sess_options=opts,
|
|
63
|
+
)
|
|
64
|
+
self._sample_rates = [8000, 16000]
|
|
65
|
+
self.reset_states()
|
|
66
|
+
|
|
67
|
+
def reset_states(self, batch_size: int = 1) -> None:
|
|
68
|
+
"""Reset the internal state for a new audio stream."""
|
|
69
|
+
import numpy as np # noqa: PLC0415
|
|
70
|
+
|
|
71
|
+
self._state = np.zeros((2, batch_size, 128), dtype=np.float32)
|
|
72
|
+
self._context = np.zeros(0, dtype=np.float32)
|
|
73
|
+
self._last_sr = 0
|
|
74
|
+
self._last_batch_size = 0
|
|
75
|
+
|
|
76
|
+
def __call__(self, audio: NDArray[np.floating], sample_rate: int) -> float:
|
|
77
|
+
"""Process an audio chunk and return speech probability."""
|
|
78
|
+
import numpy as np # noqa: PLC0415
|
|
79
|
+
|
|
80
|
+
if sample_rate not in self._sample_rates:
|
|
81
|
+
msg = f"Supported sample rates: {self._sample_rates}"
|
|
82
|
+
raise ValueError(msg)
|
|
83
|
+
|
|
84
|
+
# Expected samples per chunk
|
|
85
|
+
num_samples = 512 if sample_rate == 16000 else 256 # noqa: PLR2004
|
|
86
|
+
context_size = 64 if sample_rate == 16000 else 32 # noqa: PLR2004
|
|
87
|
+
|
|
88
|
+
if len(audio) != num_samples:
|
|
89
|
+
msg = f"Expected {num_samples} samples for {sample_rate}Hz, got {len(audio)}"
|
|
90
|
+
raise ValueError(msg)
|
|
91
|
+
|
|
92
|
+
# Ensure 2D: [batch, samples]
|
|
93
|
+
if audio.ndim == 1:
|
|
94
|
+
audio = audio.reshape(1, -1)
|
|
95
|
+
|
|
96
|
+
batch_size = audio.shape[0]
|
|
97
|
+
|
|
98
|
+
# Reset state if sample rate or batch size changed
|
|
99
|
+
if self._last_sr and self._last_sr != sample_rate:
|
|
100
|
+
self.reset_states(batch_size)
|
|
101
|
+
if self._last_batch_size and self._last_batch_size != batch_size:
|
|
102
|
+
self.reset_states(batch_size)
|
|
103
|
+
if not self._last_batch_size:
|
|
104
|
+
self.reset_states(batch_size)
|
|
105
|
+
|
|
106
|
+
# Initialize context if empty
|
|
107
|
+
if len(self._context) == 0:
|
|
108
|
+
self._context = np.zeros((batch_size, context_size), dtype=np.float32)
|
|
109
|
+
|
|
110
|
+
# Concatenate context with audio
|
|
111
|
+
x = np.concatenate([self._context, audio], axis=1)
|
|
112
|
+
|
|
113
|
+
# Run ONNX inference
|
|
114
|
+
ort_inputs = {
|
|
115
|
+
"input": x,
|
|
116
|
+
"state": self._state,
|
|
117
|
+
"sr": np.array(sample_rate, dtype=np.int64),
|
|
118
|
+
}
|
|
119
|
+
out, self._state = self._session.run(None, ort_inputs)
|
|
120
|
+
|
|
121
|
+
# Update context with last samples
|
|
122
|
+
self._context = x[:, -context_size:]
|
|
123
|
+
self._last_sr = sample_rate
|
|
124
|
+
self._last_batch_size = batch_size
|
|
125
|
+
|
|
126
|
+
return float(out[0, 0])
|
|
127
|
+
|
|
22
128
|
|
|
23
129
|
class VoiceActivityDetector:
|
|
24
130
|
"""Silero VAD-based voice activity detection for audio segmentation.
|
|
@@ -56,7 +162,7 @@ class VoiceActivityDetector:
|
|
|
56
162
|
)
|
|
57
163
|
|
|
58
164
|
# Model and state
|
|
59
|
-
self._model =
|
|
165
|
+
self._model = _SileroVADOnnx()
|
|
60
166
|
self._pre_speech_buffer: deque[bytes] = deque(maxlen=pre_speech_windows)
|
|
61
167
|
self._pending = bytearray()
|
|
62
168
|
self._audio_buffer = bytearray()
|
|
@@ -74,7 +180,7 @@ class VoiceActivityDetector:
|
|
|
74
180
|
|
|
75
181
|
def reset(self) -> None:
|
|
76
182
|
"""Reset VAD state for a new recording session."""
|
|
77
|
-
self._model
|
|
183
|
+
self._model.reset_states()
|
|
78
184
|
self._pre_speech_buffer.clear()
|
|
79
185
|
self._pending.clear()
|
|
80
186
|
self._audio_buffer.clear()
|
|
@@ -84,8 +190,10 @@ class VoiceActivityDetector:
|
|
|
84
190
|
|
|
85
191
|
def _is_speech(self, window: bytes) -> bool:
|
|
86
192
|
"""Check if audio window contains speech."""
|
|
193
|
+
import numpy as np # noqa: PLC0415
|
|
194
|
+
|
|
87
195
|
audio = np.frombuffer(window, dtype=np.int16).astype(np.float32) / 32768.0
|
|
88
|
-
prob = self._model
|
|
196
|
+
prob = self._model(audio, self.sample_rate)
|
|
89
197
|
LOGGER.debug("Speech prob: %.3f, threshold: %.2f", prob, self.threshold)
|
|
90
198
|
return prob >= self.threshold
|
|
91
199
|
|
|
@@ -136,7 +244,7 @@ class VoiceActivityDetector:
|
|
|
136
244
|
self._silence_samples = 0
|
|
137
245
|
self._speech_samples = 0
|
|
138
246
|
self._audio_buffer.clear()
|
|
139
|
-
self._model
|
|
247
|
+
self._model.reset_states()
|
|
140
248
|
else:
|
|
141
249
|
# Not speaking - maintain rolling pre-speech buffer (auto-limited by deque maxlen)
|
|
142
250
|
self._pre_speech_buffer.append(window)
|
|
@@ -63,7 +63,7 @@ def _install_via_uv_tool(extras: list[str], *, quiet: bool = False) -> bool:
|
|
|
63
63
|
"""Reinstall agent-cli via uv tool with the specified extras."""
|
|
64
64
|
extras_str = ",".join(extras)
|
|
65
65
|
package_spec = f"agent-cli[{extras_str}]"
|
|
66
|
-
# Cap at Python 3.13 for compatibility -
|
|
66
|
+
# Cap at Python 3.13 for compatibility - onnxruntime doesn't support 3.14 yet
|
|
67
67
|
major, minor = sys.version_info[:2]
|
|
68
68
|
python_version = f"{major}.{min(minor, 13)}"
|
|
69
69
|
cmd = ["uv", "tool", "install", package_spec, "--force", "--python", python_version]
|
|
@@ -158,7 +158,7 @@ def install_extras(
|
|
|
158
158
|
**Available extras:**
|
|
159
159
|
- `rag` - RAG proxy server (ChromaDB, embeddings)
|
|
160
160
|
- `memory` - Long-term memory proxy (ChromaDB)
|
|
161
|
-
- `vad` - Voice Activity Detection (
|
|
161
|
+
- `vad` - Voice Activity Detection (Silero VAD via ONNX)
|
|
162
162
|
- `audio` - Local audio recording/playback
|
|
163
163
|
- `piper` - Local Piper TTS engine
|
|
164
164
|
- `kokoro` - Kokoro neural TTS engine
|
|
@@ -36,7 +36,7 @@ EXTRA_METADATA: dict[str, tuple[str, list[str]]] = {
|
|
|
36
36
|
# Feature extras
|
|
37
37
|
"rag": ("RAG proxy (ChromaDB, embeddings)", ["chromadb", "pydantic_ai"]),
|
|
38
38
|
"memory": ("Long-term memory proxy", ["chromadb", "yaml", "pydantic_ai"]),
|
|
39
|
-
"vad": ("Voice Activity Detection (
|
|
39
|
+
"vad": ("Voice Activity Detection (Silero VAD via ONNX)", ["onnxruntime"]),
|
|
40
40
|
"whisper": ("Local Whisper ASR (faster-whisper)", ["faster_whisper"]),
|
|
41
41
|
"whisper-mlx": ("MLX Whisper for Apple Silicon", ["mlx_whisper"]),
|
|
42
42
|
"tts": ("Local Piper TTS", ["piper"]),
|
|
@@ -130,11 +130,12 @@ def main() -> int:
|
|
|
130
130
|
"""Generate _extras.json from pyproject.toml."""
|
|
131
131
|
extras = get_extras_from_pyproject()
|
|
132
132
|
|
|
133
|
-
# Check for missing metadata
|
|
133
|
+
# Check for missing metadata - fail if any extras lack proper metadata
|
|
134
134
|
missing = check_missing_metadata(extras)
|
|
135
135
|
if missing:
|
|
136
|
-
print(f"
|
|
136
|
+
print(f"ERROR: The following extras need metadata in EXTRA_METADATA: {missing}")
|
|
137
137
|
print("Please update EXTRA_METADATA in scripts/sync_extras.py")
|
|
138
|
+
return 1
|
|
138
139
|
|
|
139
140
|
# Generate the file
|
|
140
141
|
content = generate_extras_json(extras)
|
|
@@ -166,7 +166,7 @@ Install with `agent-cli install-extras <name>` or `pip install agent-cli[name]`:
|
|
|
166
166
|
|
|
167
167
|
| Extra | Purpose | Key Packages |
|
|
168
168
|
|-------|---------|--------------|
|
|
169
|
-
| `vad` | Voice activity detection |
|
|
169
|
+
| `vad` | Voice activity detection | onnxruntime |
|
|
170
170
|
| `rag` | Document chat | chromadb, markitdown |
|
|
171
171
|
| `memory` | Long-term memory | chromadb |
|
|
172
172
|
| `server` | Local ASR/TTS servers | fastapi |
|
|
@@ -41,7 +41,7 @@ Available extras:
|
|
|
41
41
|
| `rag` | RAG proxy (ChromaDB, embeddings) |
|
|
42
42
|
| `server` | FastAPI server components |
|
|
43
43
|
| `speed` | Audio speed adjustment (audiostretchy) |
|
|
44
|
-
| `vad` | Voice Activity Detection (
|
|
44
|
+
| `vad` | Voice Activity Detection (Silero VAD via ONNX) |
|
|
45
45
|
| `whisper-transformers` | Whisper ASR via HuggingFace transformers |
|
|
46
46
|
| `wyoming` | Wyoming protocol support |
|
|
47
47
|
|
|
@@ -3,44 +3,34 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import struct
|
|
6
|
-
import sys
|
|
7
6
|
from typing import TYPE_CHECKING
|
|
8
|
-
from unittest.mock import
|
|
7
|
+
from unittest.mock import patch
|
|
9
8
|
|
|
10
9
|
import pytest
|
|
11
10
|
|
|
12
|
-
# Skip all tests in this module on Windows - silero-vad-lite can hang during initialization
|
|
13
|
-
if sys.platform == "win32":
|
|
14
|
-
pytest.skip(
|
|
15
|
-
"silero-vad-lite initialization can hang on Windows CI",
|
|
16
|
-
allow_module_level=True,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
11
|
from agent_cli.core.vad import VoiceActivityDetector
|
|
20
12
|
|
|
21
13
|
if TYPE_CHECKING:
|
|
22
14
|
from typing import Any
|
|
23
15
|
|
|
24
16
|
|
|
25
|
-
@pytest.fixture
|
|
26
|
-
def
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
mock_model.audio_forward.return_value = 0.0 # No speech by default
|
|
30
|
-
return mock_model
|
|
17
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
18
|
+
def ensure_model_cached() -> None:
|
|
19
|
+
"""Ensure Silero VAD model is cached before running tests."""
|
|
20
|
+
import urllib.request # noqa: PLC0415
|
|
31
21
|
|
|
22
|
+
from agent_cli.core.vad import SILERO_VAD_CACHE, SILERO_VAD_URL # noqa: PLC0415
|
|
32
23
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
if not SILERO_VAD_CACHE.exists():
|
|
25
|
+
SILERO_VAD_CACHE.parent.mkdir(parents=True, exist_ok=True)
|
|
26
|
+
urllib.request.urlretrieve(SILERO_VAD_URL, SILERO_VAD_CACHE) # noqa: S310
|
|
36
27
|
|
|
37
|
-
with patch.dict("sys.modules", {"silero_vad_lite": None}):
|
|
38
|
-
# Remove cached module
|
|
39
|
-
if "agent_cli.core.vad" in sys.modules:
|
|
40
|
-
del sys.modules["agent_cli.core.vad"]
|
|
41
28
|
|
|
42
|
-
|
|
43
|
-
|
|
29
|
+
def test_import_error_without_onnxruntime() -> None:
|
|
30
|
+
"""Test that ModuleNotFoundError is raised when onnxruntime is missing."""
|
|
31
|
+
# With lazy imports, error happens at instantiation, not module import
|
|
32
|
+
with patch.dict("sys.modules", {"onnxruntime": None}), pytest.raises(ModuleNotFoundError):
|
|
33
|
+
VoiceActivityDetector()
|
|
44
34
|
|
|
45
35
|
|
|
46
36
|
@pytest.fixture
|
|
@@ -115,7 +115,7 @@ test = [
|
|
|
115
115
|
{ name = "pytest-timeout" },
|
|
116
116
|
]
|
|
117
117
|
vad = [
|
|
118
|
-
{ name = "
|
|
118
|
+
{ name = "onnxruntime" },
|
|
119
119
|
]
|
|
120
120
|
whisper-transformers = [
|
|
121
121
|
{ name = "fastapi", extra = ["standard"] },
|
|
@@ -172,6 +172,7 @@ requires-dist = [
|
|
|
172
172
|
{ name = "numpy", marker = "extra == 'audio'" },
|
|
173
173
|
{ name = "onnxruntime", marker = "extra == 'memory'", specifier = ">=1.17.0" },
|
|
174
174
|
{ name = "onnxruntime", marker = "extra == 'rag'", specifier = ">=1.17.0" },
|
|
175
|
+
{ name = "onnxruntime", marker = "extra == 'vad'", specifier = ">=1.16.0" },
|
|
175
176
|
{ name = "openai", marker = "extra == 'memory'", specifier = ">=1.0.0" },
|
|
176
177
|
{ name = "openai", marker = "extra == 'rag'", specifier = ">=1.0.0" },
|
|
177
178
|
{ name = "pip", marker = "extra == 'kokoro'" },
|
|
@@ -199,7 +200,6 @@ requires-dist = [
|
|
|
199
200
|
{ name = "rich" },
|
|
200
201
|
{ name = "ruff", marker = "extra == 'dev'" },
|
|
201
202
|
{ name = "setproctitle" },
|
|
202
|
-
{ name = "silero-vad-lite", marker = "extra == 'vad'", specifier = ">=0.2.1" },
|
|
203
203
|
{ name = "sounddevice", marker = "extra == 'audio'", specifier = ">=0.4.6" },
|
|
204
204
|
{ name = "soundfile", marker = "extra == 'kokoro'", specifier = ">=0.12.0" },
|
|
205
205
|
{ name = "torch", marker = "extra == 'whisper-transformers'", specifier = ">=2.0.0" },
|
|
@@ -4753,26 +4753,6 @@ wheels = [
|
|
|
4753
4753
|
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
|
4754
4754
|
]
|
|
4755
4755
|
|
|
4756
|
-
[[package]]
|
|
4757
|
-
name = "silero-vad-lite"
|
|
4758
|
-
version = "0.2.1"
|
|
4759
|
-
source = { registry = "https://pypi.org/simple" }
|
|
4760
|
-
sdist = { url = "https://files.pythonhosted.org/packages/8d/8a/9c33e393a2068ac7e51bff755c001d0fd95a5221de310b760e5c1c0c5047/silero_vad_lite-0.2.1.tar.gz", hash = "sha256:74ccc2dc955a80a53f9520c3924a0a99b80691ab0632ddec08725b459a8f5d13", size = 1956112, upload-time = "2024-10-01T07:45:56.271Z" }
|
|
4761
|
-
wheels = [
|
|
4762
|
-
{ url = "https://files.pythonhosted.org/packages/67/44/e883159ccc321125839d74f849c349e23f33b61de14845ad799dad6bbe54/silero_vad_lite-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5a4198be1dbb413ac0031cf76e5eedd1ad34f9922c74055eb653a41e02d64c7a", size = 30750461, upload-time = "2024-10-01T07:44:00.309Z" },
|
|
4763
|
-
{ url = "https://files.pythonhosted.org/packages/02/4e/d4f6fa9e2c4b585dd55f51c8964c3b2228506fcf5d6523cd01531333a9dc/silero_vad_lite-0.2.1-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:958ff533c37e84bbe88ee6fb41f6b43f8f261c48117bc81fa776fec4b2cec3f8", size = 30752295, upload-time = "2024-10-01T07:44:06.476Z" },
|
|
4764
|
-
{ url = "https://files.pythonhosted.org/packages/6d/bf/209b65437a8d90b8f20c21d1d04a6de545c2beaeed1c54da467169b3eca5/silero_vad_lite-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a865faa68535bbb9498288568c2d1e4bb4052b61aa12d038938fe1ce53863f3d", size = 10123116, upload-time = "2024-10-01T07:44:09.079Z" },
|
|
4765
|
-
{ url = "https://files.pythonhosted.org/packages/e6/32/fdebefaa7b2a7dcc82fc3eb62ad40064cc83935300613c96fa23d8e057fa/silero_vad_lite-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:d85e6e95133e013cc9d587f701fc462d2fd6b7b23f1b36a902dc8d8f990e2434", size = 6612344, upload-time = "2024-10-01T07:44:11.533Z" },
|
|
4766
|
-
{ url = "https://files.pythonhosted.org/packages/a2/ea/e389cd02b963a56421550f11a88eaca13f93771e2c065e1f56a36d565469/silero_vad_lite-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3de3c2dfd9b8f90a5725498479c016eb5b8aa3eb918c1132cb734757025d5f88", size = 30750460, upload-time = "2024-10-01T07:44:14.147Z" },
|
|
4767
|
-
{ url = "https://files.pythonhosted.org/packages/0a/9f/1a90098f5017c842bdf8c2c5e1edca7b4689980ff03924bcce3e8800e04b/silero_vad_lite-0.2.1-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:21bc8e03d74ca952cca4cb20cde711fc886cd1dd5093b7fc51de1607ec890fab", size = 30752295, upload-time = "2024-10-01T07:44:17.914Z" },
|
|
4768
|
-
{ url = "https://files.pythonhosted.org/packages/dc/4c/f8c6ef56058bbcffaaea88f8dd424486cd3cdcfd0244657502fe5bc25a48/silero_vad_lite-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae45855b5ce6fc5d16a608580f3a8378a1d31951802fef4584a60c53b25b7160", size = 10123117, upload-time = "2024-10-01T07:44:20.708Z" },
|
|
4769
|
-
{ url = "https://files.pythonhosted.org/packages/1e/4e/b240c77663d14882cfd78005bbef0391506b843283e278b2c2683627499d/silero_vad_lite-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:8bab6364ae0b0316c4e787e90b5efd229fbad18b351b3e80fe0dc5e7bdcdebdc", size = 6612344, upload-time = "2024-10-01T07:44:23.47Z" },
|
|
4770
|
-
{ url = "https://files.pythonhosted.org/packages/e9/45/692d9cc332e53d3c77d06303d7b978b8e2423454f075c02b95989796eb96/silero_vad_lite-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6eb4c81dce2d61102865f17ceb60a6afa6e1ca0a7330c4a55e07e3137b74db44", size = 30750459, upload-time = "2024-10-01T07:44:26.348Z" },
|
|
4771
|
-
{ url = "https://files.pythonhosted.org/packages/71/7a/fda5268fe3b661d16f6eae56444e14c1f2eb62aae51ca01cc01bd6194f58/silero_vad_lite-0.2.1-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:95c32ecd7c62c67903f5e67e18cc8ca1d0b93c3b020571698236502a66adb94e", size = 30752298, upload-time = "2024-10-01T07:44:29.441Z" },
|
|
4772
|
-
{ url = "https://files.pythonhosted.org/packages/f8/04/9de02bae297ed88c44b0f76f4e9d2149ef4fc30a932f5ea38ee686c86b9e/silero_vad_lite-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d73a7676acf3fe6c743394b994eec33a9104d95dc32de2867cc4f63df19ff1", size = 10123118, upload-time = "2024-10-01T07:44:32.89Z" },
|
|
4773
|
-
{ url = "https://files.pythonhosted.org/packages/f3/cb/3ee98dd6174c7331e38b90c36eb675b406add4ab7edb45604096affda3e5/silero_vad_lite-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:5b11772d09383dc6e7cb89976110a75be17876427f7a019649a3761790dc83db", size = 6612343, upload-time = "2024-10-01T07:44:36.145Z" },
|
|
4774
|
-
]
|
|
4775
|
-
|
|
4776
4756
|
[[package]]
|
|
4777
4757
|
name = "six"
|
|
4778
4758
|
version = "1.17.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|