-
Notifications
You must be signed in to change notification settings - Fork 102
Open
Labels
bugSomething isn't workingSomething isn't workingstatus:backlogThis issue has been added to our backlogThis issue has been added to our backlog
Description
Is this a new bug in the Pinecone Python client?
- I believe this is a new bug in the Pinecone Python ClientI have searched the existing issues, and I could not find an existing issue for this bugTo pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.
Current Behavior
I query Pinecone index like this:
search_filter = {
"username": "thyrst",
}
result = pinecone_index.query(
vector=vector,
top_k=10,
filter=search_filter,
includeMetadata=True,
)
A static type checker fails because of filter argument type.
Type "dict[str, str]" cannot be assigned to type "Dict[str, str | float | int | bool | List[Unknown] | dict[Unknown, Unknown]] | None"
"dict[str, str]" is incompatible with "Dict[str, str | float | int | bool | List[Unknown] | dict[Unknown, Unknown]]
Expected Behavior
The dictionary passed in the filter argument is not changed in the query function, therefore we could use covariant Mapping type instead of Dict, so the type checker doesn't throw.
Steps To Reproduce
- Setup Python3 environment
- Install dependecies:
pip install pinecone-client pyright
- Create
main.py
:
import os
from pinecone import Pinecone
pinecone = Pinecone(api_key=os.environ["PINECONE_API_KEY"])
pinecone_index = pinecone.Index(name=os.environ["PINECONE_INDEX_NAME"])
assert pinecone_index is not None
vector = [0.1, 0.2, 0.3, 0.4, 0.5] # sample embedding vector
search_filter = {
"username": "thyrst",
}
result = pinecone_index.query(
vector=vector,
top_k=10,
filter=search_filter,
includeMetadata=True,
)
print(result)
- Run Pyright:
pyright main.py
Relevant log output
% pyright main.py
/Users/****/main.py
/Users/****/main.py:17:12 - error: Argument of type "dict[str, str]" cannot be assigned to parameter "filter" of type "Dict[str, str | float | int | bool | List[Unknown] | dict[Unknown, Unknown]] | None" in function "query"
Type "dict[str, str]" cannot be assigned to type "Dict[str, str | float | int | bool | List[Unknown] | dict[Unknown, Unknown]] | None"
"dict[str, str]" is incompatible with "Dict[str, str | float | int | bool | List[Unknown] | dict[Unknown, Unknown]]"
Type parameter "_VT@dict" is invariant, but "str" is not the same as "str | float | int | bool | List[Unknown] | dict[Unknown, Unknown]"
Consider switching from "dict" to "Mapping" which is covariant in the value type
"dict[str, str]" is incompatible with "None" (reportArgumentType)
1 error, 0 warnings, 0 informations
Environment
- OS: macOS Ventura 13.6.2
- Python: 3.11.5
- pinecone-client: 3.0.2
- pyright: 1.1.350
Additional Context
I think covariant types should be used preferably for the input arguments everywhere where the passed objects are not changed.
kissge and charles-dyfis-net
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingstatus:backlogThis issue has been added to our backlogThis issue has been added to our backlog
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
[-][Bug] Using Mapping instead of Dict for read-only arguments[/-][+][Bug] Use Mapping instead of Dict for read-only arguments[/+]Thyrst commentedon Feb 6, 2024
Created a PR with the idea.
charles-dyfis-net commentedon Feb 22, 2024
(Folks who want more background on why this is necessary might review https://stackoverflow.com/questions/73603289/why-doesnt-parameter-type-dictstr-unionstr-int-accept-value-of-type-di)