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
10 changed files with 74 additions and 289 deletions
-12
View File
@@ -52,18 +52,6 @@ def publish_skill(review_result, config):
subprocess.run(["git", "config", "user.email", "hermes@agent.local"], cwd=repo_dir)
subprocess.run(["git", "config", "user.name", "Hermes Pipeline"], cwd=repo_dir)
# Check for duplicates in skills/ directory
skills_dir = os.path.join(repo_dir, "skills")
existing_skills = []
if os.path.isdir(skills_dir):
existing_skills = [d for d in os.listdir(skills_dir) if os.path.isdir(os.path.join(skills_dir, d))]
if skill_name in existing_skills:
return {
"status": "SKIP",
"reason": f"Skill '{skill_name}' already exists in skills/ directory",
}
# Create skill directory
skill_dir = os.path.join(repo_dir, "skills", skill_name)
os.makedirs(skill_dir, exist_ok=True)
-2
View File
@@ -137,8 +137,6 @@ def main():
if publish_output.get("status") == "PUBLISHED":
print(f" ✓ Published! PR: {publish_output.get('pr_url', '')}")
results["published"] += 1
elif publish_output.get("status") == "SKIP":
print(f" ⏸ Skipped: {publish_output.get('reason', '')}")
else:
print(f" ! {publish_output.get('status', '?')}: {publish_output.get('message', publish_output.get('error', ''))[:100]}")
-84
View File
@@ -1,84 +0,0 @@
---
name: agent-supervisor
version: 1.0.0
description: Demonstrate a supervisor-worker architecture for intelligent task delegation
and real-time decision-making.
inputs:
- name: OPENAI_API_KEY
description: OpenAI API key for language models.
- name: TAVILY_API_KEY
description: Tavily API key for search functionality.
steps:
- step: 1
action: Load environment variables.
details: Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables.
- step: 2
action: Configure LangChain tools.
details: Initialize TavilySearchResults and PythonREPLTool.
- step: 3
action: Define agent nodes.
details: Create functions for the Researcher and Coder agents that process state
through their respective tasks.
- step: 4
action: Set up supervisor agent.
details: Create a supervisor agent function that decides which worker should act
next based on user input.
- step: 5
action: Build state graph.
details: Construct the state graph with nodes for each agent and edges connecting
them to the supervisor node.
- step: 6
action: Add conditional edges.
details: Define conditions for transitioning between agents based on their responses.
- step: 7
action: Compile graph.
details: Compile the state graph into a runnable workflow.
- step: 8
action: Run example queries.
details: Stream through the workflow with example inputs to demonstrate its functionality.
outputs:
- name: 'Example 1: Code Hello World'
description: A demonstration of coding a simple hello world program.
- name: 'Example 2: Research Report'
description: A demonstration of researching and writing a brief report on pikas.
tags: []
metadata:
source_repo: https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git
extracted_at: ''
confidence: 0.9
---
# agent-supervisor
Demonstrate a supervisor-worker architecture for intelligent task delegation and real-time decision-making.
## Steps
1. {'step': 1, 'action': 'Load environment variables.', 'details': 'Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables.'}
2. {'step': 2, 'action': 'Configure LangChain tools.', 'details': 'Initialize TavilySearchResults and PythonREPLTool.'}
3. {'step': 3, 'action': 'Define agent nodes.', 'details': 'Create functions for the Researcher and Coder agents that process state through their respective tasks.'}
4. {'step': 4, 'action': 'Set up supervisor agent.', 'details': 'Create a supervisor agent function that decides which worker should act next based on user input.'}
5. {'step': 5, 'action': 'Build state graph.', 'details': 'Construct the state graph with nodes for each agent and edges connecting them to the supervisor node.'}
6. {'step': 6, 'action': 'Add conditional edges.', 'details': 'Define conditions for transitioning between agents based on their responses.'}
7. {'step': 7, 'action': 'Compile graph.', 'details': 'Compile the state graph into a runnable workflow.'}
8. {'step': 8, 'action': 'Run example queries.', 'details': 'Stream through the workflow with example inputs to demonstrate its functionality.'}
## Inputs
- {'name': 'OPENAI_API_KEY', 'description': 'OpenAI API key for language models.'}
- {'name': 'TAVILY_API_KEY', 'description': 'Tavily API key for search functionality.'}
## Outputs
- {'name': 'Example 1: Code Hello World', 'description': 'A demonstration of coding a simple hello world program.'}
- {'name': 'Example 2: Research Report', 'description': 'A demonstration of researching and writing a brief report on pikas.'}
## Failure Modes
- {'mode': 'Invalid API keys', 'description': 'The workflow may fail if the provided API keys are invalid or expired.'}
- {'mode': 'Insufficient permissions', 'description': 'The workflow may fail if the user does not have sufficient permissions to use the Tavily search functionality.'}
## Source
Extracted from: [https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git](https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git)
Confidence: 0.9
-6
View File
@@ -1,6 +0,0 @@
# Commands: agent-supervisor
## Available Commands
- `/skill agent-supervisor` — Load this skill
- `/run agent-supervisor` — Execute workflow
-10
View File
@@ -1,10 +0,0 @@
# Examples: agent-supervisor
## Usage Example
```python
# How to use this skill
# Inputs: {'name': 'OPENAI_API_KEY', 'description': 'OpenAI API key for language models.'}, {'name': 'TAVILY_API_KEY', 'description': 'Tavily API key for search functionality.'}
# Process: {'step': 1, 'action': 'Load environment variables.', 'details': 'Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables.'} → {'step': 2, 'action': 'Configure LangChain tools.', 'details': 'Initialize TavilySearchResults and PythonREPLTool.'} → {'step': 3, 'action': 'Define agent nodes.', 'details': 'Create functions for the Researcher and Coder agents that process state through their respective tasks.'}
# Outputs: {'name': 'Example 1: Code Hello World', 'description': 'A demonstration of coding a simple hello world program.'}, {'name': 'Example 2: Research Report', 'description': 'A demonstration of researching and writing a brief report on pikas.'}
```
-81
View File
@@ -1,81 +0,0 @@
{
"name": "agent-supervisor",
"version": "1.0.0",
"goal": "Demonstrate a supervisor-worker architecture for intelligent task delegation and real-time decision-making.",
"inputs": [
{
"name": "OPENAI_API_KEY",
"description": "OpenAI API key for language models."
},
{
"name": "TAVILY_API_KEY",
"description": "Tavily API key for search functionality."
}
],
"steps": [
{
"step": 1,
"action": "Load environment variables.",
"details": "Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables."
},
{
"step": 2,
"action": "Configure LangChain tools.",
"details": "Initialize TavilySearchResults and PythonREPLTool."
},
{
"step": 3,
"action": "Define agent nodes.",
"details": "Create functions for the Researcher and Coder agents that process state through their respective tasks."
},
{
"step": 4,
"action": "Set up supervisor agent.",
"details": "Create a supervisor agent function that decides which worker should act next based on user input."
},
{
"step": 5,
"action": "Build state graph.",
"details": "Construct the state graph with nodes for each agent and edges connecting them to the supervisor node."
},
{
"step": 6,
"action": "Add conditional edges.",
"details": "Define conditions for transitioning between agents based on their responses."
},
{
"step": 7,
"action": "Compile graph.",
"details": "Compile the state graph into a runnable workflow."
},
{
"step": 8,
"action": "Run example queries.",
"details": "Stream through the workflow with example inputs to demonstrate its functionality."
}
],
"outputs": [
{
"name": "Example 1: Code Hello World",
"description": "A demonstration of coding a simple hello world program."
},
{
"name": "Example 2: Research Report",
"description": "A demonstration of researching and writing a brief report on pikas."
}
],
"failure_modes": [
{
"mode": "Invalid API keys",
"description": "The workflow may fail if the provided API keys are invalid or expired."
},
{
"mode": "Insufficient permissions",
"description": "The workflow may fail if the user does not have sufficient permissions to use the Tavily search functionality."
}
],
"confidence": 0.9,
"explanation": "This workflow demonstrates a hierarchical multi-agent system where a supervisor agent makes routing decisions based on user input, delegating tasks to specialized worker agents (Researcher and Coder). It is designed to be reusable for similar task delegation scenarios.",
"source_repo": "https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git",
"score": 1.0
}
-9
View File
@@ -1,9 +0,0 @@
# Tests: agent-supervisor
## Test Checklist
- [ ] Workflow has at least 3 steps
- [ ] All inputs are defined
- [ ] All outputs are defined
- [ ] Failure modes are documented
- [ ] Skill can be loaded without errors
+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
}