import asyncio
from agents import Agent, ItemHelpers, Runner, RunContextWrapper
from open_router_config import config
from dataclasses import dataclass
@dataclass
class UserContext:
name: str
is_premium_user: bool
age: int
daniel = UserContext("Daniel", True, 19)
ahmad = UserContext("Ahmad", False, 21)
def dynamic_instructions(
ctx: RunContextWrapper[UserContext], _: Agent[UserContext]
) -> str:
if ctx.context.is_premium_user:
return "You are a premium agent, You can help the user with premium features."
return "You are a basic agent, You can help the user with basic tasks."
assistant = Agent(
name="assistant",
instructions=dynamic_instructions,
)
async def main():
msg = "Who are you?"
result = Runner.run_streamed(assistant, msg, run_config=config, context=daniel)
async for event in result.stream_events():
# We'll ignore the raw responses event deltas
if event.type == "raw_response_event":
continue
elif event.type == "agent_updated_stream_event":
print(f"Agent updated: {event.new_agent.name}")
continue
elif event.type == "run_item_stream_event":
if event.item.type == "tool_call_item":
print("-- Tool was called")
elif event.item.type == "tool_call_output_item":
print(f"-- Tool output: {event.item.output}")
elif event.item.type == "message_output_item":
print(
f"-- Message output:\n {ItemHelpers.text_message_output(event.item)}"
)
else:
pass # Ignore other event types
if __name__ == "__main__":
asyncio.run(main())