Install
$ agentstack add skill-0gfoundation-0g-agent-skills-fine-tuning ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Model Fine-Tuning
Metadata
- Category: compute
- SDK:
@0glabs/0g-serving-broker^0.6.5 (CLI-based workflow) - Activation Triggers: "fine-tune", "train model", "custom model", "model training"
Purpose
Fine-tune AI models on 0G's distributed GPU network. Upload training data, configure parameters, monitor training, and download the resulting model. Currently testnet only.
Prerequisites
- Node.js >= 22
@0glabs/0g-serving-brokerCLI installed globally- Testnet wallet with 0G tokens
- Training dataset in required format
- Configuration file for training parameters
Quick Workflow
- List available providers and models
- Prepare dataset and configuration
- Upload dataset to 0G Storage
- Calculate dataset size for cost estimation
- Transfer funds to provider
- Create fine-tuning task
- Monitor progress
- Download and decrypt model when complete
Core Rules
ALWAYS
- Use testnet (fine-tuning not yet on mainnet)
- Verify provider availability before uploading data
- Save the root hash from dataset upload
- Save the task ID from task creation
- Wait for
Deliveredstatus before downloading - Wait for
Finishedstatus before decrypting - Acknowledge provider before first use
- Use correct
processResponse()param order:(providerAddress, chatID, usageData) - Extract ChatID from
ZG-Res-Keyheader first, body as fallback (chatbot only)
NEVER
- Create a new task while previous task is running
- Initiate refund during active fine-tuning
- Forget to decrypt the downloaded model
- Use mainnet for fine-tuning (not yet supported)
- Hardcode private keys
- Use ethers v5 syntax
Task Status Lifecycle
Init -> SettingUp -> SetUp -> Training -> Trained -> Delivering -> Delivered -> UserAcknowledged -> Finished
|
Failed
| Status | Description | Action | | ------------------ | ------------------ | -------------- | | Init | Task submitted | Wait | | SettingUp | Provider preparing | Wait | | Training | Model training | Monitor logs | | Delivered | Result uploaded | Download model | | UserAcknowledged | Download confirmed | Wait for key | | Finished | Complete | Decrypt model | | Failed | Task failed | Check logs |
Complete Workflow (CLI)
1. Find Provider
0g-compute-cli fine-tuning list-providers
# Official testnet provider: 0xf07240Efa67755B5311bc75784a061eDB47165Dd
2. List Available Models
0g-compute-cli fine-tuning list-models
# Available: distilbert-base-uncased (Text Classification)
3. Upload Dataset
0g-compute-cli fine-tuning upload --data-path ./my_dataset.json
# Output: Root hash: 0xabc123...
4. Calculate Size
0g-compute-cli fine-tuning calculate-token \
--model distilbert-base-uncased \
--dataset-path ./my_dataset.json \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd
5. Fund Provider
0g-compute-cli transfer-fund \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd \
--amount 1
6. Create Task
0g-compute-cli fine-tuning create-task \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd \
--model distilbert-base-uncased \
--dataset 0xabc123... \
--config-path ./config.json \
--data-size 1000000
# Output: Created Task ID: 6b607314-88b0-4fef-91e7-43227a54de57
7. Monitor Progress
0g-compute-cli fine-tuning get-task \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd \
--task 6b607314-88b0-4fef-91e7-43227a54de57
# View training logs
0g-compute-cli fine-tuning get-log \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd \
--task 6b607314-88b0-4fef-91e7-43227a54de57
8. Download Model (when status = Delivered)
0g-compute-cli fine-tuning acknowledge-model \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd \
--task-id 6b607314-88b0-4fef-91e7-43227a54de57 \
--data-path ./encrypted_model.bin
9. Decrypt Model (when status = Finished)
0g-compute-cli fine-tuning decrypt-model \
--provider 0xf07240Efa67755B5311bc75784a061eDB47165Dd \
--task-id 6b607314-88b0-4fef-91e7-43227a54de57 \
--encrypted-model ./encrypted_model.bin \
--output ./my_model.zip
unzip ./my_model.zip -d ./my_fine_tuned_model/
SDK Integration
import { ethers } from 'ethers';
import { createZGComputeNetworkBroker } from '@0glabs/0g-serving-broker';
import 'dotenv/config';
async function checkFineTuningAccount(providerAddress: string) {
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
const broker = await createZGComputeNetworkBroker(wallet);
// Transfer funds for fine-tuning
await broker.ledger.transferFund(providerAddress, 'fine-tuning', ethers.parseEther('1'));
// Check sub-account (returns [subAccountTuple, refundsArray])
const [account, refunds] = await broker.fineTuning.getAccountWithDetail(providerAddress);
// Tuple: [0]=user, [1]=provider, [2]=balance, ...
console.log(`Fine-tuning balance: ${ethers.formatEther(account[2])} 0G`);
}
Error Handling
async function monitorTask(providerAddress: string, taskId: string) {
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
const broker = await createZGComputeNetworkBroker(wallet);
const pollInterval = 30000; // 30 seconds
const maxAttempts = 120; // 1 hour max
for (let attempt = 0; attempt setTimeout(resolve, pollInterval));
} catch (error) {
console.error('Status check failed:', error);
if (attempt === maxAttempts - 1) throw error;
}
}
}
Cost Estimation
- Price based on dataset size (bytes) x provider rate
- Typical rate:
0.000000000000000001 0Gper byte - Calculate with
0g-compute-cli fine-tuning calculate-token - Always transfer 10-20% extra as buffer
Anti-Patterns
# BAD: Creating task while another is running
0g-compute-cli fine-tuning create-task ... # Error: provider busy
# BAD: Downloading before Delivered status
0g-compute-cli fine-tuning acknowledge-model ... # Will fail
# BAD: Decrypting before Finished status
0g-compute-cli fine-tuning decrypt-model ... # Key not available yet
// BAD: Hardcoding private keys
const wallet = new ethers.Wallet('0xabc123...', provider); // NEVER do this
// BAD: ethers v5 syntax
const provider = new ethers.providers.JsonRpcProvider(url); // v5!
Common Errors & Fixes
| Error | Cause | Fix | | --------------------------- | --------------------- | ------------------------------ | | Provider busy | Previous task running | Wait or use different provider | | Insufficient balance | Sub-account empty | Transfer more funds | | Dataset validation failed | Wrong format | Check dataset structure | | Decryption failed | Wrong status or key | Wait for Finished status | | Task failed | Config or data issue | Check logs for details | | Provider not acknowledged | First-time provider | acknowledgeProviderSigner() |
Related Skills
- [Provider Discovery](../provider-discovery/SKILL.md) — find fine-tuning providers
- [Account Management](../account-management/SKILL.md) — fund fine-tuning account
References
- [Compute Patterns](../../../patterns/COMPUTE.md)
- [Network Config](../../../patterns/NETWORK_CONFIG.md)
- 0G Serving Broker Releases
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: 0gfoundation
- Source: 0gfoundation/0g-agent-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.