Session State Tools

Use `session_state` as a parameter name in your factory to receive the session state dict directly (no need for run_context).

1"""
2Session State Tools
3===================
4Use `session_state` as a parameter name in your factory to receive
5the session state dict directly (no need for run_context).
6
7Set `cache_callables=False` so the factory runs fresh every time,
8picking up any session_state changes between runs.
9"""
10
11from kern.agent import Agent
12from kern.models.openai import OpenAIResponses
13
14# ---------------------------------------------------------------------------
15# Tools
16# ---------------------------------------------------------------------------
17
18
19def get_greeting(name: str) -> str:
20 """Greet someone by name."""
21 return f"Hello, {name}!"
22
23
24def get_farewell(name: str) -> str:
25 """Say goodbye to someone."""
26 return f"Goodbye, {name}!"
27
28
29def get_tools(session_state: dict):
30 """Pick tools based on the 'mode' key in session_state."""
31 mode = session_state.get("mode", "greet")
32 print(f"--> Factory resolved mode: {mode}")
33
34 if mode == "greet":
35 return [get_greeting]
36 else:
37 return [get_farewell]
38
39
40# ---------------------------------------------------------------------------
41# Create the Agent
42# ---------------------------------------------------------------------------
43
44agent = Agent(
45 model=OpenAIResponses(id="gpt-5-mini"),
46 tools=get_tools,
47 cache_callables=False,
48 instructions=["Use the available tool to respond."],
49)
50
51
52# ---------------------------------------------------------------------------
53# Run the Agent
54# ---------------------------------------------------------------------------
55
56if __name__ == "__main__":
57 print("=== Greet mode ===")
58 agent.print_response(
59 "Say hi to Alice",
60 session_state={"mode": "greet"},
61 stream=True,
62 )
63
64 print("\n=== Farewell mode ===")
65 agent.print_response(
66 "Say bye to Alice",
67 session_state={"mode": "farewell"},
68 stream=True,
69 )

Run the Example

1# Clone and setup repo
2git clone https://github.com/kern-ai/kern.git
3cd kern/cookbook/02_agents/04_tools
4
5# Create and activate virtual environment
6./scripts/demo_setup.sh
7source .venvs/demo/bin/activate
8
9python 02_session_state_tools.py