From d89e4bc985dae96ffe043a69eaef2e032a29cef2 Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Thu, 25 May 2023 09:03:28 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(=5F=5Fmain=5F=5F.py):=20pass?= =?UTF-8?q?=20dev=20flag=20to=20update=5Fsettings=20function=20=E2=9C=A8?= =?UTF-8?q?=20feat(=5F=5Fmain=5F=5F.py):=20add=20serve=5Fon=5Fjcloud=20fun?= =?UTF-8?q?ction=20to=20deploy=20Langflow=20server=20on=20Jina=20AI=20Clou?= =?UTF-8?q?d=20=F0=9F=90=9B=20fix(config.yaml):=20remove=20duplicate=20ent?= =?UTF-8?q?ries=20and=20fix=20indentation=20The=20update=5Fsettings=20func?= =?UTF-8?q?tion=20now=20accepts=20a=20dev=20flag=20to=20enable=20running?= =?UTF-8?q?=20the=20app=20in=20development=20mode.=20The=20serve=5Fon=5Fjc?= =?UTF-8?q?loud=20function=20has=20been=20added=20to=20deploy=20the=20Lang?= =?UTF-8?q?flow=20server=20on=20Jina=20AI=20Cloud.=20The=20config.yaml=20f?= =?UTF-8?q?ile=20has=20been=20cleaned=20up=20by=20removing=20duplicate=20e?= =?UTF-8?q?ntries=20and=20fixing=20indentation.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/__main__.py | 103 ++++++++++++------------ src/backend/langflow/config.yaml | 132 ++++++++++++++----------------- src/backend/langflow/settings.py | 4 +- 3 files changed, 113 insertions(+), 126 deletions(-) diff --git a/src/backend/langflow/__main__.py b/src/backend/langflow/__main__.py index 21833d551..af57ed381 100644 --- a/src/backend/langflow/__main__.py +++ b/src/backend/langflow/__main__.py @@ -18,59 +18,10 @@ def get_number_of_workers(workers=None): return workers -def update_settings(config: str): +def update_settings(config: str, dev: bool = False): """Update the settings from a config file.""" if config: - settings.update_from_yaml(config) - - -@app.command() -def serve( - host: str = typer.Option("127.0.0.1", help="Host to bind the server to."), - workers: int = typer.Option(1, help="Number of worker processes."), - timeout: int = typer.Option(60, help="Worker timeout in seconds."), - port: int = typer.Option(7860, help="Port to listen on."), - config: str = typer.Option("config.yaml", help="Path to the configuration file."), - log_level: str = typer.Option("info", help="Logging level."), - log_file: Path = typer.Option("logs/langflow.log", help="Path to the log file."), - jcloud: bool = typer.Option(False, help="Deploy on Jina AI Cloud"), -): - """ - Run the Langflow server. - """ - - if jcloud: - return serve_on_jcloud() - - configure(log_level=log_level, log_file=log_file) - update_settings(config) - app = create_app() - # get the directory of the current file - path = Path(__file__).parent - static_files_dir = path / "frontend" - app.mount( - "/", - StaticFiles(directory=static_files_dir, html=True), - name="static", - ) - options = { - "bind": f"{host}:{port}", - "workers": get_number_of_workers(workers), - "worker_class": "uvicorn.workers.UvicornWorker", - "timeout": timeout, - } - - if platform.system() in ["Darwin", "Windows"]: - # Run using uvicorn on MacOS and Windows - # Windows doesn't support gunicorn - # MacOS requires an env variable to be set to use gunicorn - import uvicorn - - uvicorn.run(app, host=host, port=port, log_level=log_level) - else: - from langflow.server import LangflowApplication - - LangflowApplication(app, options).run() + settings.update_from_yaml(config, dev=dev) def serve_on_jcloud(): @@ -119,6 +70,56 @@ def serve_on_jcloud(): click.secho("https://github.com/jina-ai/langchain-serve", fg="blue") +@app.command() +def serve( + host: str = typer.Option("127.0.0.1", help="Host to bind the server to."), + workers: int = typer.Option(1, help="Number of worker processes."), + timeout: int = typer.Option(60, help="Worker timeout in seconds."), + port: int = typer.Option(7860, help="Port to listen on."), + config: str = typer.Option("config.yaml", help="Path to the configuration file."), + log_level: str = typer.Option("info", help="Logging level."), + log_file: Path = typer.Option("logs/langflow.log", help="Path to the log file."), + jcloud: bool = typer.Option(False, help="Deploy on Jina AI Cloud"), + dev: bool = typer.Option(False, help="Run in development mode (may contain bugs)"), +): + """ + Run the Langflow server. + """ + + if jcloud: + return serve_on_jcloud() + + configure(log_level=log_level, log_file=log_file) + update_settings(config, dev=dev) + app = create_app() + # get the directory of the current file + path = Path(__file__).parent + static_files_dir = path / "frontend" + app.mount( + "/", + StaticFiles(directory=static_files_dir, html=True), + name="static", + ) + options = { + "bind": f"{host}:{port}", + "workers": get_number_of_workers(workers), + "worker_class": "uvicorn.workers.UvicornWorker", + "timeout": timeout, + } + + if platform.system() in ["Darwin", "Windows"]: + # Run using uvicorn on MacOS and Windows + # Windows doesn't support gunicorn + # MacOS requires an env variable to be set to use gunicorn + import uvicorn + + uvicorn.run(app, host=host, port=port, log_level=log_level) + else: + from langflow.server import LangflowApplication + + LangflowApplication(app, options).run() + + def main(): app() diff --git a/src/backend/langflow/config.yaml b/src/backend/langflow/config.yaml index 84fd12fcd..4ce6a28fc 100644 --- a/src/backend/langflow/config.yaml +++ b/src/backend/langflow/config.yaml @@ -1,3 +1,12 @@ +--- +agents: + - ZeroShotAgent + - JsonAgent + - CSVAgent + - initialize_agent + - VectorStoreAgent + - VectorStoreRouterAgent + - SQLAgent chains: - LLMChain - LLMMathChain @@ -7,32 +16,55 @@ chains: - MidJourneyPromptChain - TimeTravelGuideChain - SQLDatabaseChain - -agents: - - ZeroShotAgent - - JsonAgent - - CSVAgent - - initialize_agent - - VectorStoreAgent - - VectorStoreRouterAgent - - SQLAgent - -prompts: - - PromptTemplate - - FewShotPromptTemplate - - ZeroShotPrompt - # Wait more tests - # - ChatPromptTemplate - # - SystemMessagePromptTemplate - # - HumanMessagePromptTemplate - +documentloaders: + - AirbyteJSONLoader + - CoNLLULoader + - CSVLoader + - UnstructuredEmailLoader + - EverNoteLoader + - FacebookChatLoader + - GutenbergLoader + - BSHTMLLoader + - UnstructuredHTMLLoader + # - UnstructuredImageLoader # Issue with Python 3.11 (https://github.com/Unstructured-IO/unstructured-inference/issues/83) + - UnstructuredMarkdownLoader + - PyPDFLoader + - UnstructuredPowerPointLoader + - SRTLoader + - TelegramChatLoader + - TextLoader + - UnstructuredWordDocumentLoader + - WebBaseLoader + - AZLyricsLoader + - CollegeConfidentialLoader + - HNLoader + - IFixitLoader + - IMSDbLoader + - GitbookLoader + - ReadTheDocsLoader +embeddings: + - OpenAIEmbeddings llms: - OpenAI # - AzureOpenAI - ChatOpenAI - HuggingFaceHub - LlamaCpp - +memories: + - ConversationBufferMemory + - ConversationSummaryMemory + - ConversationKGMemory +prompts: + - PromptTemplate + - FewShotPromptTemplate + - ZeroShotPrompt +textsplitters: + - CharacterTextSplitter +toolkits: + - OpenAPIToolkit + - JsonToolkit + - VectorStoreInfo + - VectorStoreRouterToolkit tools: - Search - PAL-MATH @@ -63,57 +95,6 @@ tools: - RequestsDeleteTool - WikipediaQueryRun - WolframAlphaQueryRun - -wrappers: - - RequestsWrapper - -toolkits: - - OpenAPIToolkit - - JsonToolkit - - VectorStoreInfo - - VectorStoreRouterToolkit - -memories: - - ConversationBufferMemory - - ConversationSummaryMemory - - ConversationKGMemory - -embeddings: - - OpenAIEmbeddings - -vectorstores: - - Chroma - -documentloaders: - - AirbyteJSONLoader - - CoNLLULoader - - CSVLoader - - UnstructuredEmailLoader - - EverNoteLoader - - FacebookChatLoader - - GutenbergLoader - - BSHTMLLoader - - UnstructuredHTMLLoader - # - UnstructuredImageLoader # Issue with Python 3.11 (https://github.com/Unstructured-IO/unstructured-inference/issues/83) - - UnstructuredMarkdownLoader - - PyPDFLoader - - UnstructuredPowerPointLoader - - SRTLoader - - TelegramChatLoader - - TextLoader - - UnstructuredWordDocumentLoader - - WebBaseLoader - - AZLyricsLoader - - CollegeConfidentialLoader - - HNLoader - - IFixitLoader - - IMSDbLoader - - GitbookLoader - - ReadTheDocsLoader - -textsplitters: - - CharacterTextSplitter - utilities: - BingSearchAPIWrapper - GoogleSearchAPIWrapper @@ -125,5 +106,10 @@ utilities: - WolframAlphaAPIWrapper # - ZapierNLAWrapper - SQLDatabase - -dev: false +vectorstores: + - Chroma +wrappers: + - RequestsWrapper # Wait more tests + # - ChatPromptTemplate + # - SystemMessagePromptTemplate + # - HumanMessagePromptTemplate diff --git a/src/backend/langflow/settings.py b/src/backend/langflow/settings.py index 48aa5939d..5ef61ab7b 100644 --- a/src/backend/langflow/settings.py +++ b/src/backend/langflow/settings.py @@ -32,7 +32,7 @@ class Settings(BaseSettings): values[key] = [] return values - def update_from_yaml(self, file_path: str): + def update_from_yaml(self, file_path: str, dev: bool = False): new_settings = load_settings_from_yaml(file_path) self.chains = new_settings.chains or [] self.agents = new_settings.agents or [] @@ -44,7 +44,7 @@ class Settings(BaseSettings): self.toolkits = new_settings.toolkits or [] self.textsplitters = new_settings.textsplitters or [] self.utilities = new_settings.utilities or [] - self.dev = new_settings.dev or False + self.dev = dev def save_settings_to_yaml(settings: Settings, file_path: str):