diff --git a/skynet/db/functions.py b/skynet/db/functions.py
index 08067ae..3a8b760 100644
--- a/skynet/db/functions.py
+++ b/skynet/db/functions.py
@@ -41,9 +41,9 @@ CREATE TABLE IF NOT EXISTS skynet.user_config(
step INT NOT NULL,
width INT NOT NULL,
height INT NOT NULL,
- seed BIGINT,
- guidance REAL NOT NULL,
- strength REAL NOT NULL,
+ seed NUMERIC,
+ guidance DECIMAL NOT NULL,
+ strength DECIMAL NOT NULL,
upscaler VARCHAR(128)
);
ALTER TABLE skynet.user_config
diff --git a/skynet/dgpu.py b/skynet/dgpu.py
index a4303e4..ce29b27 100644
--- a/skynet/dgpu.py
+++ b/skynet/dgpu.py
@@ -325,7 +325,7 @@ async def open_dgpu_node(
binary = await get_input_data(req['binary_data'])
hash_str = (
- str(await get_user_nonce(req['user']))
+ str(req['nonce'])
+
req['body']
+
diff --git a/skynet/frontend/telegram.py b/skynet/frontend/telegram.py
index 3a9c964..320f49f 100644
--- a/skynet/frontend/telegram.py
+++ b/skynet/frontend/telegram.py
@@ -7,8 +7,9 @@ import logging
import asyncio
import traceback
+from decimal import Decimal
from hashlib import sha256
-from datetime import datetime
+from datetime import datetime, timedelta
import asks
import docker
@@ -46,7 +47,7 @@ def build_redo_menu():
return inline_keyboard
-def prepare_metainfo_caption(tguser, worker: str, meta: dict) -> str:
+def prepare_metainfo_caption(tguser, worker: str, reward: str, meta: dict) -> str:
prompt = meta["prompt"]
if len(prompt) > 256:
prompt = prompt[:256]
@@ -56,7 +57,9 @@ def prepare_metainfo_caption(tguser, worker: str, meta: dict) -> str:
else:
user = f'{tguser.first_name} id: {tguser.id}'
- meta_str = f'by {user} performed by {worker}\n'
+ meta_str = f'by {user}'
+ meta_str += f'performed by {worker}\n'
+ meta_str += f'reward: {reward}\n'
meta_str += f'prompt:
{prompt}\n'
meta_str += f'seed: {meta["seed"]}
\n'
@@ -68,7 +71,7 @@ def prepare_metainfo_caption(tguser, worker: str, meta: dict) -> str:
if meta['upscaler']:
meta_str += f'upscaler: {meta["upscaler"]}
\n'
- meta_str += f'Made with Skynet {VERSION}\n'
+ meta_str += f'Made with Skynet v{VERSION}\n'
meta_str += f'JOIN THE SWARM: @skynetgpu'
return meta_str
@@ -78,7 +81,8 @@ def generate_reply_caption(
params: dict,
ipfs_hash: str,
tx_hash: str,
- worker: str
+ worker: str,
+ reward: str
):
ipfs_link = hlink(
'Get your image on IPFS',
@@ -89,7 +93,7 @@ def generate_reply_caption(
f'http://test1.us.telos.net:42001/v2/explore/transaction/{tx_hash}'
)
- meta_info = prepare_metainfo_caption(tguser, worker, params)
+ meta_info = prepare_metainfo_caption(tguser, worker, reward, params)
final_msg = '\n'.join([
'Worker finished your task!',
@@ -132,27 +136,36 @@ async def work_request(
binary_data: str = ''
):
if params['seed'] == None:
- params['seed'] = random.randint(0, 9e18)
+ params['seed'] = random.randint(0, 0xFFFFFFFF)
+
+ sanitized_params = {}
+ for key, val in params.items():
+ if isinstance(val, Decimal):
+ val = int(val)
+
+ sanitized_params[key] = val
body = json.dumps({
'method': 'diffuse',
- 'params': params
+ 'params': sanitized_params
})
request_time = datetime.now().isoformat()
+ reward = '20.0000 GPU'
ec, out = cleos.push_action(
- 'telos.gpu', 'enqueue', [account, body, binary_data, '20.0000 GPU'], f'{account}@{permission}'
+ 'telos.gpu', 'enqueue', [account, body, binary_data, reward], f'{account}@{permission}'
)
out = collect_stdout(out)
if ec != 0:
await bot.reply_to(message, out)
return
- nonce = await get_user_nonce(cleos, account)
- request_hash = sha256(
- (str(nonce) + body + binary_data).encode('utf-8')).hexdigest().upper()
+ request_id, nonce = out.split(':')
- request_id = int(out)
+ request_hash = sha256(
+ (nonce + body + binary_data).encode('utf-8')).hexdigest().upper()
+
+ request_id = int(request_id)
logging.info(f'{request_id} enqueued.')
config = await get_global_config(cleos)
@@ -177,6 +190,7 @@ async def work_request(
data = actions[0]['act']['data']
ipfs_hash = data['ipfs_hash']
worker = data['worker']
+ logging.info('Found matching submit!')
break
await asyncio.sleep(1)
@@ -190,7 +204,7 @@ async def work_request(
resp = await get_ipfs_file(ipfs_link)
caption = generate_reply_caption(
- user, params, ipfs_hash, tx_hash, worker)
+ user, params, ipfs_hash, tx_hash, worker, reward)
if not resp or resp.status_code != 200:
logging.error(f'couldn\'t get ipfs hosted image at {ipfs_link}!')
@@ -469,6 +483,19 @@ async def run_skynet_telegram(
binary_data=binary
)
+ @bot.message_handler(commands=['queue'])
+ async def queue(message):
+ an_hour_ago = datetime.now() - timedelta(hours=1)
+ queue = await cleos.aget_table(
+ 'telos.gpu', 'telos.gpu', 'queue',
+ index_position=2,
+ key_type='i64',
+ sort='desc',
+ lower_bound=int(an_hour_ago.timestamp())
+ )
+ await bot.reply_to(
+ message, f'Total requests on skynet queue: {len(queue)}')
+
@bot.message_handler(commands=['redo'])
async def redo(message):
await _redo(message)
@@ -494,6 +521,7 @@ async def run_skynet_telegram(
async def user_stats(message):
user = message.from_user.id
+ await db_call('get_or_create_user', user.id)
generated, joined, role = await db_call('get_user_stats', user)
stats_str = f'generated: {generated}\n'