Skip to content

Commit 4ed5cd5

Browse files
authored
Merge pull request #476 from opentensor/release/9.5.0
Release/9.5.0
2 parents d25de28 + 1bc62ae commit 4ed5cd5

25 files changed

+2874
-2991
lines changed

.github/workflows/e2e-subtensor-tests.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ jobs:
8888
uv venv .venv
8989
source .venv/bin/activate
9090
uv pip install .[dev]
91-
uv pip install pytest
9291
9392
- name: Download Cached Docker Image
9493
uses: actions/download-artifact@v4
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Ruff Formatter Check
2+
permissions:
3+
contents: read
4+
5+
on:
6+
pull_request:
7+
types: [opened, synchronize, reopened, edited]
8+
9+
jobs:
10+
ruff:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
python-version: ["3.9.13"]
15+
steps:
16+
- name: Checkout repository
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Python ${{ matrix.python-version }}
20+
uses: actions/setup-python@v5
21+
with:
22+
python-version: ${{ matrix.python-version }}
23+
24+
- name: Set up caching for Ruff virtual environment
25+
id: cache-ruff
26+
uses: actions/cache@v4
27+
with:
28+
path: .venv
29+
key: v2-pypi-py-ruff-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}
30+
restore-keys: |
31+
v2-pypi-py-ruff-${{ matrix.python-version }}-
32+
33+
- name: Set up Ruff virtual environment if cache is missed
34+
if: steps.cache-ruff.outputs.cache-hit != 'true'
35+
run: |
36+
python -m venv .venv
37+
.venv/bin/python -m pip install ruff==0.11.5
38+
39+
- name: Ruff format check
40+
run: |
41+
.venv/bin/ruff format --diff bittensor_cli
42+
.venv/bin/ruff format --diff tests

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## 9.5.0 /2025-06-02
4+
5+
## What's Changed
6+
* Replace PyWry by @thewhaleking in https://github.com/opentensor/btcli/pull/472
7+
* Remove fuzzywuzzy by @thewhaleking in https://github.com/opentensor/btcli/pull/473
8+
* Add ruff formatter by @thewhaleking in https://github.com/opentensor/btcli/pull/474
9+
10+
**Full Changelog**: https://github.com/opentensor/btcli/compare/v9.4.4...v9.5.0
11+
312
## 9.4.4 /2025-04-29
413

514
## What's Changed

bittensor_cli/cli.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@
6767
prompt_for_identity,
6868
validate_uri,
6969
prompt_for_subnet_identity,
70-
print_linux_dependency_message,
71-
is_linux,
7270
validate_rate_tolerance,
7371
)
7472

@@ -4875,9 +4873,6 @@ def subnets_price(
48754873
if all_netuids and not json_output:
48764874
html_output = True
48774875

4878-
if html_output and is_linux():
4879-
print_linux_dependency_message()
4880-
48814876
return self._run_command(
48824877
price.price(
48834878
self.initialize_chain(network),
@@ -5655,7 +5650,7 @@ def view_dashboard(
56555650
help="Coldkey SS58 address to view dashboard for",
56565651
),
56575652
use_wry: bool = typer.Option(
5658-
False, "--use-wry", help="Use PyWry instead of browser window"
5653+
False, "--use-wry", "--html", help="Display output in browser window."
56595654
),
56605655
save_file: bool = typer.Option(
56615656
False, "--save-file", "--save", help="Save the dashboard HTML file"
@@ -5668,12 +5663,10 @@ def view_dashboard(
56685663
Display html dashboard with subnets list, stake, and neuron information.
56695664
"""
56705665
self.verbosity_handler(quiet, verbose)
5671-
if use_wry and is_linux():
5672-
print_linux_dependency_message()
56735666

56745667
if use_wry and save_file:
5675-
print_error("Cannot save file when using PyWry.")
5676-
raise typer.Exit()
5668+
print_error("Cannot save file when using browser output.")
5669+
return
56775670

56785671
if save_file:
56795672
if not dashboard_path:
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<div class="filters-section">
2+
<div class="search-box">
3+
<input type="text" id="subnet-search" placeholder="search for name, or netuid..." onkeyup="filterSubnets()">
4+
</div>
5+
<div class="filter-toggles">
6+
<label>
7+
<input type="checkbox" id="show-verbose" onchange="toggleVerboseNumbers()">
8+
Precise Numbers
9+
</label>
10+
<label>
11+
<input type="checkbox" id="show-staked" onchange="filterSubnets()">
12+
Show Only Staked
13+
</label>
14+
<label>
15+
<input type="checkbox" id="show-tiles" onchange="toggleTileView()" checked>
16+
Tile View
17+
</label>
18+
<label class="disabled-label" title="Coming soon">
19+
<input type="checkbox" id="live-mode" disabled>
20+
Live Mode (coming soon)
21+
</label>
22+
</div>
23+
</div>
24+
<div id="subnet-tiles-container" class="subnet-tiles-container"></div>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{#
2+
vars:
3+
wallet_info.coldkey, truncated_coldkey, wallet_info.balance, root_symbol_html, wallet_info.total_ideal_stake_value,
4+
slippage_percentage, wallet_info.total_slippage_value, block_number
5+
#}
6+
7+
<div class="header">
8+
<meta charset="UTF-8">
9+
<div class="wallet-info">
10+
<span class="wallet-name">{{ wallet_info.name }}</span>
11+
<div class="wallet-address-container" onclick="copyToClipboard('{{ coldkey }}', this)">
12+
<span class="wallet-address" title="Click to copy">{{ truncated_coldkey }}}</span>
13+
<span class="copy-indicator">Copy</span>
14+
</div>
15+
</div>
16+
<div class="stake-metrics">
17+
<div class="stake-metric">
18+
<span class="metric-label">Block</span>
19+
<span class="metric-value" style="color: #FF9900;">{{ block_number }}</span>
20+
</div>
21+
<div class="stake-metric">
22+
<span class="metric-label">Balance</span>
23+
<span class="metric-value">{{ "%.4f"|format(wallet_info.balance) }} {{ root_symbol_html }}</span>
24+
</div>
25+
<div class="stake-metric">
26+
<span class="metric-label">Total Stake Value</span>
27+
<span class="metric-value">{{ "%.4f"|format(wallet_info.total_ideal_stake_value) }} {{ root_symbol_html }}</span>
28+
</div>
29+
<div class="stake-metric">
30+
<span class="metric-label">Slippage Impact</span>
31+
<span class="metric-value slippage-value">
32+
{{ "%.2f"|format(slippage_percentage) }}% <span class="slippage-detail">({{ "%.4f"|format(wallet_info.total_slippage_value) }} {{ root_symbol_html }})</span>
33+
</span>
34+
</div>
35+
</div>
36+
</div>
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<div id="neuron-detail-container" style="display: none;">
2+
<div class="neuron-detail-header">
3+
<button class="back-button neuron-detail-back" onclick="closeNeuronDetails()">&larr; Back</button>
4+
</div>
5+
<div class="neuron-detail-content">
6+
<div class="neuron-info-top">
7+
<h2 class="neuron-name" id="neuron-name"></h2>
8+
<div class="neuron-keys">
9+
<div class="hotkey-label">
10+
<span style="color: #FF9900;">Hotkey:</span>
11+
<span id="neuron-hotkey" class="truncated-address"></span>
12+
</div>
13+
<div class="coldkey-label">
14+
<span style="color: #FF9900;">Coldkey:</span>
15+
<span id="neuron-coldkey" class="truncated-address"></span>
16+
</div>
17+
</div>
18+
</div>
19+
<div class="neuron-cards-container">
20+
<!-- First row: Stakes, Dividends, Incentive, Emissions -->
21+
<div class="neuron-metrics-row">
22+
<div class="metric-card">
23+
<div class="metric-label">Stake Weight</div>
24+
<div id="neuron-stake-total" class="metric-value formatted-number"
25+
data-value="0" data-symbol=""></div>
26+
</div>
27+
28+
<div class="metric-card">
29+
<div class="metric-label">Stake (Alpha)</div>
30+
<div id="neuron-stake-token" class="metric-value formatted-number"
31+
data-value="0" data-symbol=""></div>
32+
</div>
33+
34+
<div class="metric-card">
35+
<div class="metric-label">Stake (Root)</div>
36+
<div id="neuron-stake-root" class="metric-value formatted-number"
37+
data-value="0" data-symbol="&#x03C4;"></div>
38+
</div>
39+
40+
<div class="metric-card">
41+
<div class="metric-label">Dividends</div>
42+
<div id="neuron-dividends" class="metric-value formatted-number"
43+
data-value="0" data-symbol=""></div>
44+
</div>
45+
46+
<div class="metric-card">
47+
<div class="metric-label">Incentive</div>
48+
<div id="neuron-incentive" class="metric-value formatted-number"
49+
data-value="0" data-symbol=""></div>
50+
</div>
51+
52+
<div class="metric-card">
53+
<div class="metric-label">Emissions</div>
54+
<div id="neuron-emissions" class="metric-value formatted-number"
55+
data-value="0" data-symbol=""></div>
56+
</div>
57+
</div>
58+
59+
<!-- Second row: Rank, Trust, Pruning Score, Validator Permit, Consensus, Last Update -->
60+
<div class="neuron-metrics-row">
61+
<div class="metric-card">
62+
<div class="metric-label">Rank</div>
63+
<div id="neuron-rank" class="metric-value"></div>
64+
</div>
65+
66+
<div class="metric-card">
67+
<div class="metric-label">Trust</div>
68+
<div id="neuron-trust" class="metric-value"></div>
69+
</div>
70+
71+
<div class="metric-card">
72+
<div class="metric-label">Pruning Score</div>
73+
<div id="neuron-pruning-score" class="metric-value"></div>
74+
</div>
75+
76+
<div class="metric-card">
77+
<div class="metric-label">Validator Permit</div>
78+
<div id="neuron-validator-permit" class="metric-value"></div>
79+
</div>
80+
81+
<div class="metric-card">
82+
<div class="metric-label">Consensus</div>
83+
<div id="neuron-consensus" class="metric-value"></div>
84+
</div>
85+
86+
<div class="metric-card">
87+
<div class="metric-label">Last Update</div>
88+
<div id="neuron-last-update" class="metric-value"></div>
89+
</div>
90+
</div>
91+
92+
<!-- Third row: Reg Block, IP Info, Active -->
93+
<div class="neuron-metrics-row last-row">
94+
<div class="metric-card">
95+
<div class="metric-label">Reg Block</div>
96+
<div id="neuron-reg-block" class="metric-value"></div>
97+
</div>
98+
99+
<div class="metric-card">
100+
<div class="metric-label">IP Info</div>
101+
<div id="neuron-ipinfo" class="metric-value"></div>
102+
</div>
103+
104+
<div class="metric-card">
105+
<div class="metric-label">Active</div>
106+
<div id="neuron-active" class="metric-value"></div>
107+
</div>
108+
</div>
109+
</div>
110+
</div>
111+
</div>

0 commit comments

Comments
 (0)