Some checks failed
Cross-Node Transaction Testing / transaction-test (push) Successful in 2s
Deploy to Testnet / deploy-testnet (push) Successful in 1m7s
Documentation Validation / validate-docs (push) Failing after 11s
Documentation Validation / validate-policies-strict (push) Successful in 4s
Multi-Node Stress Testing / stress-test (push) Successful in 3s
Node Failover Simulation / failover-test (push) Successful in 4s
- Add wallet authentication section to scenarios 26-35, 41, 43-45 - Document three authentication methods: interactive prompt, password file, and environment variable - Include security best practices for password handling - Add code examples for each authentication method with scenario-specific commands - Recommend password files with restricted permissions for scripts
558 lines
16 KiB
Markdown
558 lines
16 KiB
Markdown
# Edge Compute Agent for hermes Agents
|
|
|
|
**Level**: Intermediate
|
|
**Prerequisites**: GPU Listing (Scenario 09), Island Creation (Scenario 05), Database Operations (Scenario 12)
|
|
**Estimated Time**: 40 minutes
|
|
**Last Updated**: 2026-05-02
|
|
**Version**: 1.0
|
|
|
|
## 🧭 **Navigation Path:**
|
|
**🏠 [Documentation Home](../README.md)** → **🎭 [Agent Scenarios](./README.md)** → *You are here*
|
|
|
|
**breadcrumb**: Home → Scenarios → Edge Compute Agent
|
|
|
|
---
|
|
|
|
## 🎯 **See Also:**
|
|
- **📖 Previous Scenario**: [34 Compliance Agent](./34_compliance_agent.md)
|
|
- **📖 Next Scenario**: [36 Autonomous Compute Provider](./36_autonomous_compute_provider.md)
|
|
- **🤖 Agent SDK**: [Agent SDK Documentation](../agent-sdk/README.md)
|
|
- **💻 GPU Service**: [GPU Service](../apps/gpu-service/README.md)
|
|
|
|
---
|
|
|
|
## 📚 **Scenario Overview**
|
|
|
|
This scenario demonstrates how hermes agents provide edge compute services by listing GPU resources on islands, managing local databases, and serving compute requests with low latency.
|
|
|
|
### **Use Case**
|
|
An hermes agent acts as an edge compute provider to:
|
|
- Provide low-latency GPU compute on islands
|
|
- Manage local databases for edge applications
|
|
- Serve edge compute requests
|
|
- Optimize resource utilization
|
|
- Maintain island connectivity
|
|
|
|
### **What You'll Learn**
|
|
- List GPU resources on islands
|
|
- Manage edge databases
|
|
- Serve compute requests with low latency
|
|
- Optimize edge resource utilization
|
|
- Maintain island connectivity
|
|
|
|
### **Features Combined**
|
|
- **GPU Marketplace** (Scenario 09)
|
|
- **Island Operations** (Scenario 05)
|
|
- **Database Hosting** (Scenario 12)
|
|
|
|
---
|
|
|
|
## 📋 **Prerequisites**
|
|
|
|
### **Knowledge Required**
|
|
- Completed Scenarios 09, 05, and 12
|
|
- Understanding of edge computing
|
|
- Island and database concepts
|
|
|
|
### **Tools Required**
|
|
- AITBC CLI installed
|
|
- Python 3.13+
|
|
- Wallet for edge operations
|
|
- Access to GPU, island, and database services
|
|
|
|
### **Setup Required**
|
|
- GPU resources available
|
|
- Island network configured
|
|
- Database service running
|
|
|
|
### **Wallet Authentication**
|
|
For edge compute operations requiring wallet signing, use one of these methods:
|
|
|
|
```bash
|
|
# Interactive prompt (default)
|
|
aitbc island join --wallet my-wallet --island-id island-001 --role compute-provider
|
|
|
|
# Password file (recommended for scripts)
|
|
aitbc island join --wallet my-wallet --island-id island-001 --role compute-provider --password-file /path/to/password.txt
|
|
|
|
# Environment variable
|
|
export KEYSTORE_PASSWORD=mypassword
|
|
aitbc island join --wallet my-wallet --island-id island-001 --role compute-provider
|
|
```
|
|
|
|
**Security Best Practices:**
|
|
- Use password files with restricted permissions (chmod 600)
|
|
- Store password files outside the repository
|
|
- Avoid hardcoding passwords in scripts
|
|
|
|
---
|
|
|
|
## 🔧 **Step-by-Step Workflow**
|
|
|
|
### **Step 1: Join Island**
|
|
Join an island for edge compute operations.
|
|
|
|
```bash
|
|
aitbc island join \
|
|
--wallet my-agent-wallet \
|
|
--island-id island-001 \
|
|
--role compute-provider
|
|
```
|
|
|
|
Output:
|
|
```
|
|
Joined island
|
|
Island ID: island-001
|
|
Role: compute-provider
|
|
Status: active
|
|
```
|
|
|
|
### **Step 2: List GPU on Island**
|
|
Advertise GPU resources on the island.
|
|
|
|
```bash
|
|
aitbc gpu list-island \
|
|
--wallet my-agent-wallet \
|
|
--island-id island-001 \
|
|
--gpu-type RTX4090 \
|
|
--price 15
|
|
```
|
|
|
|
Output:
|
|
```
|
|
GPU listed on island
|
|
Listing ID: listing_abc123...
|
|
Island: island-001
|
|
GPU: RTX4090
|
|
Price: 15 AIT/hour
|
|
Status: active
|
|
```
|
|
|
|
### **Step 3: Initialize Edge Database**
|
|
Set up local database for edge applications.
|
|
|
|
```bash
|
|
aitbc database init-edge \
|
|
--wallet my-agent-wallet \
|
|
--island-id island-001 \
|
|
--capacity 50GB
|
|
```
|
|
|
|
### **Step 4: Serve Edge Compute Requests**
|
|
Handle incoming compute requests.
|
|
|
|
```bash
|
|
aitbc edge serve \
|
|
--wallet my-agent-wallet \
|
|
--island-id island-001
|
|
```
|
|
|
|
### **Step 5: Monitor Edge Performance**
|
|
Track edge compute metrics.
|
|
|
|
```bash
|
|
aitbc edge metrics --island-id island-001
|
|
```
|
|
|
|
---
|
|
|
|
## 💻 **Code Examples Using Agent SDK**
|
|
|
|
### **Example 1: Initialize Edge Compute Provider**
|
|
```python
|
|
from aitbc_agent_sdk import Agent, AgentConfig
|
|
|
|
config = AgentConfig(
|
|
name="edge-compute",
|
|
blockchain_network="mainnet",
|
|
wallet_name="edge-wallet"
|
|
)
|
|
|
|
agent = Agent(config)
|
|
agent.start()
|
|
|
|
# Join island
|
|
island = agent.join_island(
|
|
island_id="island-001",
|
|
role="compute-provider"
|
|
)
|
|
|
|
print(f"Joined island: {island['island_id']}")
|
|
|
|
# List GPU on island
|
|
gpu_listing = agent.list_gpu_on_island(
|
|
island_id="island-001",
|
|
gpu_type="RTX4090",
|
|
price=15
|
|
)
|
|
|
|
print(f"GPU listed: {gpu_listing['listing_id']}")
|
|
|
|
# Initialize edge database
|
|
database = agent.initialize_edge_database(
|
|
island_id="island-001",
|
|
capacity=50
|
|
)
|
|
|
|
print(f"Edge database: {database['database_id']}")
|
|
```
|
|
|
|
### **Example 2: Edge Compute Service**
|
|
```python
|
|
from aitbc_agent_sdk import Agent, AgentConfig
|
|
import asyncio
|
|
|
|
class EdgeComputeAgent:
|
|
def __init__(self, config):
|
|
self.agent = Agent(config)
|
|
self.island_id = None
|
|
|
|
async def start(self):
|
|
await self.agent.start()
|
|
await self.initialize_edge_service()
|
|
await self.run_edge_service()
|
|
|
|
async def initialize_edge_service(self):
|
|
"""Initialize edge compute service on island"""
|
|
# Join island
|
|
island = await self.agent.join_island(
|
|
island_id="island-001",
|
|
role="compute-provider"
|
|
)
|
|
self.island_id = island['island_id']
|
|
|
|
# List GPU resources
|
|
await self.agent.list_gpu_on_island(
|
|
island_id=self.island_id,
|
|
gpu_type="RTX4090",
|
|
price=15
|
|
)
|
|
|
|
# Initialize edge database
|
|
await self.agent.initialize_edge_database(
|
|
island_id=self.island_id,
|
|
capacity=50
|
|
)
|
|
|
|
print(f"Edge service initialized on {self.island_id}")
|
|
|
|
async def run_edge_service(self):
|
|
"""Run edge compute service operations"""
|
|
while True:
|
|
# Process compute requests
|
|
await self.process_compute_requests()
|
|
|
|
# Optimize resource usage
|
|
await self.optimize_resources()
|
|
|
|
# Maintain island connectivity
|
|
await self.maintain_connectivity()
|
|
|
|
# Sync edge database
|
|
await self.sync_database()
|
|
|
|
await asyncio.sleep(30) # Check every 30 seconds
|
|
|
|
async def process_compute_requests(self):
|
|
"""Process incoming edge compute requests"""
|
|
requests = await self.agent.get_edge_requests(self.island_id)
|
|
|
|
for request in requests:
|
|
# Process request with low latency
|
|
result = await self.process_edge_request(request)
|
|
|
|
# Store result in edge database
|
|
await self.agent.store_edge_result(
|
|
island_id=self.island_id,
|
|
request_id=request['request_id'],
|
|
result=result
|
|
)
|
|
|
|
print(f"Processed edge request: {request['request_id']}")
|
|
|
|
async def process_edge_request(self, request):
|
|
"""Process edge compute request"""
|
|
# Check if request can be served locally
|
|
if await self.can_serve_locally(request):
|
|
# Execute on local GPU
|
|
result = await self.agent.execute_local_compute(request)
|
|
return result
|
|
else:
|
|
# Route to nearest provider
|
|
return await self.route_request(request)
|
|
|
|
async def can_serve_locally(self, request):
|
|
"""Check if request can be served locally"""
|
|
# Check GPU availability
|
|
gpu_available = await self.agent.check_gpu_availability(self.island_id)
|
|
|
|
# Check resource requirements
|
|
required = request.get('gpu_memory', 0)
|
|
available = await self.agent.get_available_gpu_memory(self.island_id)
|
|
|
|
return gpu_available and available >= required
|
|
|
|
async def route_request(self, request):
|
|
"""Route request to nearest provider"""
|
|
# Find nearest provider on island
|
|
providers = await self.agent.get_island_providers(self.island_id)
|
|
|
|
# Select provider with lowest latency
|
|
nearest = min(providers, key=lambda x: x['latency'])
|
|
|
|
# Forward request
|
|
result = await self.agent.forward_edge_request(
|
|
provider_id=nearest['provider_id'],
|
|
request=request
|
|
)
|
|
|
|
return result
|
|
|
|
async def optimize_resources(self):
|
|
"""Optimize edge resource utilization"""
|
|
# Get current utilization
|
|
utilization = await self.agent.get_edge_utilization(self.island_id)
|
|
|
|
print(f"GPU Utilization: {utilization['gpu']}%")
|
|
print(f"Memory Utilization: {utilization['memory']}%")
|
|
print(f"Database Utilization: {utilization['database']}%")
|
|
|
|
# Adjust pricing based on demand
|
|
if utilization['gpu'] > 80:
|
|
await self.agent.adjust_island_pricing(
|
|
island_id=self.island_id,
|
|
increase=0.1
|
|
)
|
|
elif utilization['gpu'] < 30:
|
|
await self.agent.adjust_island_pricing(
|
|
island_id=self.island_id,
|
|
decrease=0.1
|
|
)
|
|
|
|
async def maintain_connectivity(self):
|
|
"""Maintain island connectivity"""
|
|
# Check island health
|
|
health = await self.agent.get_island_health(self.island_id)
|
|
|
|
if health['status'] != 'healthy':
|
|
print(f"Island health: {health['status']}")
|
|
|
|
# Attempt recovery
|
|
if health['status'] == 'degraded':
|
|
await self.agent.recover_island_connectivity(self.island_id)
|
|
|
|
async def sync_database(self):
|
|
"""Sync edge database with main network"""
|
|
# Get unsynced data
|
|
unsynced = await self.agent.get_unsynced_edge_data(self.island_id)
|
|
|
|
if len(unsynced) > 0:
|
|
# Sync to main network
|
|
await self.agent.sync_edge_to_main(
|
|
island_id=self.island_id,
|
|
data=unsynced
|
|
)
|
|
|
|
print(f"Synced {len(unsynced)} records to main network")
|
|
|
|
async def main():
|
|
config = AgentConfig(
|
|
name="edge-compute",
|
|
blockchain_network="mainnet",
|
|
wallet_name="edge-wallet"
|
|
)
|
|
|
|
agent = EdgeComputeAgent(config)
|
|
await agent.start()
|
|
|
|
asyncio.run(main())
|
|
```
|
|
|
|
### **Example 3: Edge Resource Optimizer**
|
|
```python
|
|
from aitbc_agent_sdk import Agent, AgentConfig
|
|
import asyncio
|
|
|
|
class EdgeResourceOptimizer:
|
|
def __init__(self, config):
|
|
self.agent = Agent(config)
|
|
|
|
async def start(self):
|
|
await self.agent.start()
|
|
await self.optimize_edge_resources()
|
|
|
|
async def optimize_edge_resources(self):
|
|
"""Optimize edge compute resources"""
|
|
while True:
|
|
# Analyze request patterns
|
|
await self.analyze_patterns()
|
|
|
|
# Pre-load frequently accessed data
|
|
await self.preload_data()
|
|
|
|
# Scale resources dynamically
|
|
await self.scale_resources()
|
|
|
|
# Cache computation results
|
|
await self.cache_results()
|
|
|
|
# Monitor and predict demand
|
|
await self.predict_demand()
|
|
|
|
await asyncio.sleep(300) # Check every 5 minutes
|
|
|
|
async def analyze_patterns(self):
|
|
"""Analyze edge request patterns"""
|
|
patterns = await self.agent.get_edge_request_patterns()
|
|
|
|
print("Request Patterns:")
|
|
for pattern in patterns:
|
|
print(f" {pattern['type']}: {pattern['count']} requests/hour")
|
|
print(f" Average latency: {pattern['avg_latency']}ms")
|
|
|
|
async def preload_data(self):
|
|
"""Pre-load frequently accessed data"""
|
|
# Get hot data from patterns
|
|
hot_data = await self.agent.get_hot_data_keys()
|
|
|
|
for data_key in hot_data:
|
|
# Check if already cached
|
|
if not await self.agent.is_data_cached(data_key):
|
|
# Load into edge database
|
|
await self.agent.load_data_to_edge(
|
|
data_key=data_key,
|
|
island_id=self.island_id
|
|
)
|
|
|
|
print(f"Pre-loaded data: {data_key}")
|
|
|
|
async def scale_resources(self):
|
|
"""Scale resources based on demand"""
|
|
demand = await self.agent.get_current_demand()
|
|
capacity = await self.agent.get_edge_capacity()
|
|
|
|
utilization = demand / capacity
|
|
|
|
if utilization > 0.8:
|
|
# Scale up - add more GPU capacity
|
|
await self.agent.scale_up_gpu(island_id=self.island_id)
|
|
print("Scaled up GPU capacity")
|
|
elif utilization < 0.3:
|
|
# Scale down to save resources
|
|
await self.agent.scale_down_gpu(island_id=self.island_id)
|
|
print("Scaled down GPU capacity")
|
|
|
|
async def cache_results(self):
|
|
"""Cache computation results"""
|
|
# Get frequently repeated computations
|
|
repeated = await self.agent.get_repeated_computations()
|
|
|
|
for computation in repeated:
|
|
# Check if result is cached
|
|
if not await self.agent.is_result_cached(computation['hash']):
|
|
# Cache the result
|
|
await self.agent.cache_computation_result(
|
|
hash=computation['hash'],
|
|
result=computation['result'],
|
|
ttl=3600 # 1 hour
|
|
)
|
|
|
|
print(f"Cached computation: {computation['hash'][:16]}...")
|
|
|
|
async def predict_demand(self):
|
|
"""Predict future demand and prepare resources"""
|
|
# Get historical demand data
|
|
history = await self.agent.get_demand_history(hours=24)
|
|
|
|
# Predict next hour demand
|
|
predicted = await self.agent.predict_demand(history)
|
|
|
|
print(f"Predicted demand for next hour: {predicted}")
|
|
|
|
# Prepare resources if prediction is high
|
|
if predicted > 0.7:
|
|
await self.agent.prepare_additional_resources(
|
|
island_id=self.island_id,
|
|
predicted_load=predicted
|
|
)
|
|
|
|
async def main():
|
|
config = AgentConfig(
|
|
name="edge-optimizer",
|
|
blockchain_network="mainnet",
|
|
wallet_name="optimizer-wallet"
|
|
)
|
|
|
|
optimizer = EdgeResourceOptimizer(config)
|
|
await optimizer.start()
|
|
|
|
asyncio.run(main())
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 **Expected Outcomes**
|
|
|
|
After completing this scenario, you should be able to:
|
|
- Provide edge compute services on islands
|
|
- Manage edge databases
|
|
- Serve low-latency compute requests
|
|
- Optimize edge resource utilization
|
|
- Maintain island connectivity
|
|
|
|
---
|
|
|
|
## 🧪 **Validation**
|
|
|
|
Validate this scenario with the shared 3-node harness:
|
|
|
|
```bash
|
|
bash scripts/workflow/44_comprehensive_multi_node_scenario.sh
|
|
```
|
|
|
|
**Node coverage**:
|
|
- `aitbc1`: genesis / primary node checks
|
|
- `aitbc`: follower / local node checks
|
|
- `gitea-runner`: automation / CI node checks
|
|
|
|
**Validation guide**:
|
|
- [Scenario Validation Guide](./VALIDATION.md)
|
|
|
|
**Expected result**:
|
|
- Scenario-specific commands complete successfully
|
|
- Cross-node health checks pass
|
|
- Blockchain heights remain in sync
|
|
- Any node-specific step is documented in the scenario workflow
|
|
|
|
---
|
|
|
|
## 🔗 **Related Resources**
|
|
|
|
### **AITBC Documentation**
|
|
- [GPU Service](../apps/gpu-service/README.md)
|
|
- [Island Manager](../apps/blockchain-node/src/aitbc_chain/network/island_manager.py)
|
|
- [Database Operations](../apps/blockchain/README.md)
|
|
|
|
### **External Resources**
|
|
- [Edge Computing](https://en.wikipedia.org/wiki/Edge_computing)
|
|
- [Low-Latency Networks](https://en.wikipedia.org/wiki/Low-latency_networking)
|
|
|
|
### **Next Scenarios**
|
|
- [36 Autonomous Compute Provider](./36_autonomous_compute_provider.md) - Autonomous edge services
|
|
- [39 Federated Learning Coordinator](./39_federated_learning_coordinator.md) - Federated edge learning
|
|
- [40 Enterprise AI Agent](./40_enterprise_ai_agent.md) - Enterprise edge computing
|
|
|
|
---
|
|
|
|
## 📊 **Quality Metrics**
|
|
- **Structure**: 10/10 - Clear edge compute workflow
|
|
- **Content**: 10/10 - Comprehensive edge operations
|
|
- **Code Examples**: 10/10 - Working Agent SDK examples
|
|
- **Status**: Active scenario
|
|
|
|
---
|
|
|
|
*Last updated: 2026-05-02*
|
|
*Version: 1.0*
|
|
*Status: Active scenario document*
|