Repository navigation
10.3.0 adds two integrated-embedding settings for document indexes, from Silas Smith (@ssmith-pc): a per-search query task and a processing location. It also fixes gRPC through authenticating proxies. Nothing is removed or renamed; the API version is still 2026-07.
Act only if you give the gRPC client a proxy_url that isn't http:// (see Behavior change), or your logs captured a PineconeConfig or Config repr with a proxy password (rotate it).
What's new
Set the query task per search: EmbedQuery.parameters (docs, 3b6923e)
EmbedQuery(field=..., query=..., parameters: dict[str, Any] | None = None)overrides the field'sread_parametersfor one search.- One field serves several query types: a
gemini-embedding-2field indexed for retrieval can also answer fact-checking queries, with no second index or re-embedding. - Only
task_typecan be set today; the server validates it.pc.inference.list_models()lists the models that accept it. - Unset, the field's
read_parametersapply and the key is not sent.SparseEmbedQuerydoes not take it.
from pinecone import EmbedQuery, Pinecone
pc = Pinecone()
facts = pc.index("fact-checks") # "body" embeds with gemini-embedding-2
results = facts.documents.search(
namespace="claims-en",
top_k=5,
score_by=[
EmbedQuery(
field="body",
query="Is the Eiffel Tower taller than 300 m?",
parameters={"task_type": "fact_verification"},
)
],
)Choose where your text is processed: FieldEmbedConfig.processing_location (8396d55)
FieldEmbedConfig(..., processing_location: str | None = None), such as"us", sets where the model processes your documents and queries.- Values depend on the model and your plan; unset means the model's default.
- Set at index creation, typed or as a dict (
embed={"model": ..., "processing_location": "us"}). Like the rest ofembed, it cannot change later. pc.indexes.describe(name).schema.fields["body"].embed.processing_locationreports it; 10.2.0 dropped it.- Dense
embedonly;FieldSparseEmbedConfigdoes not take it.
from pinecone import FieldEmbedConfig, Pinecone, SchemaBuilder
pc = Pinecone()
schema = (
SchemaBuilder()
.add_string_field(
"body",
embed=FieldEmbedConfig(model="text-embedding-3-large", processing_location="us"),
)
.build()
)
pc.indexes.create(name="support-articles-us", schema=schema)Search guide organized by kind of search (docs only) (Search documents, d6e79e1)
- The guide starts from the kind of search you want, semantic, sparse-vector or full-text, and names the clause for each, split by whether Pinecone embeds the query or you pass a vector. Declare a schema and upsert documents builds its two example indexes.
# Clauses available before 10.3.0; the guide maps each to a kind of search.
from pinecone import DenseVectorQuery, EmbedQuery, SparseEmbedQuery, SparseValues, SparseVectorQuery, TextQuery
# Semantic: by meaning
EmbedQuery(field="body", query="how did Rome move water") # Pinecone embeds the text
DenseVectorQuery(field="body_vector", values=[0.012, -0.087, 0.153]) # you pass the vector
# Sparse-vector: by weighted term overlap
SparseEmbedQuery(field="body", query="roman aqueduct")
SparseVectorQuery(field="body_sparse_vector", sparse_values=SparseValues(indices=[3, 41], values=[0.6, 0.4]))
# Full-text: by the words themselves
TextQuery(fields=["title"], query="roman aqueduct")Behavior change: gRPC accepts only http:// proxy URLs
- Affects:
GrpcIndex(..., proxy_url=...)andpc.index(..., grpc=True)whenproxy_urlstarts withhttps://,socks5://orsocks5h://(10.2.0 accepted these), or has no scheme. - Now: construction raises (
pc.indexraises before it looks up the host):
PineconeValueError: gRPC supports only http:// proxies; got 'https://***@proxy'; use an http:// proxy URL (traffic inside the tunnel is still TLS) or use REST (grpc=False), which also supports https:// and SOCKS proxies
- Fix, gRPC only: change the scheme to
http://. If gRPC worked with your URL in 10.2.0, keep its host and port: 10.2.0 already spoke plain HTTP there. - Fix, REST and gRPC through one
https://proxy:pc.index(..., grpc=True)reusesPinecone(proxy_url=...)and has no per-call override. Keephttps://onPineconeand giveGrpcIndexits ownhttp://URL:
from pinecone import GrpcIndex, Pinecone
pc = Pinecone(proxy_url="https://user:pass@proxy.corp:443") # REST keeps TLS to the proxy
idx = GrpcIndex(host=pc.indexes.describe("my-index").host, proxy_url="http://user:pass@proxy.corp:3128")- Or drop
grpc=Trueand use REST. - Unchanged: REST (
Pinecone,AsyncPinecone,pc.index(...)withoutgrpc=True) still acceptshttp://,https://,socks5://andsocks5h://. Don't switch a sharedPinecone(proxy_url=...)tohttp://for gRPC's sake: REST would then send its proxy credentials in plaintext too. - Why: gRPC now sends
proxy_urlcredentials (see Fixes), and would send them unencrypted to anhttps://proxy. No earlier release sent them at all. (653d62b)
Fixes: proxies
Skip this section if you don't set proxy_url.
- gRPC sends proxy credentials. With
proxy_url="http://user:pass@proxy:3128", gRPC sendsProxy-Authorization: Basicon CONNECT; before, an authenticating proxy refused the tunnel. gRPC ignoresproxy_headers, so put gRPC credentials in the URL. RESTproxy_headersare unchanged. (736bfb6) - A malformed
proxy_urlfails at construction with a masked error.Pinecone,AsyncPinecone,Index,AsyncIndexandAdminraisePineconeValueError("Invalid proxy URL '***@proxy.corp:3128': it has no scheme; start it with http:// or https://"), naming the problem.GrpcIndexraises the gRPC error above. Before, httpx raisedValueErrororhttpx.InvalidURLwith text that could include the password.PineconeValueErroris aValueError;except httpx.InvalidURLno longer matches. Percent-encode#,/,?and@in credentials (Authentication). (653d62b) - Proxy passwords are masked in reprs.
repr()ofPineconeConfigandConfigused to print the password inproxy_url. They now printhttp://***@host:port. If your logs captured one, rotate the proxy password. (d895c1d, c180469) PINECONE_DEBUG_CURLshell-quotes its output. A URL, header or body containing'no longer breaks the logged curl command. (d895c1d)
Docs
- The documents guides use docs.pinecone.io's names for the kinds of search (semantic, sparse-vector, full-text), and Search documents shows how to keep semantic results to documents containing certain words with a text-match filter. From @nicoalba10. (433fe11)
Dependencies
None that reach users: runtime Python dependencies and the crates in the Rust extension match 10.2.0.
Upgrading
pip install --upgrade pinecone
# or
uv add "pinecone>=10.3,<11"Full Changelog: v10.2.0...v10.3.0