From 60bf884f1881a0bc929a5a39c9449b158202fee5 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Wed, 11 Feb 2026 22:54:02 -0800 Subject: [PATCH 1/3] refactor: deduplicate optional extras using self-referencing dependencies Introduce a `vectordb` base extra to eliminate duplication between `rag` and `memory` (which shared 8 identical deps). Replace repeated `fastapi[standard]` in 7 extras with `agent-cli[server]` references. --- .github/scripts/sync_extras.py | 1 + agent_cli/_extras.json | 7 + agent_cli/_requirements/mlx-whisper.txt | 42 +-- agent_cli/_requirements/vectordb.txt | 411 ++++++++++++++++++++++++ agent_cli/install/extras.py | 5 +- pyproject.toml | 72 ++--- uv.lock | 24 +- 7 files changed, 491 insertions(+), 71 deletions(-) create mode 100644 agent_cli/_requirements/vectordb.txt diff --git a/.github/scripts/sync_extras.py b/.github/scripts/sync_extras.py index 3755cee29..73008860b 100755 --- a/.github/scripts/sync_extras.py +++ b/.github/scripts/sync_extras.py @@ -34,6 +34,7 @@ "gemini": ("Google Gemini provider", ["google.genai"]), "llm": ("LLM framework (pydantic-ai)", ["pydantic_ai"]), # Feature extras + "vectordb": ("Vector database with embeddings (ChromaDB)", ["chromadb", "pydantic_ai"]), "rag": ("RAG proxy (ChromaDB, embeddings)", ["chromadb", "pydantic_ai"]), "memory": ("Long-term memory proxy", ["chromadb", "yaml", "pydantic_ai"]), "vad": ("Voice Activity Detection (Silero VAD via ONNX)", ["onnxruntime"]), diff --git a/agent_cli/_extras.json b/agent_cli/_extras.json index 1e27ed176..24bcd91ca 100644 --- a/agent_cli/_extras.json +++ b/agent_cli/_extras.json @@ -68,6 +68,13 @@ "onnxruntime" ] ], + "vectordb": [ + "Vector database with embeddings (ChromaDB)", + [ + "chromadb", + "pydantic_ai" + ] + ], "whisper-transformers": [ "Whisper ASR via HuggingFace transformers", [ diff --git a/agent_cli/_requirements/mlx-whisper.txt b/agent_cli/_requirements/mlx-whisper.txt index 3b8de140c..b8992500c 100644 --- a/agent_cli/_requirements/mlx-whisper.txt +++ b/agent_cli/_requirements/mlx-whisper.txt @@ -1,6 +1,6 @@ # This file was autogenerated by uv via the following command: # uv export --extra mlx-whisper --no-dev --no-emit-project --no-hashes -annotated-doc==0.0.4 ; platform_machine == 'arm64' and sys_platform == 'darwin' +annotated-doc==0.0.4 # via fastapi annotated-types==0.7.0 # via pydantic @@ -36,13 +36,13 @@ email-validator==2.3.0 # via # fastapi # pydantic -fastapi==0.128.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +fastapi==0.128.0 # via agent-cli -fastapi-cli==0.0.20 ; platform_machine == 'arm64' and sys_platform == 'darwin' +fastapi-cli==0.0.20 # via fastapi -fastapi-cloud-cli==0.10.1 ; platform_machine == 'arm64' and sys_platform == 'darwin' +fastapi-cloud-cli==0.10.1 # via fastapi-cli -fastar==0.8.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +fastar==0.8.0 # via fastapi-cloud-cli filelock==3.20.3 ; platform_machine == 'arm64' and sys_platform == 'darwin' # via @@ -60,7 +60,7 @@ hf-xet==1.2.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' # via huggingface-hub httpcore==1.0.9 # via httpx -httptools==0.7.1 ; platform_machine == 'arm64' and sys_platform == 'darwin' +httptools==0.7.1 # via uvicorn httpx==0.28.1 # via @@ -75,7 +75,7 @@ idna==3.11 # email-validator # httpx # requests -jinja2==3.1.6 ; platform_machine == 'arm64' and sys_platform == 'darwin' +jinja2==3.1.6 # via # fastapi # torch @@ -83,7 +83,7 @@ llvmlite==0.46.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' # via numba markdown-it-py==4.0.0 # via rich -markupsafe==3.0.3 ; platform_machine == 'arm64' and sys_platform == 'darwin' +markupsafe==3.0.3 # via jinja2 mdurl==0.1.2 # via markdown-it-py @@ -119,9 +119,9 @@ pydantic==2.12.5 # pydantic-settings pydantic-core==2.41.5 # via pydantic -pydantic-extra-types==2.11.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +pydantic-extra-types==2.11.0 # via fastapi -pydantic-settings==2.12.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +pydantic-settings==2.12.0 # via fastapi pygments==2.19.2 # via rich @@ -132,9 +132,9 @@ python-dotenv==1.2.1 # dotenv # pydantic-settings # uvicorn -python-multipart==0.0.21 ; platform_machine == 'arm64' and sys_platform == 'darwin' +python-multipart==0.0.21 # via fastapi -pyyaml==6.0.3 ; platform_machine == 'arm64' and sys_platform == 'darwin' +pyyaml==6.0.3 # via # huggingface-hub # uvicorn @@ -150,15 +150,15 @@ rich==14.2.0 # rich-toolkit # typer # typer-slim -rich-toolkit==0.17.1 ; platform_machine == 'arm64' and sys_platform == 'darwin' +rich-toolkit==0.17.1 # via # fastapi-cli # fastapi-cloud-cli -rignore==0.7.6 ; platform_machine == 'arm64' and sys_platform == 'darwin' +rignore==0.7.6 # via fastapi-cloud-cli scipy==1.17.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' # via mlx-whisper -sentry-sdk==2.49.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +sentry-sdk==2.49.0 # via fastapi-cloud-cli setproctitle==1.3.7 # via agent-cli @@ -168,7 +168,7 @@ shellingham==1.5.4 # via # typer # typer-slim -starlette==0.50.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +starlette==0.50.0 # via fastapi sympy==1.14.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' # via torch @@ -205,18 +205,18 @@ typing-inspection==0.4.2 # via # pydantic # pydantic-settings -urllib3==2.3.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +urllib3==2.3.0 # via # requests # sentry-sdk -uvicorn==0.40.0 ; platform_machine == 'arm64' and sys_platform == 'darwin' +uvicorn==0.40.0 # via # fastapi # fastapi-cli # fastapi-cloud-cli -uvloop==0.22.1 ; platform_machine == 'arm64' and platform_python_implementation != 'PyPy' and sys_platform == 'darwin' +uvloop==0.22.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' # via uvicorn -watchfiles==1.1.1 ; platform_machine == 'arm64' and sys_platform == 'darwin' +watchfiles==1.1.1 # via uvicorn -websockets==15.0.1 ; platform_machine == 'arm64' and sys_platform == 'darwin' +websockets==15.0.1 # via uvicorn diff --git a/agent_cli/_requirements/vectordb.txt b/agent_cli/_requirements/vectordb.txt new file mode 100644 index 000000000..279e00e94 --- /dev/null +++ b/agent_cli/_requirements/vectordb.txt @@ -0,0 +1,411 @@ +# This file was autogenerated by uv via the following command: +# uv export --extra vectordb --no-dev --no-emit-project --no-hashes +annotated-doc==0.0.4 + # via fastapi +annotated-types==0.7.0 + # via pydantic +anyio==4.12.1 + # via + # google-genai + # httpx + # openai + # starlette + # watchfiles +attrs==25.4.0 + # via + # jsonschema + # referencing +backoff==2.2.1 + # via posthog +bcrypt==5.0.0 + # via chromadb +build==1.4.0 + # via chromadb +certifi==2026.1.4 + # via + # httpcore + # httpx + # kubernetes + # requests + # sentry-sdk +charset-normalizer==3.4.4 + # via requests +chromadb==1.4.1 + # via agent-cli +click==8.3.1 + # via + # rich-toolkit + # typer + # typer-slim + # uvicorn +colorama==0.4.6 + # via + # build + # click + # griffe + # tqdm + # uvicorn +coloredlogs==15.0.1 + # via onnxruntime +distro==1.9.0 + # via + # google-genai + # openai + # posthog +dnspython==2.8.0 + # via email-validator +dotenv==0.9.9 + # via agent-cli +durationpy==0.10 + # via kubernetes +email-validator==2.3.0 + # via + # fastapi + # pydantic +fastapi==0.128.0 + # via agent-cli +fastapi-cli==0.0.20 + # via fastapi +fastapi-cloud-cli==0.10.1 + # via fastapi-cli +fastar==0.8.0 + # via fastapi-cloud-cli +filelock==3.20.3 + # via + # huggingface-hub + # transformers +flatbuffers==25.12.19 + # via onnxruntime +fsspec==2026.1.0 + # via huggingface-hub +genai-prices==0.0.51 + # via pydantic-ai-slim +google-auth==2.47.0 + # via + # google-genai + # kubernetes +google-genai==1.58.0 + # via pydantic-ai-slim +googleapis-common-protos==1.72.0 + # via opentelemetry-exporter-otlp-proto-grpc +griffe==1.15.0 + # via pydantic-ai-slim +grpcio==1.76.0 + # via + # chromadb + # opentelemetry-exporter-otlp-proto-grpc +h11==0.16.0 + # via + # httpcore + # uvicorn +hf-xet==1.2.0 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' + # via huggingface-hub +httpcore==1.0.9 + # via httpx +httptools==0.7.1 + # via uvicorn +httpx==0.28.1 + # via + # agent-cli + # chromadb + # fastapi + # fastapi-cloud-cli + # genai-prices + # google-genai + # openai + # pydantic-ai-slim + # pydantic-graph +huggingface-hub==0.36.0 + # via + # agent-cli + # tokenizers + # transformers +humanfriendly==10.0 + # via coloredlogs +idna==3.11 + # via + # anyio + # email-validator + # httpx + # requests +importlib-metadata==8.7.1 + # via opentelemetry-api +importlib-resources==6.5.2 + # via chromadb +jinja2==3.1.6 + # via fastapi +jiter==0.12.0 + # via openai +jsonschema==4.26.0 + # via chromadb +jsonschema-specifications==2025.9.1 + # via jsonschema +kubernetes==34.1.0 + # via chromadb +logfire-api==4.18.0 + # via pydantic-graph +markdown-it-py==4.0.0 + # via rich +markupsafe==3.0.3 + # via jinja2 +mdurl==0.1.2 + # via markdown-it-py +mmh3==5.2.0 + # via chromadb +mpmath==1.3.0 + # via sympy +numpy==2.3.5 + # via + # chromadb + # onnxruntime + # transformers +oauthlib==3.3.1 + # via requests-oauthlib +onnxruntime==1.20.1 + # via + # agent-cli + # chromadb +openai==2.15.0 + # via + # agent-cli + # pydantic-ai-slim +opentelemetry-api==1.39.1 + # via + # chromadb + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-sdk + # opentelemetry-semantic-conventions + # pydantic-ai-slim +opentelemetry-exporter-otlp-proto-common==1.39.1 + # via opentelemetry-exporter-otlp-proto-grpc +opentelemetry-exporter-otlp-proto-grpc==1.39.1 + # via chromadb +opentelemetry-proto==1.39.1 + # via + # opentelemetry-exporter-otlp-proto-common + # opentelemetry-exporter-otlp-proto-grpc +opentelemetry-sdk==1.39.1 + # via + # chromadb + # opentelemetry-exporter-otlp-proto-grpc +opentelemetry-semantic-conventions==0.60b1 + # via opentelemetry-sdk +orjson==3.11.5 + # via chromadb +overrides==7.7.0 + # via chromadb +packaging==25.0 + # via + # build + # huggingface-hub + # onnxruntime + # transformers +posthog==5.4.0 + # via chromadb +protobuf==6.33.4 + # via + # googleapis-common-protos + # onnxruntime + # opentelemetry-proto +psutil==7.2.1 ; sys_platform == 'win32' + # via agent-cli +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pybase64==1.4.3 + # via chromadb +pydantic==2.12.5 + # via + # agent-cli + # chromadb + # fastapi + # fastapi-cloud-cli + # genai-prices + # google-genai + # openai + # pydantic-ai-slim + # pydantic-extra-types + # pydantic-graph + # pydantic-settings +pydantic-ai-slim==1.42.0 + # via agent-cli +pydantic-core==2.41.5 + # via pydantic +pydantic-extra-types==2.11.0 + # via fastapi +pydantic-graph==1.42.0 + # via pydantic-ai-slim +pydantic-settings==2.12.0 + # via fastapi +pygments==2.19.2 + # via rich +pyperclip==1.11.0 + # via agent-cli +pypika==0.50.0 + # via chromadb +pyproject-hooks==1.2.0 + # via build +pyreadline3==3.5.4 ; sys_platform == 'win32' + # via humanfriendly +python-dateutil==2.9.0.post0 + # via + # kubernetes + # posthog +python-dotenv==1.2.1 + # via + # dotenv + # pydantic-settings + # uvicorn +python-multipart==0.0.21 + # via fastapi +pyyaml==6.0.3 + # via + # chromadb + # huggingface-hub + # kubernetes + # transformers + # uvicorn +referencing==0.37.0 + # via + # jsonschema + # jsonschema-specifications +regex==2026.1.15 + # via + # tiktoken + # transformers +requests==2.32.5 + # via + # google-auth + # google-genai + # huggingface-hub + # kubernetes + # posthog + # requests-oauthlib + # tiktoken + # transformers +requests-oauthlib==2.0.0 + # via kubernetes +rich==14.2.0 + # via + # agent-cli + # chromadb + # rich-toolkit + # typer + # typer-slim +rich-toolkit==0.17.1 + # via + # fastapi-cli + # fastapi-cloud-cli +rignore==0.7.6 + # via fastapi-cloud-cli +rpds-py==0.30.0 + # via + # jsonschema + # referencing +rsa==4.9.1 + # via google-auth +safetensors==0.7.0 + # via transformers +sentry-sdk==2.49.0 + # via fastapi-cloud-cli +setproctitle==1.3.7 + # via agent-cli +shellingham==1.5.4 + # via + # typer + # typer-slim +six==1.17.0 + # via + # kubernetes + # posthog + # python-dateutil +sniffio==1.3.1 + # via + # google-genai + # openai +starlette==0.50.0 + # via fastapi +sympy==1.14.0 + # via onnxruntime +tenacity==9.1.2 + # via + # chromadb + # google-genai +tiktoken==0.12.0 + # via pydantic-ai-slim +tokenizers==0.22.2 + # via + # chromadb + # transformers +tqdm==4.67.1 + # via + # chromadb + # huggingface-hub + # openai + # transformers +transformers==4.57.5 + # via agent-cli +typer==0.21.1 + # via + # agent-cli + # chromadb + # fastapi-cli + # fastapi-cloud-cli +typer-slim==0.21.1 + # via agent-cli +typing-extensions==4.15.0 + # via + # anyio + # chromadb + # fastapi + # google-genai + # grpcio + # huggingface-hub + # openai + # opentelemetry-api + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-sdk + # opentelemetry-semantic-conventions + # pydantic + # pydantic-core + # pydantic-extra-types + # referencing + # rich-toolkit + # starlette + # typer + # typer-slim + # typing-inspection +typing-inspection==0.4.2 + # via + # pydantic + # pydantic-ai-slim + # pydantic-graph + # pydantic-settings +urllib3==2.3.0 + # via + # kubernetes + # requests + # sentry-sdk +uvicorn==0.40.0 + # via + # chromadb + # fastapi + # fastapi-cli + # fastapi-cloud-cli +uvloop==0.22.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' + # via uvicorn +watchfiles==1.1.1 + # via + # agent-cli + # uvicorn +websocket-client==1.9.0 + # via kubernetes +websockets==15.0.1 + # via + # google-genai + # uvicorn +zipp==3.23.0 + # via importlib-metadata diff --git a/agent_cli/install/extras.py b/agent_cli/install/extras.py index 22c9a805b..56c5bc8d5 100644 --- a/agent_cli/install/extras.py +++ b/agent_cli/install/extras.py @@ -27,8 +27,8 @@ def install_extras( list[str] | None, typer.Argument( help="Extras to install: `audio`, `faster-whisper`, `kokoro`, `llm`, `memory`, " - "`mlx-whisper`, `piper`, `rag`, `server`, `speed`, `vad`, `whisper-transformers`, " - "`wyoming`", + "`mlx-whisper`, `piper`, `rag`, `server`, `speed`, `vad`, `vectordb`, " + "`whisper-transformers`, `wyoming`", ), ] = None, list_extras: Annotated[ @@ -62,6 +62,7 @@ def install_extras( - `server` - FastAPI server components - `speed` - Audio speed adjustment (audiostretchy) - `vad` - Voice Activity Detection (Silero VAD via ONNX) + - `vectordb` - Vector database with embeddings (ChromaDB) - `whisper-transformers` - Whisper ASR via HuggingFace transformers - `wyoming` - Wyoming protocol support diff --git a/pyproject.toml b/pyproject.toml index 1532cecea..69ad6c3e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,68 +30,50 @@ content-type = "text/markdown" Homepage = "https://github.com/basnijholt/agent-cli" [project.optional-dependencies] -# Provider extras (previously base dependencies, now optional) -wyoming = ["wyoming>=1.5.2"] # Wyoming protocol only (for servers) -audio = ["numpy", "sounddevice>=0.4.6", "agent-cli[wyoming]"] # Local audio recording -llm = ["pydantic-ai-slim[openai,google,duckduckgo,vertexai]>=0.1.1"] # LLM framework with tools - -# Feature extras -server = [ - "fastapi[standard]", -] -rag = [ - "pydantic-ai-slim[openai,google]>=0.1.1", # pydantic-ai for LLM integration - "fastapi[standard]", +# Base building blocks +wyoming = ["wyoming>=1.5.2"] +server = ["fastapi[standard]"] + +# Provider extras +audio = ["numpy", "sounddevice>=0.4.6", "agent-cli[wyoming]"] +llm = ["pydantic-ai-slim[openai,google,duckduckgo,vertexai]>=0.1.1"] + +# Shared base for rag + memory (vector DB with embeddings and LLM integration) +vectordb = [ + "agent-cli[server]", + "pydantic-ai-slim[openai,google]>=0.1.1", "chromadb>=0.4.22", "openai>=1.0.0", # Required by chromadb's OpenAIEmbeddingFunction "onnxruntime>=1.17.0", "huggingface-hub>=0.20.0", "transformers>=4.30.0", "watchfiles>=0.21.0", - # Until here same as 'memory' extras - "markitdown[docx,pdf,pptx]>=0.1.3", -] -memory = [ - "pydantic-ai-slim[openai,google]>=0.1.1", # pydantic-ai for LLM integration - "fastapi[standard]", - "chromadb>=0.4.22", - "openai>=1.0.0", # Required by chromadb's OpenAIEmbeddingFunction - "onnxruntime>=1.17.0", - "huggingface-hub>=0.20.0", - "transformers>=4.30.0", - "watchfiles>=0.21.0", - # Until here same as 'rag' extras - "pyyaml>=6.0.0", -] -vad = [ - "onnxruntime>=1.16.0", -] -faster-whisper = [ - "fastapi[standard]", - "faster-whisper>=1.0.0", ] +rag = ["agent-cli[vectordb]", "markitdown[docx,pdf,pptx]>=0.1.3"] +memory = ["agent-cli[vectordb]", "pyyaml>=6.0.0"] + +# Feature extras +vad = ["onnxruntime>=1.16.0"] +speed = ["audiostretchy>=1.3.0"] + +# ASR backends +faster-whisper = ["agent-cli[server]", "faster-whisper>=1.0.0"] mlx-whisper = [ - "fastapi[standard]; sys_platform == 'darwin' and platform_machine == 'arm64'", + "agent-cli[server]; sys_platform == 'darwin' and platform_machine == 'arm64'", "mlx-whisper>=0.4.0; sys_platform == 'darwin' and platform_machine == 'arm64'", ] -whisper-transformers = [ - "fastapi[standard]", - "transformers>=4.30.0", - "torch>=2.0.0", -] -piper = [ - "fastapi[standard]", - "piper-tts>=1.2.0", -] +whisper-transformers = ["agent-cli[server]", "transformers>=4.30.0", "torch>=2.0.0"] + +# TTS backends +piper = ["agent-cli[server]", "piper-tts>=1.2.0"] kokoro = [ - "fastapi[standard]", + "agent-cli[server]", "kokoro>=0.9.0", "soundfile>=0.12.0", "huggingface-hub>=0.20.0", "pip", # Kokoro uses spacy which calls `pip install` to download language models at runtime "transformers>=4.40.0", # Ensure pre-built tokenizers wheels for Python 3.13+ ] -speed = ["audiostretchy>=1.3.0"] # Development extras test = [ diff --git a/uv.lock b/uv.lock index 7cb9dc132..cb15a8d16 100644 --- a/uv.lock +++ b/uv.lock @@ -83,7 +83,7 @@ memory = [ { name = "watchfiles" }, ] mlx-whisper = [ - { name = "fastapi", extra = ["standard"], marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "fastapi", extra = ["standard"] }, { name = "mlx-whisper", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, ] piper = [ @@ -117,6 +117,16 @@ test = [ vad = [ { name = "onnxruntime" }, ] +vectordb = [ + { name = "chromadb" }, + { name = "fastapi", extra = ["standard"] }, + { name = "huggingface-hub" }, + { name = "onnxruntime" }, + { name = "openai" }, + { name = "pydantic-ai-slim", extra = ["google", "openai"] }, + { name = "transformers" }, + { name = "watchfiles" }, +] whisper-transformers = [ { name = "fastapi", extra = ["standard"] }, { name = "torch" }, @@ -149,20 +159,23 @@ requires-dist = [ { name = "audiostretchy", marker = "extra == 'speed'", specifier = ">=1.3.0" }, { name = "chromadb", marker = "extra == 'memory'", specifier = ">=0.4.22" }, { name = "chromadb", marker = "extra == 'rag'", specifier = ">=0.4.22" }, + { name = "chromadb", marker = "extra == 'vectordb'", specifier = ">=0.4.22" }, { name = "dotenv" }, - { name = "fastapi", extras = ["standard"], marker = "platform_machine == 'arm64' and sys_platform == 'darwin' and extra == 'mlx-whisper'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'faster-whisper'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'kokoro'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'memory'" }, + { name = "fastapi", extras = ["standard"], marker = "extra == 'mlx-whisper'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'piper'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'rag'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'server'" }, + { name = "fastapi", extras = ["standard"], marker = "extra == 'vectordb'" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'whisper-transformers'" }, { name = "faster-whisper", marker = "extra == 'faster-whisper'", specifier = ">=1.0.0" }, { name = "httpx" }, { name = "huggingface-hub", marker = "extra == 'kokoro'", specifier = ">=0.20.0" }, { name = "huggingface-hub", marker = "extra == 'memory'", specifier = ">=0.20.0" }, { name = "huggingface-hub", marker = "extra == 'rag'", specifier = ">=0.20.0" }, + { name = "huggingface-hub", marker = "extra == 'vectordb'", specifier = ">=0.20.0" }, { name = "kokoro", marker = "extra == 'kokoro'", specifier = ">=0.9.0" }, { name = "markdown-code-runner", marker = "extra == 'dev'", specifier = ">=2.7.0" }, { name = "markdown-gfm-admonition", marker = "extra == 'dev'" }, @@ -173,8 +186,10 @@ requires-dist = [ { name = "onnxruntime", marker = "extra == 'memory'", specifier = ">=1.17.0" }, { name = "onnxruntime", marker = "extra == 'rag'", specifier = ">=1.17.0" }, { name = "onnxruntime", marker = "extra == 'vad'", specifier = ">=1.16.0" }, + { name = "onnxruntime", marker = "extra == 'vectordb'", specifier = ">=1.17.0" }, { name = "openai", marker = "extra == 'memory'", specifier = ">=1.0.0" }, { name = "openai", marker = "extra == 'rag'", specifier = ">=1.0.0" }, + { name = "openai", marker = "extra == 'vectordb'", specifier = ">=1.0.0" }, { name = "pip", marker = "extra == 'kokoro'" }, { name = "piper-tts", marker = "extra == 'piper'", specifier = ">=1.2.0" }, { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=3.0.0" }, @@ -184,6 +199,7 @@ requires-dist = [ { name = "pydantic-ai-slim", extras = ["duckduckgo", "google", "openai", "vertexai"], marker = "extra == 'llm'", specifier = ">=0.1.1" }, { name = "pydantic-ai-slim", extras = ["google", "openai"], marker = "extra == 'memory'", specifier = ">=0.1.1" }, { name = "pydantic-ai-slim", extras = ["google", "openai"], marker = "extra == 'rag'", specifier = ">=0.1.1" }, + { name = "pydantic-ai-slim", extras = ["google", "openai"], marker = "extra == 'vectordb'", specifier = ">=0.1.1" }, { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.0.0" }, { name = "pyperclip" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0.0" }, @@ -206,17 +222,19 @@ requires-dist = [ { name = "transformers", marker = "extra == 'kokoro'", specifier = ">=4.40.0" }, { name = "transformers", marker = "extra == 'memory'", specifier = ">=4.30.0" }, { name = "transformers", marker = "extra == 'rag'", specifier = ">=4.30.0" }, + { name = "transformers", marker = "extra == 'vectordb'", specifier = ">=4.30.0" }, { name = "transformers", marker = "extra == 'whisper-transformers'", specifier = ">=4.30.0" }, { name = "typer" }, { name = "typer-slim", extras = ["standard"] }, { name = "versioningit", marker = "extra == 'dev'" }, { name = "watchfiles", marker = "extra == 'memory'", specifier = ">=0.21.0" }, { name = "watchfiles", marker = "extra == 'rag'", specifier = ">=0.21.0" }, + { name = "watchfiles", marker = "extra == 'vectordb'", specifier = ">=0.21.0" }, { name = "wyoming", marker = "extra == 'audio'", specifier = ">=1.5.2" }, { name = "wyoming", marker = "extra == 'wyoming'", specifier = ">=1.5.2" }, { name = "zensical", marker = "extra == 'dev'" }, ] -provides-extras = ["audio", "dev", "faster-whisper", "kokoro", "llm", "memory", "mlx-whisper", "piper", "rag", "server", "speed", "test", "vad", "whisper-transformers", "wyoming"] +provides-extras = ["audio", "dev", "faster-whisper", "kokoro", "llm", "memory", "mlx-whisper", "piper", "rag", "server", "speed", "test", "vad", "vectordb", "whisper-transformers", "wyoming"] [package.metadata.requires-dev] dev = [ From fdf331f22cc0e3ab927bacec2b146bb2051089cd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 12 Feb 2026 06:55:35 +0000 Subject: [PATCH 2/3] Update auto-generated docs --- README.md | 3 ++- docs/commands/install-extras.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd6172aa9..5f779f6d4 100644 --- a/README.md +++ b/README.md @@ -431,6 +431,7 @@ agent-cli install-extras rag memory vad • server - FastAPI server components • speed - Audio speed adjustment (audiostretchy) • vad - Voice Activity Detection (Silero VAD via ONNX) + • vectordb - Vector database with embeddings (ChromaDB) • whisper-transformers - Whisper ASR via HuggingFace transformers • wyoming - Wyoming protocol support @@ -446,7 +447,7 @@ agent-cli install-extras rag memory vad ╭─ Arguments ────────────────────────────────────────────────────────────────────────────╮ │ extras [EXTRAS]... Extras to install: audio, faster-whisper, kokoro, llm, │ │ memory, mlx-whisper, piper, rag, server, speed, vad, │ -│ whisper-transformers, wyoming │ +│ vectordb, whisper-transformers, wyoming │ ╰────────────────────────────────────────────────────────────────────────────────────────╯ ╭─ Options ──────────────────────────────────────────────────────────────────────────────╮ │ --list -l Show available extras with descriptions (what each one enables) │ diff --git a/docs/commands/install-extras.md b/docs/commands/install-extras.md index fae0267c6..3f6be7876 100644 --- a/docs/commands/install-extras.md +++ b/docs/commands/install-extras.md @@ -42,6 +42,7 @@ Available extras: | `server` | FastAPI server components | | `speed` | Audio speed adjustment (audiostretchy) | | `vad` | Voice Activity Detection (Silero VAD via ONNX) | +| `vectordb` | Vector database with embeddings (ChromaDB) | | `whisper-transformers` | Whisper ASR via HuggingFace transformers | | `wyoming` | Wyoming protocol support | From 6fd65842255ad782253ff47f501bc23fc6dffacf Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Wed, 11 Feb 2026 23:05:42 -0800 Subject: [PATCH 3/3] ci: retry pre-commit.ci (transient DNS failure)