Release v0.20
v0.20 Release: Python 3.14 and a Leaner Pinecone Backend
October 10, 2026 · The Smarter Project
v0.19 added features. v0.20 is a maintenance release: Smarter’s development toolchain moves to Python 3.14, the Pinecone vectorstore backend drops three LangChain packages that blocked the upgrade, and a new platform shows its infrastructure as soon as it starts.
There are no new resource kinds and no manifest changes. Everything you have applied keeps working as it is.
| Change | What it means for you |
|---|---|
| Python 3.14 | Local development, CI, the pre-commit hooks and the documentation build now use Python 3.14. |
| Pinecone backend rewrite | Smarter calls Pinecone directly instead of through langchain-pinecone. Existing indexes stay searchable. |
| Infrastructure inventory | initialize_platform fills the infrastructure ledger right away, instead of 15 minutes after the containers start. |
| Faster, sturdier builds | The Docker base image and build helpers come from the Amazon ECR Public Gallery, so a Docker Hub outage no longer fails a release. |
Python 3.14
Smarter’s developer environment now targets Python 3.14:
make initandmake check-pythonlook forpython3.14, andmake python-initbuilds the virtual environment with it.- The setup scripts for macOS and Ubuntu install 3.14. On Ubuntu that is
python3.14-venv,python3.14-fullandpython3.14-devfrom the deadsnakes PPA. - CI runs the test and version-bump workflows on 3.14, and the pre-commit hooks run under 3.14.
- The documentation on docs.smarter.sh is built with 3.14.
- The requirements are recompiled for 3.14. The dependency tree is smaller: removing
langchain-communityandlangchain-pineconealso removed SQLAlchemy, marshmallow,aiohttp-retryand several other packages that came in only through them.
Two small code changes came with it. The calculator function no longer handles ast.Num, which Python 3.14 removed (numbers are ast.Constant, which it already handled). And a stray import of Union from aiohttp_retry in the token generator now comes from typing.
Pinecone without langchain-pinecone
langchain-pinecone does not allow Python 3.14, so it had to go. The Pinecone backend of the Vectorstore resource now embeds your text itself and calls the Pinecone index directly.
Nothing changes in your manifests. A Pinecone Vectorstore looks the same as before:
apiVersion: smarter.sh/v1
kind: Vectorstore
metadata:
name: example_research_papers
description: A Pinecone serverless vector database of research papers.
version: 1.0.0
spec:
backend: pinecone
hosting: managed
connection: pinecone
index:
dimension: 1536
metric: cosine
embeddings:
provider: openai
model: text-embedding-3-small
pinecone:
cloud: aws
region: us-east-1
- Your existing indexes stay searchable. Smarter still stores each chunk’s text in the vector’s
textmetadata, where LangChain put it, so data written by earlier releases reads back the same way. - The same search types: similarity, similarity with a score threshold, and MMR (maximal marginal relevance), with the same defaults (
fetch_kof at least 20,lambda_multof 0.5) and the same metadata filters. - Scores are Pinecone’s own for the index’s metric (cosine, Euclidean or dot product). MMR results, as before, have no score.
- Foreign vectors are skipped. If something other than Smarter wrote vectors to the index, and they have no
textmetadata, search leaves them out instead of failing. - Upserts are batched, 64 chunks at a time, each batch embedded and written in one call.
Fixes and operations
- The infrastructure ledger is filled at startup. After
make docker-init, Settings, Infrastructure Resources was empty for the first 15 minutes, because only the Celery Beat schedule ran the inventory sync, and Beat waits one full interval before its first run.manage.py initialize_platformnow runs the sync once as its last step. The sync only reads from your cloud; it never creates or destroys anything. If it fails, for example on a fresh install with no cluster or cloud credentials, the error is logged and initialization carries on, so the rest ofmake docker-initstill runs. - Builds no longer depend on Docker Hub. A Docker Hub outage failed the v0.19.0 release build twice: once pulling the Python base image, and once pulling the BuildKit and QEMU helper images. All three now come from their mirrors in the Amazon ECR Public Gallery, in CI and in local builds. The images are the same; only the registry changed.
- Releases build once. The release workflow used to build the same multi-platform image twice, once for ECR and once for Docker Hub. It now builds once and copies the finished image to Docker Hub with the same tags, which saves about 24 minutes per release.
- Fewer rate-limit failures. The build, test and Helm chart workflows log in to Docker Hub before they pull from it, instead of sharing GitHub’s anonymous pull limit.
Upgrading
- Platform operators: nothing to do. There are no migrations, no new settings and no new environment variables.
initialize_platformnow also runs the infrastructure inventory sync. - Developers: install Python 3.14 (the macOS and Ubuntu setup scripts in
setup/do it), then runmake python-initto recreate your virtual environment.make check-pythontells you if 3.14 is missing. - If you pin the Docker base image yourself, note that the Dockerfile now pulls from
public.ecr.aws/docker/library/pythoninstead of Docker Hub’spython. It is the same official image. - If you use
langchain-pineconeorlangchain-communityin your own code that runs inside Smarter, add them to your own requirements. Smarter no longer installs them.
What’s next
With the toolchain on Python 3.14, the next releases go back to features: connecting LLMClients to self-hosted LLMHost models, and Vectorsearch to Vectorstores, so that a complete RAG application on models you host is a few manifests.
The full list of changes is in the changelog. To try the release, start with the documentation, or browse the code on GitHub.
