State in Condition
This example demonstrates how to access the run context in the evaluator function of a condition step
This example shows:
- How to use
run_contextin a Condition evaluator function - Reading and modifying
run_context.session_statebased on condition logic - Accessing
user_idandsession_idfromrun_context.session_state - Making conditional decisions based on
run_context.session_state
Create a Python file
1from kern.agent import Agent2from kern.models.openai import OpenAIResponses3from kern.workflow.condition import Condition4from kern.workflow.step import Step, StepInput, StepOutput5from kern.workflow.workflow import Workflow6from kern.run import RunContext789def check_user_has_context(step_input: StepInput, run_context: RunContext) -> bool:10 """11 Condition evaluator that checks if user has been greeted before.1213 Args:14 step_input: The input for this step (contains workflow context)15 run_context: The run context object1617 Returns:18 bool: True if user has context, False otherwise19 """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)}")2425 # Check if user has been greeted before26 return run_context.session_state.get("has_been_greeted", False)272829def 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"] = True33 run_context.session_state["greeting_count"] = run_context.session_state.get("greeting_count", 0) + 13435 return StepOutput(36 content=f"User has been greeted. Total greetings: {run_context.session_state['greeting_count']}"37 )383940# Create agents41greeter_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)4748contextual_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)5455# Create workflow with condition56workflow = Workflow(57 name="Conditional Greeting Workflow",58 steps=[59 # First, check if user has been greeted before60 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 it64 evaluator=lambda step_input, run_context: not check_user_has_context(65 step_input, run_context66 ),67 steps=[68 # Only execute these steps for new users69 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 executes82 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)939495def run_example():96 """Run the example workflow multiple times to see conditional behavior."""9798 print("=" * 80)99 print("First Run - New User (Condition will be True, greeting will happen)")100 print("=" * 80)101102 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 )108109 print("\n" + "=" * 80)110 print("Second Run - Same Session (Skips greeting)")111 print("=" * 80)112113 workflow.print_response(114 input="Tell me a joke",115 session_id="user-123",116 user_id="user-123",117 stream=True,118 )119120121if __name__ == "__main__":122 run_example()Set up your virtual environment
1uv venv --python 3.122source .venv/bin/activate1uv venv --python 3.122.venv\Scripts\activateInstall dependencies
1uv pip install -U kern-ai openaiExport 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