From cba7f31d6f74c24001625e397eeb467c186af068 Mon Sep 17 00:00:00 2001 From: Filipe Caixeta Date: Mon, 15 May 2023 23:01:07 -0300 Subject: [PATCH 1/6] Add health check endpoint --- src/backend/langflow/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/langflow/main.py b/src/backend/langflow/main.py index 56cc32e46..59eaae559 100644 --- a/src/backend/langflow/main.py +++ b/src/backend/langflow/main.py @@ -25,6 +25,7 @@ def create_app(): app.include_router(endpoints_router) app.include_router(validate_router) app.include_router(chat_router) + app.get("/health")(lambda: {"status": "OK"}) return app From 712d212b82baa3d83ce4e54cf3c0bd21f0ae7f33 Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Tue, 16 May 2023 10:43:52 -0300 Subject: [PATCH 2/6] feat(endpoints.py): add get_version endpoint to return version of langflow --- src/backend/langflow/api/endpoints.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/langflow/api/endpoints.py b/src/backend/langflow/api/endpoints.py index eae0e9f60..ee0082afc 100644 --- a/src/backend/langflow/api/endpoints.py +++ b/src/backend/langflow/api/endpoints.py @@ -1,3 +1,4 @@ +from importlib.metadata import version import logging from fastapi import APIRouter, HTTPException @@ -33,3 +34,9 @@ async def get_load(predict_request: PredictRequest): # Log stack trace logger.exception(e) raise HTTPException(status_code=500, detail=str(e)) from e + + +# get endpoint to return version of langflow +@router.get("/version") +def get_version(): + return {"version": version("langflow")} From e3f27aaebf1ff169cb6592216ab730d4aad3c55d Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Tue, 16 May 2023 10:44:02 -0300 Subject: [PATCH 3/6] chore(custom.py): update import for langchain 0.0.170 --- src/backend/langflow/interface/agents/custom.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/langflow/interface/agents/custom.py b/src/backend/langflow/interface/agents/custom.py index d85ba8a56..0cbf7baca 100644 --- a/src/backend/langflow/interface/agents/custom.py +++ b/src/backend/langflow/interface/agents/custom.py @@ -17,7 +17,9 @@ from langchain.agents.agent_toolkits import ( from langchain.agents.agent_toolkits.json.prompt import JSON_PREFIX, JSON_SUFFIX from langchain.agents.agent_toolkits.json.toolkit import JsonToolkit from langchain.agents.agent_toolkits.pandas.prompt import PREFIX as PANDAS_PREFIX -from langchain.agents.agent_toolkits.pandas.prompt import SUFFIX as PANDAS_SUFFIX +from langchain.agents.agent_toolkits.pandas.prompt import ( + SUFFIX_WITH_DF as PANDAS_SUFFIX, +) from langchain.agents.agent_toolkits.sql.prompt import SQL_PREFIX, SQL_SUFFIX from langchain.agents.agent_toolkits.vectorstore.prompt import ( PREFIX as VECTORSTORE_PREFIX, From 5e7ce9dc7b91f45ffff761069dc673c1f6bda2a9 Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Tue, 16 May 2023 11:41:40 -0300 Subject: [PATCH 4/6] feat(langflow): add /health endpoint to API refactor(langflow): remove redundant /health endpoint from main.py --- src/backend/langflow/api/endpoints.py | 5 +++++ src/backend/langflow/main.py | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/backend/langflow/api/endpoints.py b/src/backend/langflow/api/endpoints.py index ee0082afc..02a775630 100644 --- a/src/backend/langflow/api/endpoints.py +++ b/src/backend/langflow/api/endpoints.py @@ -40,3 +40,8 @@ async def get_load(predict_request: PredictRequest): @router.get("/version") def get_version(): return {"version": version("langflow")} + + +@router.get("/health") +def get_health(): + return {"status": "OK"} diff --git a/src/backend/langflow/main.py b/src/backend/langflow/main.py index 59eaae559..56cc32e46 100644 --- a/src/backend/langflow/main.py +++ b/src/backend/langflow/main.py @@ -25,7 +25,6 @@ def create_app(): app.include_router(endpoints_router) app.include_router(validate_router) app.include_router(chat_router) - app.get("/health")(lambda: {"status": "OK"}) return app From a4158b0cb5af8dbf314bbc89e523d72980d2f4aa Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Tue, 16 May 2023 11:46:55 -0300 Subject: [PATCH 5/6] build(Dockerfile): update base image to python:3.10-slim feat(Dockerfile): add gcc, g++, git, and make to apt-get install feat(Dockerfile): add user and set environment variables feat(Dockerfile): add WORKDIR and COPY feat(Dockerfile): update langflow to version 0.0.71 feat(Dockerfile): add --port flag to CMD --- Dockerfile | 14 -------------- docker_example/Dockerfile | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 19 deletions(-) delete mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 1b713c3a0..000000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM python:3.10-slim - -RUN apt-get update && apt-get install gcc g++ git make -y -RUN useradd -m -u 1000 user -USER user -ENV HOME=/home/user \ - PATH=/home/user/.local/bin:$PATH - -WORKDIR $HOME/app - -COPY --chown=user . $HOME/app - -RUN pip install langflow>==0.0.71 -U --user -CMD ["langflow", "--host", "0.0.0.0", "--port", "7860"] diff --git a/docker_example/Dockerfile b/docker_example/Dockerfile index d05a6810b..1b713c3a0 100644 --- a/docker_example/Dockerfile +++ b/docker_example/Dockerfile @@ -1,7 +1,14 @@ -FROM python:3.11-slim +FROM python:3.10-slim -RUN apt-get update && apt-get install gcc -y -RUN pip install langflow>=0.0.33 +RUN apt-get update && apt-get install gcc g++ git make -y +RUN useradd -m -u 1000 user +USER user +ENV HOME=/home/user \ + PATH=/home/user/.local/bin:$PATH -EXPOSE 7860 -CMD ["langflow", "--host", "0.0.0.0"] \ No newline at end of file +WORKDIR $HOME/app + +COPY --chown=user . $HOME/app + +RUN pip install langflow>==0.0.71 -U --user +CMD ["langflow", "--host", "0.0.0.0", "--port", "7860"] From 7b9b3968b0387476a434d747ad22867797aa6d0c Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Tue, 16 May 2023 11:55:27 -0300 Subject: [PATCH 6/6] chore(pyproject.toml): update langchain dependency from 0.0.166 to 0.0.170 --- poetry.lock | 15 +++++++-------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index be596cd0a..b9f7fcb52 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1696,14 +1696,14 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "langchain" -version = "0.0.166" +version = "0.0.170" description = "Building applications with LLMs through composability" category = "main" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain-0.0.166-py3-none-any.whl", hash = "sha256:32417cc38ba211d46c3e97f29cb8124175fe46047bda14a4c634351b005acd21"}, - {file = "langchain-0.0.166.tar.gz", hash = "sha256:fb1e90eb0aeef9c574e6683586bfbfed1974e187dd8261b571cb33888c35a92e"}, + {file = "langchain-0.0.170-py3-none-any.whl", hash = "sha256:3543c14c08d39c0eef2d1a88a98161a25329720660811c546c8881d91c272c77"}, + {file = "langchain-0.0.170.tar.gz", hash = "sha256:799e047857b0b12606255e4e843c7eb3724ddb85242c97dccd49b007e40486bf"}, ] [package.dependencies] @@ -1718,18 +1718,17 @@ PyYAML = ">=5.4.1" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" tenacity = ">=8.1.0,<9.0.0" -tqdm = ">=4.48.0" [package.extras] -all = ["O365 (>=2.0.26,<3.0.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.2.6,<0.3.0)", "arxiv (>=1.4,<2.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "beautifulsoup4 (>=4,<5)", "clickhouse-connect (>=0.5.14,<0.6.0)", "cohere (>=3,<4)", "deeplake (>=3.3.0,<4.0.0)", "docarray (>=0.31.0,<0.32.0)", "duckduckgo-search (>=2.8.6,<3.0.0)", "elasticsearch (>=8,<9)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-search-results (>=2,<3)", "gptcache (>=0.1.7)", "hnswlib (>=0.7.0,<0.8.0)", "html2text (>=2020.1.16,<2021.0.0)", "huggingface_hub (>=0,<1)", "jina (>=3.14,<4.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lancedb (>=0.1,<0.2)", "lark (>=1.1.5,<2.0.0)", "manifest-ml (>=0.0.1,<0.0.2)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "nomic (>=1.0.43,<2.0.0)", "openai (>=0,<1)", "opensearch-py (>=2.0.0,<3.0.0)", "pexpect (>=4.8.0,<5.0.0)", "pgvector (>=0.1.6,<0.2.0)", "pinecone-client (>=2,<3)", "pinecone-text (>=0.4.2,<0.5.0)", "protobuf (==3.19)", "psycopg2-binary (>=2.9.5,<3.0.0)", "pyowm (>=3.3.0,<4.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pytesseract (>=0.3.10,<0.4.0)", "pyvespa (>=0.33.0,<0.34.0)", "qdrant-client (>=1.1.2,<2.0.0)", "redis (>=4,<5)", "sentence-transformers (>=2,<3)", "spacy (>=3,<4)", "tensorflow-text (>=2.11.0,<3.0.0)", "tiktoken (>=0.3.2,<0.4.0)", "torch (>=1,<3)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"] +all = ["O365 (>=2.0.26,<3.0.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.2.6,<0.3.0)", "arxiv (>=1.4,<2.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "beautifulsoup4 (>=4,<5)", "clickhouse-connect (>=0.5.14,<0.6.0)", "cohere (>=3,<4)", "deeplake (>=3.3.0,<4.0.0)", "docarray (>=0.31.0,<0.32.0)", "duckduckgo-search (>=2.8.6,<3.0.0)", "elasticsearch (>=8,<9)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-search-results (>=2,<3)", "gptcache (>=0.1.7)", "hnswlib (>=0.7.0,<0.8.0)", "html2text (>=2020.1.16,<2021.0.0)", "huggingface_hub (>=0,<1)", "jina (>=3.14,<4.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lancedb (>=0.1,<0.2)", "lark (>=1.1.5,<2.0.0)", "manifest-ml (>=0.0.1,<0.0.2)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "nomic (>=1.0.43,<2.0.0)", "openai (>=0,<1)", "opensearch-py (>=2.0.0,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pexpect (>=4.8.0,<5.0.0)", "pgvector (>=0.1.6,<0.2.0)", "pinecone-client (>=2,<3)", "pinecone-text (>=0.4.2,<0.5.0)", "protobuf (==3.19)", "psycopg2-binary (>=2.9.5,<3.0.0)", "pyowm (>=3.3.0,<4.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pytesseract (>=0.3.10,<0.4.0)", "pyvespa (>=0.33.0,<0.34.0)", "qdrant-client (>=1.1.2,<2.0.0)", "redis (>=4,<5)", "sentence-transformers (>=2,<3)", "spacy (>=3,<4)", "steamship (>=2.16.9,<3.0.0)", "tensorflow-text (>=2.11.0,<3.0.0)", "tiktoken (>=0.3.2,<0.4.0)", "torch (>=1,<3)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"] azure = ["azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "openai (>=0,<1)"] cohere = ["cohere (>=3,<4)"] embeddings = ["sentence-transformers (>=2,<3)"] -extended-testing = ["pdfminer-six (>=20221105,<20221106)", "pypdf (>=3.4.0,<4.0.0)"] +extended-testing = ["jq (>=1.4.1,<2.0.0)", "lxml (>=4.9.2,<5.0.0)", "pdfminer-six (>=20221105,<20221106)", "pypdf (>=3.4.0,<4.0.0)", "tqdm (>=4.48.0)"] hnswlib = ["docarray (>=0.31.0,<0.32.0)", "hnswlib (>=0.7.0,<0.8.0)", "protobuf (==3.19)"] in-memory-store = ["docarray (>=0.31.0,<0.32.0)"] llms = ["anthropic (>=0.2.6,<0.3.0)", "cohere (>=3,<4)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "torch (>=1,<3)", "transformers (>=4,<5)"] -openai = ["openai (>=0,<1)"] +openai = ["openai (>=0,<1)", "tiktoken (>=0.3.2,<0.4.0)"] qdrant = ["qdrant-client (>=1.1.2,<2.0.0)"] [[package]] @@ -4839,4 +4838,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "be5c3e25247d4a0c313de54d07f4a027253877a5b8fbbf7830030a43a02c2911" +content-hash = "0524829f482c4eab8c25205d68dcec64084a28823de82cd3c3737e6bb74439c7" diff --git a/pyproject.toml b/pyproject.toml index 8c155f433..6dc96b9eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ google-search-results = "^2.4.1" google-api-python-client = "^2.79.0" typer = "^0.7.0" gunicorn = "^20.1.0" -langchain = "^0.0.166" +langchain = "^0.0.170" openai = "^0.27.2" types-pyyaml = "^6.0.12.8" dill = "^0.3.6"