Compare commits

..

1 Commits

Author SHA1 Message Date
Hermes Pipeline 8a052b328d Add Skill: unifai-workflow-execution
Extracted from: https://github.com/redhat-community-ai-tools/UnifAI.git
Score: 1.0
2026-08-05 15:45:08 +00:00
6 changed files with 116 additions and 144 deletions
+30 -45
View File
@@ -1,27 +1,26 @@
---
name: research-pipeline
version: 1.0.0
description: Fetch a Wikipedia page, summarise it using an AI agent, and write the
summary to a file.
description: Fetch a Wikipedia page, summarise its content using an AI agent, and
write the summary to a file.
inputs:
- URL of the Wikipedia page
steps:
- 'Step 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key)
and blacknode'
- 'Step 2: Require NVIDIA NIM API key using `require_nim_api_key()`'
- 'Step 3: Create a Graph instance `g`'
- 'Step 4: Add a Literal node for the URL of the Wikipedia page (`url`)'
- 'Step 5: Add an HTTPGet node to fetch the content from the URL (`fetcher`) and connect
it to the Literal node'
- 'Step 6: Add an LLMAgent node with system prompt ''You are a technical writer. Summarise
the text in 3 bullet points.'' and model NIM_MODEL (`summarise`), connecting its
input to the output of `fetcher`'
- 'Step 7: Add a FileWrite node to write the summary to a file named ''summary.txt''
(`writer`), connecting its input to the output of `summarise`'
- 'Step 8: Cook the graph starting from the writer node and print the path where the
summary is written'
- 'Step 1: Import necessary modules from `_bootstrap` and `blacknode`: Run `from _bootstrap
import NIM_MODEL, require_nim_api_key; import blacknode as bn`'
- 'Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the
API key is set.'
- 'Step 3: Create a graph instance: Initialize `g = bn.Graph()`.'
- 'Step 4: Add nodes for URL, HTTPGet, summarisation, and file writing: `url = g.node(''Literal'',
value=''URL of the Wikipedia page''); fetcher = g.node(''HTTPGet''); summarise =
g.node(''LLMAgent'', system=''You are a technical writer. Summarise the text in
3 bullet points.'', model=NIM_MODEL); writer = g.node(''FileWrite'', path=''summary.txt'')`'
- 'Step 5: Connect nodes with edges: `url.out(''value'') >> fetcher.inp(''url'');
fetcher.out(''text'') >> summarise.inp(''prompt''); summarise.out(''text'') >> writer.inp(''text'')`'
- 'Step 6: Cook the graph to execute and get output: `result = g.cook(writer, ''path'');
print(f''Summary written to: {result}'')`'
outputs:
- Path to the summary file
- Path of the summary file
tags: []
metadata:
source_repo: https://github.com/temiroff/Blacknode.git
@@ -31,7 +30,7 @@ metadata:
# research-pipeline
Fetch a Wikipedia page, summarise it using an AI agent, and write the summary to a file.
Fetch a Wikipedia page, summarise its content using an AI agent, and write the summary to a file.
## Setup
@@ -43,8 +42,8 @@ pip install anthropic>=0.25 docker>=7.1 openai>=1.0
**Setup steps:**
1. Ensure NVIDIA NIM API key is set in the environment or editor UI
1. Install required dependencies using `pip install -r requirements.txt`
1. Ensure NVIDIA NIM API key is set in the environment or editor
1. Install required dependencies: `pip install -r requirements.txt`
## Key Files
@@ -52,39 +51,25 @@ pip install anthropic>=0.25 docker>=7.1 openai>=1.0
## Steps
1. Step 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key) and blacknode
2. Step 2: Require NVIDIA NIM API key using `require_nim_api_key()`
3. Step 3: Create a Graph instance `g`
4. Step 4: Add a Literal node for the URL of the Wikipedia page (`url`)
5. Step 5: Add an HTTPGet node to fetch the content from the URL (`fetcher`) and connect it to the Literal node
6. Step 6: Add an LLMAgent node with system prompt 'You are a technical writer. Summarise the text in 3 bullet points.' and model NIM_MODEL (`summarise`), connecting its input to the output of `fetcher`
7. Step 7: Add a FileWrite node to write the summary to a file named 'summary.txt' (`writer`), connecting its input to the output of `summarise`
8. Step 8: Cook the graph starting from the writer node and print the path where the summary is written
1. Step 1: Import necessary modules from `_bootstrap` and `blacknode`: Run `from _bootstrap import NIM_MODEL, require_nim_api_key; import blacknode as bn`
2. Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the API key is set.
3. Step 3: Create a graph instance: Initialize `g = bn.Graph()`.
4. Step 4: Add nodes for URL, HTTPGet, summarisation, and file writing: `url = g.node('Literal', value='URL of the Wikipedia page'); fetcher = g.node('HTTPGet'); summarise = g.node('LLMAgent', system='You are a technical writer. Summarise the text in 3 bullet points.', model=NIM_MODEL); writer = g.node('FileWrite', path='summary.txt')`
5. Step 5: Connect nodes with edges: `url.out('value') >> fetcher.inp('url'); fetcher.out('text') >> summarise.inp('prompt'); summarise.out('text') >> writer.inp('text')`
6. Step 6: Cook the graph to execute and get output: `result = g.cook(writer, 'path'); print(f'Summary written to: {result}')`
## Implementation Details
```python
from _bootstrap import NIM_MODEL, require_nim_api_key
import blacknode as bn
from _bootstrap import NIM_MODEL, require_nim_api_key; import blacknode as bn
```
```python
g = bn.Graph()
url = g.node('Literal', value='https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&explaintext=1&titles=Houdini_(software)&format=json&formatversion=2&origin=*')
fetcher = g.node('HTTPGet')
summarise = g.node('LLMAgent', system='You are a technical writer. Summarise the text in 3 bullet points.', model=NIM_MODEL)
writer = g.node('FileWrite', path='summary.txt')
url = g.node('Literal', value='https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&explaintext=1&titles=Houdini_(software)&format=json&formatversion=2&origin=*'); fetcher = g.node('HTTPGet'); summarise = g.node('LLMAgent', system='You are a technical writer. Summarise the text in 3 bullet points.', model=NIM_MODEL); writer = g.node('FileWrite', path='summary.txt')
```
```python
url.out('value') >> fetcher.inp('url')
fetcher.out('text') >> summarise.inp('prompt')
summarise.out('text') >> writer.inp('text')
```
```python
result = g.cook(writer, 'path')
print(f'Summary written to: {result}')
url.out('value') >> fetcher.inp('url'); fetcher.out('text') >> summarise.inp('prompt'); summarise.out('text') >> writer.inp('text')
```
## Inputs
@@ -93,11 +78,11 @@ print(f'Summary written to: {result}')
## Outputs
- Path to the summary file
- Path of the summary file
## Failure Modes
- If the URL is invalid, HTTPGet will fail; if NIM API key is missing, LLMAgent will not function properly
- If the URL is invalid or unreachable, the HTTPGet node will fail; if the summarisation fails, the output text might be empty
## Source
+2 -2
View File
@@ -5,6 +5,6 @@
```python
# How to use this skill
# Inputs: URL of the Wikipedia page
# Process: Step 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key) and blacknode → Step 2: Require NVIDIA NIM API key using `require_nim_api_key()` → Step 3: Create a Graph instance `g`
# Outputs: Path to the summary file
# Process: Step 1: Import necessary modules from `_bootstrap` and `blacknode`: Run `from _bootstrap import NIM_MODEL, require_nim_api_key; import blacknode as bn` → Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the API key is set. → Step 3: Create a graph instance: Initialize `g = bn.Graph()`.
# Outputs: Path of the summary file
```
+10 -12
View File
@@ -1,28 +1,26 @@
{
"name": "research-pipeline",
"version": "1.0.0",
"goal": "Fetch a Wikipedia page, summarise it using an AI agent, and write the summary to a file.",
"goal": "Fetch a Wikipedia page, summarise its content using an AI agent, and write the summary to a file.",
"inputs": [
"URL of the Wikipedia page"
],
"steps": [
"Step 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key) and blacknode",
"Step 2: Require NVIDIA NIM API key using `require_nim_api_key()`",
"Step 3: Create a Graph instance `g`",
"Step 4: Add a Literal node for the URL of the Wikipedia page (`url`)",
"Step 5: Add an HTTPGet node to fetch the content from the URL (`fetcher`) and connect it to the Literal node",
"Step 6: Add an LLMAgent node with system prompt 'You are a technical writer. Summarise the text in 3 bullet points.' and model NIM_MODEL (`summarise`), connecting its input to the output of `fetcher`",
"Step 7: Add a FileWrite node to write the summary to a file named 'summary.txt' (`writer`), connecting its input to the output of `summarise`",
"Step 8: Cook the graph starting from the writer node and print the path where the summary is written"
"Step 1: Import necessary modules from `_bootstrap` and `blacknode`: Run `from _bootstrap import NIM_MODEL, require_nim_api_key; import blacknode as bn`",
"Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the API key is set.",
"Step 3: Create a graph instance: Initialize `g = bn.Graph()`.",
"Step 4: Add nodes for URL, HTTPGet, summarisation, and file writing: `url = g.node('Literal', value='URL of the Wikipedia page'); fetcher = g.node('HTTPGet'); summarise = g.node('LLMAgent', system='You are a technical writer. Summarise the text in 3 bullet points.', model=NIM_MODEL); writer = g.node('FileWrite', path='summary.txt')`",
"Step 5: Connect nodes with edges: `url.out('value') >> fetcher.inp('url'); fetcher.out('text') >> summarise.inp('prompt'); summarise.out('text') >> writer.inp('text')`",
"Step 6: Cook the graph to execute and get output: `result = g.cook(writer, 'path'); print(f'Summary written to: {result}')`"
],
"outputs": [
"Path to the summary file"
"Path of the summary file"
],
"failure_modes": [
"If the URL is invalid, HTTPGet will fail; if NIM API key is missing, LLMAgent will not function properly"
"If the URL is invalid or unreachable, the HTTPGet node will fail; if the summarisation fails, the output text might be empty"
],
"confidence": 0.95,
"explanation": "This workflow can be adapted to fetch and summarise any text from a URL using an AI agent and save the summary to a file.",
"explanation": "This workflow can be adapted to fetch and summarise any Wikipedia page or similar content source.",
"source_repo": "https://github.com/temiroff/Blacknode.git",
"score": 1.0
}
+32 -66
View File
@@ -1,96 +1,62 @@
---
name: unifai-workflow-execution
version: 1.0.0
description: Execute a multi-agent workflow on the UnifAI platform using a specified
blueprint and user prompt.
description: Execute a multi-agent AI workflow defined in YAML or through the UI's
drag-and-drop editor.
inputs:
- blueprint_id or blueprint_name
- user_shortcut
- user_question
- name: blueprint_path
description: Path to the blueprint file (YAML) defining the multi-agent workflow.
- name: execution_mode
description: 'Execution mode: ''local'' or ''distributed''.'
steps:
- 'Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id
method)'
- 'Step 2: Create a new session from the blueprint (create_session method)'
- 'Step 3: Submit the session for background execution with the user prompt (submit_session
method)'
- 'Step 4: Poll session status until execution completes (poll_session_status method)'
- step_name: Load Blueprint
description: Parse and validate the blueprint file to ensure it conforms to expected
structure.
- step_name: Initialize Execution Engine
description: Set up the execution engine based on the selected mode ('local' or
'distributed').
- step_name: Execute Workflow
description: Run the multi-agent workflow, streaming node-by-node output as NDJSON
over HTTP.
- step_name: Stream Results
description: Render and stream results in real time to clients subscribing to the
event stream.
outputs:
- session_id
- workflow_id
- name: execution_results
description: The output of the executed workflow, streamed as NDJSON over HTTP.
tags: []
metadata:
source_repo: https://github.com/redhat-community-ai-tools/UnifAI.git
extracted_at: ''
confidence: 0.95
confidence: 0.9
---
# unifai-workflow-execution
Execute a multi-agent workflow on the UnifAI platform using a specified blueprint and user prompt.
## Setup
**Dependencies:**
```text
pip install requests urllib3
```
**Setup steps:**
1. Install required dependencies using pip install requests urllib3
1. Ensure the environment variables are set correctly (BLUEPRINT_ID, BLUEPRINT_NAME, USER_SHORTCUT, POLLING_INTERVAL, UNIFAI_BASE_URL)
## Key Files
- `scripts/execution_workflow.py - Main script for workflow execution`
Execute a multi-agent AI workflow defined in YAML or through the UI's drag-and-drop editor.
## Steps
1. Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method)
2. Step 2: Create a new session from the blueprint (create_session method)
3. Step 3: Submit the session for background execution with the user prompt (submit_session method)
4. Step 4: Poll session status until execution completes (poll_session_status method)
## Implementation Details
```python
resolve_blueprint_id(client: UnifAIClient) -> str
{...}
# Resolve the blueprint ID from either direct ID or name lookup.
```
```python
create_session(client: UnifAIClient, blueprint_id: str) -> str
{...}
# Create a new session from the blueprint.
```
```python
submit_session(client: UnifAIClient, session_id: str) -> dict
{...}
# Submit the session for background execution with the user prompt.
```
1. {'step_name': 'Load Blueprint', 'description': 'Parse and validate the blueprint file to ensure it conforms to expected structure.'}
2. {'step_name': 'Initialize Execution Engine', 'description': "Set up the execution engine based on the selected mode ('local' or 'distributed')."}
3. {'step_name': 'Execute Workflow', 'description': 'Run the multi-agent workflow, streaming node-by-node output as NDJSON over HTTP.'}
4. {'step_name': 'Stream Results', 'description': 'Render and stream results in real time to clients subscribing to the event stream.'}
## Inputs
- blueprint_id or blueprint_name
- user_shortcut
- user_question
- {'name': 'blueprint_path', 'description': 'Path to the blueprint file (YAML) defining the multi-agent workflow.'}
- {'name': 'execution_mode', 'description': "Execution mode: 'local' or 'distributed'."}
## Outputs
- session_id
- workflow_id
- {'name': 'execution_results', 'description': 'The output of the executed workflow, streamed as NDJSON over HTTP.'}
## Failure Modes
- Blueprint name not found or not unique - error during blueprint resolution
- Session creation fails - error from API response
- Session submission fails - error from API response
- Polling session status fails - error from API response
- {'mode_name': 'Invalid Blueprint', 'description': 'Blueprint file is not valid YAML or does not conform to expected structure.'}
- {'mode_name': 'Execution Engine Initialization Failure', 'description': 'Failed to initialize the execution engine due to configuration issues or missing dependencies.'}
## Source
Extracted from: [https://github.com/redhat-community-ai-tools/UnifAI.git](https://github.com/redhat-community-ai-tools/UnifAI.git)
Confidence: 0.95
Confidence: 0.9
+3 -3
View File
@@ -4,7 +4,7 @@
```python
# How to use this skill
# Inputs: blueprint_id or blueprint_name, user_shortcut, user_question
# Process: Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method) → Step 2: Create a new session from the blueprint (create_session method) → Step 3: Submit the session for background execution with the user prompt (submit_session method)
# Outputs: session_id, workflow_id
# Inputs: {'name': 'blueprint_path', 'description': 'Path to the blueprint file (YAML) defining the multi-agent workflow.'}, {'name': 'execution_mode', 'description': "Execution mode: 'local' or 'distributed'."}
# Process: {'step_name': 'Load Blueprint', 'description': 'Parse and validate the blueprint file to ensure it conforms to expected structure.'} → {'step_name': 'Initialize Execution Engine', 'description': "Set up the execution engine based on the selected mode ('local' or 'distributed')."} → {'step_name': 'Execute Workflow', 'description': 'Run the multi-agent workflow, streaming node-by-node output as NDJSON over HTTP.'}
# Outputs: {'name': 'execution_results', 'description': 'The output of the executed workflow, streamed as NDJSON over HTTP.'}
```
+39 -16
View File
@@ -1,30 +1,53 @@
{
"name": "unifai-workflow-execution",
"version": "1.0.0",
"goal": "Execute a multi-agent workflow on the UnifAI platform using a specified blueprint and user prompt.",
"goal": "Execute a multi-agent AI workflow defined in YAML or through the UI's drag-and-drop editor.",
"inputs": [
"blueprint_id or blueprint_name",
"user_shortcut",
"user_question"
{
"name": "blueprint_path",
"description": "Path to the blueprint file (YAML) defining the multi-agent workflow."
},
{
"name": "execution_mode",
"description": "Execution mode: 'local' or 'distributed'."
}
],
"steps": [
"Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method)",
"Step 2: Create a new session from the blueprint (create_session method)",
"Step 3: Submit the session for background execution with the user prompt (submit_session method)",
"Step 4: Poll session status until execution completes (poll_session_status method)"
{
"step_name": "Load Blueprint",
"description": "Parse and validate the blueprint file to ensure it conforms to expected structure."
},
{
"step_name": "Initialize Execution Engine",
"description": "Set up the execution engine based on the selected mode ('local' or 'distributed')."
},
{
"step_name": "Execute Workflow",
"description": "Run the multi-agent workflow, streaming node-by-node output as NDJSON over HTTP."
},
{
"step_name": "Stream Results",
"description": "Render and stream results in real time to clients subscribing to the event stream."
}
],
"outputs": [
"session_id",
"workflow_id"
{
"name": "execution_results",
"description": "The output of the executed workflow, streamed as NDJSON over HTTP."
}
],
"failure_modes": [
"Blueprint name not found or not unique - error during blueprint resolution",
"Session creation fails - error from API response",
"Session submission fails - error from API response",
"Polling session status fails - error from API response"
{
"mode_name": "Invalid Blueprint",
"description": "Blueprint file is not valid YAML or does not conform to expected structure."
},
{
"mode_name": "Execution Engine Initialization Failure",
"description": "Failed to initialize the execution engine due to configuration issues or missing dependencies."
}
],
"confidence": 0.95,
"explanation": "This workflow is specific to the UnifAI platform and its multi-agent system, but can be adapted for similar systems with a similar architecture.",
"confidence": 0.9,
"explanation": "This workflow is designed to execute multi-agent AI workflows defined in YAML blueprints or through the UI's drag-and-drop editor, providing real-time streaming of results.",
"source_repo": "https://github.com/redhat-community-ai-tools/UnifAI.git",
"score": 1.0
}