christopi commited on
Commit
0cb164d
·
1 Parent(s): f6874a2

feat: implement subnet metagraphn endpoint

Browse files
services/dashboard/metagraph_api_server.py CHANGED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import bittensor as bt
2
+ import uvicorn
3
+ from fastapi import FastAPI
4
+ from typing import List, Dict, Any
5
+ from dataclasses import dataclass, field
6
+ from vidaio_subnet_core import CONFIG
7
+
8
+ config = CONFIG.bandwidth
9
+ threshold = config.min_stake
10
+
11
+ @dataclass
12
+ class MinerInfo:
13
+ miners: List[Dict[str, Any]] = field(default_factory=list)
14
+
15
+ def append(self, miner_uid, miner_hotkey, trust, incentive, emission, daily_reward):
16
+ self.miners.append({
17
+ "miner_uid": int(miner_uid),
18
+ "miner_hotkey": miner_hotkey,
19
+ "trust": float(trust),
20
+ "incentive": float(incentive),
21
+ "emission": float(emission),
22
+ "daily_reward": float(daily_reward)
23
+ })
24
+
25
+ def to_dict(self):
26
+ return {
27
+ "miners": self.miners
28
+ }
29
+
30
+ app = FastAPI()
31
+
32
+ def get_filtered_miners(threshold=threshold):
33
+ miner_info = MinerInfo()
34
+ subtensor = bt.subtensor()
35
+ metagraph = subtensor.metagraph(netuid=85)
36
+
37
+ incentives = metagraph.I
38
+ trusts = metagraph.T
39
+ emissions = metagraph.E
40
+ hotkeys = metagraph.hotkeys
41
+ stakes = metagraph.S
42
+ uids = metagraph.uids
43
+ daily_rewards = emissions * 20
44
+
45
+ for uid, incentive, trust, emission, hotkey, stake, daily_reward in zip(
46
+ uids, incentives, trusts, emissions, hotkeys, stakes, daily_rewards
47
+ ):
48
+ if stake < threshold:
49
+ miner_info.append(
50
+ miner_uid=uid,
51
+ miner_hotkey=hotkey,
52
+ trust=trust,
53
+ incentive=incentive,
54
+ emission=emission,
55
+ daily_reward=daily_reward
56
+ )
57
+
58
+ return miner_info
59
+
60
+ @app.get("/miner_info")
61
+ def get_miner_info():
62
+
63
+ miner_info = get_filtered_miners()
64
+ return miner_info.to_dict()
65
+
66
+ if __name__ == "__main__":
67
+ host = config.host
68
+ port = config.port
69
+ uvicorn.run(app, host=host, port=port)
services/dashboard/model.py CHANGED
@@ -1,6 +1,6 @@
1
- from typing import List
2
  from dataclasses import dataclass
3
- from datetime import datetime
 
4
 
5
  @dataclass
6
  class MinerData:
@@ -59,3 +59,26 @@ class MinerData:
59
  "task_url": self.task_urls,
60
  "processed_url": self.processed_urls
61
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from dataclasses import dataclass
2
+ from dataclasses import dataclass
3
+ from typing import List, Dict, Any
4
 
5
  @dataclass
6
  class MinerData:
 
59
  "task_url": self.task_urls,
60
  "processed_url": self.processed_urls
61
  }
62
+
63
+ @dataclass
64
+ class MinerInfo:
65
+ """
66
+ Class representing information about a miner.
67
+ """
68
+ miner_uid: int
69
+ miner_hotkey: str
70
+ trust: float
71
+ incentive: float
72
+ emission: float
73
+ daily_reward: float
74
+
75
+ def to_dict(self) -> Dict[str, Any]:
76
+ """Convert the MinerInfo instance to a dictionary"""
77
+ return {
78
+ "miner_uid": self.miner_uid,
79
+ "miner_hotkey": self.miner_hotkey,
80
+ "trust": self.trust,
81
+ "incentive": self.incentive,
82
+ "emission": self.emission,
83
+ "daily_reward": self.daily_reward
84
+ }
services/dashboard/server.py CHANGED
@@ -80,7 +80,7 @@ def main():
80
  "0xcdef1234567890abcdef1234567890abcdef1234"
81
  ],
82
  timestamp=datetime.now().isoformat(),
83
- request_type="image_processing",
84
  vmaf_scores=[95.2, 87.6, 92.1],
85
  pieapp_scores=[88.7, 79.3, 85.9],
86
  final_scores=[91.95, 83.45, 89.0],
 
80
  "0xcdef1234567890abcdef1234567890abcdef1234"
81
  ],
82
  timestamp=datetime.now().isoformat(),
83
+ request_type="test dashboard api",
84
  vmaf_scores=[95.2, 87.6, 92.1],
85
  pieapp_scores=[88.7, 79.3, 85.9],
86
  final_scores=[91.95, 83.45, 89.0],
vidaio_subnet_core/configs/dashboard.py CHANGED
@@ -8,4 +8,6 @@ load_dotenv()
8
  class DashboardConfig(BaseModel):
9
  endpoint: str = Field(default=os.getenv("DASHBOARD_ENDPOINT", "localhost:9001"))
10
  timeout: int = Field(default=10)
11
- max_retries: int = Field(default = 3)
 
 
 
8
  class DashboardConfig(BaseModel):
9
  endpoint: str = Field(default=os.getenv("DASHBOARD_ENDPOINT", "localhost:9001"))
10
  timeout: int = Field(default=10)
11
+ max_retries: int = Field(default = 3)
12
+ host: str = Field(default="0.0.0.0")
13
+ port: int = Field(default=29117)