Complete reference for the ValiScore library - professional Bittensor validator analysis and scoring
git clone https://github.com/sonoran-softworks/valiscore.git
cd valiscore
pip install -e .
pip install valiscore
import asyncio
from valiscore import ValidatorAnalyzer
async def analyze_subnet():
analyzer = ValidatorAnalyzer(network="finney")
analysis = await analyzer.analyze_subnet(netuid=1)
print(f"Validators: {analysis['validator_count']}")
print(f"Active: {analysis['active_validators']}")
print(f"Performance: {analysis['average_performance']:.3f}")
asyncio.run(analyze_subnet())
Calculates the BLEU score for a candidate sentence against a reference sentence.
calculate_bleu(reference: str, candidate: str) -> float
Parameter | Type | Description |
---|---|---|
reference | str | Reference text to compare against |
candidate | str | Candidate text to score |
BLEU score between 0 and 1
from valiscore import calculate_bleu
reference = "The quick brown fox jumps over the lazy dog"
candidate = "A quick brown fox jumps over a lazy dog"
score = calculate_bleu(reference, candidate)
print(f"BLEU Score: {score:.3f}") # Output: BLEU Score: 0.857
Calculates ROUGE scores (ROUGE-1, ROUGE-2, ROUGE-L) for a candidate against a reference.
calculate_rouge(reference: str, candidate: str) -> Dict[str, Any]
Dictionary containing ROUGE-1, ROUGE-2, and ROUGE-L scores
from valiscore import calculate_rouge
reference = "The quick brown fox jumps over the lazy dog"
candidate = "A quick brown fox jumps over a lazy dog"
scores = calculate_rouge(reference, candidate)
print(f"ROUGE-1: {scores['rouge1']:.3f}")
print(f"ROUGE-2: {scores['rouge2']:.3f}")
print(f"ROUGE-L: {scores['rougeL']:.3f}")
Calculates Shapley values for fair contribution distribution among multiple participants.
shapley_value(contributions: List[float], characteristic_function) -> torch.Tensor
from valiscore import shapley_value, simple_characteristic_function
contributions = [0.8, 0.6, 0.9]
shapley_values = shapley_value(contributions, simple_characteristic_function)
print(f"Shapley Values: {shapley_values}")
Main engine for calculating multiple scoring metrics with configurable weights.
from valiscore import ScoringEngine
engine = ScoringEngine()
engine.set_weights({
'bleu': 0.4,
'rouge1': 0.3,
'rouge2': 0.2,
'rougeL': 0.1
})
scores = engine.score_responses(
reference="The answer is 42",
responses=["The answer is 42", "It's 42", "42 is the answer"]
)
print(f"Individual Scores: {scores['individual_scores']}")
print(f"Weighted Score: {scores['weighted_score']:.3f}")
Comprehensive validator analysis using real Bittensor blockchain data.
async analyze_subnet(netuid: int) -> Dict[str, Any]
Performs comprehensive analysis of a subnet including validators, performance, and insights.
async monitor_subnet(netuid: int, callback=None, interval: int = 30)
Real-time monitoring of subnet activity with configurable intervals.
async export_analysis(netuid: int, output_path: str, format: str = 'json')
Export analysis results to JSON, CSV, or HTML formats.
import asyncio
from valiscore import ValidatorAnalyzer
async def comprehensive_analysis():
analyzer = ValidatorAnalyzer(network="finney")
# Analyze subnet
analysis = await analyzer.analyze_subnet(netuid=1)
# Print results
print(f"Subnet Analysis Results:")
print(f" Validators: {analysis['validator_count']}")
print(f" Active: {analysis['active_validators']}")
print(f" Total Stake: {analysis['total_stake']:.2f} TAO")
print(f" Performance: {analysis['average_performance']:.3f}")
# Show insights
for insight in analysis['insights']:
print(f" 💡 {insight}")
# Export results
await analyzer.export_analysis(netuid=1, output_path="analysis.json")
analyzer.disconnect()
asyncio.run(comprehensive_analysis())
Direct integration with Bittensor blockchain for real-time data access.
async get_subnet_info(netuid: int) -> SubnetInfo
async get_validators(netuid: int) -> List[ValidatorData]
async get_miner_responses(netuid: int) -> List[MinerResponse]
import asyncio
from valiscore import BittensorClient
async def get_subnet_data():
client = BittensorClient(network="finney")
# Get subnet information
subnet_info = await client.get_subnet_info(netuid=1)
print(f"Subnet: {subnet_info.name}")
print(f"Modality: {subnet_info.modality}")
# Get validators
validators = await client.get_validators(netuid=1)
print(f"Found {len(validators)} validators")
# Get miner responses
responses = await client.get_miner_responses(netuid=1)
print(f"Found {len(responses)} miner responses")
client.disconnect()
asyncio.run(get_subnet_data())
Model Context Protocol server for AI assistant integration.
analyze_subnet
- Analyze Bittensor subnet with real blockchain datacompare_subnets
- Compare multiple subnets side-by-sidescore_responses
- Score multiple responses using BLEU, ROUGE metricscalculate_shapley
- Calculate Shapley values for fair contribution distributionmonitor_subnet
- Real-time subnet monitoringexport_analysis
- Export results to JSON, CSV, HTML formatsimport asyncio
from mcp import ClientSession, StdioServerParameters
async def mcp_example():
async with ClientSession(
StdioServerParameters(
command="valiscore-cli",
args=["mcp-server"]
)
) as session:
# List available tools
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
# Analyze a subnet
result = await session.call_tool(
"analyze_subnet",
{"subnet_id": 1, "network": "finney"}
)
print(f"Analysis result: {result.content[0].text}")
asyncio.run(mcp_example())
import asyncio
from valiscore import SubnetComparison
async def compare_subnets():
comparison = SubnetComparison(network="finney")
# Compare text prompting (1) and image generation (2) subnets
results = await comparison.compare_subnets([1, 2])
print("🏆 Performance Ranking:")
for subnet_name, score in results['comparison_metrics']['performance_ranking']:
print(f" {subnet_name}: {score:.3f}")
comparison.disconnect()
asyncio.run(compare_subnets())
import asyncio
from valiscore import ValidatorAnalyzer
async def monitor_subnet():
analyzer = ValidatorAnalyzer(network="finney")
async def callback(analysis):
print(f"🔄 Update: {analysis['validator_count']} validators, "
f"Performance: {analysis['average_performance']:.3f}")
# Monitor subnet 1 every 30 seconds
await analyzer.monitor_subnet(netuid=1, callback=callback, interval=30)
asyncio.run(monitor_subnet())