Skip to content

Fix: Allow running in environments with existing event loop#222

Open
zhenliemao wants to merge 2 commits into
NVIDIA:mainfrom
zhenliemao:fix-running-loop-detection
Open

Fix: Allow running in environments with existing event loop#222
zhenliemao wants to merge 2 commits into
NVIDIA:mainfrom
zhenliemao:fix-running-loop-detection

Conversation

@zhenliemao

@zhenliemao zhenliemao commented Jun 28, 2026

Copy link
Copy Markdown

Summary:
This fix allows SkillSpector to run in environments that already have a running event loop, preventing RuntimeError when asyncio.run() is called from within an existing loop.

Problem:
When running SkillSpector in environments like:

  • Jupyter Notebooks
  • LangGraph Studio
  • FastAPI applications
  • Any programmatic usage within async code The call to asyncio.run() throws a RuntimeError: This event loop is already running and falls back to unfiltered static findings, silently disabling LLM analysis. The previous approach of detecting this state via error message substring matching is fragile and locale-dependent.

Solution:

  1. Add utility function in that properly detects running loops using
  2. When no running loop exists, fall back to directly
  3. When a loop is already running, offload execution to a separate thread with its own event loop via
  4. Replace all calls across all analyzer nodes with the new helper
  5. Remove unused asyncio imports from analyzer files

Test:
Add comprehensive unit tests for run_async covering:

Summary:
This fix allows SkillSpector to run in environments that already have a running event loop, preventing RuntimeError when asyncio.run() is called from within an existing loop.

Problem:
When running SkillSpector in environments like:
- Jupyter Notebooks
- LangGraph Studio
- FastAPI applications
- Any programmatic usage within async code
The call to asyncio.run() throws a RuntimeError: This event loop is already running and falls back to unfiltered static findings, silently disabling LLM analysis. The previous approach of detecting this state via error message substring matching is fragile and locale-dependent.

Solution:
1. Add  utility function in  that properly detects running loops using
2. When no running loop exists, fall back to  directly
3. When a loop is already running, offload execution to a separate thread with its own event loop via
4. Replace all  calls across all analyzer nodes with the new  helper
5. Remove unused asyncio imports from analyzer files

Test:
Add comprehensive unit tests for run_async covering:
- Normal execution without existing running loop
- Nested execution inside an already running loop
- Exception propagation from async coroutines
- Correct handling of async functions with await calls

Signed-off-by: zhenliemao <494822673@qq.com>
Signed-off-by: zhenliemao <494822673@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] RuntimeError: asyncio.run() called from within an already running event loop

1 participant