Skip to content

feat: add static components index to avoid rebuild on startup#10181

Merged
ogabrielluiz merged 70 commits into
mainfrom
build-static-index
Oct 13, 2025
Merged

feat: add static components index to avoid rebuild on startup#10181
ogabrielluiz merged 70 commits into
mainfrom
build-static-index

Conversation

@ogabrielluiz
Copy link
Copy Markdown
Contributor

@ogabrielluiz ogabrielluiz commented Oct 8, 2025

Component Index System

Overview

The component index system provides instant startup performance by prebuilding a static index of all built-in components. This reduces component loading from 15-20 seconds to ~10ms in production.

Architecture

Three-Tier Loading Strategy

  1. Production (Built-in Index): ~10ms

    • Loads from src/lfx/src/lfx/_assets/component_index.json
    • Included in the wheel package
    • No component imports required
  2. Production (Fallback Cache): ~15ms after first run

    • If built-in index missing/invalid
    • Builds once, caches to ~/.cache/lfx/component_index.json
    • Subsequent runs use cache
  3. Development Mode: ~15-20s (always builds)

    • Auto-detected via LFX_DEV=1
    • Always rebuilds for live code changes
    • No caching
    • NEW: Supports selective module loading for faster dev cycles

Building the Index Manually

uv run python scripts/build_component_index.py

Environment Variables

# Force development mode (skip index, always rebuild all components)
LFX_DEV=1 langflow run

# NEW: Load only specific component modules (faster development workflow)
LFX_DEV=mistral,openai,anthropic langflow run

# Use custom index file
LFX_COMPONENTS_INDEX_PATH=/path/to/custom_index.json langflow run

# Use remote index
LFX_COMPONENTS_INDEX_PATH=https://cdn.example.com/index.json langflow run

New Feature: Selective Module Loading

When developing components, you can now load only the modules you're working on:

# Load only Mistral components
LFX_DEV=mistral make backend

# Load multiple specific modules
LFX_DEV=mistral,openai,anthropic make backend

Benefits:

  • Significantly faster startup when working on specific integrations
  • Reduces memory footprint during development
  • Backward compatible - LFX_DEV=1 still loads all components

Implementation:

  • Module names are case-insensitive and whitespace-tolerant
  • Filters at the top-level component category (e.g., mistral, openai, anthropic)
  • Includes comprehensive test coverage for all modes

CI Integration

The GitHub Actions workflow (.github/workflows/update-component-index.yml) automatically:

  1. Triggers on PRs that modify src/lfx/src/lfx/components/**
  2. Rebuilds the component index
  3. Commits changes if the index differs
  4. Comments on the PR about the update

This ensures the index stays in sync with component changes without manual intervention.

How It Works

Index Structure

{
  "version": "0.1.12",
  "sha256": "cb7560c7...",
  "entries": [
    ["CategoryName", {
      "ComponentName": {
        "template": {...},
        "display_name": "...",
        ...
      }
    }]
  ]
}

Loading Flow

┌─────────────────────┐
│ import_langflow_    │
│   components()      │
└──────────┬──────────┘
           │
           ├─ Dev Mode?
           │  └─ Yes → Build Dynamically
           │     ├─ Module Filter?
           │     │  └─ Yes → Load Filtered Modules ✓
           │     └─ No → Load All Modules
           │
           ├─ Built-in Index?
           │  └─ Yes → Load (10ms) ✓
           │
           ├─ Cache Exists?
           │  └─ Yes → Load (15ms) ✓
           │
           └─ Build & Cache → (15s first, 15ms after)

Changes Made

  • Enhanced _parse_dev_mode() to return (enabled, module_list) tuple
  • Added module filtering logic in import_langflow_components()
  • Updated tests to cover selective loading modes
  • Updated DEVELOPMENT.md with usage examples
  • Improved pytest error messages for better developer experience

Summary by CodeRabbit

  • New Features

    • Faster startup via a prebuilt component index with transparent caching and dev-mode fallback.
    • New setting to load a component index from a custom path or URL.
    • NEW: Selective module loading in development mode for faster iteration cycles.
  • Starter Projects

    • Updated dependencies across multiple templates (e.g., langchain_core, boto3, scrapegraph_py) with no functional changes.
  • Chores

    • Added CI workflow to auto-update the component index and notify on PRs.
    • Improved .gitignore to exclude user-specific cache files.
    • Enhanced pytest error messages for clearer developer guidance.

This script generates a prebuilt index of all built-in components in the lfx.components package, saving it as a JSON file for quick loading at runtime. It includes versioning and integrity verification through SHA256 hashing.
- Bump revision to 3 in uv.lock.
- Update dependency markers for several packages to improve compatibility with Python versions and platforms.
- Increment versions for langflow (1.6.4) and langflow-base (0.6.4).
- Adjust dependency markers for packages related to darwin platform to enhance specificity.
- Added entry for user-specific component index cache directory to .gitignore.
- Included member_servers.json in the ignore list for better file management.
- Introduced functions to detect development mode and read a custom component index from a specified path or URL.
- Added caching mechanism for dynamically generated component indices to improve performance.
- Updated `import_langflow_components` to utilize the new index reading and caching logic, allowing for faster startup in production mode.
- Added `components_index_path` to settings for user-defined index configuration.
…ndex

- Introduced a new workflow that triggers on pull requests and manual dispatch to update the component index.
- The workflow checks for changes in the component index and commits updates if necessary.
- Added a comment feature to notify users when the component index is updated.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Oct 8, 2025

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Adds a GitHub Actions workflow to build and push a prebuilt component index. Introduces a Python script to generate the index JSON with hashing. Extends components loading to prefer a prebuilt/cached index with fallbacks and a new settings field for custom index paths. Updates .gitignore and bumps dependencies in starter project JSONs.

Changes

Cohort / File(s) Summary
CI Workflow: Component Index
.github/workflows/update-component-index.yml
New workflow to build component index on PRs/dispatch, commit updated component_index.json, and comment on PRs when changes occur.
Index Build Script
scripts/build_component_index.py
New script to scan components, build JSON index with version and SHA256, and write to src/lfx/src/lfx/_assets/component_index.json. Includes CLI entry (main) and error handling.
Components Loading & Caching
src/lfx/src/lfx/interface/components.py
Adds dev/prod mode detection, prebuilt index reading/validation, cache read/write, dynamic fallback loading, optional settings-driven custom index path, and signature change to accept settings_service.
Settings Extension
src/lfx/src/lfx/services/settings/base.py
Adds new public field `components_index_path: str
Git Ignore Updates
.gitignore
Adds cache ignores for **/.cache/lfx/ and retains member_servers.json entry with comment for user-specific component index cache.
Starter Projects: Dependency Bumps
src/backend/base/langflow/initial_setup/starter_projects/*.json
Bumps langchain_core 0.3.77 → 0.3.78 across multiple JSONs. Additional bumps: boto3 1.40.44 → 1.40.45 (News Aggregator), scrapegraph_py 1.31.0 → 1.33.0 (Search agent). No logic changes.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant App as Application
  participant IF as ComponentsInterface
  participant SS as SettingsService
  participant IDX as Prebuilt Index (JSON)
  participant C as Cache (~/.cache/lfx)
  participant DL as Dynamic Loader
  participant CC as Custom Components

  App->>IF: import_langflow_components(settings_service?)
  IF->>SS: get components_index_path
  alt Non-dev & index path provided
    IF->>IDX: Read index (file/URL)
    IDX-->>IF: Entries + sha256 + version
    IF->>IF: Validate sha256/version
  else Non-dev & no path
    IF->>IDX: Read built-in index
    IDX-->>IF: Entries + sha256 + version
    IF->>IF: Validate sha256/version
  else Dev mode or index missing/invalid
    IF->>C: Try load cached index
    alt Cache hit & valid
      C-->>IF: Cached entries
    else Cache miss/invalid
      IF->>DL: Discover & import modules
      DL-->>IF: Built entries
      IF->>C: Save generated index to cache
    end
  end
  IF->>CC: Load/merge custom components
  IF-->>App: Combined components map
Loading
sequenceDiagram
  autonumber
  actor Dev as Developer
  participant GH as GitHub Actions
  participant Repo as Repository
  participant UV as uv (package manager)
  participant Script as build_component_index.py

  Dev->>Repo: Open PR (changes in components or script)
  GH->>Repo: checkout
  GH->>UV: setup-uv + uv sync
  GH->>Script: uv run scripts/build_component_index.py
  Script-->>Repo: Write component_index.json
  GH->>Repo: Detect changes to index
  alt Changes detected
    GH->>Repo: Commit "update component_index.json [skip ci]" and push
    GH->>Dev: Comment on PR (index updated)
  else No changes
    GH-->>Dev: No action
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested labels

size:XXL, lgtm

Suggested reviewers

  • edwinjosechittilappilly
  • jordanrfrazier

Pre-merge checks and finishing touches

❌ Failed checks (1 error, 1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Test Coverage For New Implementations ❌ Error I searched the PR branch for newly added or modified test files and for any tests referencing the new component index feature or the updated import path/signature. No new or updated test files were found matching the project’s conventions (test_*.py for backend or *.test.ts for frontend), and there are no existing tests referencing the added functionality (e.g., component_index.json, components_index_path, or the new import_langflow_components behavior). Given this is a new feature touching critical startup behavior and settings, the absence of corresponding unit and/or integration tests means the PR does not satisfy the test coverage requirements. Please add tests covering the new component index system: unit tests for _read_component_index (including SHA/version validation, file/URL handling), cache helpers, and dev_mode detection; unit/integration tests for import_langflow_components across the three paths (built-in index, cache fallback, dynamic dev mode), including settings_service.components_index_path overrides and invalid index fallbacks; and a simple test for Settings.components_index_path default behavior. Ensure backend tests follow test*.py naming and verify behavior rather than placeholders.
Test Quality And Coverage ⚠️ Warning I searched the repository for tests related to the new component index system, including the updated async import flow in src/lfx/src/lfx/interface/components.py, the new settings field, and the build script. I found no unit or integration tests referencing component_index.json, components_index_path, LFX_COMPONENTS_INDEX_PATH, LFX_DEV, or the new codepaths (prebuilt index, cache fallback, dynamic load) and no tests for scripts/build_component_index.py. There are also no async tests validating the new import_langflow_components behavior, cache write/read, SHA256/version validation, or error paths, which indicates the main functionality is currently untested. Given the absence of tests, the check fails the specified criteria for coverage and quality. Add pytest-based tests covering: (1) index reading with valid/invalid SHA256 and version; (2) environment and settings routing: default prebuilt index, LFX_COMPONENTS_INDEX_PATH (file and URL mocked), LFX_DEV=1 forcing dynamic build, and editable-install detection; (3) cache fallback when built-in index is missing and cache save/load roundtrip; (4) async import_langflow_components happy path and error handling using proper asyncio pytest patterns (pytest.mark.asyncio); and (5) unit tests for scripts/build_component_index.py to validate index structure, hashing, and failure on import errors (mock imports). Mock filesystem and HTTP with tmp_path and responses/requests-mock, and use monkeypatch for env/settings to align with project testing patterns.
Excessive Mock Usage Warning ❓ Inconclusive I scanned the repository for test files and common mocking patterns (unittest.mock, patch, MagicMock/AsyncMock, pytest-mock’s mocker, and monkeypatch) to identify overly mocked tests. There are no test files or mocking usages present in this PR’s branch, and no evidence of mocks in the repository segments touched by the PR; the changes are primarily workflow automation, a build script, settings additions, and JSON version bumps. Because there are no tests in scope to evaluate for excessive mocking, I cannot determine if the project exhibits poor test design via overuse of mocks. Please provide or point to the test suite paths (e.g., tests/** or specific test files) so I can assess mock usage. If tests are maintained elsewhere or will be added in a follow-up PR, consider the guidelines: reserve mocks for external systems (I/O, network, APIs), avoid patching core logic, prefer real objects or lightweight fakes for intra-module interactions, and add integration tests that exercise the new component index loading paths end-to-end without extensive mocking.
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Test File Naming And Structure ✅ Passed The repository contains extensive backend tests named with the test_*.py pattern in both unit and integration directories, complete with @pytest.fixture setup and @pytest.mark.integration markers for clear integration test delineation, and meaningful test function names covering positive and negative scenarios. Frontend tests include both *.test.tsx and *.spec.ts files managed by Playwright as evidenced by playwright.config.ts, with unit, feature, integration, and regression tests organized logically under src/frontend/tests. Fixtures and setup/teardown configurations are present via conftest.py in both backend and lfx testing areas, and tests clearly cover edge cases and error conditions where appropriate.
Title Check ✅ Passed The title succinctly describes the introduction of a static component index to prevent repeated rebuilds on startup, directly reflecting the PR’s main goal of improving startup performance without extraneous detail.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 8, 2025
@codecov
Copy link
Copy Markdown

codecov Bot commented Oct 8, 2025

Codecov Report

❌ Patch coverage is 69.23077% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 24.73%. Comparing base (60f78f0) to head (4bc9d5e).
⚠️ Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
src/backend/base/langflow/main.py 0.00% 4 Missing ⚠️

❌ Your project status has failed because the head coverage (48.60%) is below the target coverage (55.00%). You can increase the head coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main   #10181      +/-   ##
==========================================
- Coverage   24.76%   24.73%   -0.04%     
==========================================
  Files        1090     1090              
  Lines       40108    40117       +9     
  Branches     5550     5550              
==========================================
- Hits         9934     9921      -13     
- Misses      30003    30025      +22     
  Partials      171      171              
Flag Coverage Δ
backend 48.60% <69.23%> (-0.12%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...backend/base/langflow/services/telemetry/schema.py 100.00% <100.00%> (ø)
...ackend/base/langflow/services/telemetry/service.py 86.23% <100.00%> (+0.20%) ⬆️
src/backend/base/langflow/main.py 60.61% <0.00%> (-2.77%) ⬇️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/lfx/src/lfx/interface/components.py (1)

407-417: Schema mismatch breaks downstream lookups.

component_cache.all_types_dict is set to a flat type->components map, but other functions (e.g., get_type_dict, ensure_component_loaded) expect a top-level "components" wrapper. This causes incorrect merges and lookups.

Normalize to a single shape with "components" at the top, and flatten custom dicts if needed:

-        langflow_components = await import_langflow_components(settings_service)
-        custom_components_dict = await _determine_loading_strategy(settings_service)
-
-        # merge the dicts
-        component_cache.all_types_dict = {
-            **langflow_components["components"],
-            **custom_components_dict,
-        }
-        component_count = sum(len(comps) for comps in component_cache.all_types_dict.values())
-        await logger.adebug(f"Loaded {component_count} components")
+        langflow_components = await import_langflow_components(settings_service)
+        custom_components_dict = await _determine_loading_strategy(settings_service)
+
+        # Flatten custom dict if it already has a "components" wrapper
+        custom_flat = custom_components_dict.get("components", custom_components_dict) or {}
+
+        merged = {
+            **langflow_components["components"],
+            **custom_flat,
+        }
+
+        component_cache.all_types_dict = {"components": merged}
+        component_count = sum(len(comps) for comps in merged.values())
+        await logger.adebug(f"Loaded {component_count} components")

This keeps existing callers that read via ["components"] working and prevents accidental nesting.

🧹 Nitpick comments (6)
.github/workflows/update-component-index.yml (2)

18-23: Checkout ref is unsafe for non-PR events.

${{ github.head_ref }} is empty for workflow_dispatch, which can lead to ambiguous checkout. Prefer conditional checkout or omit ref outside PRs.

Use two steps:

  • For PRs:
- name: Checkout repository (PR)
  if: github.event_name == 'pull_request'
  uses: actions/checkout@v4
  with:
    ref: ${{ github.head_ref }}
    token: ${{ secrets.GITHUB_TOKEN }}
  • For others:
- name: Checkout repository
  if: github.event_name != 'pull_request'
  uses: actions/checkout@v4

32-34: Force dynamic rebuild during CI.

Ensure the script doesn’t load an existing index by setting dev mode for the build step.

-      - name: Build component index
-        run: uv run python scripts/build_component_index.py
+      - name: Build component index
+        env:
+          LFX_DEV: "1"
+        run: uv run python scripts/build_component_index.py
src/lfx/src/lfx/interface/components.py (2)

312-319: Docstring/package name mismatch.

Comments reference langflow.components... while the package prefix is lfx.components. Update to avoid confusion.

-    # Extract the top-level subpackage name after "langflow.components."
-    # e.g., "langflow.components.Notion.add_content_to_page" -> "Notion"
+    # Extract the top-level subpackage name after "lfx.components."
+    # e.g., "lfx.components.Notion.add_content_to_page" -> "Notion"

64-133: Optional: make remote index fetching resilient when httpx isn’t installed.

If users set a remote URL but don’t have httpx installed, this silently returns None. Provide a clear error or fallback to stdlib urllib.

  • Catch ModuleNotFoundError for httpx and log a precise message.
  • Optionally use urllib.request as a fallback to read the URL.
  • Consider relaxing strict version matching for custom paths (warn instead of discard), if admins intentionally pin cross-version indices.
scripts/build_component_index.py (2)

41-47: Ensure a fresh build (not from prebuilt index).

import_langflow_components() will load the prebuilt/cached index unless dev mode is active. To guarantee a dynamic rebuild here, set LFX_DEV=1 in the workflow (recommended) or set a default in the script.

If you prefer enforcing in-script:

 def build_component_index():
     """Build the component index by scanning all modules in lfx.components.
@@
-    try:
+    try:
+        import os
+        os.environ.setdefault("LFX_DEV", "1")
         import asyncio

We already suggested setting LFX_DEV in the workflow step. Choose one source of truth to avoid confusion.


78-87: Consider deriving output path from the installed package.

Hardcoding scripts/../src/lfx/src/lfx/_assets/... ties the script to repo layout. Resolving via the package location is more robust.

Example:

import inspect, lfx
pkg_dir = Path(inspect.getfile(lfx)).parent
output_path = pkg_dir / "_assets" / "component_index.json"

Keeps behavior identical but decouples from repo structure.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bceedbd and 79a58c3.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (22)
  • .github/workflows/update-component-index.yml (1 hunks)
  • .gitignore (1 hunks)
  • scripts/build_component_index.py (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Hybrid Search RAG.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Market Research.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json (2 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json (2 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Pokédex Agent.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/SaaS Pricing.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Search agent.json (2 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json (4 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json (1 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Social Media Agent.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Travel Planning Agents.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Vector Store RAG.json (2 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json (2 hunks)
  • src/lfx/src/lfx/interface/components.py (4 hunks)
  • src/lfx/src/lfx/services/settings/base.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
scripts/build_component_index.py (1)
src/lfx/src/lfx/interface/components.py (1)
  • import_langflow_components (183-293)
src/lfx/src/lfx/interface/components.py (1)
src/backend/tests/unit/api/v2/test_mcp_servers_file.py (1)
  • settings_service (96-97)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (47)
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 40/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 23/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 38/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 35/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 28/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 29/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 36/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 31/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 22/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 34/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 39/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 24/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 32/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 26/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 20/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 37/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 30/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 18/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 25/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 21/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 27/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 33/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 9/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 2/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 17/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 16/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 13/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 19/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 1/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 15/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 7/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 4/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 12/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 6/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 5/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 11/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 14/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 3/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 10/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 8/40
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 4
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 3
  • GitHub Check: Run Backend Tests / Integration Tests - Python 3.10
  • GitHub Check: Test Starter Templates
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 2
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 1
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 5
🔇 Additional comments (16)
src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json (1)

892-893: Dependency bump looks good.

Patch upgrade to langchain_core 0.3.78 is consistent with related starter updates and should be safe.

src/backend/base/langflow/initial_setup/starter_projects/SaaS Pricing.json (1)

847-853: langchain_core 0.3.78 is live and installs successfully Verified via pip dry-run.

src/backend/base/langflow/initial_setup/starter_projects/Search agent.json (2)

114-120: scrapegraph_py 1.33.0 is available on PyPI
Pip dry-run install succeeded without errors.


902-908: langchain_core 0.3.78 published and compatible Verified via pip install --dry-run: installable; pydantic 2.10.6 meets its >=2.7.4,<3.0.0 requirement and no dependency conflicts found.

src/backend/base/langflow/initial_setup/starter_projects/Pokédex Agent.json (1)

1197-1203: Confirm langchain_core 0.3.78 release
langchain_core==0.3.78 installs successfully with all required wheels; review its changelog/release notes for any breaking changes before merging.

src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json (1)

1136-1138: Dependency metadata bump LGTM

The starter template now aligns with the latest component metadata; no further changes needed.

Also applies to: 1792-1794

src/backend/base/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json (1)

365-366: Patch bump looks good

Thanks for aligning all of the starter dependency metadata with langchain_core==0.3.78; the update is consistent across the templates and I don’t see any conflicts.

Also applies to: 1013-1014, 2409-2410, 3046-3047

src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json (1)

301-302: Version bump aligns with repo-wide upgrade.

Both langchain_core entries now reference 0.3.78, matching the coordinated dependency update across starter projects. No further action needed.

Also applies to: 767-768

.gitignore (1)

285-287: Ignore additions look correct.

Adding member_servers.json and the user-specific **/.cache/lfx/ cache folder prevents accidental commits of generated component indexes while keeping the packaged asset untouched.

src/backend/base/langflow/initial_setup/starter_projects/Social Media Agent.json (1)

159-161: Dependency bump looks good.

The langchain_core update is consistent across the project metadata; nothing else needed.

Also applies to: 390-392

src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json (1)

1113-1114: LGTM on the version sync.

The langchain_core bump aligns with the rest of the component configuration.

src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json (1)

2537-2539: Dependency bump looks good.

The langchain_core update to 0.3.78 aligns with the rest of the starter metadata—no issues spotted.

src/backend/base/langflow/initial_setup/starter_projects/Market Research.json (1)

1509-1510: Dependency bump looks good.

The langchain_core upgrade to 0.3.78 aligns with the coordinated starter-project updates and has no conflicts here.

src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json (1)

1565-1566: Consistent version alignment.

The langchain_core bump to 0.3.78 keeps this starter in sync with the others and raises no issues.

src/lfx/src/lfx/services/settings/base.py (1)

161-167: New setting looks solid.

Adding components_index_path with clear documentation cleanly exposes the prebuilt index override without disrupting existing defaults.

src/lfx/src/lfx/interface/components.py (1)

639-645: Verify import path alias.

This imports from langflow.services.deps while the module uses lfx.* elsewhere. Confirm the correct package name/alias; otherwise this will raise ModuleNotFoundError in environments without the langflow alias.

Suggested fix if alias isn’t present:

-        from langflow.services.deps import get_settings_service
+        from lfx.services.deps import get_settings_service

Comment thread .github/workflows/update-component-index.yml
Comment thread .github/workflows/update-component-index.yml
Copy link
Copy Markdown
Collaborator

@edwinjosechittilappilly edwinjosechittilappilly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM approving with suggested changes. Not a blocker

@github-actions github-actions Bot added the lgtm This PR has been approved by a maintainer label Oct 8, 2025
- Updated the `_dev_mode` function to improve clarity and functionality in detecting development mode.
- Refined environment variable checks to explicitly handle "1"/"true"/"yes" for development and "0"/"false"/"no" for production.
- Maintained the editable install heuristic as a fallback for determining the mode when the environment variable is not set.
- Revised the `_dev_mode` function to clarify the detection of development mode.
- Removed the editable install heuristic, making the environment variable `LFX_DEV` the sole determinant for development mode.
- Updated documentation to reflect the new behavior and ensure accurate understanding of the mode switching.
- Added tips for enabling dynamic component loading with `LFX_DEV=1` for faster development.
- Emphasized the importance of using `LFX_DEV=1` for live reloading of components during development.
- Included instructions for manually rebuilding the component index for testing purposes.
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 8, 2025
- Introduced comprehensive unit tests for the component index system, covering functions such as _dev_mode, _read_component_index, _save_generated_index, and import_langflow_components.
- Tests include various scenarios for development mode detection, reading and saving component indices, and handling custom paths and URLs.
- Enhanced test coverage to ensure robustness and reliability of the component index features.
- Modified the workflow to include separate checkout steps for pull requests and manual dispatch events.
- Added an environment variable `LFX_DEV` to the build step for enhanced development mode support.
- Improved clarity in the workflow structure to accommodate different triggering events.
…d entries

- Added new timezone options including America/Boise, Australia/North, and Etc/GMT-2.
- Removed outdated timezone entries to streamline the selection process.
- Updated the component index structure to enhance clarity and maintainability.
- Updated comment to specify that the output path is relative to the script location and intended for development/CI use, not from the installed package.
- Enhanced clarity for future developers regarding the script's execution context.
- Changed the comment to reflect the correct module path for extracting subpackage names.
- Flattened the custom components dictionary if it has a "components" wrapper for consistency.
- Merged built-in and custom components into a single structure, ensuring the output maintains a "components" wrapper.
- Updated the component count calculation to reflect the new merged structure.
@ogabrielluiz
Copy link
Copy Markdown
Contributor Author

@mpawlow added the LFX_DEV=mistral,openai behavior.

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2025
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2025
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2025
@github-actions
Copy link
Copy Markdown
Contributor

✅ Component index has been automatically updated due to changes in src/lfx/src/lfx/components/

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2025
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2025
@github-actions
Copy link
Copy Markdown
Contributor

✅ Component index has been automatically updated due to changes in src/lfx/src/lfx/components/

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2025
@sonarqubecloud
Copy link
Copy Markdown

@ogabrielluiz ogabrielluiz added this pull request to the merge queue Oct 13, 2025
Merged via the queue into main with commit fd74f19 Oct 13, 2025
53 of 54 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request lgtm This PR has been approved by a maintainer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants