Add Publisher v2 + 5 extracted skills
Publisher fixes: - Checkout new branch before push (was pushing main ref) - Verify files staged before commit - Handle duplicate files gracefully - Clean error reporting per stage Skills merged to main: - mcp-server-setup (from pipeshub-ai) - research-pipeline (from Blacknode) - multi-agent-sequential-workflow (from Fast-LLM-Agent-MCP) - unifai-workflow-execution (from UnifAI) - code-review-agent-workflow (from AgentKit)
This commit is contained in:
+79
-37
@@ -1,10 +1,10 @@
|
||||
"""Stage 8: Publisher — Create branch, commit, open PR on Gitea."""
|
||||
import json
|
||||
import subprocess
|
||||
import os
|
||||
import tempfile
|
||||
import shutil
|
||||
import datetime
|
||||
import requests
|
||||
|
||||
|
||||
def publish_skill(review_result, config):
|
||||
"""
|
||||
@@ -33,23 +33,20 @@ def publish_skill(review_result, config):
|
||||
branch_name = f"skill/{skill_name}-{ts}"
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
# Clone repo
|
||||
repo_dir = os.path.join(tmpdir, "agent-skills")
|
||||
|
||||
# Clone repo
|
||||
result = subprocess.run(
|
||||
["git", "clone", "--branch", "main", "--single-branch", clone_url, repo_dir],
|
||||
["git", "clone", "--branch", "main", "--depth", "1", clone_url, repo_dir],
|
||||
capture_output=True, text=True, timeout=30
|
||||
)
|
||||
if result.returncode != 0:
|
||||
# Try without --branch (might not exist yet)
|
||||
result = subprocess.run(
|
||||
["git", "clone", clone_url, repo_dir],
|
||||
["git", "clone", "--depth", "1", clone_url, repo_dir],
|
||||
capture_output=True, text=True, timeout=30
|
||||
)
|
||||
if result.returncode != 0:
|
||||
return {
|
||||
"status": "CLONE_ERROR",
|
||||
"error": result.stderr[:500],
|
||||
}
|
||||
return {"status": "CLONE_ERROR", "error": result.stderr[:500]}
|
||||
|
||||
# Configure git
|
||||
subprocess.run(["git", "config", "user.email", "hermes@agent.local"], cwd=repo_dir)
|
||||
@@ -59,34 +56,80 @@ def publish_skill(review_result, config):
|
||||
skill_dir = os.path.join(repo_dir, "skills", skill_name)
|
||||
os.makedirs(skill_dir, exist_ok=True)
|
||||
|
||||
# Write files
|
||||
# Write skill files
|
||||
for filename, content in files.items():
|
||||
filepath = os.path.join(skill_dir, filename)
|
||||
with open(filepath, 'w') as f:
|
||||
with open(filepath, "w") as f:
|
||||
f.write(content)
|
||||
|
||||
# Add and commit
|
||||
subprocess.run(["git", "add", "."], cwd=repo_dir, capture_output=True)
|
||||
subprocess.run(
|
||||
["git", "commit", "-m", f"Add Skill: {skill_name}\n\nExtracted from: {gen.get('metadata', {}).get('source_repo', 'unknown')}\nScore: {gen.get('metadata', {}).get('score', 0)}"],
|
||||
cwd=repo_dir, capture_output=True
|
||||
# Verify files were written
|
||||
written_files = []
|
||||
for root, dirs, fnames in os.walk(skill_dir):
|
||||
for fn in fnames:
|
||||
written_files.append(os.path.join(root, fn))
|
||||
|
||||
if not written_files:
|
||||
return {"status": "EMPTY_SKILL", "reason": "No files written to skill directory"}
|
||||
|
||||
# Stage and commit
|
||||
add_result = subprocess.run(
|
||||
["git", "add", "skills/"], cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
|
||||
# Check if there are actually staged changes
|
||||
status_result = subprocess.run(
|
||||
["git", "diff", "--cached", "--name-only"],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
staged_files = status_result.stdout.strip().split("\n") if status_result.stdout.strip() else []
|
||||
|
||||
if not staged_files:
|
||||
# Nothing to commit — files might already exist. Force add.
|
||||
subprocess.run(["git", "add", "-f", "skills/"], cwd=repo_dir, capture_output=True, text=True)
|
||||
status_result = subprocess.run(
|
||||
["git", "diff", "--cached", "--name-only"],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
staged_files = status_result.stdout.strip().split("\n") if status_result.stdout.strip() else []
|
||||
|
||||
if not staged_files:
|
||||
return {
|
||||
"status": "NO_CHANGES",
|
||||
"reason": f"No new files to commit for {skill_name}. Files already exist in repo.",
|
||||
}
|
||||
|
||||
commit_result = subprocess.run(
|
||||
[
|
||||
"git", "commit", "-m",
|
||||
f"Add Skill: {skill_name}\n\nExtracted from: {gen.get('metadata', {}).get('source_repo', 'unknown')}\nScore: {gen.get('metadata', {}).get('score', 0)}"
|
||||
],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
|
||||
if commit_result.returncode != 0:
|
||||
return {
|
||||
"status": "COMMIT_ERROR",
|
||||
"error": commit_result.stderr[:500],
|
||||
}
|
||||
|
||||
# Checkout new branch
|
||||
checkout_result = subprocess.run(
|
||||
["git", "checkout", "-b", branch_name],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
if checkout_result.returncode != 0:
|
||||
return {
|
||||
"status": "CHECKOUT_ERROR",
|
||||
"error": checkout_result.stderr[:500],
|
||||
}
|
||||
|
||||
# Push branch
|
||||
auth_url = clone_url.replace("http://", f"http://tonyjbala:{token}@")
|
||||
push_result = subprocess.run(
|
||||
["git", "push", "-u", auth_url, f"main:{branch_name}"],
|
||||
capture_output=True, text=True, timeout=30
|
||||
["git", "push", "-u", auth_url, branch_name],
|
||||
cwd=repo_dir, capture_output=True, text=True, timeout=30
|
||||
)
|
||||
|
||||
if push_result.returncode != 0:
|
||||
# Try creating from current branch
|
||||
subprocess.run(["git", "checkout", "-b", branch_name], cwd=repo_dir, capture_output=True)
|
||||
push_result = subprocess.run(
|
||||
["git", "push", "-u", auth_url, branch_name],
|
||||
capture_output=True, text=True, timeout=30
|
||||
)
|
||||
|
||||
if push_result.returncode != 0:
|
||||
return {
|
||||
"status": "PUSH_ERROR",
|
||||
@@ -97,19 +140,19 @@ def publish_skill(review_result, config):
|
||||
pr_url = f"{base_url}/api/v1/repos/{owner}/{repo_name}/pulls"
|
||||
pr_payload = {
|
||||
"title": f"Add Skill: {skill_name}",
|
||||
"body": f"## Skill: {skill_name}\n\n"
|
||||
f"**Goal:** {gen.get('metadata', {}).get('goal', '')}\n"
|
||||
f"**Source:** {gen.get('metadata', {}).get('source_repo', '')}\n"
|
||||
f"**Score:** {gen.get('metadata', {}).get('score', 0)}\n"
|
||||
f"**Confidence:** {gen.get('metadata', {}).get('confidence', 0)}\n"
|
||||
f"**Review:** {review_result.get('reason', '')}\n\n"
|
||||
f"### Files\n"
|
||||
+ "".join(f"- `{f}`\n" for f in files.keys()),
|
||||
"body": (
|
||||
f"## Skill: {skill_name}\n\n"
|
||||
f"**Goal:** {gen.get('metadata', {}).get('goal', '')}\n"
|
||||
f"**Source:** {gen.get('metadata', {}).get('source_repo', '')}\n"
|
||||
f"**Score:** {gen.get('metadata', {}).get('score', 0)}\n"
|
||||
f"**Confidence:** {gen.get('metadata', {}).get('confidence', 0)}\n\n"
|
||||
f"### Files\n"
|
||||
+ "".join(f"- `{f}`\n" for f in files.keys())
|
||||
),
|
||||
"head": branch_name,
|
||||
"base": "main",
|
||||
}
|
||||
|
||||
import requests
|
||||
headers = {
|
||||
"Authorization": f"token {token}",
|
||||
"Content-Type": "application/json",
|
||||
@@ -127,7 +170,6 @@ def publish_skill(review_result, config):
|
||||
"message": f"PR opened: {pr_data.get('html_url', '')}",
|
||||
}
|
||||
elif resp.status_code == 409:
|
||||
# PR already exists for this branch
|
||||
return {
|
||||
"status": "PUBLISHED",
|
||||
"skill_name": skill_name,
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: code-review-agent-workflow
|
||||
version: 1.0.0
|
||||
description: Automate the code review process using a multi-step workflow with human-in-the-loop
|
||||
approval.
|
||||
inputs:
|
||||
- Sample diff of code changes (str)
|
||||
- Repo context (dict)
|
||||
steps:
|
||||
- 'Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph`'
|
||||
- 'Step 2: Invoke the graph with initial parameters including sample diff, repo context,
|
||||
user ID, and other metadata'
|
||||
- 'Step 3: The graph processes the input through a series of steps, generating messages
|
||||
and issues as it progresses'
|
||||
outputs:
|
||||
- Final result containing processed messages and issues (dict)
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/itszhaoziyan-n/AgentKit.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# code-review-agent-workflow
|
||||
|
||||
Automate the code review process using a multi-step workflow with human-in-the-loop approval.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install langgraph>=0.3 langchain-core>=0.3 langchain-anthropic>=0.3 langfuse>=2.0 mcp[server]>=1.24,<2.0 langchain-mcp-adapters>=0.1 tenacity>=9.0 fastapi>=0.115 uvicorn[standard]>=0.32 psycopg[binary]>=3.1 langgraph-checkpoint-postgres>=2.0 httpx>=0.27 python-dotenv>=1.0 redis>=5.0
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. cp .env.example .env
|
||||
1. docker compose up -d
|
||||
1. pip install -e '.[dev]'
|
||||
|
||||
## Key Files
|
||||
|
||||
- `agentkit/workflow/code_review/graph.py - Contains the `build_graph` function and graph invocation logic.`
|
||||
- `examples/run_code_review.py - Example script demonstrating how to run the code review agent.`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph`
|
||||
2. Step 2: Invoke the graph with initial parameters including sample diff, repo context, user ID, and other metadata
|
||||
3. Step 3: The graph processes the input through a series of steps, generating messages and issues as it progresses
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
graph = build_graph()
|
||||
thread_id = str(uuid.uuid4())
|
||||
result = graph.invoke(...)
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- Sample diff of code changes (str)
|
||||
- Repo context (dict)
|
||||
|
||||
## Outputs
|
||||
|
||||
- Final result containing processed messages and issues (dict)
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Specific failure scenario with mitigation: If the `build_graph()` function fails to initialize properly, ensure all required dependencies are correctly installed.
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/itszhaoziyan-n/AgentKit.git](https://github.com/itszhaoziyan-n/AgentKit.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: code-review-agent-workflow
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill code-review-agent-workflow` — Load this skill
|
||||
- `/run code-review-agent-workflow` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: code-review-agent-workflow
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: Sample diff of code changes (str), Repo context (dict)
|
||||
# Process: Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph` → Step 2: Invoke the graph with initial parameters including sample diff, repo context, user ID, and other metadata → Step 3: The graph processes the input through a series of steps, generating messages and issues as it progresses
|
||||
# Outputs: Final result containing processed messages and issues (dict)
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "code-review-agent-workflow",
|
||||
"version": "1.0.0",
|
||||
"goal": "Automate the code review process using a multi-step workflow with human-in-the-loop approval.",
|
||||
"inputs": [
|
||||
"Sample diff of code changes (str)",
|
||||
"Repo context (dict)"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph`",
|
||||
"Step 2: Invoke the graph with initial parameters including sample diff, repo context, user ID, and other metadata",
|
||||
"Step 3: The graph processes the input through a series of steps, generating messages and issues as it progresses"
|
||||
],
|
||||
"outputs": [
|
||||
"Final result containing processed messages and issues (dict)"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Specific failure scenario with mitigation: If the `build_graph()` function fails to initialize properly, ensure all required dependencies are correctly installed."
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is reusable for any code review process that requires a multi-step analysis and human approval.",
|
||||
"source_repo": "https://github.com/itszhaoziyan-n/AgentKit.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: code-review-agent-workflow
|
||||
|
||||
## 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
|
||||
@@ -0,0 +1,98 @@
|
||||
---
|
||||
name: mcp-server-setup
|
||||
version: 1.0.0
|
||||
description: Set up an MCP server to integrate PipesHub with any MCP-compatible client.
|
||||
inputs:
|
||||
- MCP server configuration details
|
||||
- PipesHub credentials
|
||||
steps:
|
||||
- 'Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`'
|
||||
- 'Step 2: Navigate to the cloned directory with `cd mcp-server`'
|
||||
- 'Step 3: Run the interactive installer by executing `./install.sh`'
|
||||
- 'Step 4: Follow the prompts in the installer to configure the server, including
|
||||
setting up graph DB, message broker, and KV store'
|
||||
- 'Step 5: The installer will generate a `.env` file with necessary environment variables.
|
||||
Ensure these are correctly set'
|
||||
- 'Step 6: Start the MCP server by running `docker-compose up -d`'
|
||||
outputs:
|
||||
- Running MCP server
|
||||
- .env file generated
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/pipeshub-ai/pipeshub-ai.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# mcp-server-setup
|
||||
|
||||
Set up an MCP server to integrate PipesHub with any MCP-compatible client.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install docker docker-compose
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. Ensure Docker and Docker Compose are installed on your system.
|
||||
1. Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`
|
||||
|
||||
## Key Files
|
||||
|
||||
- `path/to/install.sh - Script to run the interactive installer`
|
||||
- `path/to/docker-compose.yml - Configuration for Docker services`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`
|
||||
2. Step 2: Navigate to the cloned directory with `cd mcp-server`
|
||||
3. Step 3: Run the interactive installer by executing `./install.sh`
|
||||
4. Step 4: Follow the prompts in the installer to configure the server, including setting up graph DB, message broker, and KV store
|
||||
5. Step 5: The installer will generate a `.env` file with necessary environment variables. Ensure these are correctly set
|
||||
6. Step 6: Start the MCP server by running `docker-compose up -d`
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
```bash
|
||||
./install.sh
|
||||
```
|
||||
Run this script to start the installation process.
|
||||
```
|
||||
|
||||
```python
|
||||
```yaml
|
||||
docker-compose:
|
||||
version: '3.9'
|
||||
services:
|
||||
mcp-server:
|
||||
image: pipeshubai/mcp-server:latest
|
||||
environment:
|
||||
- PIPESHUB_API_KEY=your_api_key_here
|
||||
```
|
||||
This snippet shows how to configure the Docker Compose file.
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- MCP server configuration details
|
||||
- PipesHub credentials
|
||||
|
||||
## Outputs
|
||||
|
||||
- Running MCP server
|
||||
- .env file generated
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Installer fails to run due to missing dependencies or incorrect configuration
|
||||
- Docker Compose setup issues preventing server from starting
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/pipeshub-ai/pipeshub-ai.git](https://github.com/pipeshub-ai/pipeshub-ai.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: mcp-server-setup
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill mcp-server-setup` — Load this skill
|
||||
- `/run mcp-server-setup` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: mcp-server-setup
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: MCP server configuration details, PipesHub credentials
|
||||
# Process: Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git` → Step 2: Navigate to the cloned directory with `cd mcp-server` → Step 3: Run the interactive installer by executing `./install.sh`
|
||||
# Outputs: Running MCP server, .env file generated
|
||||
```
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "mcp-server-setup",
|
||||
"version": "1.0.0",
|
||||
"goal": "Set up an MCP server to integrate PipesHub with any MCP-compatible client.",
|
||||
"inputs": [
|
||||
"MCP server configuration details",
|
||||
"PipesHub credentials"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`",
|
||||
"Step 2: Navigate to the cloned directory with `cd mcp-server`",
|
||||
"Step 3: Run the interactive installer by executing `./install.sh`",
|
||||
"Step 4: Follow the prompts in the installer to configure the server, including setting up graph DB, message broker, and KV store",
|
||||
"Step 5: The installer will generate a `.env` file with necessary environment variables. Ensure these are correctly set",
|
||||
"Step 6: Start the MCP server by running `docker-compose up -d`"
|
||||
],
|
||||
"outputs": [
|
||||
"Running MCP server",
|
||||
".env file generated"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Installer fails to run due to missing dependencies or incorrect configuration",
|
||||
"Docker Compose setup issues preventing server from starting"
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is specific but can be adapted for different deployment environments and configurations.",
|
||||
"source_repo": "https://github.com/pipeshub-ai/pipeshub-ai.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: mcp-server-setup
|
||||
|
||||
## 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
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
name: multi-agent-sequential-workflow
|
||||
version: 1.0.0
|
||||
description: Gather and process information from multiple agents to generate a comprehensive
|
||||
travel guide.
|
||||
inputs:
|
||||
- User query with location
|
||||
steps:
|
||||
- 'Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel
|
||||
to gather raw facts about the destination.'
|
||||
- 'Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into
|
||||
a structured travel guide based on the user''s request and raw information provided
|
||||
by the researcher.'
|
||||
- 'Step 3: Writer agent (agent.py) formats the final response, including the structured
|
||||
guide content and prominently features the ''Suggested Web Pages'' section.'
|
||||
outputs:
|
||||
- Structured travel guide with key sections
|
||||
- Final client response
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# multi-agent-sequential-workflow
|
||||
|
||||
Gather and process information from multiple agents to generate a comprehensive travel guide.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install python3 fastapi uvicorn strands bedrock-model
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. Install required dependencies using pip
|
||||
1. Set up environment variables for API keys and model IDs
|
||||
|
||||
## Key Files
|
||||
|
||||
- `agents/aws_strands/05-agent-strands-multiagent-workflow-sequential/agent.py - Contains the multi-agent workflow logic.`
|
||||
- `agents/aws_strands/05-agent-strands-multiagent-workflow-sequential/app.py - FastAPI app to handle user queries.`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel to gather raw facts about the destination.
|
||||
2. Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into a structured travel guide based on the user's request and raw information provided by the researcher.
|
||||
3. Step 3: Writer agent (agent.py) formats the final response, including the structured guide content and prominently features the 'Suggested Web Pages' section.
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
research_output = researcher_agent(query, stream=False)
|
||||
```
|
||||
|
||||
```python
|
||||
guide_output = travel_guide_agent(planner_prompt, stream=False)
|
||||
```
|
||||
|
||||
```python
|
||||
final_response = writer_agent(writer_prompt, stream=False)
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- User query with location
|
||||
|
||||
## Outputs
|
||||
|
||||
- Structured travel guide with key sections
|
||||
- Final client response
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Network issues during API calls could lead to incomplete data collection or processing failures
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git](https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: multi-agent-sequential-workflow
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill multi-agent-sequential-workflow` — Load this skill
|
||||
- `/run multi-agent-sequential-workflow` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: multi-agent-sequential-workflow
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: User query with location
|
||||
# Process: Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel to gather raw facts about the destination. → Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into a structured travel guide based on the user's request and raw information provided by the researcher. → Step 3: Writer agent (agent.py) formats the final response, including the structured guide content and prominently features the 'Suggested Web Pages' section.
|
||||
# Outputs: Structured travel guide with key sections, Final client response
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "multi-agent-sequential-workflow",
|
||||
"version": "1.0.0",
|
||||
"goal": "Gather and process information from multiple agents to generate a comprehensive travel guide.",
|
||||
"inputs": [
|
||||
"User query with location"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel to gather raw facts about the destination.",
|
||||
"Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into a structured travel guide based on the user's request and raw information provided by the researcher.",
|
||||
"Step 3: Writer agent (agent.py) formats the final response, including the structured guide content and prominently features the 'Suggested Web Pages' section."
|
||||
],
|
||||
"outputs": [
|
||||
"Structured travel guide with key sections",
|
||||
"Final client response"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Network issues during API calls could lead to incomplete data collection or processing failures"
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is specific but can be adapted for other types of guides or information gathering tasks.",
|
||||
"source_repo": "https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: multi-agent-sequential-workflow
|
||||
|
||||
## 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
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
name: research-pipeline
|
||||
version: 1.0.0
|
||||
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` 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 of the summary file
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/temiroff/Blacknode.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# research-pipeline
|
||||
|
||||
Fetch a Wikipedia page, summarise its content using an AI agent, and write the summary to a file.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
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
|
||||
1. Install required dependencies: `pip install -r requirements.txt`
|
||||
|
||||
## Key Files
|
||||
|
||||
- `examples/research_pipeline.py - Contains the research pipeline workflow`
|
||||
|
||||
## Steps
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
```python
|
||||
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')
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- URL of the Wikipedia page
|
||||
|
||||
## Outputs
|
||||
|
||||
- Path of the summary file
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- If the URL is invalid or unreachable, the HTTPGet node will fail; if the summarisation fails, the output text might be empty
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/temiroff/Blacknode.git](https://github.com/temiroff/Blacknode.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: research-pipeline
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill research-pipeline` — Load this skill
|
||||
- `/run research-pipeline` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: research-pipeline
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: URL of the Wikipedia page
|
||||
# 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
|
||||
```
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "research-pipeline",
|
||||
"version": "1.0.0",
|
||||
"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` 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 of the summary file"
|
||||
],
|
||||
"failure_modes": [
|
||||
"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 Wikipedia page or similar content source.",
|
||||
"source_repo": "https://github.com/temiroff/Blacknode.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: research-pipeline
|
||||
|
||||
## 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
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
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.
|
||||
inputs:
|
||||
- blueprint_id or blueprint_name
|
||||
- user_shortcut
|
||||
- user_question
|
||||
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)'
|
||||
outputs:
|
||||
- session_id
|
||||
- workflow_id
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/redhat-community-ai-tools/UnifAI.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# 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`
|
||||
|
||||
## 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.
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- blueprint_id or blueprint_name
|
||||
- user_shortcut
|
||||
- user_question
|
||||
|
||||
## Outputs
|
||||
|
||||
- session_id
|
||||
- workflow_id
|
||||
|
||||
## 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
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/redhat-community-ai-tools/UnifAI.git](https://github.com/redhat-community-ai-tools/UnifAI.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: unifai-workflow-execution
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill unifai-workflow-execution` — Load this skill
|
||||
- `/run unifai-workflow-execution` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: unifai-workflow-execution
|
||||
|
||||
## Usage Example
|
||||
|
||||
```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
|
||||
```
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"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.",
|
||||
"inputs": [
|
||||
"blueprint_id or blueprint_name",
|
||||
"user_shortcut",
|
||||
"user_question"
|
||||
],
|
||||
"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)"
|
||||
],
|
||||
"outputs": [
|
||||
"session_id",
|
||||
"workflow_id"
|
||||
],
|
||||
"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"
|
||||
],
|
||||
"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.",
|
||||
"source_repo": "https://github.com/redhat-community-ai-tools/UnifAI.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: unifai-workflow-execution
|
||||
|
||||
## 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
|
||||
Reference in New Issue
Block a user