State in Condition

This example demonstrates how to access the run context in the evaluator function of a condition step

This example shows:

  1. How to use run_context in a Condition evaluator function
  2. Reading and modifying run_context.session_state based on condition logic
  3. Accessing user_id and session_id from run_context.session_state
  4. Making conditional decisions based on run_context.session_state

Create a Python file

1from kern.agent import Agent
2from kern.models.openai import OpenAIResponses
3from kern.workflow.condition import Condition
4from kern.workflow.step import Step, StepInput, StepOutput
5from kern.workflow.workflow import Workflow
6from kern.run import RunContext
7
8
9def check_user_has_context(step_input: StepInput, run_context: RunContext) -> bool:
10 """
11 Condition evaluator that checks if user has been greeted before.
12
13 Args:
14 step_input: The input for this step (contains workflow context)
15 run_context: The run context object
16
17 Returns:
18 bool: True if user has context, False otherwise
19 """
20 print("\n=== Evaluating Condition ===")
21 print(f"User ID: {run_context.session_state.get('current_user_id')}")
22 print(f"Session ID: {run_context.session_state.get('current_session_id')}")
23 print(f"Has been greeted: {run_context.session_state.get('has_been_greeted', False)}")
24
25 # Check if user has been greeted before
26 return run_context.session_state.get("has_been_greeted", False)
27
28
29def mark_user_as_greeted(step_input: StepInput, run_context: RunContext) -> StepOutput:
30 """Custom function that marks user as greeted in session state."""
31 print("\n=== Marking User as Greeted ===")
32 run_context.session_state["has_been_greeted"] = True
33 run_context.session_state["greeting_count"] = run_context.session_state.get("greeting_count", 0) + 1
34
35 return StepOutput(
36 content=f"User has been greeted. Total greetings: {run_context.session_state['greeting_count']}"
37 )
38
39
40# Create agents
41greeter_agent = Agent(
42 name="Greeter",
43 model=OpenAIResponses(id="gpt-5.2"),
44 instructions="Greet the user warmly and introduce yourself.",
45 markdown=True,
46)
47
48contextual_agent = Agent(
49 name="Contextual Assistant",
50 model=OpenAIResponses(id="gpt-5.2"),
51 instructions="Continue the conversation with context. You already know the user.",
52 markdown=True,
53)
54
55# Create workflow with condition
56workflow = Workflow(
57 name="Conditional Greeting Workflow",
58 steps=[
59 # First, check if user has been greeted before
60 Condition(
61 name="Check If New User",
62 description="Check if this is a new user who needs greeting",
63 # Condition returns True if user has context, so we negate it
64 evaluator=lambda step_input, run_context: not check_user_has_context(
65 step_input, run_context
66 ),
67 steps=[
68 # Only execute these steps for new users
69 Step(
70 name="Greet User",
71 description="Greet the new user",
72 agent=greeter_agent,
73 ),
74 Step(
75 name="Mark as Greeted",
76 description="Mark user as greeted in session",
77 executor=mark_user_as_greeted,
78 ),
79 ],
80 ),
81 # This step always executes
82 Step(
83 name="Handle Query",
84 description="Handle the user's query with or without greeting",
85 agent=contextual_agent,
86 ),
87 ],
88 session_state={
89 "has_been_greeted": False,
90 "greeting_count": 0,
91 },
92)
93
94
95def run_example():
96 """Run the example workflow multiple times to see conditional behavior."""
97
98 print("=" * 80)
99 print("First Run - New User (Condition will be True, greeting will happen)")
100 print("=" * 80)
101
102 workflow.print_response(
103 input="Hi, can you help me with something?",
104 session_id="user-123",
105 user_id="user-123",
106 stream=True,
107 )
108
109 print("\n" + "=" * 80)
110 print("Second Run - Same Session (Skips greeting)")
111 print("=" * 80)
112
113 workflow.print_response(
114 input="Tell me a joke",
115 session_id="user-123",
116 user_id="user-123",
117 stream=True,
118 )
119
120
121if __name__ == "__main__":
122 run_example()

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Install dependencies

1uv pip install -U kern-ai openai

Export your OpenAI API key

Set OpenAI Key

Set your OPENAI_API_KEY as an environment variable. You can get one from OpenAI.

1export OPENAI_API_KEY=sk-***
1setx OPENAI_API_KEY sk-***

Run Workflow

1python access_session_state_in_condition_evaluator_function.py