diff --git a/.idea/dvm.iml b/.idea/dvm.iml
index 007729a..5de74eb 100644
--- a/.idea/dvm.iml
+++ b/.idea/dvm.iml
@@ -4,8 +4,10 @@
+
+
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 3ce312c..af05b9d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,5 +3,5 @@
-
+
\ No newline at end of file
diff --git a/nostr_dvm/interfaces/dvmtaskinterface.py b/nostr_dvm/interfaces/dvmtaskinterface.py
index dd25269..5aa50a5 100644
--- a/nostr_dvm/interfaces/dvmtaskinterface.py
+++ b/nostr_dvm/interfaces/dvmtaskinterface.py
@@ -1,12 +1,14 @@
import json
+import subprocess
+import sys
from threading import Thread
from nostr_sdk import Keys
+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.dvm import DVM
from nostr_dvm.utils.output_utils import post_process_result
@@ -23,11 +25,13 @@ class DVMTaskInterface:
ACCEPTS_CASHU = True # DVMs build with this framework support encryption, but others might not.
dvm_config: DVMConfig
admin_config: AdminConfig
+ dependencies = []
def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config, admin_config: AdminConfig = None,
options=None, task=None):
self.init(name, dvm_config, admin_config, nip89config, task)
self.options = options
+ self.install_dependencies(self.dependencies)
def init(self, name, dvm_config, admin_config=None, nip89config=None, task=None):
self.NAME = name
@@ -80,6 +84,13 @@ class DVMTaskInterface:
"""Post-process the data and return the result Use default function, if not overwritten"""
return post_process_result(result, event)
+ def install_dependencies(self, packages):
+ import pip
+ for package in packages:
+ try:
+ __import__(package.split("=")[0])
+ except ImportError:
+ subprocess.check_call([sys.executable, "-m", "pip", "install", package])
@staticmethod
def set_options(request_form):
diff --git a/nostr_dvm/tasks/imagegeneration_openai_dalle.py b/nostr_dvm/tasks/imagegeneration_openai_dalle.py
index bc0df52..b536cb8 100644
--- a/nostr_dvm/tasks/imagegeneration_openai_dalle.py
+++ b/nostr_dvm/tasks/imagegeneration_openai_dalle.py
@@ -30,6 +30,7 @@ class ImageGenerationDALLE(DVMTaskInterface):
KIND: int = EventDefinitions.KIND_NIP90_GENERATE_IMAGE
TASK: str = "text-to-image"
FIX_COST: float = 120
+ dependencies = ["openai==1.3.5"]
def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config,
admin_config: AdminConfig = None, options=None):
diff --git a/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py b/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py
index 92df32d..4d22f88 100644
--- a/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py
+++ b/nostr_dvm/tasks/imagegeneration_replicate_sdxl.py
@@ -31,6 +31,7 @@ class ImageGenerationReplicateSDXL(DVMTaskInterface):
KIND: int = EventDefinitions.KIND_NIP90_GENERATE_IMAGE
TASK: str = "text-to-image"
FIX_COST: float = 120
+ dependencies = ["replicate==0.21.1"]
def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config,
admin_config: AdminConfig = None, options=None):
diff --git a/nostr_dvm/tasks/textextraction_pdf.py b/nostr_dvm/tasks/textextraction_pdf.py
index 06ba041..3e2b4da 100644
--- a/nostr_dvm/tasks/textextraction_pdf.py
+++ b/nostr_dvm/tasks/textextraction_pdf.py
@@ -28,11 +28,14 @@ class TextExtractionPDF(DVMTaskInterface):
KIND: int = EventDefinitions.KIND_NIP90_EXTRACT_TEXT
TASK: str = "pdf-to-text"
FIX_COST: float = 0
+ dependencies = ["pypdf==3.17.1"]
def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config,
admin_config: AdminConfig = None, options=None):
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':
diff --git a/nostr_dvm/tasks/textgeneration_llmlite.py b/nostr_dvm/tasks/textgeneration_llmlite.py
index 974e3ca..c5f4866 100644
--- a/nostr_dvm/tasks/textgeneration_llmlite.py
+++ b/nostr_dvm/tasks/textgeneration_llmlite.py
@@ -3,7 +3,7 @@ import os
from pathlib import Path
import dotenv
-from litellm import completion
+
from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface
from nostr_dvm.utils.admin_utils import AdminConfig
@@ -27,6 +27,7 @@ class TextGenerationOLLAMA(DVMTaskInterface):
KIND: int = EventDefinitions.KIND_NIP90_GENERATE_TEXT
TASK: str = "text-to-text"
FIX_COST: float = 0
+ dependencies = ["litellm==1.12.3"]
def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config,
admin_config: AdminConfig = None, options=None):
@@ -71,6 +72,8 @@ class TextGenerationOLLAMA(DVMTaskInterface):
return request_form
def process(self, request_form):
+ from litellm import completion
+
options = DVMTaskInterface.set_options(request_form)
try:
diff --git a/nostr_dvm/tasks/translation_google.py b/nostr_dvm/tasks/translation_google.py
index 220140d..518e186 100644
--- a/nostr_dvm/tasks/translation_google.py
+++ b/nostr_dvm/tasks/translation_google.py
@@ -27,6 +27,7 @@ class TranslationGoogle(DVMTaskInterface):
KIND: int = EventDefinitions.KIND_NIP90_TRANSLATE_TEXT
TASK: str = "translation"
FIX_COST: float = 0
+ dependencies = ["translatepy==2.3"]
def __init__(self, name, dvm_config: DVMConfig, nip89config: NIP89Config,
admin_config: AdminConfig = None, options=None):
diff --git a/setup.py b/setup.py
index ec5c963..4101063 100644
--- a/setup.py
+++ b/setup.py
@@ -6,17 +6,29 @@ LONG_DESCRIPTION = '-'
# Setting up
setup(
- # the name must match the folder name 'verysimplemodule'
name="nostr-dvm",
version=VERSION,
author="Believethehype",
author_email="-",
description=DESCRIPTION,
long_description=LONG_DESCRIPTION,
- packages=find_packages(),
- install_requires=[], # add any additional packages that
- # needs to be installed along with your package. Eg: 'caer'
-
+ packages=find_packages(include=['nostr_dvm']),
+ install_requires=["nostr-sdk==0.0.5",
+ "bech32==1.2.0",
+ "pycryptodome==3.19.0",
+ "python-dotenv==1.0.0",
+ "emoji==2.8.0",
+ "eva-decord==0.6.1",
+ "ffmpegio==0.8.5",
+ "lnurl==0.4.1",
+ "pandas==2.1.3",
+ "Pillow==10.1.0",
+ "PyUpload==0.1.4",
+ "requests==2.31.0",
+ "instaloader==4.10.1",
+ "pytube==15.0.0",
+ "moviepy==2.0.0.dev2"
+ ],
keywords=['nostr', 'nip90', 'dvm', 'data vending machine'],
classifiers=[
"Development Status :: 3 - Alpha",