diff --git a/dvm.py b/dvm.py index 91071f9..f93f905 100644 --- a/dvm.py +++ b/dvm.py @@ -64,8 +64,8 @@ class DVM: keys = self.keys def handle(self, relay_url, nostr_event): - print(f"[Nostr] Received new NIP90 Job Request from {relay_url}: {nostr_event.as_json()}") if EventDefinitions.KIND_NIP90_EXTRACT_TEXT <= nostr_event.kind() <= EventDefinitions.KIND_NIP90_GENERIC: + print("[" + self.dvm_config.NIP89.name + "] " + f"Received new NIP90 Job Request from {relay_url}: {nostr_event.as_json()}") handle_nip90_job_event(nostr_event) elif nostr_event.kind() == EventDefinitions.KIND_ZAP: handle_zap(nostr_event) @@ -74,9 +74,7 @@ class DVM: return def handle_nip90_job_event(nip90_event): - print(str(self.dvm_config.DB)) user = get_or_add_user(self.dvm_config.DB, nip90_event.pubkey().to_hex()) - print("got user") task_supported, task, duration = check_task_is_supported(nip90_event, client=self.client, get_duration=(not user.iswhitelisted), config=self.dvm_config) @@ -84,7 +82,7 @@ class DVM: if user.isblacklisted: send_job_status_reaction(nip90_event, "error", client=self.client, config=self.dvm_config) - print("[Nostr] Request by blacklisted user, skipped") + print("[" + self.dvm_config.NIP89.name + "] Request by blacklisted user, skipped") elif task_supported: print("Received new Task: " + task) @@ -98,7 +96,7 @@ class DVM: task_is_free = True if user.iswhitelisted or task_is_free: - print("[Nostr] Free or Whitelisted for task " + task + ". Starting processing..") + print("[" + self.dvm_config.NIP89.name + "] Free or Whitelisted for task " + task + ". Starting processing..") send_job_status_reaction(nip90_event, "processing", True, 0, client=self.client, config=self.dvm_config) do_work(nip90_event, is_from_bot=False) @@ -109,7 +107,7 @@ class DVM: if tag.as_vec()[0] == 'bid': bid = int(tag.as_vec()[1]) - print("[Nostr][Payment required] New Nostr " + task + " Job event: " + nip90_event.as_json()) + print("[" + self.dvm_config.NIP89.name + "] Payment required: New Nostr " + task + " Job event: " + nip90_event.as_json()) if bid > 0: bid_offer = int(bid / 1000) if bid_offer >= amount: @@ -118,7 +116,7 @@ class DVM: client=self.client, config=self.dvm_config) else: # If there is no bid, just request server rate from user - print("[Nostr] Requesting payment for Event: " + nip90_event.id().to_hex()) + print("[" + self.dvm_config.NIP89.name + "] Requesting payment for Event: " + nip90_event.id().to_hex()) send_job_status_reaction(nip90_event, "payment-required", False, amount, client=self.client, config=self.dvm_config) else: @@ -177,7 +175,7 @@ class DVM: config=self.dvm_config) if job_event is not None and task_supported: if amount <= invoice_amount: - print("[Nostr] Payment-request fulfilled...") + print("[" + self.dvm_config.NIP89.name + "] Payment-request fulfilled...") send_job_status_reaction(job_event, "processing", client=self.client, config=self.dvm_config) indices = [i for i, x in enumerate(self.job_list) if @@ -204,7 +202,7 @@ class DVM: send_job_status_reaction(job_event, "payment-rejected", False, invoice_amount, client=self.client, config=self.dvm_config) - print("[Nostr] Invoice was not paid sufficiently") + print("[" + self.dvm_config.NIP89.name + "] Invoice was not paid sufficiently") elif zapped_event.kind() in EventDefinitions.ANY_RESULT: print("Someone zapped the result of an exisiting Task. Nice") @@ -302,7 +300,7 @@ class DVM: response_kind = originalevent.kind() + 1000 event = EventBuilder(response_kind, str(content), replytags).to_event(key) send_event(event, key=key) - print("[Nostr] " + str(response_kind) + " Job Response event sent: " + event.as_json()) + print("[" + self.dvm_config.NIP89.name + "] " + str(response_kind) + " Job Response event sent: " + event.as_json()) return event.as_json() def respond_to_error(content, originaleventstr, is_from_bot=False, dvm_key=None): @@ -411,7 +409,7 @@ class DVM: status=status, result="", is_processed=False, bolt11=bolt11, payment_hash=payment_hash, expires=expires, from_bot=False)) - print(str(self.job_list)) + #print(str(self.job_list)) if status == "payment-required" or status == "payment-rejected" or ( status == "processing" and not is_paid) or ( status == "success" and not is_paid): @@ -428,8 +426,7 @@ class DVM: event = EventBuilder(EventDefinitions.KIND_FEEDBACK, reaction, tags).to_event(keys) send_event(event, key=keys) - print( - "[Nostr] Sent Kind " + str( + print("[" + self.dvm_config.NIP89.name + "]" + ": Sent Kind " + str( EventDefinitions.KIND_FEEDBACK) + " Reaction: " + status + " " + event.as_json()) return event.as_json() diff --git a/tasks/imagegenerationsdxl.py b/tasks/imagegenerationsdxl.py index 1e5199a..26feb27 100644 --- a/tasks/imagegenerationsdxl.py +++ b/tasks/imagegenerationsdxl.py @@ -18,7 +18,7 @@ Outputs: An url to an Image class ImageGenerationSDXL(DVMTaskInterface): - NAME: str + NAME: str = "" KIND: int = EventDefinitions.KIND_NIP90_GENERATE_IMAGE TASK: str = "text-to-image" COST: int = 5 @@ -109,6 +109,16 @@ class ImageGenerationSDXL(DVMTaskInterface): prompt = prompt.replace(";", ",") request_form['data'] = '[{"id":"input_prompt","type":"input","src":"request:text","data":"' + prompt + '","active":"True"},{"id":"negative_prompt","type":"input","src":"request:text","data":"' + negative_prompt + '","active":"True"},{"id":"output_image","type":"output","src":"request:image","active":"True"}]' + request_form['options'] = ('[{"model":" + ' + model + + '","ratio":"' + str(ratio_width) + ':' + str(ratio_height) + + '","width":"' + str(width) + ':' + str(height) + + '","strength":"' + str(strength) + + '","guidance_scale":"' + str(guidance_scale) + + '","lora":"' + str(lora) + + '","lora_weight":"' + str(lora_weight) + + '"}]') + + request_form["optStr"] = ('model=' + model + ';ratio=' + str(ratio_width) + '-' + str(ratio_height) + ';size=' + str(width) + '-' + str(height) + ';strength=' + str(strength) + ';guidance_scale=' + str(guidance_scale) + ';lora=' + lora + ';lora_weight=' + lora_weight) diff --git a/tasks/textextractionpdf.py b/tasks/textextractionpdf.py index ba5bd94..c916590 100644 --- a/tasks/textextractionpdf.py +++ b/tasks/textextractionpdf.py @@ -18,7 +18,7 @@ Outputs: Text containing the extracted contents of the PDF file class TextExtractionPDF(DVMTaskInterface): - NAME: str + NAME: str = "" KIND: int = EventDefinitions.KIND_NIP90_EXTRACT_TEXT TASK: str = "pdf-to-text" COST: int = 20 diff --git a/tasks/translation.py b/tasks/translation.py index afe02d1..db48b77 100644 --- a/tasks/translation.py +++ b/tasks/translation.py @@ -16,7 +16,7 @@ Outputs: Text containing the Translation in the desired language. class Translation(DVMTaskInterface): - NAME: str + NAME: str = "" KIND: int = EventDefinitions.KIND_NIP90_TRANSLATE_TEXT TASK: str = "translation" COST: int = 0 diff --git a/test_client.py b/test_client.py index 29f3d97..d9903d8 100644 --- a/test_client.py +++ b/test_client.py @@ -83,10 +83,8 @@ def nostr_client(): client.subscribe([dm_zap_filter, dvm_filter]) # nostr_client_test_translation("This is the result of the DVM in spanish", "text", "es", 20, 20) - #nostr_client_test_translation("44a0a8b395ade39d46b9d20038b3f0c8a11168e67c442e3ece95e4a1703e2beb", "event", "es", 20, - # 20) - - # nostr_client_test_translation("9c5d6d054e1b7a34a6a4b26ac59469c96e77f7cba003a30456fa6a57974ea86d", "event", "zh", 20, 20) + #nostr_client_test_translation("note1p8cx2dz5ss5gnk7c59zjydcncx6a754c0hsyakjvnw8xwlm5hymsnc23rs", "event", "es", 20,20) + #nostr_client_test_translation("44a0a8b395ade39d46b9d20038b3f0c8a11168e67c442e3ece95e4a1703e2beb", "event", "zh", 20, 20) nostr_client_test_image("a beautiful purple ostrich watching the sunset") class NotificationHandler(HandleNotification): diff --git a/utils/backend_utils.py b/utils/backend_utils.py index b56fdde..08b19d3 100644 --- a/utils/backend_utils.py +++ b/utils/backend_utils.py @@ -55,9 +55,7 @@ def check_task_is_supported(event, client, get_duration=False, config=None): input_value = "" input_type = "" duration = 1 - - - + task = get_task(event, client=client, dvmconfig=dvm_config) for tag in event.tags(): if tag.as_vec()[0] == 'i': if len(tag.as_vec()) < 3: @@ -71,29 +69,28 @@ def check_task_is_supported(event, client, get_duration=False, config=None): if evt is None: print("Event not found") return False, "", 0 + elif input_type == 'url' and check_url_is_readable(input_value) is None: + print("Url not readable / supported") + return False, task, duration elif tag.as_vec()[0] == 'output': output = tag.as_vec()[1] - if not ( - output == "text/plain" or output == "text/json" or output == "json" or output == "image/png" or "image/jpg" or output == ""): + if not (output == "text/plain" + or output == "text/json" or output == "json" + or output == "image/png" or "image/jpg" + or output == "image/png;format=url" or output == "image/jpg;format=url" + or output == ""): print("Output format not supported, skipping..") return False, "", 0 - task = get_task(event, client=client, dvmconfig=dvm_config) for dvm in dvm_config.SUPPORTED_TASKS: if dvm.TASK == task: if not dvm.is_input_supported(input_type, event.content()): return False, task, duration - if input_type == 'url' and check_url_is_readable(input_value) is None: - print("url not readable") - return False, task, duration - if task not in (x.TASK for x in dvm_config.SUPPORTED_TASKS): return False, task, duration - - return True, task, duration @@ -121,7 +118,7 @@ def check_url_is_readable(url): def get_amount_per_task(task, dvm_config, duration=1): - for dvm in dvm_config.SUPPORTED_TASKS: + for dvm in dvm_config.SUPPORTED_TASKS: #this is currently just one if dvm.TASK == task: amount = dvm.COST * duration return amount diff --git a/utils/database_utils.py b/utils/database_utils.py index 2bab825..8562de0 100644 --- a/utils/database_utils.py +++ b/utils/database_utils.py @@ -58,9 +58,7 @@ def add_sql_table_column(db): def add_to_sql_table(db, npub, sats, iswhitelisted, isblacklisted, nip05, lud16, name, lastactive): try: - print("ADD: " + str(db)) con = sqlite3.connect(db) - print("Connected") cur = con.cursor() data = (npub, sats, iswhitelisted, isblacklisted, nip05, lud16, name, lastactive) cur.execute("INSERT or IGNORE INTO users VALUES(?, ?, ?, ?, ?, ?, ?, ?)", data) @@ -94,15 +92,12 @@ def update_sql_table(db, npub, sats, iswhitelisted, isblacklisted, nip05, lud16, def get_from_sql_table(db, npub): try: con = sqlite3.connect(db) - print("Connecting to DB") cur = con.cursor() cur.execute("SELECT * FROM users WHERE npub=?", (npub,)) row = cur.fetchone() con.close() - print(row) if row is None: user = None - print("returning None") return user else: user = User diff --git a/utils/nostr_utils.py b/utils/nostr_utils.py index 86e6a2a..df7da0f 100644 --- a/utils/nostr_utils.py +++ b/utils/nostr_utils.py @@ -19,6 +19,8 @@ def get_event_by_id(event_id, client=None, config=None): id_filter = Filter().author(split[1]).custom_tag(Alphabet.D, [split[2]]) events = client.get_events_of([id_filter], timedelta(seconds=config.RELAY_TIMEOUT)) else: + if str(event_id).startswith('note'): + event_id = EventId.from_bech32(event_id).to_hex() id_filter = Filter().id(event_id).limit(1) events = client.get_events_of([id_filter], timedelta(seconds=config.RELAY_TIMEOUT)) if is_new_client: