import asyncio
from google.adk.agents import BaseAgent, ParallelAgent
from google.adk.events import Event, EventActions
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types

class W(BaseAgent):
    key: str
    val: str
    async def _run_async_impl(self, ctx):
        yield Event(author=self.name, branch=ctx.branch,
                    actions=EventActions(state_delta={self.key: self.val}))

async def run(keys):
    agents = [W(name=n, key=k, val=n.upper()) for n,k in zip("abc", keys)]
    root = ParallelAgent(name="p", sub_agents=agents)
    ss = InMemorySessionService()
    r = Runner(agent=root, app_name="x", session_service=ss)
    s = await ss.create_session(app_name="x", user_id="u")
    n = 0
    async for e in r.run_async(user_id="u", session_id=s.id,
        new_message=types.Content(role="user", parts=[types.Part(text="hi")])):
        if e.actions and e.actions.state_delta: n += 1
    s = await ss.get_session(app_name="x", user_id="u", session_id=s.id)
    print(keys, "state付きイベント", n, "件 ->", dict(s.state))
asyncio.run(run(["result","result","result"]))
asyncio.run(run(["result_a","result_b","result_c"]))
