[tool.hatch.build.targets.wheel] packages = ["langflow"] [tool.pytest.ini_options] minversion = "6.0" #addopts = "-ra" testpaths = ["tests", "integration"] console_output_style = "progress" filterwarnings = ["ignore::DeprecationWarning"] log_cli = true markers = ["async_test"] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" [tool.mypy] plugins = ["pydantic.mypy"] follow_imports = "skip" disable_error_code = ["type-var"] namespace_packages = true mypy_path = "langflow" ignore_missing_imports = true [tool.ruff] target-version = "py310" exclude = ["langflow/alembic"] line-length = 120 [tool.ruff.lint] flake8-annotations.mypy-init-return = true flake8-bugbear.extend-immutable-calls = [ "fastapi.Depends", "fastapi.File", "fastapi.Query", "typer.Option", ] flake8-type-checking.runtime-evaluated-base-classes = [ "pydantic.BaseModel", "typing.TypedDict", # Needed by fastapi "typing_extensions.TypedDict", # Needed by fastapi ] pydocstyle.convention = "google" select = ["ALL"] ignore = [ "C90", # McCabe complexity "CPY", # Missing copyright "COM812", # Messes with the formatter "ERA", # Eradicate commented-out code "FIX002", # Line contains TODO "ISC001", # Messes with the formatter "PERF203", # Rarely useful "PLR09", # Too many something (arg, statements, etc) "RUF012", # Pydantic models are currently not well detected. See https://github.com/astral-sh/ruff/issues/13630 "TD002", # Missing author in TODO "TD003", # Missing issue link in TODO "TRY301", # A bit too harsh (Abstract `raise` to an inner function) # Rules that are TODOs "ANN", # Missing type annotations "D1", # Missing docstrings "SLF001", # Using private attributes outside of class ] [tool.ruff.lint.per-file-ignores] "langflow/api/v1/*" = [ "TCH", # FastAPI needs to evaluate types at runtime ] "langflow/{components/tools/python_code_structured_tool.py,custom/code_parser/code_parser.py,utils/validate.py}" = [ "S102", # Use of exec ] "langflow/services/cache/*" = [ "S301", # Use of pickle ] [tool.uv] dev-dependencies = [ "asgi-lifespan>=2.1.0", "pytest-codspeed>=3.0.0", "pytest-github-actions-annotate-failures>=0.2.0", "types-aiofiles>=24.1.0.20240626", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "langflow-base" version = "0.1.1" description = "A Python package with a built-in web application" requires-python = ">=3.10,<3.13" license = "MIT" keywords = ["nlp", "langchain", "openai", "gpt", "gui"] readme = "README.md" maintainers = [ { name = "Carlos Coelho", email = "carlos@langflow.org" }, { name = "Cristhian Zanforlin", email = "cristhian.lousa@gmail.com" }, { name = "Gabriel Almeida", email = "gabriel@langflow.org" }, { name = "Igor Carvalho", email = "igorr.ackerman@gmail.com" }, { name = "Lucas Eduoli", email = "lucaseduoli@gmail.com" }, { name = "Otávio Anovazzi", email = "otavio2204@gmail.com" }, { name = "Rodrigo Nader", email = "rodrigo@langflow.org" }, { name = "Italo dos Anjos", email = "italojohnnydosanjos@gmail.com" }, ] dependencies = [ "fastapi>=0.115.2,<1.0.0", "httpx[http2]>=0.27,<1.0.0", "uvicorn>=0.30.0,<1.0.0", "gunicorn>=22.0.0,<24.0.0", "langchain~=0.3.3", "langchain-core~=0.3.15", "langchainhub~=0.1.15", "sqlmodel==0.0.18", "loguru>=0.7.1,<1.0.0", "rich>=13.7.0,<14.0.0", "langchain-experimental>=0.0.61,<1.0.0", "pydantic~=2.7.0", "pydantic-settings>=2.2.0,<3.0.0", "typer>=0.13.0,<1.0.0", "cachetools>=5.5.0,<6.0.0", "platformdirs>=4.2.0,<5.0.0", "python-multipart>=0.0.12,<1.0.0", "orjson==3.10.0", "alembic>=1.13.0,<2.0.0", "passlib>=1.7.4,<2.0.0", "bcrypt==4.0.1", "pillow>=10.2.0,<11.0.0", "docstring-parser>=0.16,<1.0.0", "python-jose>=3.3.0,<4.0.0", "pandas==2.2.2", "multiprocess>=0.70.14,<1.0.0", "duckdb>=1.0.0,<2.0.0", "python-docx>=1.1.0,<2.0.0", "jq>=1.7.0,<2.0.0; sys_platform != 'win32'", "nest-asyncio>=1.6.0,<2.0.0", "emoji>=2.12.0,<3.0.0", "cryptography>=42.0.5,<44.0.0", "asyncer>=0.0.5,<1.0.0", "pyperclip>=1.8.2,<2.0.0", "uncurl>=0.0.11,<1.0.0", "sentry-sdk[fastapi,loguru]>=2.5.1,<3.0.0", "chardet>=5.2.0,<6.0.0", "firecrawl-py>=1.0.16,<2.0.0", "opentelemetry-api>=1.25.0,<2.0.0", "opentelemetry-sdk>=1.25.0,<2.0.0", "opentelemetry-exporter-prometheus>=0.46b0,<1.0.0", "opentelemetry-instrumentation-fastapi>=0.46b0,<1.0.0", "prometheus-client>=0.20.0,<1.0.0", "aiofiles>=24.1.0,<25.0.0", "setuptools>=70,<76.0.0", "nanoid>=2.0.0,<3.0.0", "filelock>=3.15.4,<4.0.0", "grandalf>=0.8.0,<1.0.0", "crewai~=0.80.0", "spider-client>=0.0.27,<1.0.0", "diskcache>=5.6.3,<6.0.0", "clickhouse-connect==0.7.19", "assemblyai>=0.33.0,<1.0.0", "fastapi-pagination>=0.12.29,<1.0.0", "defusedxml>=0.7.1,<1.0.0", "pypdf~=5.1.0", "validators>=0.34.0", ] [project.urls] Repository = "https://github.com/langflow-ai/langflow" Documentation = "https://docs.langflow.org" # Optional dependencies for uv [project.optional-dependencies] deploy = [ "celery>=5.3.1", "redis>=4.6.0", "flower>=1.0.0" ] local = [ "llama-cpp-python>=0.2.0", "sentence-transformers>=2.0.0", "ctransformers>=0.2" ] all = [ "celery>=5.3.1", "redis>=4.6.0", "flower>=1.0.0", "llama-cpp-python>=0.2.0", "sentence-transformers>=2.0.0", "ctransformers>=0.2" ] # Development dependencies dev = [ "types-redis>=4.6.0.5", "ipykernel>=6.29.0", "mypy>=1.11.0", "ruff>=0.6.2", "httpx[http2]>=0.27", "pytest>=8.2.0", "types-requests>=2.32.0", "requests>=2.32.0", "pytest-cov>=5.0.0", "pandas-stubs>=2.1.4.231227", "types-pillow>=10.2.0.20240213", "types-pyyaml>=6.0.12.8", "types-python-jose>=3.3.4.8", "types-passlib>=1.7.7.13", "pytest-mock>=3.14.0", "pytest-xdist>=3.6.0", "types-pywin32>=306.0.0.4", "types-google-cloud-ndb>=2.2.0.0", "pytest-sugar>=1.0.0", "respx>=0.21.1", "pytest-instafail>=0.5.0", "pytest-asyncio>=0.23.0", "pytest-profiling>=1.7.0", "pre-commit>=3.7.0", "vulture>=2.11", "dictdiffer>=0.9.0", "pytest-split>=0.9.0", "devtools>=0.12.2", "pytest-flakefinder>=1.1.0", "types-markdown>=3.7.0.20240822" ] [project.scripts] langflow-base = "langflow.__main__:main"