Spaces:
Sleeping
Sleeping
Commit
·
ab063cf
1
Parent(s):
32e1e2e
reorganizes validator app
Browse files- server.py +25 -21
- validators/__init__.py +2 -2
- validators/base.py +2 -2
- validators/sn1_validator_wrapper.py +2 -2
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
|
| 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, *
|
| 62 |
-
super().__init__(*
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 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,
|
| 2 |
-
from sn1_validator_wrapper import
|
|
|
|
| 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
|
| 27 |
@abstractmethod
|
| 28 |
async def query_validator(self, params:QueryValidatorParams) -> Response:
|
| 29 |
pass
|
| 30 |
|
| 31 |
|
| 32 |
-
class MockValidator(
|
| 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,
|
| 12 |
from aiohttp.web_response import Response, StreamResponse
|
| 13 |
from deprecated import deprecated
|
| 14 |
|
| 15 |
-
class
|
| 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 |
|