Skip to content

fix: For every component that uses an LLM input, replace with the new LLM selector#9966

Merged
deon-sanchez merged 5 commits into
mainfrom
lfoss-2150
Sep 25, 2025
Merged

fix: For every component that uses an LLM input, replace with the new LLM selector#9966
deon-sanchez merged 5 commits into
mainfrom
lfoss-2150

Conversation

@deon-sanchez
Copy link
Copy Markdown
Collaborator

@deon-sanchez deon-sanchez commented Sep 24, 2025

This pull request updates the Instagram Copywriter.json starter project to improve encoding consistency and enhance compatibility with Unicode characters. The main changes involve replacing custom placeholder characters with their proper Unicode escape sequences throughout edge and handle identifiers, updating emoji representations, and refining metadata and configuration options.

Encoding and Unicode Improvements

  • Replaced all instances of the custom character œ in edge and handle identifiers with the Unicode escape sequence \u0153 for better encoding consistency and compatibility. (src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
  • Updated emoji representations in example post content and README descriptions to use Unicode escape sequences instead of literal emoji characters, ensuring proper rendering across platforms. (src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json) [1] [2]

Metadata and Configuration Updates

  • Changed the code_hash in the metadata section to reflect the latest version. (src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json)
  • Cleaned up the list of dependency icons by removing unused entries (Groq, brain) for clarity and maintainability. (src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json)
  • Enhanced the provider configuration by adding an external_options field, allowing users to connect other models via a new UI option. (src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json)

Summary by CodeRabbit

  • New Features

    • Added a “Connect other models” option to the Model Provider dropdown across starter templates, enabling easy linking to additional/custom models.
  • Bug Fixes

    • Cleaned up provider icons in the Model Provider selector by removing redundant/misleading entries (e.g., Groq, brain), resulting in a clearer, consistent list.
  • Chores

    • Updated starter project configurations to support the new model-connection option and ensure consistent provider metadata across templates.

@deon-sanchez deon-sanchez self-assigned this Sep 24, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Sep 24, 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 an external_options entry (connect_other_models) to the Agent component’s agent_llm dropdown across multiple starter project JSONs, removes certain provider icons (commonly Groq and brain), and updates code_hash values and embedded code blocks. In Python, removes the extra {"icon":"brain"} from agent_llm options_metadata in AgentComponent.

Changes

Cohort / File(s) Summary of Changes
Agent dropdown metadata (Python)
src/lfx/src/lfx/components/agents/agent.py
Removed hardcoded {"icon": "brain"} from agent_llm DropdownInput options_metadata; now uses only MODELS_METADATA for MODEL_PROVIDERS_LIST.
Starter projects — common updates
src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json, .../Invoice Summarizer.json, .../Market Research.json, .../News Aggregator.json, .../Pokédex Agent.json, .../Price Deal Finder.json, .../Research Agent.json, .../SaaS Pricing.json, .../Search agent.json, .../Simple Agent.json, .../Social Media Agent.json, .../Youtube Analysis.json
Added external_options to agent_llm with node connect_other_models (display_name: “Connect other models”, icon: CornerDownLeft). Removed provider icon entries (Groq, brain) from options_metadata. Updated code_hash to 01b36483d480. Several files replace/refresh the large embedded code block.
Starter project — extended provider icon removals
src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json
Added external_options to agent_llm (connect_other_models). Removed multiple provider icons from options_metadata (Azure, Groq, NVIDIA, SambaNova, brain). Updated code_hash to 01b36483d480. Embedded code block updated.
Starter project — multiple component code_hash updates
src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json
In addition to common updates, also updated code_hash for YouTube Comments component to 01b36483d480.

Sequence Diagram(s)

sequenceDiagram
  participant U as User
  participant A as AgentComponent (agent_llm)
  participant E as external_options (connect_other_models)
  participant C as Model Connector
  participant P as Provider LLM

  U->>A: Select Model Provider
  alt Choose predefined provider
    A->>P: Initialize provider LLM
    P-->>A: Ready
  else Use "Connect other models"
    A->>E: Open connect_other_models
    E->>C: Configure external model
    C-->>A: Return configured provider
    A->>P: Initialize configured LLM
    P-->>A: Ready
  end
  A-->>U: Model configured
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

lgtm, size:L

Suggested reviewers

  • ogabrielluiz
  • edwinjosechittilappilly
  • lucaseduoli
  • mfortman11

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title concisely summarizes the main intent of the changeset—replacing LLM inputs with a new LLM selector—and aligns with the diffs that add external_options to agent_llm inputs and adjust provider metadata. It is clear, uses a conventional "fix:" prefix, and avoids extraneous noise. The phrase is slightly broad if not every single component was modified, but it accurately reflects the PR's primary goal.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

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.

…istency

- Refactored long lines in multiple starter project JSON files for better readability.
- Updated the description in the Youtube Analysis project to enhance clarity.
- Ensured consistent import paths and formatting across all modified files.
@github-actions github-actions Bot added bug Something isn't working and removed bug Something isn't working labels Sep 24, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Sep 24, 2025

Frontend Unit Test Coverage Report

Coverage Summary

Lines Statements Branches Functions
Coverage: 10%
10.56% (2780/26323) 4.58% (926/20186) 6.49% (370/5698)

Unit Test Results

Tests Skipped Failures Errors Time
1195 0 💤 0 ❌ 0 🔥 18.329s ⏱️

@codecov
Copy link
Copy Markdown

codecov Bot commented Sep 24, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 23.45%. Comparing base (386d24d) to head (797c587).
⚠️ Report is 3 commits behind head on main.

❌ Your project status has failed because the head coverage (46.08%) 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    #9966   +/-   ##
=======================================
  Coverage   23.45%   23.45%           
=======================================
  Files        1090     1090           
  Lines       39841    39841           
  Branches     5530     5530           
=======================================
  Hits         9346     9346           
  Misses      30324    30324           
  Partials      171      171           
Flag Coverage Δ
backend 46.08% <ø> (ø)
frontend 9.71% <ø> (ø)

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

🚀 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.

@github-actions github-actions Bot added bug Something isn't working and removed bug Something isn't working labels Sep 24, 2025
… project JSON

- Eliminated the Amazon icon entry from the options_metadata array to streamline the metadata and improve consistency across starter projects.
@github-actions github-actions Bot added bug Something isn't working and removed bug Something isn't working labels Sep 24, 2025
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: 0

Caution

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

⚠️ Outside diff range comments (11)
src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json (1)

24-30: Replace literal 'œ' with '\u0153' in starter_projects JSON edge IDs/handles.

rg shows literal 'œ' present across many files in src/backend/base/langflow/initial_setup/starter_projects (e.g., Youtube Analysis.json, Meeting Summary.json, Invoice Summarizer.json). Replace every occurrence inside "id", "sourceHandle", and "targetHandle" strings with '\u0153' to match the PR encoding goal and avoid serialization/rendering issues.

src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json (2)

808-809: Convert literal emojis to Unicode escape sequences.
Replace literal emojis in JSON for consistent rendering/export:

  • src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json — line 808: replace "🌍✈️" with "\uD83C\uDF0D\u2708\uFE0F"
  • src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json — line 1433: replace "📖" with "\uD83D\uDCD6"

26-32: Replace literal 'œ' with Unicode escape '\u0153' across JSON IDs/handles.

Occurrences in src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json — lines: 26, 29, 31, 56, 59, 61, 84, 87, 89, 112, 115, 117, 140, 143, 145, 169, 172, 174, 198, 201, 203, 226, 229, 231, 255, 258, 260, 282, 284, 286. Replace each literal œ inside string values (IDs/handles) with '\u0153'.

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

27-33: Standardize literal 'œ' to the escaped "\u0153" in edge/handle strings across starter_projects JSON files

rg shows the literal œ occurs throughout src/backend/base/langflow/initial_setup/starter_projects/*.json — replace occurrences in id, sourceHandle, targetHandle and other edge/handle strings with the escaped \u0153 for consistent encoding across templates.

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

992-1007: Provider icon cleanup OK for Simple Agent; 'Groq' absent but 'brain-circuit' icons remain elsewhere

No "Groq" matches under src/backend/base/langflow/initial_setup/starter_projects; however "icon": "brain-circuit" is still present in multiple starter_projects (examples): src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json, SEO Keyword Generator.json, Research Translation Loop.json, Portfolio Website Code Generator.json, Research Agent.json, Memory Chatbot.json, Meeting Summary.json, Image Sentiment Analysis.json, Financial Report Parser.json, Hybrid Search RAG.json, Document Q&A.json, Market Research.json, Blog Writer.json, Custom Component Generator.json, Basic Prompting.json, Instagram Copywriter.json, Vector Store RAG.json, Twitter Thread Generator.json, Basic Prompt Chaining.json, Text Sentiment Analysis.json — remove or confirm intentional.

src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json (1)

25-31: Replace all occurrences of the custom "œ" delimiter with the Unicode escape \u0153 across starter project JSONs.

rg shows "œ" in 33 files (576 lines, 12752 matches) under src/backend/base/langflow/initial_setup/starter_projects — replace every occurrence with \u0153 for encoding consistency across environments.

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

1466-1466: Fix typos in README note

“searcn” → “search”.

- * The **Agent** returns a structured response to your searcn in the chat.
+ * The **Agent** returns a structured response to your search in the chat.
src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json (1)

2072-2072: Fix typo in README

“YoutTube” → “YouTube”.

-- If you don't have a YoutTube API key, create one in the [Google Cloud Console](https://console.cloud.google.com).
+- If you don't have a YouTube API key, create one in the [Google Cloud Console](https://console.cloud.google.com).
src/backend/base/langflow/initial_setup/starter_projects/Market Research.json (2)

2140-2152: Duplicate provider icon in options_metadata (length mismatch).

options has 3 providers, but options_metadata has 4 entries (last duplicates OpenAI). This can misalign icons with options.

Apply this diff to remove the extra icon entry:

               "options_metadata": [
                 {
                   "icon": "Anthropic"
                 },
                 {
                   "icon": "GoogleGenerativeAI"
                 },
                 {
                   "icon": "OpenAI"
-                },
-                {
-                  "icon": "OpenAI"
                 }
               ],

27-33: Leftover 'œ' delimiters remain in starter_projects JSON — replace with JSON Unicode escape \u0153

rg shows many occurrences under src/backend/base/langflow/initial_setup/starter_projects/*.json; update all literal 'œ' in id/sourceHandle/targetHandle strings to '\u0153'.

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

25-29: Replace leftover 'œ' delimiters with JSON unicode escape \u0153 in starter_projects JSON files

rg shows many occurrences under src/backend/base/langflow/initial_setup/starter_projects/*.json (edge id / sourceHandle / targetHandle). Replace each 'œ' with \u0153 (JSON unicode escape) in those fields across all affected files and re-run the grep to confirm none remain.

🧹 Nitpick comments (12)
src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json (1)

1277-1277: Use non-greedy JSON regex to avoid over-matching.

json_pattern = r"\{.*\}" can swallow too much. Prefer non‑greedy:

-        json_pattern = r"\{.*\}"
+        json_pattern = r"\{.*?\}"
src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json (1)

27-33: Replace legacy œ delimiter with Unicode escape \u0153 across starter_projects JSON files

rg shows widespread occurrences of the custom œ in src/backend/base/langflow/initial_setup/starter_projects/*.json (e.g. Simple Agent.json, Youtube Analysis.json, Social Media Agent.json); normalize these edge IDs/handles to \u0153 to avoid encoding/rendering issues.

src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json (2)

877-890: Fix options_metadata misalignment (extra Amazon icon).

options has 3 providers, but options_metadata lists 4, including an unused Amazon icon. This can desync icons vs. options.

Apply this diff to align the metadata list with the options:

                 "options": [
                   "Anthropic",
                   "Google Generative AI",
                   "OpenAI"
                 ],
                 "options_metadata": [
-                  {
-                    "icon": "Amazon"
-                  },
                   {
                     "icon": "Anthropic"
                   },
                   {
                     "icon": "GoogleGenerativeAI"
                   },
                   {
                     "icon": "OpenAI"
                   }
                 ],

935-936: AgentComponent changes look solid; tiny nit on stale field_order entry.

The OpenAI json_mode input is filtered out in code, but field_order still lists "json_mode". Optional: remove it to avoid stale UI ordering references.

src/lfx/src/lfx/components/agents/agent.py (1)

514-517: Simplify redundant branch when adding provider fields

Both branches call update(fields_to_add). Collapse to a single call.

-                # Add provider-specific fields
-                if field_value == "OpenAI" and not any(field in build_config for field in fields_to_add):
-                    build_config.update(fields_to_add)
-                else:
-                    build_config.update(fields_to_add)
+                # Add provider-specific fields
+                build_config.update(fields_to_add)
src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json (3)

1534-1545: Remove deprecated field from field_order

json_mode remains in field_order but is not present in the template (and OpenAI json_mode is filtered in code). Drop it to avoid confusion.

   "field_order": [
     "agent_llm",
     "max_tokens",
     "model_kwargs",
-    "json_mode",
     "model_name",
     "openai_api_base",

2058-2058: Grammar nit in Agent Instructions text

“There two main ways” → “There are two main ways”.

-There two main ways you can provide additional context to your queries.
+There are two main ways you can provide additional context to your queries.

23-27: Normalize legacy œ delimiters in edge/handle strings

Consider replacing the custom œ character with the Unicode escape \u0153 (or plain ASCII) for consistency across templates.

Run a quick scan later in the PR to ensure all starter JSONs are normalized.

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

735-755: Drop unused json_mode from field_order

It’s listed but not defined in template and is filtered out in code.

   "field_order": [
     "agent_llm",
     "max_tokens",
     "model_kwargs",
-    "json_mode",
     "model_name",

25-31: Optional: normalize œ delimiters in edge ids/handles

Standardize to \u0153 or ASCII to avoid encoding issues.

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

1014-1015: Avoid greedy JSON match in structured-output parsing.

Using r"{.*}" with DOTALL can over-capture when multiple braces exist. Prefer non-greedy.

Apply this diff within the embedded AgentComponent code:

-        json_pattern = r"\{.*\}"
+        json_pattern = r"\{.*?\}"
src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json (1)

2702-2703: Use a non-greedy JSON regex to prevent over-capture.

Same parsing concern as in SaaS Pricing; make the pattern non-greedy.

Apply this diff within the embedded AgentComponent code:

-        json_pattern = r"\{.*\}"
+        json_pattern = r"\{.*?\}"
📜 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 f5f215d and e1cca7f.

⛔ Files ignored due to path filters (1)
  • src/frontend/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (14)
  • src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Market Research.json (4 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Pokédex Agent.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/SaaS Pricing.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Search agent.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Social Media Agent.json (3 hunks)
  • src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json (3 hunks)
  • src/lfx/src/lfx/components/agents/agent.py (1 hunks)
⏰ 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). (48)
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 35/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 36/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 39/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 26/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 40/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 37/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 31/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 33/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 30/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 34/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 29/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 25/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 22/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 38/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 28/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 21/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 19/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 27/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 32/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 24/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 20/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 9/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 23/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 17/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 18/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 16/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 15/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 13/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 10/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 7/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 14/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 11/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 4/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 5/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 3/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 8/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 2/40
  • GitHub Check: Run Frontend Tests / Playwright Tests - Shard 1/40
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 5
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 1
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 3
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 4
  • GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 2
  • GitHub Check: Run Backend Tests / Integration Tests - Python 3.10
  • GitHub Check: Test Starter Templates
  • GitHub Check: test-starter-projects
🔇 Additional comments (35)
src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json (2)

1108-1108: code_hash updated correctly.


1202-1212: external_options added to agent_llm is correct and aligned with the selector UX.

src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json (3)

1920-1920: code_hash bumped as expected.


2031-2040: agent_llm external_options correctly introduces Connect other models.


2105-2105: Same non‑greedy JSON regex recommendation as in Invoice Summarizer.

Reference prior comment for the diff.

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

1402-1412: external_options added correctly to agent_llm — verify icon key

external_options matches the Agent component’s connect_other_models branch in update_build_config. Grep shows "CornerDownLeft" used across starter project JSONs (e.g. src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json:1207, Travel Planning Agents.json:1716) but I couldn't locate a frontend icon definition/import for "CornerDownLeft" in the repo — confirm this icon exists in your UI icon set (lucide/react-icons/your icon library) or replace with a valid key.


1308-1308: code_hash updated — verify it matches embedded Agent code

metadata.code_hash = "01b36483d480" in src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json (metadata at ~line 1308; AgentComponent node at ~line 1326). Confirm that this 12‑char hash corresponds to the Agent's embedded source used by lfx.components.agents.agent.AgentComponent to avoid stale-cache/mismatch errors.

src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json (2)

978-988: Nice addition: external_options for “Connect other models” — present in these starter projects

Matches the DropdownInput schema and aligns with the Agent update_build_config handler.

Found in:

  • src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json
  • src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json
  • src/backend/base/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json
  • src/backend/base/langflow/initial_setup/starter_projects/Travel Planning Agents.json
  • src/backend/base/langflow/initial_setup/starter_projects/Social Media Agent.json
  • src/backend/base/langflow/initial_setup/starter_projects/SaaS Pricing.json
  • src/backend/base/langflow/initial_setup/starter_projects/Search agent.json
  • src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json
  • src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json
  • src/backend/base/langflow/initial_setup/starter_projects/Pokédex Agent.json
  • src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json
  • src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json
  • src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json
  • src/backend/base/langflow/initial_setup/starter_projects/Market Research.json
  • src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json

Add the same external_options to other starter projects for consistency where needed.


887-887: Cannot verify code_hash — template.code.value missing for AgentComponent metadata

Multiple starter-project JSONs contain metadata.code_hash = 01b36483d480 but no template.code.value was found under the AgentComponent node, so I could not recompute/confirm the hash.

Files/locations:

  • src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json — data>nodes>[8]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json — data>nodes>[7]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Market Research.json — data>nodes>[7]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json — data>nodes>[7]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json — data>nodes>[2]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Pokédex Agent.json — data>nodes>[6]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json — data>nodes>[8]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json — data>nodes>[10]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/SaaS Pricing.json — data>nodes>[4]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Search agent.json — data>nodes>[6]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json — data>nodes>[0],[1],[7]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json — data>nodes>[5]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Social Media Agent.json — data>nodes>[8]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Travel Planning Agents.json — data>nodes>[6],[7],[8]>data>node>metadata
  • src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json — data>nodes>[2]>data>node>metadata

Action required:

  • If code_hash must reflect the serialized code at template.code.value, regenerate/update code_hash from that serialized value (or embed template.code.value under the AgentComponent metadata) so hashes match.
  • If the identical code_hash is intentional (shared/placeholder), confirm that behavior.
src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json (2)

767-767: code_hash bump matches content changes.

Looks consistent with the updated Agent component code.


858-868: External LLM selector wired correctly.

external_options for connect_other_models is well-formed and matches the Agent code path that handles this selection.

Please sanity-check in the UI that selecting “Connect other models” flips the agent_llm input to accept a LanguageModel handle and removes provider fields as intended.

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

1245-1245: code_hash bump looks correct

Hash updated to reflect embedded Agent changes. No issues.


1411-1411: Embedded Agent code updated and in sync with source

The inlined AgentComponent code includes the new external_options and cleaned provider metadata. Looks good.


1336-1346: New external_options hook for “Connect other models”

Addition matches AgentComponent expectations and enables the new selector. Suggest verifying consistency across starter projects and that update_build_config handles this value end-to-end.

src/lfx/src/lfx/components/agents/agent.py (2)

69-69: Removed stray “brain” icon from options_metadata

Keeping provider metadata aligned to MODEL_PROVIDERS_LIST only. Good cleanup.


521-547: connect_other_models path is correctly handled

Switching to a LanguageModel handle with placeholder and external_options is implemented properly.

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

1193-1193: code_hash updated appropriately

Matches the embedded Agent code changes.


1287-1297: Added external_options -> connect_other_models

Consistent with the new selector; UI should surface the node properly.


1362-1362: Agent code block refreshed

Embedded AgentComponent reflects the new selector and provider metadata cleanup.

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

1560-1560: code_hash bump looks good

Matches the large Agent component code update.


1654-1664: Added external_options for agent_llm — correct shape

The fields.data.node payload matches the new selector contract.

If the UI expects a different key casing (e.g., displayName vs display_name), confirm it renders the “Connect other models” entry.


1729-1730: AgentComponent code update aligns with new LLM selector

Good addition of external_options handling and provider-field pruning.

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

762-762: code_hash bump for Agent — OK

Reflects the embedded code changes.


853-863: external_options added to Model Provider — OK

Schema matches the new LLM selector hook.

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

899-899: code_hash update aligns with embedded Agent code changes.

Looks consistent with the updated AgentComponent code block.


1068-1069: Agent component code block: overall LGTM.

  • Handles connect_other_models in update_build_config.
  • Filters json_mode from OpenAI.
  • Sensible error handling and logging.

No blockers from this embedded code change.


993-1003: New LLM selector hook added (external_options).

The external_options node for connect_other_models is correctly structured and matches the AgentComponent implementation that handles this path.

To ensure parity across starter projects, run a quick check that each Agent node’s agent_llm includes external_options.connect_other_models:

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

2026-2026: code_hash updated appropriately.

Matches the new AgentComponent code content.


2120-2130: New LLM selector hook added (external_options).

Correct structure for connect_other_models. Consistent with AgentComponent logic.

Optionally verify that the UI supports this new external_options path for Agent in this flow, given a separate LanguageModelComponent is also present.


2198-2199: Agent component code block: overall LGTM.

Same changes as other flows; supports connect_other_models path and improved error handling.


1-2648: Automated validation for provider dropdowns across starter projects (run fixed check)

Run the script below — it fixes the previous escaping error and reports any agent_llm options vs options_metadata length mismatches and missing external_options.connect_other_models in src/backend/base/langflow/initial_setup/starter_projects:

#!/bin/bash
set -euo pipefail

tmp_py=$(mktemp /tmp/check_starters.XXXX.py)
cat >"$tmp_py" <<'PY'
import json, sys, pathlib

root = pathlib.Path("src/backend/base/langflow/initial_setup/starter_projects")
problems = []
if not root.exists():
    print(f"ERROR: path not found: {root}")
    sys.exit(2)

for p in sorted(root.glob("*.json")):
    try:
        data = json.loads(p.read_text(encoding="utf-8"))
    except Exception as e:
        problems.append((str(p), f"JSON parse error: {e}"))
        continue

    nodes = (data.get("data", {}) or {}).get("nodes", []) or []
    for node in nodes:
        tmpl = (((node or {}).get("data", {}) or {}).get("node", {}) or {}).get("template", {}) or {}
        agent = tmpl.get("agent_llm")
        if isinstance(agent, dict):
            opts = agent.get("options")
            metas = agent.get("options_metadata")
            if isinstance(opts, list) and isinstance(metas, list) and len(opts) != len(metas):
                problems.append((str(p), f"agent_llm options({len(opts)}) != options_metadata({len(metas)})"))
            ext = agent.get("external_options") or {}
            nodefld = (((ext.get("fields") or {}).get("data") or {}).get("node") or {})
            if nodefld.get("name") != "connect_other_models":
                problems.append((str(p), "agent_llm missing external_options.connect_other_models"))

print("\n".join(f"{f}: {msg}" for f, msg in problems))
sys.exit(1 if problems else 0)
PY

python "$tmp_py"
rc=$?
rm -f "$tmp_py"
exit $rc
src/backend/base/langflow/initial_setup/starter_projects/SaaS Pricing.json (2)

845-845: Agent code_hash bump aligns with component changes.

Looks good.


939-949: LLM selector external_options block is well-formed.

fields.data.node schema matches the new “Connect other models” UI entry.

If possible, verify in the Playground that selecting “Connect other models” triggers the backend path that sets agent_llm to a LanguageModel input (input_types ["LanguageModel"]) and hides provider-specific fields.

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

2533-2533: Agent code_hash updated appropriately.

Consistent with the shared AgentComponent changes.


2627-2637: Adds “Connect other models” to agent_llm; structure is correct.

Matches the expected external_options schema.

Confirm the new entry appears in the dropdown and that choosing it swaps agent_llm to accept a direct LanguageModel handle, removing provider-specific fields.

@github-actions github-actions Bot added bug Something isn't working and removed bug Something isn't working labels Sep 25, 2025
@github-actions github-actions Bot added the lgtm This PR has been approved by a maintainer label Sep 25, 2025
@sonarqubecloud
Copy link
Copy Markdown

@deon-sanchez deon-sanchez added this pull request to the merge queue Sep 25, 2025
Merged via the queue into main with commit 2704276 Sep 25, 2025
77 of 78 checks passed
@deon-sanchez deon-sanchez deleted the lfoss-2150 branch September 25, 2025 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working lgtm This PR has been approved by a maintainer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants