fix: Update path filters, test tags and backend processing (#6613)

* ✨ (tests): update tag value from "@starter-project" to "@starter-projects" for consistency across test files.

* 📝 (changes-filter.yaml): add new path "src/backend/base/langflow/custom/**" to starter-projects section
♻️ (changes-filter.yaml): remove path "src/backend/base/langflow/components/**" from components section and add it to starter-projects section
♻️ (changes-filter.yaml): add new path "src/backend/base/langflow/custom/**" to components section

* 🐛 (component.py): fix a bug where the status was not being returned when there is only one output in the component

* 🔧 (ci.yml): Expand path filter outputs for more comprehensive CI testing

* fix docstring placement

* ✨ (group.spec.ts): update click event modifiers to use "ControlOrMeta" for better cross-platform compatibility

* ✨ (changes-filter.yaml): add new directory "src/backend/base/langflow/graph/" to starter-projects for processing in the build pipeline.

* 🔄 Refactor graph data structures from sets to lists for performance and compatibility

* 🔧 Optimize RunnableVerticesManager predecessor checks and type hints

---------

Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
This commit is contained in:
Cristhian Zanforlin Lousa 2025-02-14 11:20:08 -03:00 • committed by GitHub
commit 0a631a68c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
30 changed files with 76 additions and 56 deletions

View file

@ -17,16 +17,22 @@ test.describe("group node test", () => {
await page.getByTestId("fit_view").first().click();
await page.getByTestId("title-OpenAI").click();
await page.getByTestId("title-OpenAI").click({ modifiers: ["Control"] });
await page.getByTestId("title-Prompt").click({ modifiers: ["Control"] });
await page.getByTestId("title-OpenAI").click({ modifiers: ["Control"] });
await page
.getByTestId("title-OpenAI")
.click({ modifiers: ["ControlOrMeta"] });
await page
.getByTestId("title-Prompt")
.click({ modifiers: ["ControlOrMeta"] });
await page
.getByTestId("title-OpenAI")
.click({ modifiers: ["ControlOrMeta"] });
await page.getByRole("button", { name: "Group" }).click();
await page.getByTestId("title-Group").click();
await page.getByTestId("edit-name-description-button").click();
await page.getByTestId("input-title-Group").first().fill("test");
await page.getByTestId("save-name-description-button").first().click();
await page.keyboard.press("Control+g");
await page.keyboard.press("ControlOrMeta+g");
await page.getByTestId("title-OpenAI").isVisible();
await page.getByTestId("title-Prompt").isVisible();
},

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test(
"Basic Prompting (Hello, World)",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test(
"Blog Writer",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -7,7 +7,7 @@ import { waitForOpenModalWithChatInput } from "../../utils/wait-for-open-modal";
test(
"Custom Component Generator",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.ANTHROPIC_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test(
"Document Q&A",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test.skip(
"Dynamic Agent",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test.skip(
"Hierarchical Tasks Agent",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -15,7 +15,7 @@ import { waitForOpenModalWithoutChatInput } from "../../utils/wait-for-open-moda
test(
"Image Sentiment Analysis",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -8,7 +8,7 @@ import { waitForOpenModalWithChatInput } from "../../utils/wait-for-open-modal";
test(
"Instagram Copywriter",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -8,7 +8,7 @@ import { waitForOpenModalWithChatInput } from "../../utils/wait-for-open-modal";
test(
"Market Research",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test(
"Memory Chatbot",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -13,7 +13,7 @@ import { waitForOpenModalWithChatInput } from "../../utils/wait-for-open-modal";
test(
"Prompt Chaining",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -13,7 +13,7 @@ import { waitForOpenModalWithoutChatInput } from "../../utils/wait-for-open-moda
test(
"SEO Keyword Generator",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -13,7 +13,7 @@ import { waitForOpenModalWithoutChatInput } from "../../utils/wait-for-open-moda
test(
"SaaS Pricing",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test.skip(
"Sequential Task Agent",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
test(
"Simple Agent",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -11,7 +11,7 @@ import { updateOldComponents } from "../../utils/update-old-components";
test(
"Travel Planning Agent",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -13,7 +13,7 @@ import { waitForOpenModalWithoutChatInput } from "../../utils/wait-for-open-moda
test(
"Twitter Thread Generator",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -5,7 +5,7 @@ import { extractAndCleanCode } from "../../utils/extract-and-clean-code";
test(
"Vector Store RAG",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -3,7 +3,7 @@ import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
test(
"vector store from starter projects should have its connections and nodes on the flow",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page, request }) => {
const response = await request.get("/api/v1/starter-projects");
expect(response.status()).toBe(200);

View file

@ -5,7 +5,7 @@ import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
test(
"user must be able to edit an empty prompt",
{ tag: ["@release", "@starter-project"] },
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,

View file

@ -3,7 +3,7 @@ import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
test(
"user must be able to interact with starter projects",
{ tag: ["@release", "@starter-projects"] },
{ tag: ["@release", "@starter-projectss"] },
async ({ page, context }) => {
await awaitBootstrapTest(page);