* bug: re-add NVIDIA Remix starter template (#8994) feat: add NVIDIA Remix starter template Introduced a new JSON configuration file for the NVIDIA Remix starter project, defining nodes and edges for chat input, output, and agent interactions. This setup enhances the integration of the NVIDIA RTX Remix Toolkit REST API, providing a structured approach for building chat-based applications. Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org> * chore(release): bump to 1.5.0.post2 * bug: re-add NVIDIA Remix starter template (#8994) feat: add NVIDIA Remix starter template Introduced a new JSON configuration file for the NVIDIA Remix starter project, defining nodes and edges for chat input, output, and agent interactions. This setup enhances the integration of the NVIDIA RTX Remix Toolkit REST API, providing a structured approach for building chat-based applications. Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org> * Bump langflow-base version to 0.5.0.post2 Updated the langflow-base package version in pyproject.toml and uv.lock to 0.5.0.post2 for release or deployment purposes. --------- Co-authored-by: Sebastián Estévez <estevezsebastian@gmail.com> Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
332 lines
9 KiB
TOML
332 lines
9 KiB
TOML
[project]
|
|
name = "langflow"
|
|
version = "1.5.0.post2"
|
|
description = "A Python package with a built-in web application"
|
|
requires-python = ">=3.10,<3.14"
|
|
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 = "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" },
|
|
]
|
|
# Define your main dependencies here
|
|
dependencies = [
|
|
"langflow-base~=0.5.0",
|
|
"beautifulsoup4==4.12.3",
|
|
"google-search-results>=2.4.1,<3.0.0",
|
|
"google-api-python-client==2.154.0",
|
|
"huggingface-hub[inference]>=0.23.2,<1.0.0",
|
|
"networkx==3.4.2",
|
|
"fake-useragent==1.5.1",
|
|
"pyarrow==19.0.0",
|
|
"wikipedia==1.4.0",
|
|
"qdrant-client==1.9.2",
|
|
"weaviate-client==4.10.2",
|
|
"faiss-cpu==1.9.0.post1",
|
|
"types-cachetools==5.5.0.20240820",
|
|
"pymongo==4.10.1",
|
|
"supabase==2.6.0",
|
|
"certifi>=2023.11.17,<2025.0.0",
|
|
"certifi==2024.8.30",
|
|
'fastavro==1.9.7; python_version < "3.13"',
|
|
'fastavro>=1.9.8; python_version >= "3.13"',
|
|
"redis>=5.2.1",
|
|
"metaphor-python==0.1.23",
|
|
'pywin32==307; sys_platform == "win32"',
|
|
"langfuse==2.53.9",
|
|
"metal_sdk==2.5.1",
|
|
"MarkupSafe==3.0.2",
|
|
"boto3==1.34.162",
|
|
"numexpr==2.10.2",
|
|
"qianfan==0.3.5",
|
|
"pgvector==0.3.6",
|
|
"langchain==0.3.23",
|
|
"elasticsearch==8.16.0",
|
|
"pytube==15.0.0",
|
|
"dspy-ai==2.5.41",
|
|
"datasets>2.14.7",
|
|
"assemblyai==0.35.1",
|
|
"litellm==1.60.2",
|
|
"chromadb==0.5.23",
|
|
"zep-python==2.0.2",
|
|
"youtube-transcript-api==0.6.3",
|
|
"Markdown==3.7",
|
|
"upstash-vector==0.6.0",
|
|
"GitPython==3.1.43",
|
|
"kubernetes==31.0.0",
|
|
"json_repair==0.30.3",
|
|
"langwatch==0.1.16",
|
|
"langsmith>=0.3.42,<1.0.0",
|
|
"yfinance==0.2.50",
|
|
"wolframalpha==5.1.3",
|
|
"astra-assistants[tools]~=2.2.12",
|
|
"composio-langchain==0.7.15",
|
|
"composio-core==0.7.15",
|
|
"spider-client==0.1.24",
|
|
"nltk==3.9.1",
|
|
"lark==1.2.2",
|
|
"jq==1.8.0",
|
|
"pydantic-settings>=2.2.0,<3.0.0",
|
|
"duckduckgo_search==7.2.1",
|
|
"opensearch-py==2.8.0",
|
|
"langchain-google-genai==2.0.6",
|
|
"langchain-cohere==0.3.3",
|
|
"langchain-huggingface==0.3.1",
|
|
"langchain-anthropic==0.3.14",
|
|
"langchain-astradb~=0.6.0",
|
|
"langchain-openai>=0.2.12",
|
|
"langchain-google-vertexai==2.0.7",
|
|
"langchain-groq==0.2.1",
|
|
"langchain-pinecone>=0.2.8",
|
|
"langchain-mistralai==0.2.3",
|
|
"langchain-chroma==0.1.4",
|
|
"langchain-aws==0.2.7",
|
|
"langchain-unstructured==0.1.5",
|
|
"langchain-milvus==0.1.7",
|
|
"langchain-mongodb==0.2.0",
|
|
"langchain-nvidia-ai-endpoints==0.3.8",
|
|
"langchain-google-calendar-tools==0.0.1",
|
|
"langchain-google-community==2.0.3",
|
|
"langchain-elasticsearch==0.3.0",
|
|
"langchain-ollama==0.2.1",
|
|
"langchain-sambanova==0.1.0",
|
|
"langchain-community~=0.3.21",
|
|
"sqlalchemy[aiosqlite]>=2.0.38,<3.0.0",
|
|
"atlassian-python-api==3.41.16",
|
|
"mem0ai==0.1.34",
|
|
"needle-python>=0.4.0",
|
|
"aiofile>=3.9.0,<4.0.0",
|
|
"sseclient-py==1.8.0",
|
|
"arize-phoenix-otel>=0.6.1",
|
|
"openinference-instrumentation-langchain>=0.1.29",
|
|
# "crewai>=0.126.0",
|
|
"mcp>=1.10.1",
|
|
"uv==0.7.20",
|
|
"scipy>=1.14.1",
|
|
"scrapegraph-py>=1.12.0",
|
|
"pydantic-ai>=0.0.19",
|
|
"smolagents>=1.8.0",
|
|
"apify-client>=1.8.1",
|
|
"pylint>=3.3.4",
|
|
"ruff>=0.9.7",
|
|
"langchain-graph-retriever==0.6.1",
|
|
"graph-retriever==0.6.1",
|
|
"ibm-watsonx-ai>=1.3.1",
|
|
"langchain-ibm>=0.3.8",
|
|
"opik>=1.6.3",
|
|
"openai>=1.68.2",
|
|
"cleanlab-tlm>=1.1.2",
|
|
'gassist>=0.0.1; sys_platform == "win32"',
|
|
"twelvelabs>=0.4.7",
|
|
"docling_core>=2.36.1",
|
|
"filelock>=3.18.0",
|
|
"jigsawstack==0.2.7",
|
|
"fastparquet>=2024.11.0",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest-instafail>=0.5.0",
|
|
"types-redis>=4.6.0.5",
|
|
"ipykernel>=6.29.0",
|
|
"mypy>=1.11.0",
|
|
"ruff>=0.9.7,<0.10",
|
|
"httpx>=0.27.0",
|
|
"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-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",
|
|
"pytest-flakefinder>=1.1.0",
|
|
"types-markdown>=3.7.0.20240822",
|
|
"packaging>=24.1,<25.0",
|
|
"asgi-lifespan>=2.1.0",
|
|
"pytest-github-actions-annotate-failures>=0.2.0",
|
|
"blockbuster>=1.5.20,<1.6",
|
|
"types-aiofiles>=24.1.0.20240626",
|
|
"codeflash>=0.8.4",
|
|
"hypothesis>=6.123.17",
|
|
"locust>=2.32.9",
|
|
"pytest-rerunfailures>=15.0",
|
|
"scrapegraph-py>=1.10.2",
|
|
"pydantic-ai>=0.0.19",
|
|
'elevenlabs==1.58.1; python_version == "3.12"',
|
|
'elevenlabs>=1.52.0; python_version != "3.12"',
|
|
"faker>=37.0.0",
|
|
"pytest-timeout>=2.3.1",
|
|
"pyyaml>=6.0.2",
|
|
"pyleak>=0.1.14",
|
|
]
|
|
|
|
[tool.uv.sources]
|
|
langflow-base = { workspace = true }
|
|
langflow = { workspace = true }
|
|
|
|
[tool.uv.workspace]
|
|
members = ["src/backend/base", "."]
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/backend/langflow"]
|
|
|
|
[project.urls]
|
|
Repository = "https://github.com/langflow-ai/langflow"
|
|
Documentation = "https://docs.langflow.org"
|
|
|
|
[project.optional-dependencies]
|
|
docling = [
|
|
"docling>=2.36.1",
|
|
]
|
|
|
|
audio = [
|
|
"webrtcvad>=2.0.10",
|
|
]
|
|
|
|
couchbase = [
|
|
"couchbase>=4.2.1"
|
|
]
|
|
cassio = [
|
|
"cassio>=0.1.7"
|
|
]
|
|
local = [
|
|
"llama-cpp-python~=0.2.0",
|
|
"sentence-transformers>=2.3.1",
|
|
"ctransformers>=0.2.10"
|
|
]
|
|
clickhouse-connect = [
|
|
"clickhouse-connect==0.7.19"
|
|
]
|
|
|
|
nv-ingest = [
|
|
"nv-ingest-api==2025.4.22.dev20250422",
|
|
"nv-ingest-client==2025.4.22.dev20250422",
|
|
]
|
|
|
|
postgresql = [
|
|
"sqlalchemy[postgresql_psycopg2binary]>=2.0.38,<3.0.0",
|
|
"sqlalchemy[postgresql_psycopg]>=2.0.38,<3.0.0",
|
|
]
|
|
|
|
[tool.uv]
|
|
override-dependencies = [
|
|
# temporary force a newer python-pptx
|
|
"python-pptx>=1.0.2"
|
|
]
|
|
|
|
[project.scripts]
|
|
langflow = "langflow.langflow_launcher:main"
|
|
|
|
[tool.codespell]
|
|
skip = '.git,*.pdf,*.svg,*.pdf,*.yaml,*.ipynb,poetry.lock,*.min.js,*.css,package-lock.json,*.trig.,**/node_modules/**,./stuff/*,*.csv'
|
|
# Ignore latin etc
|
|
ignore-regex = '.*(Stati Uniti|Tense=Pres).*'
|
|
|
|
|
|
[tool.pytest.ini_options]
|
|
timeout = 150
|
|
timeout_method = "signal"
|
|
minversion = "6.0"
|
|
testpaths = ["src/backend/tests"]
|
|
console_output_style = "progress"
|
|
filterwarnings = ["ignore::DeprecationWarning", "ignore::ResourceWarning"]
|
|
log_cli = true
|
|
log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)"
|
|
log_cli_date_format = "%Y-%m-%d %H:%M:%S"
|
|
markers = ["async_test", "api_key_required", "no_blockbuster", "benchmark"]
|
|
asyncio_mode = "auto"
|
|
asyncio_default_fixture_loop_scope = "function"
|
|
|
|
[tool.coverage.run]
|
|
command_line = """
|
|
-m pytest --ignore=tests/integration
|
|
--cov --cov-report=term --cov-report=html
|
|
--instafail -ra -n auto -m "not api_key_required"
|
|
"""
|
|
source = ["src/backend/base/langflow/"]
|
|
omit = ["*/alembic/*", "tests/*", "*/__init__.py"]
|
|
|
|
|
|
[tool.coverage.report]
|
|
sort = "Stmts"
|
|
skip_empty = true
|
|
show_missing = false
|
|
ignore_errors = true
|
|
|
|
|
|
[tool.coverage.html]
|
|
directory = "coverage"
|
|
|
|
|
|
[tool.ruff]
|
|
exclude = ["src/backend/base/langflow/alembic/*", "src/frontend/tests/assets/*"]
|
|
line-length = 120
|
|
|
|
[tool.ruff.lint]
|
|
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",
|
|
]
|
|
|
|
# Preview rules that are not yet activated
|
|
external = ["RUF027"]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"scripts/*" = ["D1", "INP", "T201"]
|
|
"src/backend/tests/*" = [
|
|
"D1",
|
|
"PLR2004",
|
|
"S101",
|
|
"SLF001",
|
|
"BLE001", # allow broad-exception catching in tests
|
|
]
|
|
|
|
[tool.ruff.lint.flake8-builtins]
|
|
builtins-allowed-modules = [ "io", "logging", "socket"]
|
|
|
|
[tool.mypy]
|
|
plugins = ["pydantic.mypy"]
|
|
follow_imports = "skip"
|
|
disable_error_code = ["type-var"]
|
|
namespace_packages = true
|
|
mypy_path = "langflow"
|
|
ignore_missing_imports = true
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|