2
2
import bittensor as bt
3
3
import numpy as np
4
4
import random
5
+ import requests
5
6
import threading
6
7
import time
7
8
27
28
SeoChallenge ,
28
29
BalancedChallenge ,
29
30
)
31
+ from webgenie .datasets .central_dataset import (
32
+ CentralDataset ,
33
+ )
30
34
from webgenie .helpers .htmls import preprocess_html , is_valid_resources
31
35
from webgenie .helpers .images import image_debug_str
32
36
from webgenie .helpers .llms import set_seed
45
49
from webgenie .tasks .image_task_generator import ImageTaskGenerator
46
50
from webgenie .utils .uids import get_all_available_uids
47
51
48
-
49
52
class GenieValidator :
50
53
def __init__ (self , neuron : BaseNeuron ):
51
54
self .neuron = neuron
@@ -57,6 +60,17 @@ def __init__(self, neuron: BaseNeuron):
57
60
self .task_generators = [
58
61
(ImageTaskGenerator (), 1.0 ), # currently only image task generator is supported
59
62
]
63
+ self .init_signature ()
64
+
65
+ def init_signature (self ):
66
+ """Get signature for central database authentication using wallet"""
67
+ try :
68
+ message = b"I am the owner of the wallet"
69
+ CentralDataset .SIGNATURE = self .neuron .wallet .hotkey .sign (message ).hex ()
70
+ CentralDataset .HOTKEY = self .neuron .wallet .hotkey .ss58_address
71
+ except Exception as e :
72
+ bt .logging .error (f"Error initializing signature: { e } " )
73
+ raise e
60
74
61
75
async def query_miners (self ):
62
76
try :
@@ -82,8 +96,8 @@ async def query_miners(self):
82
96
available_challenges_classes = [
83
97
AccuracyChallenge ,
84
98
SeoChallenge ,
99
+ AccuracyChallenge ,
85
100
SeoChallenge ,
86
- BalancedChallenge ,
87
101
]
88
102
89
103
with self .lock :
@@ -249,7 +263,7 @@ async def score(self):
249
263
except Exception as e :
250
264
bt .logging .error (f"Error storing results to database: { e } " )
251
265
252
- async def synthensize_task (self ):
266
+ async def synthensize_task (self , session : int , task_number : int ):
253
267
try :
254
268
with self .lock :
255
269
if len (self .synthetic_tasks ) > MAX_SYNTHETIC_TASK_SIZE :
@@ -263,23 +277,43 @@ async def synthensize_task(self):
263
277
weights = [weight for _ , weight in self .task_generators ],
264
278
)[0 ]
265
279
266
- task , synapse = await task_generator .generate_task ()
280
+ task , synapse = await task_generator .generate_task (session , task_number )
267
281
with self .lock :
268
282
self .synthetic_tasks .append ((task , synapse ))
269
283
270
284
bt .logging .success (f"Successfully generated task for { task .src } " )
271
-
272
285
except Exception as e :
273
286
bt .logging .error (f"Error in synthensize_task: { e } " )
274
287
raise e
275
288
276
289
def get_seed (self , session : int , task_index : int , hash_cache : dict = {}) -> int :
277
- if session not in hash_cache :
278
- session_start_block = session * SESSION_WINDOW_BLOCKS
279
- subtensor = self .neuron .subtensor
280
- block_hash = subtensor .get_block_hash (session_start_block )
281
- hash_cache [session ] = int (block_hash [- 15 :], 16 )
282
- return int (hash_cache [session ] + task_index )
290
+ try :
291
+ method = "GET"
292
+ url = "http://209.126.9.130:18000/api/v1/task/seed"
293
+ response = requests .request (method , url , params = {"session" : session , "task_number" : task_index })
294
+ if response .status_code == 200 :
295
+ response_json = response .json ()
296
+ success = response_json ["success" ]
297
+ if not success :
298
+ raise Exception (f"Failed to get seed from API: { seed } " )
299
+
300
+ seed = response_json ["seed" ], response_json ["task_id_seed" ]
301
+
302
+ if seed is None :
303
+ raise Exception (f"Seed is None" )
304
+ return seed
305
+ else :
306
+ raise Exception (f"Failed to get seed from API: { response .status_code } " )
307
+
308
+ except Exception as e :
309
+ raise e
310
+
311
+ # if session not in hash_cache:
312
+ # session_start_block = session * SESSION_WINDOW_BLOCKS
313
+ # subtensor = self.neuron.subtensor
314
+ # block_hash = subtensor.get_block_hash(session_start_block)
315
+ # hash_cache[session] = int(block_hash[-15:], 16)
316
+ # return int(hash_cache[session] + task_index)
283
317
284
318
async def forward (self ):
285
319
try :
@@ -290,25 +324,30 @@ async def forward(self):
290
324
else :
291
325
task_index = self .neuron .score_manager .number_of_tasks
292
326
327
+ session = int (session )
328
+ task_index = int (task_index )
329
+
293
330
if task_index >= MAX_NUMBER_OF_TASKS_PER_SESSION :
294
331
return
295
332
333
+
296
334
bt .logging .info (f"Forwarding task #{ task_index } in session #{ session } " )
297
- seed = self .get_seed (session , task_index )
335
+ # seed, task_id_seed = self.get_seed(session, task_index)
298
336
299
- bt .logging .info (f"Init random with seed: { seed } " )
300
- random .seed (seed )
301
- set_seed (seed )
337
+ # bt.logging.info(f"Random seed: {seed} | task_id_seed: {task_id_seed }")
338
+ # random.seed(seed)
339
+ # set_seed(seed)
302
340
303
- while True :
304
- try :
305
- await self .synthensize_task ()
306
- break
307
- except Exception as e :
308
- bt .logging .error (
309
- f"Error in synthensize_task: { e } "
310
- f"Retrying..."
311
- )
341
+ try :
342
+ await self .synthensize_task (session , task_index )
343
+ task , synapse = self .synthetic_tasks [- 1 ]
344
+ task .task_id = f"{ session } _{ task_index } "
345
+ synapse .task_id = task .task_id
346
+ except Exception as e :
347
+ bt .logging .error (
348
+ f"Error in synthensize_task: { e } "
349
+ )
350
+ return
312
351
313
352
await self .query_miners ()
314
353
await self .score ()
0 commit comments