pedroferreira commited on
Commit
ab063cf
·
1 Parent(s): 32e1e2e

reorganizes validator app

Browse files
server.py CHANGED
@@ -3,7 +3,7 @@ import utils
3
  import bittensor as bt
4
  from aiohttp import web
5
  from aiohttp.web_response import Response
6
- from validators import S1ValidatorWrapper, QueryValidatorParams
7
  from middlewares import api_key_middleware, json_parsing_middleware
8
 
9
  """
@@ -34,9 +34,6 @@ EXPECTED_ACCESS_KEY="hey-michal" python app.py --neuron.model_id mock --wallet.n
34
  ```
35
  add --mock to test the echo stream
36
  """
37
-
38
- validator = None
39
-
40
  @api_key_middleware
41
  @json_parsing_middleware
42
  async def chat(request: web.Request) -> Response:
@@ -47,6 +44,10 @@ async def chat(request: web.Request) -> Response:
47
  params = QueryValidatorParams.from_dict(request_data)
48
  # TODO: SET STREAM AS DEFAULT
49
  stream = request_data.get('stream', False)
 
 
 
 
50
  response = await validator.query_validator(params, stream=stream)
51
  return response
52
 
@@ -57,36 +58,39 @@ async def echo_stream(request, request_data):
57
  request_data = request['data']
58
  return await utils.echo_stream(request_data)
59
 
 
60
  class ValidatorApplication(web.Application):
61
- def __init__(self, *a, **kw):
62
- super().__init__(*a, **kw)
 
 
 
 
63
  self.middlewares.append(api_key_middleware)
64
  self.middlewares.append(json_parsing_middleware)
65
-
 
 
 
 
66
  # TODO: Enable rewarding and other features
67
-
68
-
69
- validator_app = ValidatorApplication()
70
- validator_app.add_routes([
71
- web.post('/chat/', chat),
72
- web.post('/echo/', echo_stream)
73
- ])
74
-
75
- bt.logging.info("Starting validator application.")
76
- bt.logging.info(validator_app)
77
-
78
-
79
  def main(run_aio_app=True, test=False) -> None:
80
  loop = asyncio.get_event_loop()
81
  port = 10000
82
  if run_aio_app:
 
 
 
 
 
83
  try:
84
  web.run_app(validator_app, port=port, loop=loop)
85
  except KeyboardInterrupt:
86
- bt.logging.warning("Keyboard interrupt detected. Exiting validator.")
87
  finally:
88
  pass
89
 
90
  if __name__ == "__main__":
91
- validator = S1ValidatorWrapper()
92
  main()
 
3
  import bittensor as bt
4
  from aiohttp import web
5
  from aiohttp.web_response import Response
6
+ from validators import S1ValidatorAPI, QueryValidatorParams, ValidatorAPI
7
  from middlewares import api_key_middleware, json_parsing_middleware
8
 
9
  """
 
34
  ```
35
  add --mock to test the echo stream
36
  """
 
 
 
37
  @api_key_middleware
38
  @json_parsing_middleware
39
  async def chat(request: web.Request) -> Response:
 
44
  params = QueryValidatorParams.from_dict(request_data)
45
  # TODO: SET STREAM AS DEFAULT
46
  stream = request_data.get('stream', False)
47
+
48
+ # Access the validator from the application context
49
+ validator: ValidatorAPI = request.app['validator']
50
+
51
  response = await validator.query_validator(params, stream=stream)
52
  return response
53
 
 
58
  request_data = request['data']
59
  return await utils.echo_stream(request_data)
60
 
61
+
62
  class ValidatorApplication(web.Application):
63
+ def __init__(self, validator_instance=None, *args, **kwargs):
64
+ super().__init__(*args, **kwargs)
65
+
66
+ self['validator'] = validator_instance if validator_instance else S1ValidatorAPI()
67
+
68
+ # Add middlewares to application
69
  self.middlewares.append(api_key_middleware)
70
  self.middlewares.append(json_parsing_middleware)
71
+
72
+ self.add_routes([
73
+ web.post('/chat/', chat),
74
+ web.post('/echo/', echo_stream)
75
+ ])
76
  # TODO: Enable rewarding and other features
77
+
78
+
 
 
 
 
 
 
 
 
 
 
79
  def main(run_aio_app=True, test=False) -> None:
80
  loop = asyncio.get_event_loop()
81
  port = 10000
82
  if run_aio_app:
83
+ # Instantiate the application with the actual validator
84
+ bt.logging.info("Starting validator application.")
85
+ validator_app = ValidatorApplication()
86
+ bt.logging.success(f'Validator app initialized successfully', validator_app)
87
+
88
  try:
89
  web.run_app(validator_app, port=port, loop=loop)
90
  except KeyboardInterrupt:
91
+ print("Keyboard interrupt detected. Exiting validator.")
92
  finally:
93
  pass
94
 
95
  if __name__ == "__main__":
 
96
  main()
validators/__init__.py CHANGED
@@ -1,2 +1,2 @@
1
- from base import QueryValidatorParams, ValidatorWrapper, MockValidator
2
- from sn1_validator_wrapper import S1ValidatorWrapper
 
1
+ from base import QueryValidatorParams, ValidatorAPI, MockValidator
2
+ from sn1_validator_wrapper import S1ValidatorAPI
validators/base.py CHANGED
@@ -23,13 +23,13 @@ class QueryValidatorParams:
23
  prefer=data.get('prefer', 'longest')
24
  )
25
 
26
- class ValidatorWrapper(ABC):
27
  @abstractmethod
28
  async def query_validator(self, params:QueryValidatorParams) -> Response:
29
  pass
30
 
31
 
32
- class MockValidator(ValidatorWrapper):
33
  async def query_validator(self, params:QueryValidatorParams) -> Response:
34
  ...
35
 
 
23
  prefer=data.get('prefer', 'longest')
24
  )
25
 
26
+ class ValidatorAPI(ABC):
27
  @abstractmethod
28
  async def query_validator(self, params:QueryValidatorParams) -> Response:
29
  pass
30
 
31
 
32
+ class MockValidator(ValidatorAPI):
33
  async def query_validator(self, params:QueryValidatorParams) -> Response:
34
  ...
35
 
validators/sn1_validator_wrapper.py CHANGED
@@ -8,11 +8,11 @@ from prompting.validator import Validator
8
  from prompting.utils.uids import get_random_uids
9
  from prompting.protocol import PromptingSynapse, StreamPromptingSynapse
10
  from prompting.dendrite import DendriteResponseEvent
11
- from base import QueryValidatorParams, ValidatorWrapper
12
  from aiohttp.web_response import Response, StreamResponse
13
  from deprecated import deprecated
14
 
15
- class S1ValidatorWrapper(ValidatorWrapper):
16
  def __init__(self):
17
  self.validator = Validator()
18
 
 
8
  from prompting.utils.uids import get_random_uids
9
  from prompting.protocol import PromptingSynapse, StreamPromptingSynapse
10
  from prompting.dendrite import DendriteResponseEvent
11
+ from base import QueryValidatorParams, ValidatorAPI
12
  from aiohttp.web_response import Response, StreamResponse
13
  from deprecated import deprecated
14
 
15
+ class S1ValidatorAPI(ValidatorAPI):
16
  def __init__(self):
17
  self.validator = Validator()
18