From cb48b583f847371d1472cc8cebd71077f906edb8 Mon Sep 17 00:00:00 2001 From: Believethehype Date: Thu, 14 Dec 2023 10:44:47 +0100 Subject: [PATCH 1/4] Update setup.py --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a54ec21..f6b840d 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -VERSION = '0.0.1' +VERSION = '0.0.2' DESCRIPTION = 'A framework to build and run NIP90 Data Vending Machines' LONG_DESCRIPTION = ('A framework to build and run NIP90 Data Vending Machines. ' 'This is an early stage release. Interfaces might change/brick') @@ -31,6 +31,8 @@ setup( "moviepy==2.0.0.dev2" ], keywords=['nostr', 'nip90', 'dvm', 'data vending machine'], + url="https://github.com/believethehype/nostrdvm", + license="MIT", classifiers=[ "Development Status :: 3 - Alpha", "Intended Audience :: Education", From f120a00ef924764564856f93e338453d1c3e65a9 Mon Sep 17 00:00:00 2001 From: Believethehype Date: Thu, 14 Dec 2023 10:49:09 +0100 Subject: [PATCH 2/4] cleanup --- nostr_dvm/__init__.py | 10 ---------- start.cmd => start_windows.cmd | 0 2 files changed, 10 deletions(-) rename start.cmd => start_windows.cmd (100%) diff --git a/nostr_dvm/__init__.py b/nostr_dvm/__init__.py index e6ed13d..e69de29 100644 --- a/nostr_dvm/__init__.py +++ b/nostr_dvm/__init__.py @@ -1,10 +0,0 @@ -# We follow Semantic Versioning (https://semver.org/) -_MAJOR_VERSION = '0' -_MINOR_VERSION = '0' -_PATCH_VERSION = '1' - -__version__ = '.'.join([ - _MAJOR_VERSION, - _MINOR_VERSION, - _PATCH_VERSION, -]) \ No newline at end of file diff --git a/start.cmd b/start_windows.cmd similarity index 100% rename from start.cmd rename to start_windows.cmd From d0a98ed7c497587d30bb5cc179df6c95f04baa64 Mon Sep 17 00:00:00 2001 From: Believethehype Date: Fri, 15 Dec 2023 09:43:43 +0100 Subject: [PATCH 3/4] fixing test client --- setup.py | 3 ++- tests/test_dvm_client.py | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index f6b840d..fcf9d09 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,8 @@ setup( "requests==2.31.0", "instaloader==4.10.1", "pytube==15.0.0", - "moviepy==2.0.0.dev2" + "moviepy==2.0.0.dev2", + "zipp==3.17.0" ], keywords=['nostr', 'nip90', 'dvm', 'data vending machine'], url="https://github.com/believethehype/nostrdvm", diff --git a/tests/test_dvm_client.py b/tests/test_dvm_client.py index 0737d5e..298066e 100644 --- a/tests/test_dvm_client.py +++ b/tests/test_dvm_client.py @@ -7,9 +7,9 @@ import dotenv from nostr_sdk import Keys, Client, Tag, EventBuilder, Filter, HandleNotification, Timestamp, nip04_decrypt, \ nip04_encrypt -from utils.dvmconfig import DVMConfig -from utils.nostr_utils import send_event, check_and_set_private_key -from utils.definitions import EventDefinitions +from nostr_dvm.utils.dvmconfig import DVMConfig +from nostr_dvm.utils.nostr_utils import send_event, check_and_set_private_key +from nostr_dvm.utils.definitions import EventDefinitions # TODO HINT: Best use this path with a previously whitelisted privkey, as zapping events is not implemented in the lib/code From 9a69c6fac59319cb07442c2ba5726cb61b9e540e Mon Sep 17 00:00:00 2001 From: Believethehype Date: Fri, 15 Dec 2023 10:00:30 +0100 Subject: [PATCH 4/4] simplify building example --- nostr_dvm/interfaces/dvmtaskinterface.py | 5 +++++ nostr_dvm/tasks/advanced_search.py | 14 +++---------- nostr_dvm/tasks/convert_media.py | 17 ++++------------ nostr_dvm/tasks/discovery_inactive_follows.py | 14 +++---------- .../tasks/imagegeneration_openai_dalle.py | 20 +++++++------------ .../tasks/imagegeneration_replicate_sdxl.py | 16 ++++----------- nostr_dvm/tasks/textextraction_google.py | 16 ++++----------- nostr_dvm/tasks/textextraction_pdf.py | 16 ++++----------- nostr_dvm/tasks/textgeneration_llmlite.py | 15 +++----------- nostr_dvm/tasks/translation_google.py | 18 +++++------------ nostr_dvm/tasks/translation_libretranslate.py | 17 +++++----------- nostr_dvm/tasks/trending_notes_nostrband.py | 16 ++++----------- .../tasks/videogeneration_replicate_svd.py | 16 ++++----------- nostr_dvm/utils/dvmconfig.py | 20 +++++++++++++++++-- 14 files changed, 73 insertions(+), 147 deletions(-) diff --git a/nostr_dvm/interfaces/dvmtaskinterface.py b/nostr_dvm/interfaces/dvmtaskinterface.py index 5aa50a5..a6d0f15 100644 --- a/nostr_dvm/interfaces/dvmtaskinterface.py +++ b/nostr_dvm/interfaces/dvmtaskinterface.py @@ -1,4 +1,5 @@ import json +import os import subprocess import sys from threading import Thread @@ -9,7 +10,9 @@ from nostr_dvm.dvm import DVM from nostr_dvm.utils.admin_utils import AdminConfig from nostr_dvm.utils.dvmconfig import DVMConfig from nostr_dvm.utils.nip89_utils import NIP89Config +from nostr_dvm.utils.nostr_utils import check_and_set_private_key from nostr_dvm.utils.output_utils import post_process_result +from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys class DVMTaskInterface: @@ -92,6 +95,8 @@ class DVMTaskInterface: except ImportError: subprocess.check_call([sys.executable, "-m", "pip", "install", package]) + + @staticmethod def set_options(request_form): print("Setting options...") diff --git a/nostr_dvm/tasks/advanced_search.py b/nostr_dvm/tasks/advanced_search.py index 3d719b2..1cd3ad9 100644 --- a/nostr_dvm/tasks/advanced_search.py +++ b/nostr_dvm/tasks/advanced_search.py @@ -10,11 +10,9 @@ 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 +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 check_and_set_private_key from nostr_dvm.utils.output_utils import post_process_list_to_events -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys """ This File contains a Module to search for notes @@ -138,14 +136,8 @@ class AdvancedSearch(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS # Add NIP89 nip90params = { "user": { diff --git a/nostr_dvm/tasks/convert_media.py b/nostr_dvm/tasks/convert_media.py index 262db79..e3a0ba1 100644 --- a/nostr_dvm/tasks/convert_media.py +++ b/nostr_dvm/tasks/convert_media.py @@ -1,5 +1,4 @@ import json -import os from pathlib import Path import dotenv @@ -8,13 +7,11 @@ 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 +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.mediasource_utils import organize_input_media_data -from nostr_dvm.utils.nostr_utils import check_and_set_private_key from nostr_dvm.utils.output_utils import upload_media_to_hoster -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys + """ This File contains a Module to call Google Translate Services locally on the DVM Machine @@ -85,14 +82,8 @@ class MediaConverter(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS # Add NIP89 nip90params = { "media_format": { diff --git a/nostr_dvm/tasks/discovery_inactive_follows.py b/nostr_dvm/tasks/discovery_inactive_follows.py index b9a93a9..6fe3564 100644 --- a/nostr_dvm/tasks/discovery_inactive_follows.py +++ b/nostr_dvm/tasks/discovery_inactive_follows.py @@ -11,11 +11,9 @@ 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 +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 check_and_set_private_key from nostr_dvm.utils.output_utils import post_process_list_to_users -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys """ This File contains a Module to find inactive follows for a user on nostr @@ -171,14 +169,8 @@ class DiscoverInactiveFollows(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS # Add NIP89 nip90params = { "user": { diff --git a/nostr_dvm/tasks/imagegeneration_openai_dalle.py b/nostr_dvm/tasks/imagegeneration_openai_dalle.py index b536cb8..1ceb5b9 100644 --- a/nostr_dvm/tasks/imagegeneration_openai_dalle.py +++ b/nostr_dvm/tasks/imagegeneration_openai_dalle.py @@ -11,12 +11,11 @@ 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 +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 check_and_set_private_key from nostr_dvm.utils.output_utils import upload_media_to_hoster -from nostr_dvm.utils.zap_utils import get_price_per_sat, check_and_set_ln_bits_keys -from nostr_sdk import Keys +from nostr_dvm.utils.zap_utils import get_price_per_sat + """ This File contains a Module to transform Text input on OpenAI's servers with DALLE-3 and receive results back. @@ -125,16 +124,11 @@ class ImageGenerationDALLE(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS profit_in_sats = 10 - dvm_config.FIX_COST = int(((4.0 / (get_price_per_sat("USD") * 100)) + profit_in_sats)) + cost_in_cent = 4.0 + dvm_config.FIX_COST = int(((cost_in_cent / (get_price_per_sat("USD") * 100)) + profit_in_sats)) nip90params = { "size": { diff --git a/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py b/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py index 4d22f88..682974b 100644 --- a/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py +++ b/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py @@ -11,12 +11,10 @@ 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 +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 check_and_set_private_key from nostr_dvm.utils.output_utils import upload_media_to_hoster -from nostr_dvm.utils.zap_utils import get_price_per_sat, check_and_set_ln_bits_keys -from nostr_sdk import Keys +from nostr_dvm.utils.zap_utils import get_price_per_sat """ This File contains a Module to transform Text input on NOVA-Server and receive results back. @@ -122,14 +120,8 @@ class ImageGenerationReplicateSDXL(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS profit_in_sats = 10 dvm_config.FIX_COST = int(((4.0 / (get_price_per_sat("USD") * 100)) + profit_in_sats)) diff --git a/nostr_dvm/tasks/textextraction_google.py b/nostr_dvm/tasks/textextraction_google.py index edf57cf..0e46742 100644 --- a/nostr_dvm/tasks/textextraction_google.py +++ b/nostr_dvm/tasks/textextraction_google.py @@ -8,13 +8,10 @@ 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 +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 Google Cloud @@ -30,6 +27,7 @@ class SpeechToTextGoogle(DVMTaskInterface): TASK: str = "speech-to-text" FIX_COST: float = 10 PER_UNIT_COST: float = 0.1 + dependencies = ["SpeechRecognition==3.10.0"] def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config, admin_config: AdminConfig = None, options=None): @@ -132,14 +130,8 @@ class SpeechToTextGoogle(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS options = {'api_key': None} # A module might have options it can be initialized with, here we set a default model, and the nova-server # address it should use. These parameters can be freely defined in the task component diff --git a/nostr_dvm/tasks/textextraction_pdf.py b/nostr_dvm/tasks/textextraction_pdf.py index 3e2b4da..3dad25d 100644 --- a/nostr_dvm/tasks/textextraction_pdf.py +++ b/nostr_dvm/tasks/textextraction_pdf.py @@ -9,11 +9,9 @@ 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 +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_event_by_id, check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys +from nostr_dvm.utils.nostr_utils import get_event_by_id """ This File contains a Module to extract Text from a PDF file locally on the DVM Machine @@ -99,14 +97,8 @@ class TextExtractionPDF(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS # Add NIP89 nip90params = {} nip89info = { diff --git a/nostr_dvm/tasks/textgeneration_llmlite.py b/nostr_dvm/tasks/textgeneration_llmlite.py index c5f4866..d65211c 100644 --- a/nostr_dvm/tasks/textgeneration_llmlite.py +++ b/nostr_dvm/tasks/textgeneration_llmlite.py @@ -9,11 +9,8 @@ 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 +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 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 generate Text, based on a prompt using a LLM (local or API) @@ -102,14 +99,8 @@ class TextGenerationOLLAMA(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS nip90params = { "size": { diff --git a/nostr_dvm/tasks/translation_google.py b/nostr_dvm/tasks/translation_google.py index 518e186..ea9b8a2 100644 --- a/nostr_dvm/tasks/translation_google.py +++ b/nostr_dvm/tasks/translation_google.py @@ -1,5 +1,4 @@ import json -import os from pathlib import Path import dotenv @@ -8,11 +7,10 @@ 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 +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, check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys +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 @@ -114,14 +112,8 @@ class TranslationGoogle(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS nip90params = { "language": { diff --git a/nostr_dvm/tasks/translation_libretranslate.py b/nostr_dvm/tasks/translation_libretranslate.py index 8bc5d7d..6989272 100644 --- a/nostr_dvm/tasks/translation_libretranslate.py +++ b/nostr_dvm/tasks/translation_libretranslate.py @@ -9,11 +9,10 @@ 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 +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, check_and_set_private_key -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys -from nostr_sdk import Keys +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 @@ -110,14 +109,8 @@ class TranslationLibre(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS options = {'libre_end_point': os.getenv("LIBRE_TRANSLATE_ENDPOINT"), 'libre_api_key': os.getenv("LIBRE_TRANSLATE_API_KEY")} diff --git a/nostr_dvm/tasks/trending_notes_nostrband.py b/nostr_dvm/tasks/trending_notes_nostrband.py index 36c1a66..8bd3df8 100644 --- a/nostr_dvm/tasks/trending_notes_nostrband.py +++ b/nostr_dvm/tasks/trending_notes_nostrband.py @@ -3,17 +3,15 @@ import os from pathlib import Path import dotenv -from nostr_sdk import Tag, Keys +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 +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 check_and_set_private_key from nostr_dvm.utils.output_utils import post_process_list_to_events -from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys """ This File contains a Module to search for notes @@ -104,14 +102,8 @@ class TrendingNotesNostrBand(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS # Add NIP89 nip90params = { } diff --git a/nostr_dvm/tasks/videogeneration_replicate_svd.py b/nostr_dvm/tasks/videogeneration_replicate_svd.py index 5b9ed02..d33e352 100644 --- a/nostr_dvm/tasks/videogeneration_replicate_svd.py +++ b/nostr_dvm/tasks/videogeneration_replicate_svd.py @@ -12,12 +12,10 @@ 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 +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 check_and_set_private_key from nostr_dvm.utils.output_utils import upload_media_to_hoster -from nostr_dvm.utils.zap_utils import get_price_per_sat, check_and_set_ln_bits_keys -from nostr_sdk import Keys +from nostr_dvm.utils.zap_utils import get_price_per_sat """ This File contains a Module to transform an image to a short video clip using Stable Video Diffusion with replicate @@ -112,14 +110,8 @@ class VideoGenerationReplicateSVD(DVMTaskInterface): # 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): - dvm_config = DVMConfig() - dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) - npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() - invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) - dvm_config.LNBITS_INVOICE_KEY = invoice_key - dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back - dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") - admin_config.LUD16 = lnaddress + dvm_config = build_default_config(identifier) + admin_config.LUD16 = dvm_config.LN_ADDRESS profit_in_sats = 10 cost_in_cent = 4.0 dvm_config.FIX_COST = int(((cost_in_cent / (get_price_per_sat("USD") * 100)) + profit_in_sats)) diff --git a/nostr_dvm/utils/dvmconfig.py b/nostr_dvm/utils/dvmconfig.py index 63474c4..f43cde4 100644 --- a/nostr_dvm/utils/dvmconfig.py +++ b/nostr_dvm/utils/dvmconfig.py @@ -1,9 +1,15 @@ +import os + +from nostr_sdk import Keys + from nostr_dvm.utils.nip89_utils import NIP89Config +from nostr_dvm.utils.nostr_utils import check_and_set_private_key from nostr_dvm.utils.output_utils import PostProcessFunctionType +from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys class DVMConfig: - SUPPORTED_DVMS= [] + SUPPORTED_DVMS = [] PRIVATE_KEY: str = "" PUBLIC_KEY: str = "" FIX_COST: float = None @@ -20,10 +26,20 @@ class DVMConfig: LNBITS_INVOICE_KEY = '' LNBITS_ADMIN_KEY = '' # In order to pay invoices, e.g. from the bot to DVMs, or reimburse users. LNBITS_URL = 'https://lnbits.com' + LN_ADDRESS = '' DB: str NEW_USER_BALANCE: int = 0 # Free credits for new users NIP89: NIP89Config SHOW_RESULT_BEFORE_PAYMENT: bool = False # if this is true show results even when not paid right after autoprocess - +def build_default_config(identifier): + dvm_config = DVMConfig() + dvm_config.PRIVATE_KEY = check_and_set_private_key(identifier) + npub = Keys.from_sk_str(dvm_config.PRIVATE_KEY).public_key().to_bech32() + invoice_key, admin_key, wallet_id, user_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) + dvm_config.LNBITS_INVOICE_KEY = invoice_key + dvm_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back + dvm_config.LNBITS_URL = os.getenv("LNBITS_HOST") + dvm_config.LN_ADDRESS = lnaddress + return dvm_config