Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/docs/Components/bundles-google.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ slug: /bundles-google
---

import Icon from "@site/src/components/icon";
import PartialLfxBundlesInstall from '@site/docs/_partial-bundle-lfx-bundles-install.mdx';
import { GraduatedBundleInstall } from '@site/docs/_partial-bundle-graduated-install.mdx';

<PartialLfxBundlesInstall />
<GraduatedBundleInstall packageName="google" />

<Icon name="Blocks" aria-hidden="true" /> [**Bundles**](/components-bundle-components) contain custom components that support specific third-party integrations with Langflow.

Expand Down Expand Up @@ -203,4 +203,4 @@ While there is no direct replacement, consider using the [**API Request** compon
## See also

- [**Composio** bundle](/bundles-composio)
- [**Vertex AI** bundle](/bundles-vertexai)
- [**Vertex AI** bundle](/bundles-vertexai)
4 changes: 2 additions & 2 deletions docs/docs/Lfx/extensions-bundle-list.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This page lists every official Langflow bundle and the pip **extension** package
Bundle names are stable identifiers used in saved flows (`ext:<bundle>:<Class>@official`).
The pip install command is what you run when a bundle is missing from your environment.

This list reflects the bundles included with Langflow 1.11.0.
This list reflects the bundles included with Langflow 1.12.0.
Providers can graduate from `lfx-bundles` to a standalone `lfx-<provider>` package without changing the bundle name in your flows.

## Standalone packages
Expand All @@ -26,6 +26,7 @@ These providers ship as their own pip packages, each on its own release cadence.
| [`empiriolabs`](./bundles-empiriolabs) (EmpirioLabs) | `uv pip install lfx-empiriolabs` |
| [`exa`](/bundles-exa) (Exa) | `uv pip install lfx-exa` |
| [`firecrawl`](/bundles-firecrawl) (Firecrawl) | `uv pip install lfx-firecrawl` |
| [`google`](/bundles-google) (Google components) | `uv pip install lfx-google` |
| [`ibm`](/bundles-ibm) (IBM) | `uv pip install lfx-ibm` |
| [`nextplaid`](./bundles-nextplaid) (NextPlaid) | `uv pip install lfx-nextplaid` |
| [`openai`](/bundles-openai) (OpenAI) | `uv pip install lfx-openai` |
Expand Down Expand Up @@ -67,7 +68,6 @@ Bare `uv pip install lfx-bundles` registers the provider code only; add a per-pr
| [`faiss`](/bundles-faiss) (FAISS) | `uv pip install "lfx-bundles[faiss]"` |
| `git` | `uv pip install "lfx-bundles[git]"` |
| [`glean`](/bundles-glean) (Glean) | `uv pip install "lfx-bundles[glean]"` |
| [`google`](/bundles-google) (Google components) | `uv pip install "lfx-bundles[google]"` |
| [`groq`](/bundles-groq) (Groq) | `uv pip install "lfx-bundles[groq]"` |
| `homeassistant` | `uv pip install "lfx-bundles[homeassistant]"` |
| [`huggingface`](/bundles-huggingface) (Hugging Face) | `uv pip install "lfx-bundles[huggingface]"` |
Expand Down
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ dependencies = [
"lfx-openai-compatible>=0.1.0,<1.0.0",
"lfx-exa>=0.1.0,<1.0.0",
"lfx-valkey>=0.1.0,<1.0.0",
"lfx-google>=0.1.0,<1.0.0",
# langflow-extensions:bundle-deps-end
]

Expand Down Expand Up @@ -123,6 +124,7 @@ lfx-empiriolabs = { workspace = true }
lfx-openai-compatible = { workspace = true }
lfx-exa = { workspace = true }
lfx-valkey = { workspace = true }
lfx-google = { workspace = true }
# langflow-extensions:bundle-sources-end
torch = { index = "pytorch-cpu" }
torchvision = { index = "pytorch-cpu" }
Expand Down Expand Up @@ -155,6 +157,7 @@ members = [
"src/bundles/openai-compatible",
"src/bundles/exa",
"src/bundles/valkey",
"src/bundles/google",
# langflow-extensions:bundle-members-end
]

Expand All @@ -167,7 +170,7 @@ Documentation = "https://docs.langflow.org"

[project.optional-dependencies]
bundles = [
"lfx-bundles[all-no-torch]>=1.1.3,<2.0",
"lfx-bundles[all-no-torch]>=1.1.4,<2.0",
]

docling = [
Expand Down
19 changes: 15 additions & 4 deletions scripts/ci/bundle_profile_locks/enterprise-hardened.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,25 @@
"requirement": "lfx-firecrawl==0.1.1",
"resolved_version": "0.1.1"
},
{
"distribution": "lfx-google",
"extras": [],
"providers": [
"lfx-google"
],
"requested": ">=0.1.0,<1.0.0",
"requirement": "lfx-google==0.1.0",
"resolved_version": "0.1.0"
},
{
"distribution": "lfx-ibm",
"extras": [],
"providers": [
"lfx-ibm"
],
"requested": ">=0.1.0,<1.0.0",
"requirement": "lfx-ibm==0.1.3",
"resolved_version": "0.1.3"
"requested": ">=0.1.4,<1.0.0",
"requirement": "lfx-ibm==0.1.4",
"resolved_version": "0.1.4"
},
{
"distribution": "lfx-nextplaid",
Expand Down Expand Up @@ -200,7 +210,7 @@
"https://pypi.org/simple"
],
"profile": "enterprise-hardened",
"profile_digest": "sha256:2bf2a71f550faa0c",
"profile_digest": "sha256:95f4c5899131fc3c",
"providers": [
"lfx-amazon",
"lfx-anthropic",
Expand All @@ -212,6 +222,7 @@
"lfx-empiriolabs",
"lfx-exa",
"lfx-firecrawl",
"lfx-google",
"lfx-ibm",
"lfx-nextplaid",
"lfx-openai",
Expand Down
10 changes: 9 additions & 1 deletion scripts/ci/bundle_profiles.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
{
"distribution": "lfx-ibm",
"extras": [],
"version": ">=0.1.0,<1.0.0",
"version": ">=0.1.4,<1.0.0",
"providers": [
"lfx-ibm"
]
Expand Down Expand Up @@ -164,6 +164,14 @@
"lfx-exa"
]
},
{
"distribution": "lfx-google",
"extras": [],
"version": ">=0.1.0,<1.0.0",
"providers": [
"lfx-google"
]
},
{
"distribution": "lfx-valkey",
"extras": [],
Expand Down
27 changes: 24 additions & 3 deletions scripts/ci/release_inventory_contract.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"lfx-empiriolabs",
"lfx-exa",
"lfx-firecrawl",
"lfx-google",
"lfx-ibm",
"lfx-nextplaid",
"lfx-openai",
Expand All @@ -91,6 +92,7 @@
"lfx-empiriolabs",
"lfx-exa",
"lfx-firecrawl",
"lfx-google",
"lfx-ibm",
"lfx-nextplaid",
"lfx-openai",
Expand All @@ -109,8 +111,19 @@
"lfx-openai": [
"lfx_openai/extension.json",
"lfx_openai/components/openai/openai_chat_model.py"
],
"lfx-google": [
"lfx_google/extension.json",
"lfx_google/components/google/google_generative_ai.py"
]
}
},
"module_checks": [
{
"module": "lfx.components.google",
"attribute": "GoogleGenerativeAIComponent",
"expect": "success"
}
]
},
"python-full": {
"extends": "python-default",
Expand All @@ -132,6 +145,7 @@
"lfx-empiriolabs",
"lfx-exa",
"lfx-firecrawl",
"lfx-google",
"lfx-ibm",
"lfx-nextplaid",
"lfx-openai",
Expand Down Expand Up @@ -169,7 +183,6 @@
"faiss",
"git",
"glean",
"google",
"groq",
"homeassistant",
"huggingface",
Expand Down Expand Up @@ -225,14 +238,22 @@
"lfx_openai/extension.json",
"lfx_openai/components/openai/openai_chat_model.py"
],
"lfx-google": [
"lfx_google/extension.json",
"lfx_google/components/google/google_generative_ai.py"
],
"lfx-bundles": [
"lfx_bundles/google/google_generative_ai.py",
"lfx_bundles/mongodb/mongodb_atlas.py",
"lfx_bundles/codeagents/starter_projects/Structured Data Analysis Agent.json",
"lfx_bundles/youtube/starter_projects/Youtube Analysis.json"
]
},
"module_checks": [
{
"module": "lfx.components.google",
"attribute": "GoogleGenerativeAIComponent",
"expect": "success"
},
{
"module": "lfx.components.youtube",
"attribute": "YouTubeTranscriptsComponent",
Expand Down
3 changes: 2 additions & 1 deletion scripts/ci/test_release_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ def test_contract_tracks_every_curated_extension() -> None:
def test_contract_required_files_exist_in_sources() -> None:
source_roots = {
"langflow-base": REPO_ROOT / "src" / "backend" / "base",
"lfx-google": REPO_ROOT / "src" / "bundles" / "google" / "src",
"lfx-openai": REPO_ROOT / "src" / "bundles" / "openai" / "src",
"lfx-bundles": REPO_ROOT / "src" / "bundles" / "lfx-bundles" / "src",
}
Expand All @@ -69,7 +70,7 @@ def test_contract_required_files_exist_in_sources() -> None:

def test_full_python_profile_uses_the_reviewed_root_extra() -> None:
root_project = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8"))["project"]
assert root_project["optional-dependencies"]["bundles"] == ["lfx-bundles[all-no-torch]>=1.1,<2.0"]
assert root_project["optional-dependencies"]["bundles"] == ["lfx-bundles[all-no-torch]>=1.1.4,<2.0"]

gate_path = REPO_ROOT / ".github" / "workflows" / "release-inventory-gate.yml"
gate = gate_path.read_text(encoding="utf-8")
Expand Down
22 changes: 11 additions & 11 deletions scripts/migrate/consolidate_bundles.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,15 +132,8 @@
"olivya": [], # httpx REST only (lfx core)
"agentql": [], # httpx REST only (lfx core)
# --- tranche 7: google family + agent SDKs (markers preserved from base) ---
# google-auth-oauthlib: imported directly by the google_oauth_token component
# (from google_auth_oauthlib.flow import InstalledAppFlow). langchain-google-community
# only pulls it behind its [gmail,drive,calendar] extras, so declare it explicitly.
"google": [
"langchain-google-genai~=4.1.2",
"langchain-google-community~=3.0.2",
"google-api-python-client~=2.161",
"google-auth-oauthlib>=1.2.0,<2.0.0",
],
# "google" graduated to the standalone lfx-google bundle so Gemini is
# available in every default Langflow install.
"vertexai": ["langchain-google-vertexai>=3.2.0"],
"altk": [
"agent-lifecycle-toolkit>=0.10.1,<1.0; sys_platform != 'darwin' or platform_machine != 'x86_64'",
Expand Down Expand Up @@ -192,6 +185,11 @@
# the per-provider extras above: cuga -> cuga, codeagents -> smolagents.
TORCH_EXTRAS = frozenset({"cuga", "codeagents"})

# Deprecated aliases for providers that graduated to standalone bundles. They
# remain installable for compatibility but are intentionally excluded from the
# generated aggregate extras because Langflow already installs them directly.
COMPATIBILITY_EXTRAS = {"google": ["lfx-google>=0.1.0,<1.0.0"]}


def normalize_extra(name: str) -> str:
"""PEP 685 extra-name normalization (lowercase, runs of -_. -> single -)."""
Expand Down Expand Up @@ -317,6 +315,7 @@ def move_provider(provider: str, *, apply: bool) -> list[tuple[str, str]]:

def _render_optional_deps(extras: dict[str, list[str]]) -> str:
keys = sorted(k for k in extras if k not in ("all", "all-no-torch"))
aggregate_keys = [key for key in keys if key not in COMPATIBILITY_EXTRAS]
lines = ["[project.optional-dependencies]", _OPTIONAL_DEPS_HEADER]
for key in keys:
deps = extras[key]
Expand All @@ -326,10 +325,10 @@ def _render_optional_deps(extras: dict[str, list[str]]) -> str:
else:
lines.append(f"{key} = []")
lines.append("all = [")
lines.extend(f' "lfx-bundles[{key}]",' for key in keys)
lines.extend(f' "lfx-bundles[{key}]",' for key in aggregate_keys)
lines.append("]")
lines.append("all-no-torch = [")
lines.extend(f' "lfx-bundles[{key}]",' for key in keys if key not in TORCH_EXTRAS)
lines.extend(f' "lfx-bundles[{key}]",' for key in aggregate_keys if key not in TORCH_EXTRAS)
lines.append("]")
return "\n".join(lines) + "\n"

Expand All @@ -343,6 +342,7 @@ def update_bundles_pyproject(new_extras: dict[str, list[str]], *, apply: bool) -
extras = {k: list(v) for k, v in parsed.get("project", {}).get("optional-dependencies", {}).items()}
extras.pop("all", None)
extras.pop("all-no-torch", None)
extras.update(COMPATIBILITY_EXTRAS)
extras.update(new_extras)

section = _render_optional_deps(extras)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2520,7 +2520,7 @@
},
{
"name": "googleapiclient",
"version": null
"version": "2.198.0"
}
],
"total_dependencies": 7
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@
},
{
"name": "googleapiclient",
"version": null
"version": "2.198.0"
}
],
"total_dependencies": 4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@
},
{
"name": "googleapiclient",
"version": null
"version": "2.198.0"
}
],
"total_dependencies": 4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@
},
{
"name": "googleapiclient",
"version": null
"version": "2.198.0"
}
],
"total_dependencies": 4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -996,7 +996,7 @@
},
{
"name": "googleapiclient",
"version": null
"version": "2.198.0"
}
],
"total_dependencies": 4
Expand Down
Loading
Loading