diff --git a/nostr_dvm/tasks/README.md b/nostr_dvm/tasks/README.md index b8f794f..b2c1aea 100644 --- a/nostr_dvm/tasks/README.md +++ b/nostr_dvm/tasks/README.md @@ -6,12 +6,27 @@ Reusable backend functions can be defined in backends (e.g. API calls) Current List of Tasks: -| Module | Kind | Description | Backend | -|-------------------------|------|------------------------------------------------|-------------| -| TextExtractionPDF | 5000 | Extracts Text from a PDF file | local | -| SpeechToTextGoogle | 5000 | Extracts Speech from Media files via Google | googleAPI | -| TranslationGoogle | 5002 | Translates Inputs to another language | googleAPI | -| TranslationLibre | 5002 | Translates Inputs to another language | libreAPI | -| ImageGenerationDALLE | 5100 | Generates an Image with Dall-E | openAI | -| MediaConverter | 5200 | Converts a link of a media file and uploads it | openAI | -| DiscoverInactiveFollows | 5301 | Find inactive Nostr users | local | \ No newline at end of file +| Module | Kind | Description | Backend | +|------------------------------|--------------|------------------------------------------------------------|------------------| +| TextExtractionPDF | 5000 | Extracts Text from a PDF file | local | +| SpeechToTextGoogle | 5000 | Extracts Speech from Media files via Google Services | googleAPI | +| SpeechToTextWhisperX | 5000 | Extracts Speech from Media files via local WhisperX | nserver | +| ImageInterrogator | 5000 | Extracts Prompts from Images | nserver | +| TranslationGoogle | 5002 | Translates Inputs to another language | googleAPI | +| TranslationLibre | 5002 | Translates Inputs to another language | libreAPI | +| TextGenerationLLMLite | 5050 | Chat with LLM backends like Ollama, ChatGPT etc | local/api/openai | +| ImageGenerationSDXL | 5100 | Generates an Image from Prompt with Stable Diffusion XL | nserver | +| ImageGenerationSDXLIMG2IMG | 5100 | Generates an Image from an Image with Stable Diffusion XL | nserver | +| ImageGenerationReplicateSDXL | 5100 | Generates an Image from Prompt with Stable Diffusion XL | replicate | +| ImageGenerationMLX | 5100 | Generates an Image with Stable Diffusion 2.1 on M1/2/3 Mac | mlx | +| ImageGenerationDALLE | 5100 | Generates an Image with OpenAI's Dall-E | openAI | +| ImageUpscale | 5100 | Upscales an Image | nserver | +| MediaConverter | 5200 | Converts a link of a media file and uploads it | openAI | +| VideoGenerationReplicateSVD | 5202 (inoff) | Generates a Video from an Image | replicate | +| TextToSpeech | 5250 (inoff) | Generate Audio from a prompt | local | +| TrendingNotesNostrBand | 5300 | Show trending notes on nostr.band | nostr.band api | +| DiscoverInactiveFollows | 5301 | Find inactive Nostr users | local | +| AdvancedSearch | 5302 (inoff) | Search Content on nostr.band | local | + +Kinds with (inoff) are suggestions and not merged yet and might change in the future. +Backends might require to add an API key to the .env file or run an external server/framework the dvm will communicate with. \ No newline at end of file diff --git a/nostr_dvm/tasks/advanced_search.py b/nostr_dvm/tasks/advanced_search.py index 217ea18..2b11a08 100644 --- a/nostr_dvm/tasks/advanced_search.py +++ b/nostr_dvm/tasks/advanced_search.py @@ -47,8 +47,8 @@ class AdvancedSearch(DVMTaskInterface): # default values user = "" - since_days = 800 #days ago - until_days = 0 #days ago + since_days = 800 # days ago + until_days = 0 # days ago search = "" max_results = 20 @@ -98,11 +98,14 @@ class AdvancedSearch(DVMTaskInterface): search_until = Timestamp.from_secs(dif) if options["user"] == "": - notes_filter = Filter().kind(1).search(options["search"]).since(search_since).until(search_until).limit(options["max_results"]) + notes_filter = Filter().kind(1).search(options["search"]).since(search_since).until(search_until).limit( + options["max_results"]) elif options["search"] == "": - notes_filter = Filter().kind(1).author(PublicKey.from_hex(options["user"])).since(search_since).until(search_until).limit(options["max_results"]) + notes_filter = Filter().kind(1).author(PublicKey.from_hex(options["user"])).since(search_since).until( + search_until).limit(options["max_results"]) else: - notes_filter = Filter().kind(1).author(PublicKey.from_hex(options["user"])).search(options["search"]).since(search_since).until(search_until).limit(options["max_results"]) + notes_filter = Filter().kind(1).author(PublicKey.from_hex(options["user"])).search(options["search"]).since( + search_since).until(search_until).limit(options["max_results"]) events = cli.get_events_of([notes_filter], timedelta(seconds=5)) @@ -116,8 +119,6 @@ class AdvancedSearch(DVMTaskInterface): return json.dumps(result_list) - - def post_process(self, result, event): """Overwrite the interface function to return a social client readable format, if requested""" for tag in event.tags(): @@ -170,9 +171,9 @@ def build_example(name, identifier, admin_config): nip89config = NIP89Config() nip89config.DTAG = check_and_set_d_tag(identifier, name, dvm_config.PRIVATE_KEY, nip89info["image"]) nip89config.CONTENT = json.dumps(nip89info) - + return AdvancedSearch(name=name, dvm_config=dvm_config, nip89config=nip89config, - admin_config=admin_config) + admin_config=admin_config) def process_venv(): @@ -182,5 +183,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/convert_media.py b/nostr_dvm/tasks/convert_media.py index fa8655c..970bbc9 100644 --- a/nostr_dvm/tasks/convert_media.py +++ b/nostr_dvm/tasks/convert_media.py @@ -8,7 +8,6 @@ from nostr_dvm.utils.nip89_utils import NIP89Config from nostr_dvm.utils.mediasource_utils import organize_input_media_data from nostr_dvm.utils.output_utils import upload_media_to_hoster - """ This File contains a Module convert media locally @@ -98,10 +97,10 @@ def build_example(name, identifier, admin_config): nip89config = NIP89Config() - return MediaConverter(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config) + def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -111,4 +110,4 @@ def process_venv(): if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/discovery_inactive_follows.py b/nostr_dvm/tasks/discovery_inactive_follows.py index 961380e..5dd2e47 100644 --- a/nostr_dvm/tasks/discovery_inactive_follows.py +++ b/nostr_dvm/tasks/discovery_inactive_follows.py @@ -163,6 +163,7 @@ class DiscoverInactiveFollows(DVMTaskInterface): # if not text/plain, don't post-process return result + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere @@ -196,6 +197,7 @@ def build_example(name, identifier, admin_config): return DiscoverInactiveFollows(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config) + def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -203,5 +205,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/imagegeneration_openai_dalle.py b/nostr_dvm/tasks/imagegeneration_openai_dalle.py index 86ebdcb..fc03938 100644 --- a/nostr_dvm/tasks/imagegeneration_openai_dalle.py +++ b/nostr_dvm/tasks/imagegeneration_openai_dalle.py @@ -107,7 +107,6 @@ class ImageGenerationDALLE(DVMTaskInterface): n=int(options['number']), ) - image_url = response.data[0].url # rehost the result instead of relying on the openai link response = requests.get(image_url) @@ -162,8 +161,8 @@ def process_venv(): result = dvm.process(json.loads(args.request)) time.sleep(10) - DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py b/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py index 5c3cdec..eb72398 100644 --- a/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py +++ b/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py @@ -6,7 +6,6 @@ from PIL import Image from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag @@ -153,5 +152,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/imagegeneration_sdxl.py b/nostr_dvm/tasks/imagegeneration_sdxl.py index 9a66b6a..532ab09 100644 --- a/nostr_dvm/tasks/imagegeneration_sdxl.py +++ b/nostr_dvm/tasks/imagegeneration_sdxl.py @@ -1,21 +1,12 @@ import json -import os from multiprocessing.pool import ThreadPool -from pathlib import Path - -import dotenv from nostr_dvm.backends.nova_server.utils import check_server_status, send_request_to_server from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.definitions import EventDefinitions -from nostr_dvm.utils.nostr_utils import check_and_set_private_key -from nostr_sdk import Keys - -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys """ This File contains a module to transform Text input on n-server and receive results back. @@ -165,11 +156,12 @@ class ImageGenerationSDXL(DVMTaskInterface): except Exception as e: raise Exception(e) + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere def build_example(name, identifier, admin_config, server_address, default_model="stabilityai/stable-diffusion-xl" - "-base-1.0", default_lora=""): + "-base-1.0", default_lora=""): dvm_config = build_default_config(identifier) dvm_config.USE_OWN_VENV = False admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -177,7 +169,6 @@ def build_example(name, identifier, admin_config, server_address, default_model= # address it should use. These parameters can be freely defined in the task component options = {'default_model': default_model, 'default_lora': default_lora, 'server': server_address} - nip89info = { "name": name, "image": "https://image.nostr.build/c33ca6fc4cc038ca4adb46fdfdfda34951656f87ee364ef59095bae1495ce669.jpg", diff --git a/nostr_dvm/tasks/imagegeneration_sdxlimg2img.py b/nostr_dvm/tasks/imagegeneration_sdxlimg2img.py index 650108b..1fdf30c 100644 --- a/nostr_dvm/tasks/imagegeneration_sdxlimg2img.py +++ b/nostr_dvm/tasks/imagegeneration_sdxlimg2img.py @@ -1,23 +1,15 @@ import json -import os from multiprocessing.pool import ThreadPool -from pathlib import Path - -import dotenv from nostr_dvm.backends.nova_server.utils import check_server_status, send_request_to_server from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.definitions import EventDefinitions -from nostr_dvm.utils.nostr_utils import check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys """ -This File contains a Module to transform Text input on N-server and receive results back. +This File contains a Module to transform Image (and Text) input on N-server and receive results back. Accepted Inputs: Prompt (text) Outputs: An url to an Image @@ -45,7 +37,7 @@ class ImageGenerationSDXLIMG2IMG(DVMTaskInterface): if input_type == "url": hasurl = True elif input_type == "text": - hasprompt = True #Little optional when lora is set + hasprompt = True # Little optional when lora is set elif tag.as_vec()[0] == 'output': output = tag.as_vec()[1] @@ -132,15 +124,11 @@ class ImageGenerationSDXLIMG2IMG(DVMTaskInterface): elif tag.as_vec()[1] == "model": model = tag.as_vec()[2] - - - - io_input_image = { - "id": "input_image", - "type": "input", - "src": "url:Image", - "uri": url + "id": "input_image", + "type": "input", + "src": "url:Image", + "uri": url } io_input = { "id": "input_prompt", @@ -193,6 +181,7 @@ class ImageGenerationSDXLIMG2IMG(DVMTaskInterface): except Exception as e: raise Exception(e) + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere diff --git a/nostr_dvm/tasks/imageinterrogator.py b/nostr_dvm/tasks/imageinterrogator.py index b48e499..1bc9390 100644 --- a/nostr_dvm/tasks/imageinterrogator.py +++ b/nostr_dvm/tasks/imageinterrogator.py @@ -1,20 +1,12 @@ import json -import os from multiprocessing.pool import ThreadPool -from pathlib import Path - -import dotenv from nostr_dvm.backends.nova_server.utils import check_server_status, send_request_to_server from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.definitions import EventDefinitions -from nostr_dvm.utils.nostr_utils import check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys """ This File contains a Module to extract a prompt from an image from an url. @@ -55,7 +47,6 @@ class ImageInterrogator(DVMTaskInterface): method = "prompt" mode = "best" - for tag in event.tags(): if tag.as_vec()[0] == 'i': input_type = tag.as_vec()[2] @@ -69,10 +60,10 @@ class ImageInterrogator(DVMTaskInterface): mode = tag.as_vec()[2] io_input_image = { - "id": "input_image", - "type": "input", - "src": "url:Image", - "uri": url + "id": "input_image", + "type": "input", + "src": "url:Image", + "uri": url } io_output = { @@ -108,6 +99,7 @@ class ImageInterrogator(DVMTaskInterface): except Exception as e: raise Exception(e) + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere @@ -142,7 +134,7 @@ def build_example(name, identifier, admin_config, server_address): nip89config.CONTENT = json.dumps(nip89info) return ImageInterrogator(name=name, dvm_config=dvm_config, nip89config=nip89config, - admin_config=admin_config, options=options) + admin_config=admin_config, options=options) def process_venv(): diff --git a/nostr_dvm/tasks/imageupscale.py b/nostr_dvm/tasks/imageupscale.py index c481f54..0133fdc 100644 --- a/nostr_dvm/tasks/imageupscale.py +++ b/nostr_dvm/tasks/imageupscale.py @@ -1,20 +1,12 @@ import json -import os from multiprocessing.pool import ThreadPool -from pathlib import Path - -import dotenv from nostr_dvm.backends.nova_server.utils import check_server_status, send_request_to_server from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.definitions import EventDefinitions -from nostr_dvm.utils.nostr_utils import check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys """ This File contains a Module to upscale an image from an url by factor 2-4 diff --git a/nostr_dvm/tasks/textextraction_google.py b/nostr_dvm/tasks/textextraction_google.py index f5c6b69..23053df 100644 --- a/nostr_dvm/tasks/textextraction_google.py +++ b/nostr_dvm/tasks/textextraction_google.py @@ -1,20 +1,16 @@ import json import os import time -from pathlib import Path - -import dotenv from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.mediasource_utils import organize_input_media_data from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.definitions import EventDefinitions """ -This File contains a Module to transform a media file input on Google Cloud +This File contains a Module to extract text form a media file input on Google Cloud Accepted Inputs: Url to media file (url) Outputs: Transcribed text @@ -30,7 +26,6 @@ class SpeechToTextGoogle(DVMTaskInterface): dependencies = [("nostr-dvm", "nostr-dvm"), ("speech_recognition", "SpeechRecognition==3.10.0")] - def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config, admin_config: AdminConfig = None, options=None): dvm_config.SCRIPT = os.path.abspath(__file__) @@ -129,6 +124,7 @@ class SpeechToTextGoogle(DVMTaskInterface): return result + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere @@ -158,6 +154,8 @@ def build_example(name, identifier, admin_config): return SpeechToTextGoogle(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config, options=options) + + def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -167,4 +165,4 @@ def process_venv(): if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/textextraction_pdf.py b/nostr_dvm/tasks/textextraction_pdf.py index d578299..b993097 100644 --- a/nostr_dvm/tasks/textextraction_pdf.py +++ b/nostr_dvm/tasks/textextraction_pdf.py @@ -1,13 +1,9 @@ import json import os import re -from pathlib import Path - -import dotenv from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag @@ -29,14 +25,11 @@ class TextExtractionPDF(DVMTaskInterface): dependencies = [("nostr-dvm", "nostr-dvm"), ("pypdf", "pypdf==3.17.1")] - def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config, admin_config: AdminConfig = None, options=None): dvm_config.SCRIPT = os.path.abspath(__file__) super().__init__(name, dvm_config, nip89config, admin_config, options) - - def is_input_supported(self, tags): for tag in tags: if tag.as_vec()[0] == 'i': @@ -118,6 +111,7 @@ def build_example(name, identifier, admin_config): return TextExtractionPDF(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config) + def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -127,4 +121,4 @@ def process_venv(): if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/textextraction_whisperx.py b/nostr_dvm/tasks/textextraction_whisperx.py index d7ae46d..13e998a 100644 --- a/nostr_dvm/tasks/textextraction_whisperx.py +++ b/nostr_dvm/tasks/textextraction_whisperx.py @@ -2,21 +2,13 @@ import json import os import time from multiprocessing.pool import ThreadPool -from pathlib import Path - -import dotenv - from nostr_dvm.backends.nova_server.utils import check_server_status, send_request_to_server, send_file_to_server from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.mediasource_utils import organize_input_media_data from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.definitions import EventDefinitions -from nostr_dvm.utils.nostr_utils import check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys """ This File contains a Module to transform A media file input on n-server and receive results back. @@ -108,7 +100,8 @@ class SpeechToTextWhisperX(DVMTaskInterface): except: end_time = float(tag.as_vec()[3]) - filepath = organize_input_media_data(url, input_type, start_time, end_time, dvm_config, client, True, media_format) + filepath = organize_input_media_data(url, input_type, start_time, end_time, dvm_config, client, True, + media_format) path_on_server = send_file_to_server(os.path.realpath(filepath), self.options['server']) io_input = { @@ -149,6 +142,7 @@ class SpeechToTextWhisperX(DVMTaskInterface): except Exception as e: raise Exception(e) + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere @@ -182,7 +176,7 @@ def build_example(name, identifier, admin_config, server_address): nip89config = NIP89Config() nip89config.DTAG = check_and_set_d_tag(identifier, name, dvm_config.PRIVATE_KEY, nip89info["image"]) nip89config.CONTENT = json.dumps(nip89info) - + return SpeechToTextWhisperX(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config, options=options) @@ -194,5 +188,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/textgeneration_llmlite.py b/nostr_dvm/tasks/textgeneration_llmlite.py index ab2bd0e..e4d43ce 100644 --- a/nostr_dvm/tasks/textgeneration_llmlite.py +++ b/nostr_dvm/tasks/textgeneration_llmlite.py @@ -1,13 +1,8 @@ import json import os -from pathlib import Path - -import dotenv - from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag diff --git a/nostr_dvm/tasks/texttospeech.py b/nostr_dvm/tasks/texttospeech.py index eca7523..359c9e9 100644 --- a/nostr_dvm/tasks/texttospeech.py +++ b/nostr_dvm/tasks/texttospeech.py @@ -1,5 +1,6 @@ import json import os + os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1" from pathlib import Path import urllib.request @@ -79,7 +80,7 @@ class TextToSpeech(DVMTaskInterface): from TTS.api import TTS options = DVMTaskInterface.set_options(request_form) device = "cuda" if torch.cuda.is_available() else "cpu" - #else "mps" if torch.backends.mps.is_available() \ + # else "mps" if torch.backends.mps.is_available() \ print(TTS().list_models()) try: @@ -102,7 +103,7 @@ def build_example(name, identifier, admin_config): dvm_config = build_default_config(identifier) admin_config.LUD16 = dvm_config.LN_ADDRESS - #use an alternative local wav file you want to use for cloning + # use an alternative local wav file you want to use for cloning options = {'input_file': ""} nip89info = { @@ -134,5 +135,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/translation_google.py b/nostr_dvm/tasks/translation_google.py index b1f17d8..b4ed1e3 100644 --- a/nostr_dvm/tasks/translation_google.py +++ b/nostr_dvm/tasks/translation_google.py @@ -1,20 +1,14 @@ import json import os -from pathlib import Path - -import dotenv - from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag from nostr_dvm.utils.nostr_utils import get_referenced_event_by_id, get_event_by_id - """ -This File contains a Module to call Google Translate Services locally on the DVM Machine +This File contains a Module to call Google Translate Services on the DVM Machine Accepted Inputs: Text, Events, Jobs (Text Extraction, Summary, Translation) Outputs: Text containing the TranslationGoogle in the desired language. @@ -111,6 +105,7 @@ class TranslationGoogle(DVMTaskInterface): return translated_text + # We build an example here that we can call by either calling this file directly from the main directory, # or by adding it to our playground. You can call the example and adjust it to your needs or redefine it in the # playground or elsewhere @@ -128,12 +123,18 @@ def build_example(name, identifier, admin_config): "nip90Params": { "language": { "required": False, - "values": ["en", "az", "be", "bg", "bn", "bs", "ca", "ceb", "co", "cs", "cy", "da", "de", "el", "eo", "es", - "et", "eu", "fa", "fi", "fr", "fy", "ga", "gd", "gl", "gu", "ha", "haw", "hi", "hmn", "hr", "ht", - "hu", "hy", "id", "ig", "is", "it", "he", "ja", "jv", "ka", "kk", "km", "kn", "ko", "ku", "ky", - "la", "lb", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", "my", "ne", "nl", - "no", "ny", "or", "pa", "pl", "ps", "pt", "ro", "ru", "sd", "si", "sk", "sl", "sm", "sn", "so", - "sq", "sr", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "tl", "tr", "ug", "uk", "ur", "uz", + "values": ["en", "az", "be", "bg", "bn", "bs", "ca", "ceb", "co", "cs", "cy", "da", "de", "el", "eo", + "es", + "et", "eu", "fa", "fi", "fr", "fy", "ga", "gd", "gl", "gu", "ha", "haw", "hi", "hmn", "hr", + "ht", + "hu", "hy", "id", "ig", "is", "it", "he", "ja", "jv", "ka", "kk", "km", "kn", "ko", "ku", + "ky", + "la", "lb", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", "my", "ne", + "nl", + "no", "ny", "or", "pa", "pl", "ps", "pt", "ro", "ru", "sd", "si", "sk", "sl", "sm", "sn", + "so", + "sq", "sr", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "tl", "tr", "ug", "uk", "ur", + "uz", "vi", "xh", "yi", "yo", "zh", "zu"] } } @@ -145,7 +146,6 @@ def build_example(name, identifier, admin_config): return TranslationGoogle(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config) - def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -155,4 +155,4 @@ def process_venv(): if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/translation_libretranslate.py b/nostr_dvm/tasks/translation_libretranslate.py index c3d00c7..cc6f6d2 100644 --- a/nostr_dvm/tasks/translation_libretranslate.py +++ b/nostr_dvm/tasks/translation_libretranslate.py @@ -1,13 +1,9 @@ import json import os -from pathlib import Path - -import dotenv import requests from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag @@ -156,5 +152,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/trending_notes_nostrband.py b/nostr_dvm/tasks/trending_notes_nostrband.py index 20c5cd5..85c2e73 100644 --- a/nostr_dvm/tasks/trending_notes_nostrband.py +++ b/nostr_dvm/tasks/trending_notes_nostrband.py @@ -1,13 +1,9 @@ import json import os -from pathlib import Path - -import dotenv from nostr_sdk import Tag from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag @@ -118,6 +114,7 @@ def build_example(name, identifier, admin_config): return TrendingNotesNostrBand(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config) + def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -125,5 +122,6 @@ def process_venv(): result = dvm.process(json.loads(args.request)) DVMTaskInterface.write_output(result, args.output) + if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/tasks/videogeneration_replicate_svd.py b/nostr_dvm/tasks/videogeneration_replicate_svd.py index f283c1c..fa4bed6 100644 --- a/nostr_dvm/tasks/videogeneration_replicate_svd.py +++ b/nostr_dvm/tasks/videogeneration_replicate_svd.py @@ -1,17 +1,12 @@ import json import os -import subprocess from io import BytesIO -from pathlib import Path - -import dotenv import requests import urllib.request from PIL import Image from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface from nostr_dvm.utils.admin_utils import AdminConfig -from nostr_dvm.utils.backend_utils import keep_alive from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig, build_default_config from nostr_dvm.utils.nip89_utils import NIP89Config, check_and_set_d_tag @@ -39,9 +34,6 @@ class VideoGenerationReplicateSVD(DVMTaskInterface): dvm_config.SCRIPT = os.path.abspath(__file__) super().__init__(name, dvm_config, nip89config, admin_config, options) - - - def is_input_supported(self, tags): for tag in tags: if tag.as_vec()[0] == 'i': @@ -140,6 +132,7 @@ def build_example(name, identifier, admin_config): return VideoGenerationReplicateSVD(name=name, dvm_config=dvm_config, nip89config=nip89config, admin_config=admin_config) + def process_venv(): args = DVMTaskInterface.process_args() dvm_config = build_default_config(args.identifier) @@ -149,4 +142,4 @@ def process_venv(): if __name__ == '__main__': - process_venv() \ No newline at end of file + process_venv() diff --git a/nostr_dvm/utils/definitions.py b/nostr_dvm/utils/definitions.py index 99d1df9..3397307 100644 --- a/nostr_dvm/utils/definitions.py +++ b/nostr_dvm/utils/definitions.py @@ -2,6 +2,8 @@ import os from dataclasses import dataclass from nostr_sdk import Event + + class EventDefinitions: KIND_DM = 4 KIND_ZAP = 9735 @@ -14,8 +16,6 @@ class EventDefinitions: KIND_NIP90_RESULT_SUMMARIZE_TEXT = KIND_NIP90_SUMMARIZE_TEXT + 1000 KIND_NIP90_TRANSLATE_TEXT = 5002 KIND_NIP90_RESULT_TRANSLATE_TEXT = KIND_NIP90_TRANSLATE_TEXT + 1000 - KIND_NIP90_TEXT_TO_SPEECH = 5005 - KIND_NIP90_RESULT_TEXT_TO_SPEECH = KIND_NIP90_TEXT_TO_SPEECH + 1000 KIND_NIP90_GENERATE_TEXT = 5050 KIND_NIP90_RESULT_GENERATE_TEXT = KIND_NIP90_GENERATE_TEXT + 1000 KIND_NIP90_GENERATE_IMAGE = 5100 @@ -23,6 +23,8 @@ class EventDefinitions: KIND_NIP90_CONVERT_VIDEO = 5200 KIND_NIP90_RESULT_CONVERT_VIDEO = KIND_NIP90_CONVERT_VIDEO + 1000 KIND_NIP90_GENERATE_VIDEO = 5202 + KIND_NIP90_TEXT_TO_SPEECH = 5250 + KIND_NIP90_RESULT_TEXT_TO_SPEECH = KIND_NIP90_TEXT_TO_SPEECH + 1000 KIND_NIP90_RESULT_GENERATE_VIDEO = KIND_NIP90_GENERATE_VIDEO + 1000 KIND_NIP90_CONTENT_DISCOVERY = 5300 KIND_NIP90_RESULT_CONTENT_DISCOVERY = KIND_NIP90_CONTENT_DISCOVERY + 1000 @@ -59,6 +61,7 @@ class JobToWatch: payment_hash: str expires: int + @dataclass class RequiredJobToWatch: event: Event