diff --git a/src/backend/base/langflow/components/embeddings/openai.py b/src/backend/base/langflow/components/embeddings/openai.py index 523462b11f1a..6c075b97d6e2 100644 --- a/src/backend/base/langflow/components/embeddings/openai.py +++ b/src/backend/base/langflow/components/embeddings/openai.py @@ -1,4 +1,4 @@ -from langchain_openai.embeddings.base import OpenAIEmbeddings +from langchain_openai import OpenAIEmbeddings from langflow.base.embeddings.model import LCEmbeddingsModel from langflow.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES @@ -38,9 +38,9 @@ class OpenAIEmbeddingsComponent(LCEmbeddingsModel): value="text-embedding-3-small", ), DictInput(name="model_kwargs", display_name="Model Kwargs", advanced=True), - SecretStrInput(name="openai_api_base", display_name="OpenAI API Base", advanced=True), SecretStrInput(name="openai_api_key", display_name="OpenAI API Key", value="OPENAI_API_KEY"), - SecretStrInput(name="openai_api_type", display_name="OpenAI API Type", advanced=True), + MessageTextInput(name="openai_api_base", display_name="OpenAI API Base", advanced=True), + MessageTextInput(name="openai_api_type", display_name="OpenAI API Type", advanced=True), MessageTextInput(name="openai_api_version", display_name="OpenAI API Version", advanced=True), MessageTextInput( name="openai_organization", @@ -74,26 +74,27 @@ class OpenAIEmbeddingsComponent(LCEmbeddingsModel): def build_embeddings(self) -> Embeddings: return OpenAIEmbeddings( - tiktoken_enabled=self.tiktoken_enable, - default_headers=self.default_headers, - default_query=self.default_query, + client=self.client or None, + model=self.model, + dimensions=self.dimensions or None, + deployment=self.deployment or None, + api_version=self.openai_api_version or None, + base_url=self.openai_api_base or None, + openai_api_type=self.openai_api_type or None, + openai_proxy=self.openai_proxy or None, + embedding_ctx_length=self.embedding_ctx_length, + api_key=self.openai_api_key or None, + organization=self.openai_organization or None, allowed_special="all", disallowed_special="all", chunk_size=self.chunk_size, - deployment=self.deployment, - embedding_ctx_length=self.embedding_ctx_length, max_retries=self.max_retries, - model=self.model, - model_kwargs=self.model_kwargs, - base_url=self.openai_api_base, - api_key=self.openai_api_key, - openai_api_type=self.openai_api_type, - api_version=self.openai_api_version, - organization=self.openai_organization, - openai_proxy=self.openai_proxy, timeout=self.request_timeout or None, + tiktoken_enabled=self.tiktoken_enable, + tiktoken_model_name=self.tiktoken_model_name or None, show_progress_bar=self.show_progress_bar, + model_kwargs=self.model_kwargs, skip_empty=self.skip_empty, - tiktoken_model_name=self.tiktoken_model_name, - dimensions=self.dimensions or None, + default_headers=self.default_headers or None, + default_query=self.default_query or None, ) diff --git a/src/backend/base/langflow/components/vectorstores/astradb.py b/src/backend/base/langflow/components/vectorstores/astradb.py index b3e58da1c004..fc61b4c88dd5 100644 --- a/src/backend/base/langflow/components/vectorstores/astradb.py +++ b/src/backend/base/langflow/components/vectorstores/astradb.py @@ -389,7 +389,7 @@ def build_vector_store(self, vectorize_options=None): msg = f"Invalid setup mode: {self.setup_mode}" raise ValueError(msg) from e - if self.embedding: + if self.embedding_service == "Embedding Model": embedding_dict = {"embedding": self.embedding} else: from astrapy.info import CollectionVectorServiceOptions diff --git a/src/frontend/tests/core/integrations/Vector Store.spec.ts b/src/frontend/tests/core/integrations/Vector Store.spec.ts index e9972dfea0e0..66ababddf574 100644 --- a/src/frontend/tests/core/integrations/Vector Store.spec.ts +++ b/src/frontend/tests/core/integrations/Vector Store.spec.ts @@ -3,176 +3,176 @@ import path from "path"; import uaParser from "ua-parser-js"; test("Vector Store RAG", async ({ page }) => { - // test.skip( - // !process?.env?.OPENAI_API_KEY, - // "OPENAI_API_KEY required to run this test", - // ); - // test.skip( - // !process?.env?.ASTRA_DB_API_ENDPOINT, - // "ASTRA_DB_API_ENDPOINT required to run this test", - // ); - // test.skip( - // !process?.env?.ASTRA_DB_APPLICATION_TOKEN, - // "ASTRA_DB_APPLICATION_TOKEN required to run this test", - // ); - // await page.goto("/"); - // await page.waitForSelector('[data-testid="mainpage_title"]', { - // timeout: 30000, - // }); - // await page.waitForSelector('[id="new-project-btn"]', { - // timeout: 30000, - // }); - // let modalCount = 0; - // try { - // const modalTitleElement = await page?.getByTestId("modal-title"); - // if (modalTitleElement) { - // modalCount = await modalTitleElement.count(); - // } - // } catch (error) { - // modalCount = 0; - // } - // while (modalCount === 0) { - // await page.getByText("New Project", { exact: true }).click(); - // await page.waitForTimeout(3000); - // modalCount = await page.getByTestId("modal-title")?.count(); - // } - // await page.getByTestId("side_nav_options_all-templates").click(); - // await page.getByRole("heading", { name: "Vector Store RAG" }).first().click(); - // await page.waitForSelector('[title="fit view"]', { - // timeout: 100000, - // }); - // await page.getByTitle("fit view").click(); - // await page.getByTitle("zoom out").click(); - // await page.getByTitle("zoom out").click(); - // await page.getByTitle("zoom out").click(); - // let outdatedComponents = await page.getByTestId("icon-AlertTriangle").count(); - // while (outdatedComponents > 0) { - // await page.getByTestId("icon-AlertTriangle").first().click(); - // await page.waitForTimeout(1000); - // outdatedComponents = await page.getByTestId("icon-AlertTriangle").count(); - // } - // let filledApiKey = await page.getByTestId("remove-icon-badge").count(); - // while (filledApiKey > 0) { - // await page.getByTestId("remove-icon-badge").first().click(); - // await page.waitForTimeout(1000); - // filledApiKey = await page.getByTestId("remove-icon-badge").count(); - // } - // if (process?.env?.ASTRA_DB_API_ENDPOINT?.includes("astra-dev")) { - // const getUA = await page.evaluate(() => navigator.userAgent); - // const userAgentInfo = uaParser(getUA); - // let control = "Control"; - // if (userAgentInfo.os.name.includes("Mac")) { - // control = "Meta"; - // } - // await page.getByTestId("title-Astra DB").first().click(); - // await page.waitForTimeout(500); - // await page.getByTestId("code-button-modal").click(); - // await page.waitForTimeout(500); - // let cleanCode = await extractAndCleanCode(page); - // cleanCode = cleanCode!.replace( - // '"pre_delete_collection": self.pre_delete_collection or False,', - // '"pre_delete_collection": self.pre_delete_collection or False,\n "environment": "dev",', - // ); - // await page.locator("textarea").last().press(`${control}+a`); - // await page.keyboard.press("Backspace"); - // await page.locator("textarea").last().fill(cleanCode); - // await page.locator('//*[@id="checkAndSaveBtn"]').click(); - // await page.waitForTimeout(500); - // await page.getByTestId("title-Astra DB").last().click(); - // await page.waitForTimeout(500); - // await page.getByTestId("code-button-modal").click(); - // await page.waitForTimeout(500); - // await page.locator("textarea").last().press(`${control}+a`); - // await page.keyboard.press("Backspace"); - // await page.locator("textarea").last().fill(cleanCode); - // await page.locator('//*[@id="checkAndSaveBtn"]').click(); - // await page.waitForTimeout(500); - // } - // const apiKeyInput = page.getByTestId("popover-anchor-input-api_key"); - // const isApiKeyInputVisible = await apiKeyInput.isVisible(); - // if (isApiKeyInputVisible) { - // await apiKeyInput.fill(process.env.OPENAI_API_KEY ?? ""); - // } - // await page - // .getByTestId("popover-anchor-input-api_key") // input ID without "anchor-" - // .nth(0) - // .fill(process.env.OPENAI_API_KEY ?? ""); - // await page - // .getByTestId("popover-anchor-input-openai_api_key") - // .nth(1) - // .fill(process.env.OPENAI_API_KEY ?? ""); - // await page - // .getByTestId("popover-anchor-input-openai_api_key") - // .nth(0) - // .fill(process.env.OPENAI_API_KEY ?? ""); - // // Astra DB tokens - // await page - // .getByTestId("popover-anchor-input-token") - // .nth(0) - // .fill(process.env.ASTRA_DB_APPLICATION_TOKEN ?? ""); - // await page - // .getByTestId("popover-anchor-input-token") - // .nth(1) - // .fill(process.env.ASTRA_DB_APPLICATION_TOKEN ?? ""); - // // Astra DB endpoints - // await page - // .getByTestId("popover-anchor-input-api_endpoint") - // .nth(0) - // .fill(process.env.ASTRA_DB_API_ENDPOINT ?? ""); - // await page - // .getByTestId("popover-anchor-input-api_endpoint") - // .nth(1) - // .fill(process.env.ASTRA_DB_API_ENDPOINT ?? ""); - // const fileChooserPromise = page.waitForEvent("filechooser"); - // await page.getByTestId("icon-Upload").last().click(); - // const fileChooser = await fileChooserPromise; - // await fileChooser.setFiles( - // path.join(__dirname, "../../assets/test_file.txt"), - // ); - // await page.getByText("test_file.txt").isVisible(); - // await page.waitForTimeout(1000); - // await page.getByTestId("button_run_astra db").first().click(); - // await page.waitForSelector("text=built successfully", { timeout: 60000 * 2 }); - // await page.getByText("built successfully").last().click({ - // timeout: 30000, - // }); - // await page.getByTestId("button_run_chat output").click(); - // await page.waitForSelector("text=built successfully", { timeout: 60000 * 2 }); - // await page.getByText("built successfully").last().click({ - // timeout: 30000, - // }); - // await page.getByTestId("button_run_astra db").last().click(); - // await page.waitForSelector("text=built successfully", { timeout: 60000 * 2 }); - // await page.getByText("built successfully").last().click({ - // timeout: 30000, - // }); - // await page.getByText("Playground", { exact: true }).last().click(); - // await page.waitForSelector('[data-testid="input-chat-playground"]', { - // timeout: 100000, - // }); - // await page.getByTestId("input-chat-playground").last().fill("hello"); - // await page.getByTestId("icon-LucideSend").last().click(); - // await page - // .getByText("This is a test file.", { exact: true }) - // .last() - // .isVisible(); - // await page.getByText("Chat", { exact: true }).last().click(); - // await page.getByText("Default Session").last().click(); - // await page.getByRole("combobox").click(); - // await page.getByLabel("Message logs").click(); - // await page.getByText("timestamp", { exact: true }).last().isVisible(); - // await page.getByText("text", { exact: true }).last().isVisible(); - // await page.getByText("sender", { exact: true }).last().isVisible(); - // await page.getByText("sender_name", { exact: true }).last().isVisible(); - // await page.getByText("session_id", { exact: true }).last().isVisible(); - // await page.getByText("files", { exact: true }).last().isVisible(); - // await page.getByRole("gridcell").last().isVisible(); - // await page.getByRole("combobox").click(); - // await page.getByLabel("Delete").click(); - // await page.waitForSelector('[data-testid="input-chat-playground"]', { - // timeout: 100000, - // }); - // await page.getByTestId("input-chat-playground").last().isVisible(); + test.skip( + !process?.env?.OPENAI_API_KEY, + "OPENAI_API_KEY required to run this test", + ); + test.skip( + !process?.env?.ASTRA_DB_API_ENDPOINT, + "ASTRA_DB_API_ENDPOINT required to run this test", + ); + test.skip( + !process?.env?.ASTRA_DB_APPLICATION_TOKEN, + "ASTRA_DB_APPLICATION_TOKEN required to run this test", + ); + await page.goto("/"); + await page.waitForSelector('[data-testid="mainpage_title"]', { + timeout: 30000, + }); + await page.waitForSelector('[id="new-project-btn"]', { + timeout: 30000, + }); + let modalCount = 0; + try { + const modalTitleElement = await page?.getByTestId("modal-title"); + if (modalTitleElement) { + modalCount = await modalTitleElement.count(); + } + } catch (error) { + modalCount = 0; + } + while (modalCount === 0) { + await page.getByText("New Project", { exact: true }).click(); + await page.waitForTimeout(3000); + modalCount = await page.getByTestId("modal-title")?.count(); + } + await page.getByTestId("side_nav_options_all-templates").click(); + await page.getByRole("heading", { name: "Vector Store RAG" }).first().click(); + await page.waitForSelector('[title="fit view"]', { + timeout: 100000, + }); + await page.getByTitle("fit view").click(); + await page.getByTitle("zoom out").click(); + await page.getByTitle("zoom out").click(); + await page.getByTitle("zoom out").click(); + let outdatedComponents = await page.getByTestId("icon-AlertTriangle").count(); + while (outdatedComponents > 0) { + await page.getByTestId("icon-AlertTriangle").first().click(); + await page.waitForTimeout(1000); + outdatedComponents = await page.getByTestId("icon-AlertTriangle").count(); + } + let filledApiKey = await page.getByTestId("remove-icon-badge").count(); + while (filledApiKey > 0) { + await page.getByTestId("remove-icon-badge").first().click(); + await page.waitForTimeout(1000); + filledApiKey = await page.getByTestId("remove-icon-badge").count(); + } + if (process?.env?.ASTRA_DB_API_ENDPOINT?.includes("astra-dev")) { + const getUA = await page.evaluate(() => navigator.userAgent); + const userAgentInfo = uaParser(getUA); + let control = "Control"; + if (userAgentInfo.os.name.includes("Mac")) { + control = "Meta"; + } + await page.getByTestId("title-Astra DB").first().click(); + await page.waitForTimeout(500); + await page.getByTestId("code-button-modal").click(); + await page.waitForTimeout(500); + let cleanCode = await extractAndCleanCode(page); + cleanCode = cleanCode!.replace( + '"pre_delete_collection": self.pre_delete_collection or False,', + '"pre_delete_collection": self.pre_delete_collection or False,\n "environment": "dev",', + ); + await page.locator("textarea").last().press(`${control}+a`); + await page.keyboard.press("Backspace"); + await page.locator("textarea").last().fill(cleanCode); + await page.locator('//*[@id="checkAndSaveBtn"]').click(); + await page.waitForTimeout(500); + await page.getByTestId("title-Astra DB").last().click(); + await page.waitForTimeout(500); + await page.getByTestId("code-button-modal").click(); + await page.waitForTimeout(500); + await page.locator("textarea").last().press(`${control}+a`); + await page.keyboard.press("Backspace"); + await page.locator("textarea").last().fill(cleanCode); + await page.locator('//*[@id="checkAndSaveBtn"]').click(); + await page.waitForTimeout(500); + } + const apiKeyInput = page.getByTestId("popover-anchor-input-api_key"); + const isApiKeyInputVisible = await apiKeyInput.isVisible(); + if (isApiKeyInputVisible) { + await apiKeyInput.fill(process.env.OPENAI_API_KEY ?? ""); + } + await page + .getByTestId("popover-anchor-input-api_key") // input ID without "anchor-" + .nth(0) + .fill(process.env.OPENAI_API_KEY ?? ""); + await page + .getByTestId("popover-anchor-input-openai_api_key") + .nth(1) + .fill(process.env.OPENAI_API_KEY ?? ""); + await page + .getByTestId("popover-anchor-input-openai_api_key") + .nth(0) + .fill(process.env.OPENAI_API_KEY ?? ""); + // Astra DB tokens + await page + .getByTestId("popover-anchor-input-token") + .nth(0) + .fill(process.env.ASTRA_DB_APPLICATION_TOKEN ?? ""); + await page + .getByTestId("popover-anchor-input-token") + .nth(1) + .fill(process.env.ASTRA_DB_APPLICATION_TOKEN ?? ""); + // Astra DB endpoints + await page + .getByTestId("popover-anchor-input-api_endpoint") + .nth(0) + .fill(process.env.ASTRA_DB_API_ENDPOINT ?? ""); + await page + .getByTestId("popover-anchor-input-api_endpoint") + .nth(1) + .fill(process.env.ASTRA_DB_API_ENDPOINT ?? ""); + const fileChooserPromise = page.waitForEvent("filechooser"); + await page.getByTestId("icon-Upload").last().click(); + const fileChooser = await fileChooserPromise; + await fileChooser.setFiles( + path.join(__dirname, "../../assets/test_file.txt"), + ); + await page.getByText("test_file.txt").isVisible(); + await page.waitForTimeout(1000); + await page.getByTestId("button_run_astra db").first().click(); + await page.waitForSelector("text=built successfully", { timeout: 60000 * 2 }); + await page.getByText("built successfully").last().click({ + timeout: 30000, + }); + await page.getByTestId("button_run_chat output").click(); + await page.waitForSelector("text=built successfully", { timeout: 60000 * 2 }); + await page.getByText("built successfully").last().click({ + timeout: 30000, + }); + await page.getByTestId("button_run_astra db").last().click(); + await page.waitForSelector("text=built successfully", { timeout: 60000 * 2 }); + await page.getByText("built successfully").last().click({ + timeout: 30000, + }); + await page.getByText("Playground", { exact: true }).last().click(); + await page.waitForSelector('[data-testid="input-chat-playground"]', { + timeout: 100000, + }); + await page.getByTestId("input-chat-playground").last().fill("hello"); + await page.getByTestId("icon-LucideSend").last().click(); + await page + .getByText("This is a test file.", { exact: true }) + .last() + .isVisible(); + await page.getByText("Chat", { exact: true }).last().click(); + await page.getByText("Default Session").last().click(); + await page.getByRole("combobox").click(); + await page.getByLabel("Message logs").click(); + await page.getByText("timestamp", { exact: true }).last().isVisible(); + await page.getByText("text", { exact: true }).last().isVisible(); + await page.getByText("sender", { exact: true }).last().isVisible(); + await page.getByText("sender_name", { exact: true }).last().isVisible(); + await page.getByText("session_id", { exact: true }).last().isVisible(); + await page.getByText("files", { exact: true }).last().isVisible(); + await page.getByRole("gridcell").last().isVisible(); + await page.getByRole("combobox").click(); + await page.getByLabel("Delete").click(); + await page.waitForSelector('[data-testid="input-chat-playground"]', { + timeout: 100000, + }); + await page.getByTestId("input-chat-playground").last().isVisible(); }); async function extractAndCleanCode(page: Page): Promise {