pylint-dev / pylint

It's not just a linter that annoys you!
https://pylint.readthedocs.io/en/latest/
GNU General Public License v2.0
5.26k stars 1.12k forks source link

False positive unsubscriptable-object for Pydantic model with dict Field #9968

Open MartinGotelli opened 4 days ago

MartinGotelli commented 4 days ago

Bug description

"""
With the new LangChain version (0.3.0) there is support for Pydantic V2,
they changed all the models to use Pydantic V2, and some of our code is
returning a false positive specifically related to the BaseMessage class.
"""

# Error
from langchain_core.messages import BaseMessage

def my_function():
    message = BaseMessage(content="x", type="system")
    message.additional_kwargs["foo"] = "bar"

# Not error
from langchain_core.messages import BaseMessage
from langchain_core.pydantic_v1 import Field
# Note: with from pydantic.v1 import Field fails too

class MyBaseMessage(BaseMessage):
    additional_kwargs: dict = Field(default_factory=dict)

def my_function():
    message = BaseMessage(content="x", type="system")
    message.additional_kwargs["foo"] = "bar"

Configuration

No response

Command used

poetry run pylint app tests scripts

Pylint output

************* Module tests.unit.generators.chat_histories.test_chat_message_enricher
tests/unit/generators/chat_histories/test_chat_message_enricher.py:17:26: E1135: Value 'enriched_message.additional_kwargs' doesn't support membership test (unsupported-membership-test)
tests/unit/generators/chat_histories/test_chat_message_enricher.py:18:22: E1136: Value 'enriched_message.additional_kwargs' is unsubscriptable (unsubscriptable-object)

Expected behavior

Not a unsuscriptable-object error

Pylint version

pylint 3.2.7
astroid 3.3.4

Also reproducible on last versions

OS / Environment

Mac ARM

Additional dependencies

langchain-core==0.3.0
pydantic==2.9.1