diff --git a/src/cluster/app.py b/src/cluster/app.py index ae35187..44af0a5 100644 --- a/src/cluster/app.py +++ b/src/cluster/app.py @@ -3,6 +3,7 @@ from BowongModalFunctions.models.settings.cluster import WorkerConfig from .video import app as media_app from .web import app as web_app from .ffmpeg_app import app as ffmpeg_app +from .openwebui import app as open_webui # from .comfyui_v1 import app as comfyui_v1_app # from .comfyui_v2 import app as comfyui_v2_app @@ -15,5 +16,6 @@ app = modal.App(config.modal_app_name, app.include(media_app) app.include(ffmpeg_app) app.include(web_app) +app.include(open_webui) # app.include(comfyui_v1_app) # app.include(comfyui_v2_app) diff --git a/src/cluster/openwebui.py b/src/cluster/openwebui.py new file mode 100644 index 0000000..7c5235d --- /dev/null +++ b/src/cluster/openwebui.py @@ -0,0 +1,28 @@ +import modal + +image = ( + modal.Image.from_registry("ghcr.io/open-webui/open-webui:main") + .run_commands("rm -rf /app/backend/data/*") + .env({ + "ENV": "prod", "PORT": "8080", "USE_OLLAMA_DOCKER": "false", "USE_CUDA_DOCKER": "false", + "USE_EMBEDDING_MODEL_DOCKER": "false", "USE_RERANKING_MODEL_DOCKER": "false", + "WEBUI_SECRET_KEY": "059d6dda-58bf-477c-988c-73d163a19dcb", "WEBUI_AUTH": "false", + "CORS_ALLOW_ORIGIN": "*", "FORWARDED_ALLOW_IPS": "*", + "SCARF_NO_ANALYTICS": "true", "DO_NOT_TRACK": "true", "ANONYMIZED_TELEMETRY": "false", + }) + .workdir("/app/backend") +) + +vol = modal.Volume.from_name("open-webui-data", create_if_missing=True) + +app = modal.App(name="open-webui", image=image, + volumes={"/app/backend/data": vol}) + +with image.imports(): + @app.function(image=image, max_containers=1) + @modal.concurrent(max_inputs=1000) + @modal.asgi_app() + def open_webui(): + from open_webui.main import app + + return app