andrewyng--aisuite
d46d2b1068
Invert Runner so the async path is the core: run/continue_run await the client's acreate, and run_sync/continue_sync become thin wrappers that drive the coroutine to completion (falling back to nest_asyncio when called from within a running loop). The shared _run_impl/_continue_impl take a use_async_client flag so the sync wrappers still drive the provider's synchronous create — keeping existing callers and tests that patch client.chat.completions.create working unchanged. Concurrent Runner.run calls can now be awaited and gathered.