From 0a631a68c2811bfee98a530f4998a27ddb8b204e Mon Sep 17 00:00:00 2001 From: Cristhian Zanforlin Lousa Date: Fri, 14 Feb 2025 11:20:08 -0300 Subject: [PATCH] fix: Update path filters, test tags and backend processing (#6613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ (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 --- .github/changes-filter.yaml | 5 +++- .github/workflows/ci.yml | 9 +++++-- .../custom/custom_component/component.py | 2 ++ src/backend/base/langflow/graph/graph/base.py | 27 ++++++++++--------- .../graph/graph/runnable_vertices_manager.py | 9 ++++--- .../base/langflow/graph/graph/utils.py | 16 +++++------ .../base/langflow/graph/vertex/base.py | 6 ++--- .../langflow/graph/vertex/vertex_types.py | 2 +- .../tests/core/features/group.spec.ts | 14 +++++++--- .../core/integrations/Basic Prompting.spec.ts | 2 +- .../core/integrations/Blog Writer.spec.ts | 2 +- .../Custom Component Generator.spec.ts | 2 +- .../core/integrations/Document QA.spec.ts | 2 +- .../core/integrations/Dynamic Agent.spec.ts | 2 +- .../integrations/Hierarchical Agent.spec.ts | 2 +- .../Image Sentiment Analysis.spec.ts | 2 +- .../integrations/Instagram Copywriter.spec.ts | 2 +- .../core/integrations/Market Research.spec.ts | 2 +- .../core/integrations/Memory Chatbot.spec.ts | 2 +- .../core/integrations/Prompt Chaining.spec.ts | 2 +- .../SEO Keyword Generator.spec.ts | 2 +- .../core/integrations/SaaS Pricing.spec.ts | 2 +- .../Sequential Task Agent.spec.ts | 2 +- .../core/integrations/Simple Agent.spec.ts | 2 +- .../Travel Planning Agent.spec.ts | 2 +- .../Twitter Thread Generator.spec.ts | 2 +- .../core/integrations/Vector Store.spec.ts | 2 +- .../integrations/starter-projects.spec.ts | 2 +- .../regression/generalBugs-prompt.spec.ts | 2 +- .../features/starter-projects.spec.ts | 2 +- 30 files changed, 76 insertions(+), 56 deletions(-) diff --git a/.github/changes-filter.yaml b/.github/changes-filter.yaml index 2a8529088..925f23746 100644 --- a/.github/changes-filter.yaml +++ b/.github/changes-filter.yaml @@ -28,6 +28,8 @@ starter-projects: - "src/frontend/src/pages/MainPage/**" - "src/frontend/src/utils/reactflowUtils.ts" - "src/frontend/tests/extended/features/**" + - "src/backend/base/langflow/custom/**" + - "src/backend/base/langflow/graph/**" components: - "src/frontend/src/components/**" @@ -38,7 +40,6 @@ components: - "src/frontend/src/CustomNodes/**" - "src/frontend/src/style/**" - "src/frontend/src/utils/styleUtils.ts" - - "src/backend/base/langflow/components/**" - "src/frontend/tests/core/features/**" - "src/frontend/tests/core/integrations/**" - "src/frontend/tests/core/regression/**" @@ -49,6 +50,8 @@ components: - "src/backend/base/langflow/schema/**" - "src/backend/base/langflow/graph/**" - "src/backend/base/langflow/utils/**" + - "src/backend/base/langflow/custom/**" + - "src/backend/base/langflow/components/**" workspace: - "src/backend/base/langflow/inputs/**" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ca18aa039..6c084e519 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,6 +101,12 @@ jobs: frontend-tests: ${{ steps.filter.outputs.frontend-tests }} components-changes: ${{ steps.filter.outputs.components-changes }} starter-projects-changes: ${{ steps.filter.outputs.starter-projects-changes }} + starter-projects: ${{ steps.filter.outputs.starter-projects }} + components: ${{ steps.filter.outputs.components }} + workspace: ${{ steps.filter.outputs.workspace }} + api: ${{ steps.filter.outputs.api }} + database: ${{ steps.filter.outputs.database }} + steps: - name: Checkout code uses: actions/checkout@v4 @@ -119,11 +125,10 @@ jobs: uses: ./.github/workflows/python_test.yml with: python-versions: ${{ inputs.python-versions || '["3.10"]' }} - test-frontend: needs: path-filter name: Run Frontend Tests - if: ${{ needs.path-filter.outputs.frontend == 'true' || needs.path-filter.outputs.frontend-tests == 'true' || needs.path-filter.outputs.components-changes == 'true' || needs.path-filter.outputs.starter-projects-changes == 'true' }} + if: ${{ needs.path-filter.outputs.frontend == 'true' || needs.path-filter.outputs.frontend-tests == 'true' || needs.path-filter.outputs.components-changes == 'true' || needs.path-filter.outputs.starter-projects-changes == 'true' || needs.path-filter.outputs.starter-projects == 'true' || needs.path-filter.outputs.components == 'true' || needs.path-filter.outputs.workspace == 'true' || needs.path-filter.outputs.api == 'true' || needs.path-filter.outputs.database == 'true' }} uses: ./.github/workflows/typescript_test.yml with: tests_folder: ${{ inputs.frontend-tests-folder }} diff --git a/src/backend/base/langflow/custom/custom_component/component.py b/src/backend/base/langflow/custom/custom_component/component.py index 6e40bcea5..1c502eaea 100644 --- a/src/backend/base/langflow/custom/custom_component/component.py +++ b/src/backend/base/langflow/custom/custom_component/component.py @@ -982,6 +982,8 @@ class Component(CustomComponent): def _process_raw_result(self, result): """Process the raw result of the component.""" + if len(self.outputs) == 1: + return self.status or self.extract_data(result) return self.extract_data(result) def extract_data(self, result): diff --git a/src/backend/base/langflow/graph/graph/base.py b/src/backend/base/langflow/graph/graph/base.py index 974a24935..557f0d373 100644 --- a/src/backend/base/langflow/graph/graph/base.py +++ b/src/backend/base/langflow/graph/graph/base.py @@ -116,10 +116,10 @@ class Graph: self.top_level_vertices: list[str] = [] self.vertex_map: dict[str, Vertex] = {} - self.predecessor_map: dict[str, set[str]] = defaultdict(set) - self.successor_map: dict[str, set[str]] = defaultdict(set) + self.predecessor_map: dict[str, list[str]] = defaultdict(list) + self.successor_map: dict[str, list[str]] = defaultdict(list) self.in_degree_map: dict[str, int] = defaultdict(int) - self.parent_child_map: dict[str, set[str]] = defaultdict(set) + self.parent_child_map: dict[str, list[str]] = defaultdict(list) self._run_queue: deque[str] = deque() self._first_layer: list[str] = [] self._lock = asyncio.Lock() @@ -469,10 +469,10 @@ class Graph: self.add_edge(edge) source_id = edge["data"]["sourceHandle"]["id"] target_id = edge["data"]["targetHandle"]["id"] - self.predecessor_map[target_id].add(source_id) - self.successor_map[source_id].add(target_id) + self.predecessor_map[target_id].append(source_id) + self.successor_map[source_id].append(target_id) self.in_degree_map[target_id] += 1 - self.parent_child_map[source_id].add(target_id) + self.parent_child_map[source_id].append(target_id) def add_node(self, node: NodeData) -> None: self._vertices.append(node) @@ -1554,7 +1554,7 @@ class Graph: logger.debug("Graph processing complete") return self - def find_next_runnable_vertices(self, vertex_successors_ids: set[str]) -> list[str]: + def find_next_runnable_vertices(self, vertex_successors_ids: list[str]) -> list[str]: next_runnable_vertices = set() for v_id in sorted(vertex_successors_ids): if not self.is_vertex_runnable(v_id): @@ -2023,7 +2023,10 @@ class Graph: def build_in_degree(self, edges: list[CycleEdge]) -> dict[str, int]: in_degree: dict[str, int] = defaultdict(int) + for edge in edges: + # We don't need to count if a Component connects more than one + # time to the same vertex. in_degree[edge.target_id] += 1 for vertex in self.vertices: if vertex.id not in in_degree: @@ -2031,13 +2034,13 @@ class Graph: return in_degree @staticmethod - def build_adjacency_maps(edges: list[CycleEdge]) -> tuple[dict[str, set[str]], dict[str, set[str]]]: + def build_adjacency_maps(edges: list[CycleEdge]) -> tuple[dict[str, list[str]], dict[str, list[str]]]: """Returns the adjacency maps for the graph.""" - predecessor_map: dict[str, set[str]] = defaultdict(set) - successor_map: dict[str, set[str]] = defaultdict(set) + predecessor_map: dict[str, list[str]] = defaultdict(list) + successor_map: dict[str, list[str]] = defaultdict(list) for edge in edges: - predecessor_map[edge.target_id].add(edge.source_id) - successor_map[edge.source_id].add(edge.target_id) + predecessor_map[edge.target_id].append(edge.source_id) + successor_map[edge.source_id].append(edge.target_id) return predecessor_map, successor_map def __to_dict(self) -> dict[str, dict[str, list[str]]]: diff --git a/src/backend/base/langflow/graph/graph/runnable_vertices_manager.py b/src/backend/base/langflow/graph/graph/runnable_vertices_manager.py index 2b11d16fa..92edbc70d 100644 --- a/src/backend/base/langflow/graph/graph/runnable_vertices_manager.py +++ b/src/backend/base/langflow/graph/graph/runnable_vertices_manager.py @@ -2,9 +2,9 @@ from collections import defaultdict class RunnableVerticesManager: - def __init__(self): + def __init__(self) -> None: self.run_map: dict[str, list[str]] = defaultdict(list) # Tracks successors of each vertex - self.run_predecessors: dict[str, set[str]] = defaultdict(set) # Tracks predecessors for each vertex + self.run_predecessors: dict[str, list[str]] = defaultdict(list) # Tracks predecessors for each vertex self.vertices_to_run: set[str] = set() # Set of vertices that are ready to run self.vertices_being_run: set[str] = set() # Set of vertices that are currently running self.cycle_vertices: set[str] = set() # Set of vertices that are in a cycle @@ -74,13 +74,14 @@ class RunnableVerticesManager: bool: True if all predecessor conditions are met, False otherwise """ # Get pending predecessors, return True if none exist - if not (pending := self.run_predecessors.get(vertex_id, set())): + pending = self.run_predecessors.get(vertex_id, []) + if not pending: return True # For cycle vertices, check if any pending predecessors are also in cycle # Using set intersection is faster than iteration if vertex_id in self.cycle_vertices: - return is_loop or not bool(pending.intersection(self.cycle_vertices)) + return is_loop or not bool(set(pending) & self.cycle_vertices) return False diff --git a/src/backend/base/langflow/graph/graph/utils.py b/src/backend/base/langflow/graph/graph/utils.py index d0a8ea174..26650f343 100644 --- a/src/backend/base/langflow/graph/graph/utils.py +++ b/src/backend/base/langflow/graph/graph/utils.py @@ -461,8 +461,8 @@ def find_cycle_vertices(edges): def layered_topological_sort( vertices_ids: set[str], in_degree_map: dict[str, int], - successor_map: dict[str, set[str]], - predecessor_map: dict[str, set[str]], + successor_map: dict[str, list[str]], + predecessor_map: dict[str, list[str]], start_id: str | None = None, cycle_vertices: set[str] | None = None, is_input_vertex: Callable[[str], bool] | None = None, # noqa: ARG001 @@ -780,8 +780,8 @@ def get_sorted_vertices( start_component_id: str | None = None, graph_dict: dict[str, Any] | None = None, in_degree_map: dict[str, int] | None = None, - successor_map: dict[str, set[str]] | None = None, - predecessor_map: dict[str, set[str]] | None = None, + successor_map: dict[str, list[str]] | None = None, + predecessor_map: dict[str, list[str]] | None = None, is_input_vertex: Callable[[str], bool] | None = None, get_vertex_predecessors: Callable[[str], list[str]] | None = None, get_vertex_successors: Callable[[str], list[str]] | None = None, @@ -826,18 +826,18 @@ def get_sorted_vertices( successor_map = {} for vertex_id in vertices_ids: if get_vertex_successors is not None: - successor_map[vertex_id] = set(get_vertex_successors(vertex_id)) + successor_map[vertex_id] = get_vertex_successors(vertex_id) else: - successor_map[vertex_id] = set() + successor_map[vertex_id] = [] # Build predecessor_map if not provided if predecessor_map is None: predecessor_map = {} for vertex_id in vertices_ids: if get_vertex_predecessors is not None: - predecessor_map[vertex_id] = set(get_vertex_predecessors(vertex_id)) + predecessor_map[vertex_id] = get_vertex_predecessors(vertex_id) else: - predecessor_map[vertex_id] = set() + predecessor_map[vertex_id] = [] # If we have a stop component, we need to filter out all vertices # that are not predecessors of the stop component diff --git a/src/backend/base/langflow/graph/vertex/base.py b/src/backend/base/langflow/graph/vertex/base.py index a354812e3..a40a77120 100644 --- a/src/backend/base/langflow/graph/vertex/base.py +++ b/src/backend/base/langflow/graph/vertex/base.py @@ -79,7 +79,7 @@ class Vertex: self.built_object: Any = UnbuiltObject() self.built_result: Any = None self.built = False - self._successors_ids: set[str] | None = None + self._successors_ids: list[str] | None = None self.artifacts: dict[str, Any] = {} self.artifacts_raw: dict[str, Any] = {} self.artifacts_type: dict[str, str] = {} @@ -207,8 +207,8 @@ class Vertex: return self.graph.get_successors(self) @property - def successors_ids(self) -> set[str]: - return self.graph.successor_map.get(self.id, set()) + def successors_ids(self) -> list[str]: + return self.graph.successor_map.get(self.id, []) def __getstate__(self): state = self.__dict__.copy() diff --git a/src/backend/base/langflow/graph/vertex/vertex_types.py b/src/backend/base/langflow/graph/vertex/vertex_types.py index c6885000b..cebc0cb9c 100644 --- a/src/backend/base/langflow/graph/vertex/vertex_types.py +++ b/src/backend/base/langflow/graph/vertex/vertex_types.py @@ -466,7 +466,7 @@ class StateVertex(ComponentVertex): self.is_state = False @property - def successors_ids(self) -> set[str]: + def successors_ids(self) -> list[str]: if self._successors_ids is None: self.is_state = False return super().successors_ids diff --git a/src/frontend/tests/core/features/group.spec.ts b/src/frontend/tests/core/features/group.spec.ts index 4aa098fc4..67a88d18b 100644 --- a/src/frontend/tests/core/features/group.spec.ts +++ b/src/frontend/tests/core/features/group.spec.ts @@ -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(); }, diff --git a/src/frontend/tests/core/integrations/Basic Prompting.spec.ts b/src/frontend/tests/core/integrations/Basic Prompting.spec.ts index d50fdee46..04a4e93b5 100644 --- a/src/frontend/tests/core/integrations/Basic Prompting.spec.ts +++ b/src/frontend/tests/core/integrations/Basic Prompting.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Blog Writer.spec.ts b/src/frontend/tests/core/integrations/Blog Writer.spec.ts index d9b14040d..08fcc67f9 100644 --- a/src/frontend/tests/core/integrations/Blog Writer.spec.ts +++ b/src/frontend/tests/core/integrations/Blog Writer.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Custom Component Generator.spec.ts b/src/frontend/tests/core/integrations/Custom Component Generator.spec.ts index 389790d5f..235b98c32 100644 --- a/src/frontend/tests/core/integrations/Custom Component Generator.spec.ts +++ b/src/frontend/tests/core/integrations/Custom Component Generator.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Document QA.spec.ts b/src/frontend/tests/core/integrations/Document QA.spec.ts index 2fa3bbf8a..e1a26348c 100644 --- a/src/frontend/tests/core/integrations/Document QA.spec.ts +++ b/src/frontend/tests/core/integrations/Document QA.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Dynamic Agent.spec.ts b/src/frontend/tests/core/integrations/Dynamic Agent.spec.ts index 6d54a0082..133e9701a 100644 --- a/src/frontend/tests/core/integrations/Dynamic Agent.spec.ts +++ b/src/frontend/tests/core/integrations/Dynamic Agent.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Hierarchical Agent.spec.ts b/src/frontend/tests/core/integrations/Hierarchical Agent.spec.ts index ba5ff76ee..299ac3c31 100644 --- a/src/frontend/tests/core/integrations/Hierarchical Agent.spec.ts +++ b/src/frontend/tests/core/integrations/Hierarchical Agent.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Image Sentiment Analysis.spec.ts b/src/frontend/tests/core/integrations/Image Sentiment Analysis.spec.ts index 3e3f1f822..893929df8 100644 --- a/src/frontend/tests/core/integrations/Image Sentiment Analysis.spec.ts +++ b/src/frontend/tests/core/integrations/Image Sentiment Analysis.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Instagram Copywriter.spec.ts b/src/frontend/tests/core/integrations/Instagram Copywriter.spec.ts index ef72c7ceb..ac25fa817 100644 --- a/src/frontend/tests/core/integrations/Instagram Copywriter.spec.ts +++ b/src/frontend/tests/core/integrations/Instagram Copywriter.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Market Research.spec.ts b/src/frontend/tests/core/integrations/Market Research.spec.ts index 6df987b52..a6c1a859f 100644 --- a/src/frontend/tests/core/integrations/Market Research.spec.ts +++ b/src/frontend/tests/core/integrations/Market Research.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Memory Chatbot.spec.ts b/src/frontend/tests/core/integrations/Memory Chatbot.spec.ts index db0603ed3..0d12fb09b 100644 --- a/src/frontend/tests/core/integrations/Memory Chatbot.spec.ts +++ b/src/frontend/tests/core/integrations/Memory Chatbot.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Prompt Chaining.spec.ts b/src/frontend/tests/core/integrations/Prompt Chaining.spec.ts index be3a3e8cc..262bcbb76 100644 --- a/src/frontend/tests/core/integrations/Prompt Chaining.spec.ts +++ b/src/frontend/tests/core/integrations/Prompt Chaining.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/SEO Keyword Generator.spec.ts b/src/frontend/tests/core/integrations/SEO Keyword Generator.spec.ts index 96d9cb326..b9561d37a 100644 --- a/src/frontend/tests/core/integrations/SEO Keyword Generator.spec.ts +++ b/src/frontend/tests/core/integrations/SEO Keyword Generator.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/SaaS Pricing.spec.ts b/src/frontend/tests/core/integrations/SaaS Pricing.spec.ts index efadb0c47..6c047f77c 100644 --- a/src/frontend/tests/core/integrations/SaaS Pricing.spec.ts +++ b/src/frontend/tests/core/integrations/SaaS Pricing.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Sequential Task Agent.spec.ts b/src/frontend/tests/core/integrations/Sequential Task Agent.spec.ts index a1d6fd0d3..2d06e8b30 100644 --- a/src/frontend/tests/core/integrations/Sequential Task Agent.spec.ts +++ b/src/frontend/tests/core/integrations/Sequential Task Agent.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Simple Agent.spec.ts b/src/frontend/tests/core/integrations/Simple Agent.spec.ts index e20e0444b..3bfa8c893 100644 --- a/src/frontend/tests/core/integrations/Simple Agent.spec.ts +++ b/src/frontend/tests/core/integrations/Simple Agent.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Travel Planning Agent.spec.ts b/src/frontend/tests/core/integrations/Travel Planning Agent.spec.ts index d66e3227d..fb0458f51 100644 --- a/src/frontend/tests/core/integrations/Travel Planning Agent.spec.ts +++ b/src/frontend/tests/core/integrations/Travel Planning Agent.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Twitter Thread Generator.spec.ts b/src/frontend/tests/core/integrations/Twitter Thread Generator.spec.ts index bced1d125..ba0a92815 100644 --- a/src/frontend/tests/core/integrations/Twitter Thread Generator.spec.ts +++ b/src/frontend/tests/core/integrations/Twitter Thread Generator.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/Vector Store.spec.ts b/src/frontend/tests/core/integrations/Vector Store.spec.ts index 352508519..9bff2b9f1 100644 --- a/src/frontend/tests/core/integrations/Vector Store.spec.ts +++ b/src/frontend/tests/core/integrations/Vector Store.spec.ts @@ -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, diff --git a/src/frontend/tests/core/integrations/starter-projects.spec.ts b/src/frontend/tests/core/integrations/starter-projects.spec.ts index f256523d2..cdf352bd8 100644 --- a/src/frontend/tests/core/integrations/starter-projects.spec.ts +++ b/src/frontend/tests/core/integrations/starter-projects.spec.ts @@ -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); diff --git a/src/frontend/tests/core/regression/generalBugs-prompt.spec.ts b/src/frontend/tests/core/regression/generalBugs-prompt.spec.ts index ae53e0674..5d20b440a 100644 --- a/src/frontend/tests/core/regression/generalBugs-prompt.spec.ts +++ b/src/frontend/tests/core/regression/generalBugs-prompt.spec.ts @@ -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, diff --git a/src/frontend/tests/extended/features/starter-projects.spec.ts b/src/frontend/tests/extended/features/starter-projects.spec.ts index 04500f0f5..0730c99fe 100644 --- a/src/frontend/tests/extended/features/starter-projects.spec.ts +++ b/src/frontend/tests/extended/features/starter-projects.spec.ts @@ -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);