Skip to content

Commit dc79b9f

Browse files
ericharegithub-actions[bot]autofix-ci[bot]
authored
fix: include Google as a default partner bundle (#14220)
* fix: include Google as a default partner bundle * chore: auto-bake note keys and regenerate backend locales/en.json [skip ci] * chore: wake CI * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * fix: address Google bundle review findings * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent 6cfa638 commit dc79b9f

40 files changed

Lines changed: 655 additions & 146 deletions

docs/docs/Components/bundles-google.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ slug: /bundles-google
44
---
55

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

9-
<PartialLfxBundlesInstall />
9+
<GraduatedBundleInstall packageName="google" />
1010

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

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

205205
- [**Composio** bundle](/bundles-composio)
206-
- [**Vertex AI** bundle](/bundles-vertexai)
206+
- [**Vertex AI** bundle](/bundles-vertexai)

docs/docs/Lfx/extensions-bundle-list.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This page lists every official Langflow bundle and the pip **extension** package
77
Bundle names are stable identifiers used in saved flows (`ext:<bundle>:<Class>@official`).
88
The pip install command is what you run when a bundle is missing from your environment.
99

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

1313
## Standalone packages
@@ -26,6 +26,7 @@ These providers ship as their own pip packages, each on its own release cadence.
2626
| [`empiriolabs`](./bundles-empiriolabs) (EmpirioLabs) | `uv pip install lfx-empiriolabs` |
2727
| [`exa`](/bundles-exa) (Exa) | `uv pip install lfx-exa` |
2828
| [`firecrawl`](/bundles-firecrawl) (Firecrawl) | `uv pip install lfx-firecrawl` |
29+
| [`google`](/bundles-google) (Google components) | `uv pip install lfx-google` |
2930
| [`ibm`](/bundles-ibm) (IBM) | `uv pip install lfx-ibm` |
3031
| [`nextplaid`](./bundles-nextplaid) (NextPlaid) | `uv pip install lfx-nextplaid` |
3132
| [`openai`](/bundles-openai) (OpenAI) | `uv pip install lfx-openai` |
@@ -67,7 +68,6 @@ Bare `uv pip install lfx-bundles` registers the provider code only; add a per-pr
6768
| [`faiss`](/bundles-faiss) (FAISS) | `uv pip install "lfx-bundles[faiss]"` |
6869
| `git` | `uv pip install "lfx-bundles[git]"` |
6970
| [`glean`](/bundles-glean) (Glean) | `uv pip install "lfx-bundles[glean]"` |
70-
| [`google`](/bundles-google) (Google components) | `uv pip install "lfx-bundles[google]"` |
7171
| [`groq`](/bundles-groq) (Groq) | `uv pip install "lfx-bundles[groq]"` |
7272
| `homeassistant` | `uv pip install "lfx-bundles[homeassistant]"` |
7373
| [`huggingface`](/bundles-huggingface) (Hugging Face) | `uv pip install "lfx-bundles[huggingface]"` |

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ dependencies = [
4646
"lfx-openai-compatible>=0.1.0,<1.0.0",
4747
"lfx-exa>=0.1.0,<1.0.0",
4848
"lfx-valkey>=0.1.0,<1.0.0",
49+
"lfx-google>=0.1.0,<1.0.0",
4950
# langflow-extensions:bundle-deps-end
5051
]
5152

@@ -123,6 +124,7 @@ lfx-empiriolabs = { workspace = true }
123124
lfx-openai-compatible = { workspace = true }
124125
lfx-exa = { workspace = true }
125126
lfx-valkey = { workspace = true }
127+
lfx-google = { workspace = true }
126128
# langflow-extensions:bundle-sources-end
127129
torch = { index = "pytorch-cpu" }
128130
torchvision = { index = "pytorch-cpu" }
@@ -155,6 +157,7 @@ members = [
155157
"src/bundles/openai-compatible",
156158
"src/bundles/exa",
157159
"src/bundles/valkey",
160+
"src/bundles/google",
158161
# langflow-extensions:bundle-members-end
159162
]
160163

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

168171
[project.optional-dependencies]
169172
bundles = [
170-
"lfx-bundles[all-no-torch]>=1.1.3,<2.0",
173+
"lfx-bundles[all-no-torch]>=1.1.4,<2.0",
171174
]
172175

173176
docling = [

scripts/ci/bundle_profile_locks/enterprise-hardened.lock.json

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,25 @@
112112
"requirement": "lfx-firecrawl==0.1.1",
113113
"resolved_version": "0.1.1"
114114
},
115+
{
116+
"distribution": "lfx-google",
117+
"extras": [],
118+
"providers": [
119+
"lfx-google"
120+
],
121+
"requested": ">=0.1.0,<1.0.0",
122+
"requirement": "lfx-google==0.1.0",
123+
"resolved_version": "0.1.0"
124+
},
115125
{
116126
"distribution": "lfx-ibm",
117127
"extras": [],
118128
"providers": [
119129
"lfx-ibm"
120130
],
121-
"requested": ">=0.1.0,<1.0.0",
122-
"requirement": "lfx-ibm==0.1.3",
123-
"resolved_version": "0.1.3"
131+
"requested": ">=0.1.4,<1.0.0",
132+
"requirement": "lfx-ibm==0.1.4",
133+
"resolved_version": "0.1.4"
124134
},
125135
{
126136
"distribution": "lfx-nextplaid",
@@ -200,7 +210,7 @@
200210
"https://pypi.org/simple"
201211
],
202212
"profile": "enterprise-hardened",
203-
"profile_digest": "sha256:2bf2a71f550faa0c",
213+
"profile_digest": "sha256:95f4c5899131fc3c",
204214
"providers": [
205215
"lfx-amazon",
206216
"lfx-anthropic",
@@ -212,6 +222,7 @@
212222
"lfx-empiriolabs",
213223
"lfx-exa",
214224
"lfx-firecrawl",
225+
"lfx-google",
215226
"lfx-ibm",
216227
"lfx-nextplaid",
217228
"lfx-openai",

scripts/ci/bundle_profiles.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
{
4848
"distribution": "lfx-ibm",
4949
"extras": [],
50-
"version": ">=0.1.0,<1.0.0",
50+
"version": ">=0.1.4,<1.0.0",
5151
"providers": [
5252
"lfx-ibm"
5353
]
@@ -164,6 +164,14 @@
164164
"lfx-exa"
165165
]
166166
},
167+
{
168+
"distribution": "lfx-google",
169+
"extras": [],
170+
"version": ">=0.1.0,<1.0.0",
171+
"providers": [
172+
"lfx-google"
173+
]
174+
},
167175
{
168176
"distribution": "lfx-valkey",
169177
"extras": [],

scripts/ci/release_inventory_contract.json

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"lfx-empiriolabs",
6767
"lfx-exa",
6868
"lfx-firecrawl",
69+
"lfx-google",
6970
"lfx-ibm",
7071
"lfx-nextplaid",
7172
"lfx-openai",
@@ -91,6 +92,7 @@
9192
"lfx-empiriolabs",
9293
"lfx-exa",
9394
"lfx-firecrawl",
95+
"lfx-google",
9496
"lfx-ibm",
9597
"lfx-nextplaid",
9698
"lfx-openai",
@@ -109,8 +111,19 @@
109111
"lfx-openai": [
110112
"lfx_openai/extension.json",
111113
"lfx_openai/components/openai/openai_chat_model.py"
114+
],
115+
"lfx-google": [
116+
"lfx_google/extension.json",
117+
"lfx_google/components/google/google_generative_ai.py"
112118
]
113-
}
119+
},
120+
"module_checks": [
121+
{
122+
"module": "lfx.components.google",
123+
"attribute": "GoogleGenerativeAIComponent",
124+
"expect": "success"
125+
}
126+
]
114127
},
115128
"python-full": {
116129
"extends": "python-default",
@@ -132,6 +145,7 @@
132145
"lfx-empiriolabs",
133146
"lfx-exa",
134147
"lfx-firecrawl",
148+
"lfx-google",
135149
"lfx-ibm",
136150
"lfx-nextplaid",
137151
"lfx-openai",
@@ -169,7 +183,6 @@
169183
"faiss",
170184
"git",
171185
"glean",
172-
"google",
173186
"groq",
174187
"homeassistant",
175188
"huggingface",
@@ -225,14 +238,22 @@
225238
"lfx_openai/extension.json",
226239
"lfx_openai/components/openai/openai_chat_model.py"
227240
],
241+
"lfx-google": [
242+
"lfx_google/extension.json",
243+
"lfx_google/components/google/google_generative_ai.py"
244+
],
228245
"lfx-bundles": [
229-
"lfx_bundles/google/google_generative_ai.py",
230246
"lfx_bundles/mongodb/mongodb_atlas.py",
231247
"lfx_bundles/codeagents/starter_projects/Structured Data Analysis Agent.json",
232248
"lfx_bundles/youtube/starter_projects/Youtube Analysis.json"
233249
]
234250
},
235251
"module_checks": [
252+
{
253+
"module": "lfx.components.google",
254+
"attribute": "GoogleGenerativeAIComponent",
255+
"expect": "success"
256+
},
236257
{
237258
"module": "lfx.components.youtube",
238259
"attribute": "YouTubeTranscriptsComponent",

scripts/ci/test_release_inventory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def test_contract_tracks_every_curated_extension() -> None:
5656
def test_contract_required_files_exist_in_sources() -> None:
5757
source_roots = {
5858
"langflow-base": REPO_ROOT / "src" / "backend" / "base",
59+
"lfx-google": REPO_ROOT / "src" / "bundles" / "google" / "src",
5960
"lfx-openai": REPO_ROOT / "src" / "bundles" / "openai" / "src",
6061
"lfx-bundles": REPO_ROOT / "src" / "bundles" / "lfx-bundles" / "src",
6162
}
@@ -69,7 +70,7 @@ def test_contract_required_files_exist_in_sources() -> None:
6970

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

7475
gate_path = REPO_ROOT / ".github" / "workflows" / "release-inventory-gate.yml"
7576
gate = gate_path.read_text(encoding="utf-8")

scripts/migrate/consolidate_bundles.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,8 @@
132132
"olivya": [], # httpx REST only (lfx core)
133133
"agentql": [], # httpx REST only (lfx core)
134134
# --- tranche 7: google family + agent SDKs (markers preserved from base) ---
135-
# google-auth-oauthlib: imported directly by the google_oauth_token component
136-
# (from google_auth_oauthlib.flow import InstalledAppFlow). langchain-google-community
137-
# only pulls it behind its [gmail,drive,calendar] extras, so declare it explicitly.
138-
"google": [
139-
"langchain-google-genai~=4.1.2",
140-
"langchain-google-community~=3.0.2",
141-
"google-api-python-client~=2.161",
142-
"google-auth-oauthlib>=1.2.0,<2.0.0",
143-
],
135+
# "google" graduated to the standalone lfx-google bundle so Gemini is
136+
# available in every default Langflow install.
144137
"vertexai": ["langchain-google-vertexai>=3.2.0"],
145138
"altk": [
146139
"agent-lifecycle-toolkit>=0.10.1,<1.0; sys_platform != 'darwin' or platform_machine != 'x86_64'",
@@ -192,6 +185,11 @@
192185
# the per-provider extras above: cuga -> cuga, codeagents -> smolagents.
193186
TORCH_EXTRAS = frozenset({"cuga", "codeagents"})
194187

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

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

318316
def _render_optional_deps(extras: dict[str, list[str]]) -> str:
319317
keys = sorted(k for k in extras if k not in ("all", "all-no-torch"))
318+
aggregate_keys = [key for key in keys if key not in COMPATIBILITY_EXTRAS]
320319
lines = ["[project.optional-dependencies]", _OPTIONAL_DEPS_HEADER]
321320
for key in keys:
322321
deps = extras[key]
@@ -326,10 +325,10 @@ def _render_optional_deps(extras: dict[str, list[str]]) -> str:
326325
else:
327326
lines.append(f"{key} = []")
328327
lines.append("all = [")
329-
lines.extend(f' "lfx-bundles[{key}]",' for key in keys)
328+
lines.extend(f' "lfx-bundles[{key}]",' for key in aggregate_keys)
330329
lines.append("]")
331330
lines.append("all-no-torch = [")
332-
lines.extend(f' "lfx-bundles[{key}]",' for key in keys if key not in TORCH_EXTRAS)
331+
lines.extend(f' "lfx-bundles[{key}]",' for key in aggregate_keys if key not in TORCH_EXTRAS)
333332
lines.append("]")
334333
return "\n".join(lines) + "\n"
335334

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

348348
section = _render_optional_deps(extras)

src/backend/base/langflow/initial_setup/starter_projects/Content Aggregator.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2520,7 +2520,7 @@
25202520
},
25212521
{
25222522
"name": "googleapiclient",
2523-
"version": null
2523+
"version": "2.198.0"
25242524
}
25252525
],
25262526
"total_dependencies": 7

src/backend/base/langflow/initial_setup/starter_projects/Financial Report Parser.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@
636636
},
637637
{
638638
"name": "googleapiclient",
639-
"version": null
639+
"version": "2.198.0"
640640
}
641641
],
642642
"total_dependencies": 4

0 commit comments

Comments
 (0)