Two fast questions about the Context feature

Hi, I’ve been migrating from config to Context class and I have two fast questions:

  • Can I use it as BaseModel or I should be always using only with @dataclass decorator?
  • Can I “store” complexes values on it for later use, like BaseModel, Dict or List?

Yes to both:

  1. Using with BaseModel: Context can work with either a Pydantic BaseModel or a @dataclass. Use BaseModel if you want validation, type coercion and JSON serialization, use @dataclass if you want a lighter faster structure without Pydantic’s overhead.

  2. Storing complex values: You can store any Python object in Context including other BaseModel instances, dicts, lists or custom classes. There’s no restriction on data type. Just keep in mind that if you need to serialize or persist the Context those objects must be serializable.

from typing import Dict, List
from pydantic import BaseModel
from langgraph import Context

class MyModel(BaseModel):
    name: str

class MyContext(BaseModel):
    user_data: Dict
    models: List[MyModel]
    complex_state: MyModel

ctx = MyContext(
    user_data={"key": "value"},
    models=[MyModel(name="test")],
    complex_state=MyModel(name="state")
)
1 Like

Thats great! I believe I’m pretty aware of the possible problems with BaseModel :sweat_smile:

In my entire project I treat everything as BaseModel, but I remembered a little too late that in Postgres everything would be saved as JSON (or dict) to keep persisted, so I need to re-translate everything again and again. I thought it would be the same here, but if this is not required, thats awesome!

Just to be sure, thats also true when I use get_runtime in a tool as well, right?

This topic was automatically closed 12 hours after the last reply. New replies are no longer allowed.