Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 63d645fc3b | |||
| 7f496feb90 |
@@ -52,6 +52,18 @@ def publish_skill(review_result, config):
|
|||||||
subprocess.run(["git", "config", "user.email", "hermes@agent.local"], cwd=repo_dir)
|
subprocess.run(["git", "config", "user.email", "hermes@agent.local"], cwd=repo_dir)
|
||||||
subprocess.run(["git", "config", "user.name", "Hermes Pipeline"], 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
|
# Create skill directory
|
||||||
skill_dir = os.path.join(repo_dir, "skills", skill_name)
|
skill_dir = os.path.join(repo_dir, "skills", skill_name)
|
||||||
os.makedirs(skill_dir, exist_ok=True)
|
os.makedirs(skill_dir, exist_ok=True)
|
||||||
|
|||||||
@@ -137,6 +137,8 @@ def main():
|
|||||||
if publish_output.get("status") == "PUBLISHED":
|
if publish_output.get("status") == "PUBLISHED":
|
||||||
print(f" ✓ Published! PR: {publish_output.get('pr_url', '')}")
|
print(f" ✓ Published! PR: {publish_output.get('pr_url', '')}")
|
||||||
results["published"] += 1
|
results["published"] += 1
|
||||||
|
elif publish_output.get("status") == "SKIP":
|
||||||
|
print(f" ⏸ Skipped: {publish_output.get('reason', '')}")
|
||||||
else:
|
else:
|
||||||
print(f" ! {publish_output.get('status', '?')}: {publish_output.get('message', publish_output.get('error', ''))[:100]}")
|
print(f" ! {publish_output.get('status', '?')}: {publish_output.get('message', publish_output.get('error', ''))[:100]}")
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
---
|
||||||
|
name: langgraph-workflow-creation
|
||||||
|
version: 1.0.0
|
||||||
|
description: Create a LangGraph workflow to gather facts using SerperDevTool and process
|
||||||
|
them with an AI agent.
|
||||||
|
inputs:
|
||||||
|
- API Key for SerperDevTool
|
||||||
|
- Search Query
|
||||||
|
steps:
|
||||||
|
- 'Step 1: Import necessary modules from langgraph and langchain libraries'
|
||||||
|
- 'Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function
|
||||||
|
with SerperDevTool as the tool node'
|
||||||
|
- 'Step 3: Define the search query and pass it to the agent for fact gathering'
|
||||||
|
- 'Step 4: Process the gathered facts within the AI agent'
|
||||||
|
outputs:
|
||||||
|
- Processed Facts
|
||||||
|
tags: []
|
||||||
|
metadata:
|
||||||
|
source_repo: https://github.com/jkmaina/LangGraphProjects.git
|
||||||
|
extracted_at: ''
|
||||||
|
confidence: 0.95
|
||||||
|
---
|
||||||
|
|
||||||
|
# langgraph-workflow-creation
|
||||||
|
|
||||||
|
Create a LangGraph workflow to gather facts using SerperDevTool and process them with an AI agent.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
**Dependencies:**
|
||||||
|
|
||||||
|
```text
|
||||||
|
pip install langchain serperdev
|
||||||
|
```
|
||||||
|
|
||||||
|
**Setup steps:**
|
||||||
|
|
||||||
|
1. Install required libraries: pip install langchain serperdev
|
||||||
|
1. Add API key to .env file: OPENAPI_API_KEY=your_api_key
|
||||||
|
|
||||||
|
## Key Files
|
||||||
|
|
||||||
|
- `agent.py - Contains the LangGraph agent creation logic`
|
||||||
|
- `tool_node.py - Defines the SerperDevTool node`
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Step 1: Import necessary modules from langgraph and langchain libraries
|
||||||
|
2. Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function with SerperDevTool as the tool node
|
||||||
|
3. Step 3: Define the search query and pass it to the agent for fact gathering
|
||||||
|
4. Step 4: Process the gathered facts within the AI agent
|
||||||
|
|
||||||
|
## Implementation Details
|
||||||
|
|
||||||
|
```python
|
||||||
|
import langgraph
|
||||||
|
from serperdev import SerperDevTool
|
||||||
|
|
||||||
|
def create_agent(api_key, query):
|
||||||
|
tool = SerperDevTool(api_key)
|
||||||
|
agent = langgraph.create_react_agent(tool=tool)
|
||||||
|
facts = agent.run(query)
|
||||||
|
return process_facts(facts)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
- API Key for SerperDevTool
|
||||||
|
- Search Query
|
||||||
|
|
||||||
|
## Outputs
|
||||||
|
|
||||||
|
- Processed Facts
|
||||||
|
|
||||||
|
## Failure Modes
|
||||||
|
|
||||||
|
- API Key not provided
|
||||||
|
- Invalid Search Query
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Extracted from: [https://github.com/jkmaina/LangGraphProjects.git](https://github.com/jkmaina/LangGraphProjects.git)
|
||||||
|
Confidence: 0.95
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Commands: langgraph-workflow-creation
|
||||||
|
|
||||||
|
## Available Commands
|
||||||
|
|
||||||
|
- `/skill langgraph-workflow-creation` — Load this skill
|
||||||
|
- `/run langgraph-workflow-creation` — Execute workflow
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Examples: langgraph-workflow-creation
|
||||||
|
|
||||||
|
## Usage Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
# How to use this skill
|
||||||
|
# Inputs: API Key for SerperDevTool, Search Query
|
||||||
|
# Process: Step 1: Import necessary modules from langgraph and langchain libraries → Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function with SerperDevTool as the tool node → Step 3: Define the search query and pass it to the agent for fact gathering
|
||||||
|
# Outputs: Processed Facts
|
||||||
|
```
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "langgraph-workflow-creation",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"goal": "Create a LangGraph workflow to gather facts using SerperDevTool and process them with an AI agent.",
|
||||||
|
"inputs": [
|
||||||
|
"API Key for SerperDevTool",
|
||||||
|
"Search Query"
|
||||||
|
],
|
||||||
|
"steps": [
|
||||||
|
"Step 1: Import necessary modules from langgraph and langchain libraries",
|
||||||
|
"Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function with SerperDevTool as the tool node",
|
||||||
|
"Step 3: Define the search query and pass it to the agent for fact gathering",
|
||||||
|
"Step 4: Process the gathered facts within the AI agent"
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
"Processed Facts"
|
||||||
|
],
|
||||||
|
"failure_modes": [
|
||||||
|
"API Key not provided",
|
||||||
|
"Invalid Search Query"
|
||||||
|
],
|
||||||
|
"confidence": 0.95,
|
||||||
|
"explanation": "This workflow is specific to fact gathering and can be adapted for different search queries or tools.",
|
||||||
|
"source_repo": "https://github.com/jkmaina/LangGraphProjects.git",
|
||||||
|
"score": 1.0
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Tests: langgraph-workflow-creation
|
||||||
|
|
||||||
|
## 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
|
||||||
@@ -1,62 +1,96 @@
|
|||||||
---
|
---
|
||||||
name: unifai-workflow-execution
|
name: unifai-workflow-execution
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
description: Execute a multi-agent AI workflow defined in YAML or through the UI's
|
description: Execute a multi-agent workflow on the UnifAI platform using a specified
|
||||||
drag-and-drop editor.
|
blueprint and user prompt.
|
||||||
inputs:
|
inputs:
|
||||||
- name: blueprint_path
|
- blueprint_id or blueprint_name
|
||||||
description: Path to the blueprint file (YAML) defining the multi-agent workflow.
|
- user_shortcut
|
||||||
- name: execution_mode
|
- user_question
|
||||||
description: 'Execution mode: ''local'' or ''distributed''.'
|
|
||||||
steps:
|
steps:
|
||||||
- step_name: Load Blueprint
|
- 'Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id
|
||||||
description: Parse and validate the blueprint file to ensure it conforms to expected
|
method)'
|
||||||
structure.
|
- 'Step 2: Create a new session from the blueprint (create_session method)'
|
||||||
- step_name: Initialize Execution Engine
|
- 'Step 3: Submit the session for background execution with the user prompt (submit_session
|
||||||
description: Set up the execution engine based on the selected mode ('local' or
|
method)'
|
||||||
'distributed').
|
- 'Step 4: Poll session status until execution completes (poll_session_status method)'
|
||||||
- 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:
|
outputs:
|
||||||
- name: execution_results
|
- session_id
|
||||||
description: The output of the executed workflow, streamed as NDJSON over HTTP.
|
- workflow_id
|
||||||
tags: []
|
tags: []
|
||||||
metadata:
|
metadata:
|
||||||
source_repo: https://github.com/redhat-community-ai-tools/UnifAI.git
|
source_repo: https://github.com/redhat-community-ai-tools/UnifAI.git
|
||||||
extracted_at: ''
|
extracted_at: ''
|
||||||
confidence: 0.9
|
confidence: 0.95
|
||||||
---
|
---
|
||||||
|
|
||||||
# unifai-workflow-execution
|
# unifai-workflow-execution
|
||||||
|
|
||||||
Execute a multi-agent AI workflow defined in YAML or through the UI's drag-and-drop editor.
|
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`
|
||||||
|
|
||||||
## Steps
|
## Steps
|
||||||
|
|
||||||
1. {'step_name': 'Load Blueprint', 'description': 'Parse and validate the blueprint file to ensure it conforms to expected structure.'}
|
1. Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method)
|
||||||
2. {'step_name': 'Initialize Execution Engine', 'description': "Set up the execution engine based on the selected mode ('local' or 'distributed')."}
|
2. Step 2: Create a new session from the blueprint (create_session method)
|
||||||
3. {'step_name': 'Execute Workflow', 'description': 'Run the multi-agent workflow, streaming node-by-node output as NDJSON over HTTP.'}
|
3. Step 3: Submit the session for background execution with the user prompt (submit_session method)
|
||||||
4. {'step_name': 'Stream Results', 'description': 'Render and stream results in real time to clients subscribing to the event stream.'}
|
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.
|
||||||
|
```
|
||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
- {'name': 'blueprint_path', 'description': 'Path to the blueprint file (YAML) defining the multi-agent workflow.'}
|
- blueprint_id or blueprint_name
|
||||||
- {'name': 'execution_mode', 'description': "Execution mode: 'local' or 'distributed'."}
|
- user_shortcut
|
||||||
|
- user_question
|
||||||
|
|
||||||
## Outputs
|
## Outputs
|
||||||
|
|
||||||
- {'name': 'execution_results', 'description': 'The output of the executed workflow, streamed as NDJSON over HTTP.'}
|
- session_id
|
||||||
|
- workflow_id
|
||||||
|
|
||||||
## Failure Modes
|
## Failure Modes
|
||||||
|
|
||||||
- {'mode_name': 'Invalid Blueprint', 'description': 'Blueprint file is not valid YAML or does not conform to expected structure.'}
|
- Blueprint name not found or not unique - error during blueprint resolution
|
||||||
- {'mode_name': 'Execution Engine Initialization Failure', 'description': 'Failed to initialize the execution engine due to configuration issues or missing dependencies.'}
|
- Session creation fails - error from API response
|
||||||
|
- Session submission fails - error from API response
|
||||||
|
- Polling session status fails - error from API response
|
||||||
|
|
||||||
## Source
|
## Source
|
||||||
|
|
||||||
Extracted from: [https://github.com/redhat-community-ai-tools/UnifAI.git](https://github.com/redhat-community-ai-tools/UnifAI.git)
|
Extracted from: [https://github.com/redhat-community-ai-tools/UnifAI.git](https://github.com/redhat-community-ai-tools/UnifAI.git)
|
||||||
Confidence: 0.9
|
Confidence: 0.95
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
```python
|
```python
|
||||||
# How to use this skill
|
# How to use this skill
|
||||||
# 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'."}
|
# Inputs: blueprint_id or blueprint_name, user_shortcut, user_question
|
||||||
# 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.'}
|
# 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: {'name': 'execution_results', 'description': 'The output of the executed workflow, streamed as NDJSON over HTTP.'}
|
# Outputs: session_id, workflow_id
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,53 +1,30 @@
|
|||||||
{
|
{
|
||||||
"name": "unifai-workflow-execution",
|
"name": "unifai-workflow-execution",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"goal": "Execute a multi-agent AI workflow defined in YAML or through the UI's drag-and-drop editor.",
|
"goal": "Execute a multi-agent workflow on the UnifAI platform using a specified blueprint and user prompt.",
|
||||||
"inputs": [
|
"inputs": [
|
||||||
{
|
"blueprint_id or blueprint_name",
|
||||||
"name": "blueprint_path",
|
"user_shortcut",
|
||||||
"description": "Path to the blueprint file (YAML) defining the multi-agent workflow."
|
"user_question"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "execution_mode",
|
|
||||||
"description": "Execution mode: 'local' or 'distributed'."
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
"Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method)",
|
||||||
"step_name": "Load Blueprint",
|
"Step 2: Create a new session from the blueprint (create_session method)",
|
||||||
"description": "Parse and validate the blueprint file to ensure it conforms to expected structure."
|
"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": "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": [
|
"outputs": [
|
||||||
{
|
"session_id",
|
||||||
"name": "execution_results",
|
"workflow_id"
|
||||||
"description": "The output of the executed workflow, streamed as NDJSON over HTTP."
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"failure_modes": [
|
"failure_modes": [
|
||||||
{
|
"Blueprint name not found or not unique - error during blueprint resolution",
|
||||||
"mode_name": "Invalid Blueprint",
|
"Session creation fails - error from API response",
|
||||||
"description": "Blueprint file is not valid YAML or does not conform to expected structure."
|
"Session submission fails - error from API response",
|
||||||
},
|
"Polling session status fails - error from API response"
|
||||||
{
|
|
||||||
"mode_name": "Execution Engine Initialization Failure",
|
|
||||||
"description": "Failed to initialize the execution engine due to configuration issues or missing dependencies."
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"confidence": 0.9,
|
"confidence": 0.95,
|
||||||
"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.",
|
"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.",
|
||||||
"source_repo": "https://github.com/redhat-community-ai-tools/UnifAI.git",
|
"source_repo": "https://github.com/redhat-community-ai-tools/UnifAI.git",
|
||||||
"score": 1.0
|
"score": 1.0
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user