fix: custom ports and host now work

This commit is contained in:
Gabriel Almeida 2023-03-17 17:59:51 -03:00
commit a4c6a6abd5

View file

@ -1,5 +1,6 @@
import multiprocessing
import platform
import re
from langflow.main import create_app
@ -14,7 +15,38 @@ def get_number_of_workers(workers=None):
return workers
def serve(host: str = "127.0.0.1", workers: int = 1, timeout: int = 60):
def replace_port(static_files_dir, host, port):
# Load index.html from frontend directory
# In it there is a script tag that sets the base url
# like so setItem("port", "http://localhost:7860")
# localhost could be anything so we need to verify for string
# we need to set the base url to the port that the server is running on
# so that the frontend can make requests to the backend
# This is a hacky way to do it, but it works
new_string = f'setItem("port","http://{host}:{port}")'
with open(static_files_dir / "index.html", "r") as f:
index_html = f.read()
# using regex to replace the port
index_html = re.sub(
r"setItem\(\"port\",.*\)",
new_string,
index_html,
)
with open(static_files_dir / "index.html", "w") as f:
f.write(index_html)
# Verify that the port was replaced
with open(static_files_dir / "index.html", "r") as f:
index_html = f.read()
if new_string not in index_html:
raise ValueError(
"The port was not replaced in index.html. "
"Please check the regex in main.py"
)
def serve(
host: str = "127.0.0.1", workers: int = 1, timeout: int = 60, port: int = 7860
):
app = create_app()
# get the directory of the current file
path = Path(__file__).parent
@ -24,7 +56,6 @@ def serve(host: str = "127.0.0.1", workers: int = 1, timeout: int = 60):
StaticFiles(directory=static_files_dir, html=True),
name="static",
)
port = 7860
options = {
"bind": f"{host}:{port}",
"workers": get_number_of_workers(workers),
@ -32,6 +63,9 @@ def serve(host: str = "127.0.0.1", workers: int = 1, timeout: int = 60):
"timeout": timeout,
}
# Replace the port in index.html
replace_port(static_files_dir, host, port)
if platform.system() in ["Darwin", "Windows"]:
# Run using uvicorn on MacOS and Windows
# Windows doesn't support gunicorn