Skip to content

Commit e44d6e1

Browse files
committed
Update return types for better json output
1 parent 099f8d8 commit e44d6e1

File tree

3 files changed

+33
-28
lines changed

3 files changed

+33
-28
lines changed

bittensor_cli/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4816,7 +4816,7 @@ def sudo_set(
48164816
wallet = self.wallet_ask(
48174817
wallet_name, wallet_path, wallet_hotkey, ask_for=[WO.NAME, WO.PATH]
48184818
)
4819-
result = self._run_command(
4819+
result, err_msg = self._run_command(
48204820
sudo.sudo_set_hyperparameter(
48214821
wallet,
48224822
self.initialize_chain(network),
@@ -4828,7 +4828,7 @@ def sudo_set(
48284828
)
48294829
)
48304830
if json_output:
4831-
json_console.print(json.dumps({"success": result}))
4831+
json_console.print(json.dumps({"success": result, "err_msg": err_msg}))
48324832
return result
48334833

48344834
def sudo_get(

bittensor_cli/src/commands/sudo.py

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ async def set_hyperparameter_extrinsic(
177177
wait_for_inclusion: bool = False,
178178
wait_for_finalization: bool = True,
179179
prompt: bool = True,
180-
) -> bool:
180+
) -> tuple[bool, str]:
181181
"""Sets a hyperparameter for a specific subnetwork.
182182
183183
:param subtensor: initialized SubtensorInterface object
@@ -200,13 +200,14 @@ async def set_hyperparameter_extrinsic(
200200
params=[netuid],
201201
)
202202
if subnet_owner != wallet.coldkeypub.ss58_address:
203-
err_console.print(
203+
err_msg = (
204204
":cross_mark: [red]This wallet doesn't own the specified subnet.[/red]"
205205
)
206-
return False
206+
err_console.print(err_msg)
207+
return False, err_msg
207208

208-
if not unlock_key(wallet).success:
209-
return False
209+
if not (ulw := unlock_key(wallet)).success:
210+
return False, ulw.message
210211

211212
arbitrary_extrinsic = False
212213

@@ -218,15 +219,14 @@ async def set_hyperparameter_extrinsic(
218219
)
219220
extrinsic = parameter
220221
if not arbitrary_extrinsic:
221-
err_console.print(
222-
":cross_mark: [red]Invalid hyperparameter specified.[/red]"
223-
)
224-
return False
222+
err_msg = ":cross_mark: [red]Invalid hyperparameter specified.[/red]"
223+
err_console.print(err_msg)
224+
return False, err_msg
225225
if sudo_ and prompt:
226226
if not Confirm.ask(
227227
"This hyperparam is only settable by root sudo users. If you are not, this will fail. Please confirm"
228228
):
229-
return False
229+
return False, "This hyperparam is only settable by root sudo users"
230230

231231
substrate = subtensor.substrate
232232
msg_value = value if not arbitrary_extrinsic else call_params
@@ -254,10 +254,11 @@ async def set_hyperparameter_extrinsic(
254254
]
255255

256256
if len(value) < len(non_netuid_fields):
257-
err_console.print(
257+
err_msg = (
258258
"Not enough values provided in the list for all parameters"
259259
)
260-
return False
260+
err_console.print(err_msg)
261+
return False, err_msg
261262

262263
call_params.update(
263264
{name: val for name, val in zip(non_netuid_fields, value)}
@@ -290,20 +291,20 @@ async def set_hyperparameter_extrinsic(
290291
)
291292
if not success:
292293
err_console.print(f":cross_mark: [red]Failed[/red]: {err_msg}")
293-
return False
294+
return False, err_msg
294295
elif arbitrary_extrinsic:
295296
console.print(
296297
f":white_heavy_check_mark: "
297298
f"[dark_sea_green3]Hyperparameter {parameter} values changed to {call_params}[/dark_sea_green3]"
298299
)
299-
return True
300+
return True, ""
300301
# Successful registration, final check for membership
301302
else:
302303
console.print(
303304
f":white_heavy_check_mark: "
304305
f"[dark_sea_green3]Hyperparameter {parameter} changed to {value}[/dark_sea_green3]"
305306
)
306-
return True
307+
return True, ""
307308

308309

309310
async def _get_senate_members(
@@ -619,25 +620,26 @@ async def sudo_set_hyperparameter(
619620
param_value: Optional[str],
620621
prompt: bool,
621622
json_output: bool,
622-
):
623+
) -> tuple[bool, str]:
623624
"""Set subnet hyperparameters."""
624625
is_allowed_value, value = allowed_value(param_name, param_value)
625626
if not is_allowed_value:
626-
err_console.print(
627+
err_msg = (
627628
f"Hyperparameter [dark_orange]{param_name}[/dark_orange] value is not within bounds. "
628629
f"Value is {param_value} but must be {value}"
629630
)
630-
return False
631-
success = await set_hyperparameter_extrinsic(
631+
err_console.print(err_msg)
632+
return False, err_msg
633+
success, err_msg = await set_hyperparameter_extrinsic(
632634
subtensor, wallet, netuid, param_name, value, prompt=prompt
633635
)
634636
if json_output:
635-
return success
637+
return success, err_msg
636638
if success:
637639
console.print("\n")
638640
print_verbose("Fetching hyperparameters")
639641
await get_hyperparameters(subtensor, netuid=netuid)
640-
return success
642+
return success, err_msg
641643

642644

643645
async def get_hyperparameters(

tests/e2e_tests/test_hyperparams_setting.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import json
2-
import re
32

43
from bittensor_cli.src import HYPERPARAMS
54

@@ -74,17 +73,21 @@ def test_hyperparams_setting(local_chain, wallet_setup):
7473
if isinstance(hp[key], bool):
7574
new_val = not hp[key]
7675
elif isinstance(hp[key], int):
77-
new_val = hp[key] - 1
76+
if hp[key] < 100:
77+
new_val = hp[key] + 1
78+
else:
79+
new_val = hp[key] - 1
7880
else:
7981
raise ValueError(f"Unrecognized hyperparameter value type: {key}: {hp[key]}")
8082
cmd = exec_command_alice(
8183
command="sudo",
8284
sub_command="set",
83-
extra_args=["--chain", "ws://127.0.0.1:9945", "--netuid", netuid, "--json-out", "--no-prompt",
84-
"--param", key, "--value", str(new_val)],
85+
extra_args=["--chain", "ws://127.0.0.1:9945", "--netuid", netuid, "--verbose", "--no-prompt",
86+
"--param", key, "--value", new_val],
8587
)
8688
cmd_json = json.loads(cmd.stdout)
8789
assert cmd_json["success"] is True, (
88-
cmd.stdout, cmd.stderr
90+
key, new_val, cmd.stdout, cmd_json
8991
)
9092
print(f"Successfully set hyperparameter {key} to value {new_val}")
93+
print("Successfully set hyperparameters")

0 commit comments

Comments
 (0)