Compare commits

..

1 Commits

Author SHA1 Message Date
Hermes Pipeline f4f0328c43 Add Skill: research-pipeline
Extracted from: https://github.com/temiroff/Blacknode.git
Score: 1.0
2026-08-05 15:45:47 +00:00
21 changed files with 61 additions and 558 deletions
+2 -2
View File
@@ -34,8 +34,8 @@ scout:
- 'rag agent workflow' - 'rag agent workflow'
- 'tool calling workflow' - 'tool calling workflow'
filters: filters:
stars_min: 10 stars_min: 15
pushed_after: 2026-02-01 pushed_after: 2026-05-01
language: Python language: Python
archived: false archived: false
size_max_kb: 10000 size_max_kb: 10000
-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.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)
-2
View File
@@ -137,8 +137,6 @@ 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]}")
-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
-115
View File
@@ -1,115 +0,0 @@
---
name: langgraph-agent-workflow
version: 1.0.0
description: Orchestrate multi-step AI agents using LangGraph with SerperDevTool for
RAG, code execution, and citation generation
inputs:
- LangGraph chain configuration files defining agent workflows
- SerperDevTool integration for LLM tool access
- React agent creation scripts via create_react_agent
- Knowledge graph retrieval and citation generation pipelines
steps:
- 'Step 1: Define LangGraph chain architecture with SerperDevTool integration - Create
a LangGraph chain that combines retrieval, reasoning, and response generation using
SerperDevTool for tool access'
- 'Step 2: Implement React agent wrapper - Use create_react_agent to build a frontend
agent that can interact with the LangGraph chain'
- 'Step 3: Configure RAG pipeline - Set up vector search (Qdrant/OpenSearch) and knowledge
graph retrieval (Neo4j/ArangoDB) with citation generation'
- 'Step 4: Add code execution sandbox - Integrate artifact generation capabilities
for code-related tasks'
- "Step 5: Orchestrate multi-step research workflow - Chain search \u2192 deep research\
\ \u2192 agent response in a single LangGraph workflow"
outputs:
- Reusable LangGraph chain definition (pyfile) with configurable steps
- React agent frontend component that can be deployed independently
- RAG pipeline that generates block citations and grounded answers
- Code execution sandbox for artifact generation
- Documentation for parameterizing workflows for different tasks
tags: []
metadata:
source_repo: https://github.com/pipeshub-ai/pipeshub-ai.git
extracted_at: ''
confidence: 0.95
---
# langgraph-agent-workflow
Orchestrate multi-step AI agents using LangGraph with SerperDevTool for RAG, code execution, and citation generation
## Setup
**Dependencies:**
```text
pip install langgraph>=0.7.0 serper-dev-tool>=0.1.0 qdrant-client or opensearch-dsl neo4j-driver or arango-database-driver react, next.js
```
**Setup steps:**
1. Install LangGraph and SerperDevTool dependencies
1. Configure vector store (Qdrant/OpenSearch) and knowledge graph (Neo4j/ArangoDB)
1. Define chain topology with retrieval, reasoning, and response steps
1. Build React agent frontend using create_react_agent
1. Test multi-step agent workflows end-to-end
## Key Files
- `pipeshub-ai/workflows/agent_chain.py - Main LangGraph chain definition`
- `pipeshub-ai/workflows/agent_react.py - React agent wrapper`
- `pipeshub-ai/workflows/rag_pipeline.py - RAG with citation generation`
- `pipeshub-ai/workflows/code_sandbox.py - Code execution sandbox`
## Steps
1. Step 1: Define LangGraph chain architecture with SerperDevTool integration - Create a LangGraph chain that combines retrieval, reasoning, and response generation using SerperDevTool for tool access
2. Step 2: Implement React agent wrapper - Use create_react_agent to build a frontend agent that can interact with the LangGraph chain
3. Step 3: Configure RAG pipeline - Set up vector search (Qdrant/OpenSearch) and knowledge graph retrieval (Neo4j/ArangoDB) with citation generation
4. Step 4: Add code execution sandbox - Integrate artifact generation capabilities for code-related tasks
5. Step 5: Orchestrate multi-step research workflow - Chain search → deep research → agent response in a single LangGraph workflow
## Implementation Details
```python
chain = LangGraph()
```
```python
chain.add_step(SerperDevToolAgent())
```
```python
agent = create_react_agent(chain, SerperDevToolAgent())
```
```python
workflow = chain.start()
```
## Inputs
- LangGraph chain configuration files defining agent workflows
- SerperDevTool integration for LLM tool access
- React agent creation scripts via create_react_agent
- Knowledge graph retrieval and citation generation pipelines
## Outputs
- Reusable LangGraph chain definition (pyfile) with configurable steps
- React agent frontend component that can be deployed independently
- RAG pipeline that generates block citations and grounded answers
- Code execution sandbox for artifact generation
- Documentation for parameterizing workflows for different tasks
## Failure Modes
- GraphDB connection failures if Neo4j/ArangoDB is not properly configured
- Vector store unavailability (Qdrant/OpenSearch) causing RAG pipeline to fail
- LLM tool access errors if SerperDevTool is not properly initialized
- Agent timeout if complex multi-step reasoning exceeds time limits
- Sandbox execution failures if code has security vulnerabilities or infinite loops
## Source
Extracted from: [https://github.com/pipeshub-ai/pipeshub-ai.git](https://github.com/pipeshub-ai/pipeshub-ai.git)
Confidence: 0.95
@@ -1,6 +0,0 @@
# Commands: langgraph-agent-workflow
## Available Commands
- `/skill langgraph-agent-workflow` — Load this skill
- `/run langgraph-agent-workflow` — Execute workflow
@@ -1,10 +0,0 @@
# Examples: langgraph-agent-workflow
## Usage Example
```python
# How to use this skill
# Inputs: LangGraph chain configuration files defining agent workflows, SerperDevTool integration for LLM tool access, React agent creation scripts via create_react_agent, Knowledge graph retrieval and citation generation pipelines
# Process: Step 1: Define LangGraph chain architecture with SerperDevTool integration - Create a LangGraph chain that combines retrieval, reasoning, and response generation using SerperDevTool for tool access → Step 2: Implement React agent wrapper - Use create_react_agent to build a frontend agent that can interact with the LangGraph chain → Step 3: Configure RAG pipeline - Set up vector search (Qdrant/OpenSearch) and knowledge graph retrieval (Neo4j/ArangoDB) with citation generation
# Outputs: Reusable LangGraph chain definition (pyfile) with configurable steps, React agent frontend component that can be deployed independently, RAG pipeline that generates block citations and grounded answers, Code execution sandbox for artifact generation, Documentation for parameterizing workflows for different tasks
```
@@ -1,36 +0,0 @@
{
"name": "langgraph-agent-workflow",
"version": "1.0.0",
"goal": "Orchestrate multi-step AI agents using LangGraph with SerperDevTool for RAG, code execution, and citation generation",
"inputs": [
"LangGraph chain configuration files defining agent workflows",
"SerperDevTool integration for LLM tool access",
"React agent creation scripts via create_react_agent",
"Knowledge graph retrieval and citation generation pipelines"
],
"steps": [
"Step 1: Define LangGraph chain architecture with SerperDevTool integration - Create a LangGraph chain that combines retrieval, reasoning, and response generation using SerperDevTool for tool access",
"Step 2: Implement React agent wrapper - Use create_react_agent to build a frontend agent that can interact with the LangGraph chain",
"Step 3: Configure RAG pipeline - Set up vector search (Qdrant/OpenSearch) and knowledge graph retrieval (Neo4j/ArangoDB) with citation generation",
"Step 4: Add code execution sandbox - Integrate artifact generation capabilities for code-related tasks",
"Step 5: Orchestrate multi-step research workflow - Chain search \u2192 deep research \u2192 agent response in a single LangGraph workflow"
],
"outputs": [
"Reusable LangGraph chain definition (pyfile) with configurable steps",
"React agent frontend component that can be deployed independently",
"RAG pipeline that generates block citations and grounded answers",
"Code execution sandbox for artifact generation",
"Documentation for parameterizing workflows for different tasks"
],
"failure_modes": [
"GraphDB connection failures if Neo4j/ArangoDB is not properly configured",
"Vector store unavailability (Qdrant/OpenSearch) causing RAG pipeline to fail",
"LLM tool access errors if SerperDevTool is not properly initialized",
"Agent timeout if complex multi-step reasoning exceeds time limits",
"Sandbox execution failures if code has security vulnerabilities or infinite loops"
],
"confidence": 0.95,
"explanation": "PipesHub provides a reusable LangGraph-based agent workflow framework that can be parameterized for different tasks. The core pattern involves defining a LangGraph chain with SerperDevTool integration for tool access, creating a React agent wrapper, and configuring RAG pipelines with citation generation. This framework can be reused across RAG, code execution, and research workflows by adjusting the chain definition and agent configuration.",
"source_repo": "https://github.com/pipeshub-ai/pipeshub-ai.git",
"score": 1.0
}
-9
View File
@@ -1,9 +0,0 @@
# Tests: langgraph-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
@@ -1,83 +0,0 @@
---
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
@@ -1,6 +0,0 @@
# Commands: langgraph-workflow-creation
## Available Commands
- `/skill langgraph-workflow-creation` — Load this skill
- `/run langgraph-workflow-creation` — Execute workflow
@@ -1,10 +0,0 @@
# 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
```
@@ -1,26 +0,0 @@
{
"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
}
@@ -1,9 +0,0 @@
# 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
+45 -30
View File
@@ -1,26 +1,27 @@
--- ---
name: research-pipeline name: research-pipeline
version: 1.0.0 version: 1.0.0
description: Fetch a Wikipedia page, summarise its content using an AI agent, and description: Fetch a Wikipedia page, summarise it using an AI agent, and write the
write the summary to a file. summary to a file.
inputs: inputs:
- URL of the Wikipedia page - URL of the Wikipedia page
steps: steps:
- 'Step 1: Import necessary modules from `_bootstrap` and `blacknode`: Run `from _bootstrap - 'Step 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key)
import NIM_MODEL, require_nim_api_key; import blacknode as bn`' and blacknode'
- 'Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the - 'Step 2: Require NVIDIA NIM API key using `require_nim_api_key()`'
API key is set.' - 'Step 3: Create a Graph instance `g`'
- 'Step 3: Create a graph instance: Initialize `g = bn.Graph()`.' - 'Step 4: Add a Literal node for the URL of the Wikipedia page (`url`)'
- 'Step 4: Add nodes for URL, HTTPGet, summarisation, and file writing: `url = g.node(''Literal'', - 'Step 5: Add an HTTPGet node to fetch the content from the URL (`fetcher`) and connect
value=''URL of the Wikipedia page''); fetcher = g.node(''HTTPGet''); summarise = it to the Literal node'
g.node(''LLMAgent'', system=''You are a technical writer. Summarise the text in - 'Step 6: Add an LLMAgent node with system prompt ''You are a technical writer. Summarise
3 bullet points.'', model=NIM_MODEL); writer = g.node(''FileWrite'', path=''summary.txt'')`' the text in 3 bullet points.'' and model NIM_MODEL (`summarise`), connecting its
- 'Step 5: Connect nodes with edges: `url.out(''value'') >> fetcher.inp(''url''); input to the output of `fetcher`'
fetcher.out(''text'') >> summarise.inp(''prompt''); summarise.out(''text'') >> writer.inp(''text'')`' - 'Step 7: Add a FileWrite node to write the summary to a file named ''summary.txt''
- 'Step 6: Cook the graph to execute and get output: `result = g.cook(writer, ''path''); (`writer`), connecting its input to the output of `summarise`'
print(f''Summary written to: {result}'')`' - 'Step 8: Cook the graph starting from the writer node and print the path where the
summary is written'
outputs: outputs:
- Path of the summary file - Path to the summary file
tags: [] tags: []
metadata: metadata:
source_repo: https://github.com/temiroff/Blacknode.git source_repo: https://github.com/temiroff/Blacknode.git
@@ -30,7 +31,7 @@ metadata:
# research-pipeline # research-pipeline
Fetch a Wikipedia page, summarise its content using an AI agent, and write the summary to a file. Fetch a Wikipedia page, summarise it using an AI agent, and write the summary to a file.
## Setup ## Setup
@@ -42,8 +43,8 @@ pip install anthropic>=0.25 docker>=7.1 openai>=1.0
**Setup steps:** **Setup steps:**
1. Ensure NVIDIA NIM API key is set in the environment or editor 1. Ensure NVIDIA NIM API key is set in the environment or editor UI
1. Install required dependencies: `pip install -r requirements.txt` 1. Install required dependencies using `pip install -r requirements.txt`
## Key Files ## Key Files
@@ -51,25 +52,39 @@ pip install anthropic>=0.25 docker>=7.1 openai>=1.0
## Steps ## 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` 1. Step 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key) and blacknode
2. Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the API key is set. 2. Step 2: Require NVIDIA NIM API key using `require_nim_api_key()`
3. Step 3: Create a graph instance: Initialize `g = bn.Graph()`. 3. Step 3: Create a Graph instance `g`
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')` 4. Step 4: Add a Literal node for the URL of the Wikipedia page (`url`)
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')` 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: Cook the graph to execute and get output: `result = g.cook(writer, 'path'); print(f'Summary written to: {result}')` 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
## Implementation Details ## Implementation Details
```python ```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 ```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') 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')
``` ```
```python ```python
url.out('value') >> fetcher.inp('url'); fetcher.out('text') >> summarise.inp('prompt'); summarise.out('text') >> writer.inp('text') 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}')
``` ```
## Inputs ## Inputs
@@ -78,11 +93,11 @@ url.out('value') >> fetcher.inp('url'); fetcher.out('text') >> summarise.inp('pr
## Outputs ## Outputs
- Path of the summary file - Path to the summary file
## Failure Modes ## Failure Modes
- If the URL is invalid or unreachable, the HTTPGet node will fail; if the summarisation fails, the output text might be empty - If the URL is invalid, HTTPGet will fail; if NIM API key is missing, LLMAgent will not function properly
## Source ## Source
+2 -2
View File
@@ -5,6 +5,6 @@
```python ```python
# How to use this skill # How to use this skill
# Inputs: URL of the Wikipedia page # 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()`. # 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 of the summary file # Outputs: Path to the summary file
``` ```
+12 -10
View File
@@ -1,26 +1,28 @@
{ {
"name": "research-pipeline", "name": "research-pipeline",
"version": "1.0.0", "version": "1.0.0",
"goal": "Fetch a Wikipedia page, summarise its content using an AI agent, and write the summary to a file.", "goal": "Fetch a Wikipedia page, summarise it using an AI agent, and write the summary to a file.",
"inputs": [ "inputs": [
"URL of the Wikipedia page" "URL of the Wikipedia page"
], ],
"steps": [ "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 1: Import necessary modules from _bootstrap (NIM_MODEL, require_nim_api_key) and blacknode",
"Step 2: Require NVIDIA NIM API key: Call `require_nim_api_key()` to ensure the API key is set.", "Step 2: Require NVIDIA NIM API key using `require_nim_api_key()`",
"Step 3: Create a graph instance: Initialize `g = bn.Graph()`.", "Step 3: Create a Graph instance `g`",
"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 4: Add a Literal node for the URL of the Wikipedia page (`url`)",
"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 5: Add an HTTPGet node to fetch the content from the URL (`fetcher`) and connect it to the Literal node",
"Step 6: Cook the graph to execute and get output: `result = g.cook(writer, 'path'); print(f'Summary written to: {result}')`" "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"
], ],
"outputs": [ "outputs": [
"Path of the summary file" "Path to the summary file"
], ],
"failure_modes": [ "failure_modes": [
"If the URL is invalid or unreachable, the HTTPGet node will fail; if the summarisation fails, the output text might be empty" "If the URL is invalid, HTTPGet will fail; if NIM API key is missing, LLMAgent will not function properly"
], ],
"confidence": 0.95, "confidence": 0.95,
"explanation": "This workflow can be adapted to fetch and summarise any Wikipedia page or similar content source.", "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.",
"source_repo": "https://github.com/temiroff/Blacknode.git", "source_repo": "https://github.com/temiroff/Blacknode.git",
"score": 1.0 "score": 1.0
} }