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.

ChangeWhat it means for you
Python 3.14Local development, CI, the pre-commit hooks and the documentation build now use Python 3.14.
Pinecone backend rewriteSmarter calls Pinecone directly instead of through langchain-pinecone. Existing indexes stay searchable.
Infrastructure inventoryinitialize_platform fills the infrastructure ledger right away, instead of 15 minutes after the containers start.
Faster, sturdier buildsThe 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 init and make check-python look for python3.14, and make python-init builds the virtual environment with it.
  • The setup scripts for macOS and Ubuntu install 3.14. On Ubuntu that is python3.14-venv, python3.14-full and python3.14-dev from 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-community and langchain-pinecone also removed SQLAlchemy, marshmallow, aiohttp-retry and 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.

📖 Developer setup


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 text metadata, 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_k of at least 20, lambda_mult of 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 text metadata, search leaves them out instead of failing.
  • Upserts are batched, 64 chunks at a time, each batch embedded and written in one call.

📖 Vectorstore documentation


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_platform now 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 of make docker-init still 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_platform now also runs the infrastructure inventory sync.
  • Developers: install Python 3.14 (the macOS and Ubuntu setup scripts in setup/ do it), then run make python-init to recreate your virtual environment. make check-python tells 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/python instead of Docker Hub’s python. It is the same official image.
  • If you use langchain-pinecone or langchain-community in 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.