fix: langfuse upgrade and crew result usage (#4342)

* lanfuse upgrade and crew result usage

* ✅ (Dynamic Agent.spec.ts): Enable tests for checking the presence of required environment variables before running the test suite.

✨ (Hierarchical Agent.spec.ts): Add integration test for Hierarchical Tasks Agent to ensure proper functionality and behavior
✨ (Sequential Task Agent.spec.ts): Add integration test for Sequential Tasks Agent to ensure proper functionality and behavior

---------

Co-authored-by: cristhianzl <cristhian.lousa@gmail.com>
This commit is contained in:
Sebastián Estévez 2024-10-31 14:57:07 -04:00 • committed by GitHub
commit a03da10750
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 325 additions and 107 deletions

View file

@ -78,6 +78,6 @@ class BaseCrewComponent(Component):
async def build_output(self) -> Message:
crew = self.build_crew()
result = await crew.kickoff_async()
message = Message(text=result, sender=MESSAGE_SENDER_AI)
message = Message(text=result.raw, sender=MESSAGE_SENDER_AI)
self.status = message
return message

View file

@ -3,105 +3,98 @@ import * as dotenv from "dotenv";
import path from "path";
test("Dynamic Agent", async ({ page }) => {
// test.skip(
// !process?.env?.OPENAI_API_KEY,
// "OPENAI_API_KEY required to run this test",
// );
// test.skip(
// !process?.env?.SEARCH_API_KEY,
// "SEARCH_API_KEY required to run this test",
// );
// if (!process.env.CI) {
// dotenv.config({ path: path.resolve(__dirname, "../../.env") });
// }
// 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: "Dynamic Agent" }).last().click();
// await page.waitForSelector('[data-testid="fit_view"]', {
// timeout: 100000,
// });
// await page.getByTestId("fit_view").click();
// await page.getByTestId("zoom_out").click();
// await page.getByTestId("zoom_out").click();
// await page.getByTestId("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();
// }
// await page
// .getByTestId("popover-anchor-input-api_key")
// .last()
// .fill(process.env.SEARCH_API_KEY ?? "");
// await page.waitForTimeout(1000);
// let openAiLlms = await page.getByText("OpenAI", { exact: true }).count();
// await page.waitForSelector('[data-testid="fit_view"]', {
// timeout: 100000,
// });
// for (let i = 0; i < openAiLlms; i++) {
// await page
// .getByTestId("popover-anchor-input-api_key")
// .nth(i)
// .fill(process.env.OPENAI_API_KEY ?? "");
// await page.getByTestId("zoom_in").click();
// await page.getByTestId("dropdown_str_model_name").nth(i).click();
// await page.getByTestId("gpt-4o-1-option").last().click();
// await page.waitForTimeout(1000);
// }
// await page
// .getByTestId("textarea_str_input_value")
// .first()
// .fill("how much is an apple stock today");
// await page.getByTestId("button_run_chat output").click();
// const result = await Promise.race([
// page.waitForSelector("text=OpenAIException", { timeout: 30000 }),
// page.waitForSelector("text=Error building", { timeout: 30000 }),
// ]);
// if (result) {
// test.skip();
// }
// await page.waitForSelector("text=built successfully", { timeout: 60000 * 3 });
// await page.getByText("built successfully").last().click({
// timeout: 15000,
// });
// await page.getByText("Playground", { exact: true }).last().click();
// await page.waitForTimeout(1000);
// expect(page.getByText("apple").last()).toBeVisible();
// const textContents = await page
// .getByTestId("div-chat-message")
// .allTextContents();
// const concatAllText = textContents.join(" ");
// expect(concatAllText.toLocaleLowerCase()).toContain("apple");
// expect(concatAllText.toLocaleLowerCase()).not.toContain("error");
// expect(concatAllText.toLocaleLowerCase()).not.toContain("apologize");
// expect(concatAllText.toLocaleLowerCase()).not.toContain("unable");
// const allTextLength = concatAllText.length;
// expect(allTextLength).toBeGreaterThan(100);
test.skip(
!process?.env?.OPENAI_API_KEY,
"OPENAI_API_KEY required to run this test",
);
test.skip(
!process?.env?.SEARCH_API_KEY,
"SEARCH_API_KEY required to run this test",
);
if (!process.env.CI) {
dotenv.config({ path: path.resolve(__dirname, "../../.env") });
}
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: "Dynamic Agent" }).last().click();
await page.waitForSelector('[data-testid="fit_view"]', {
timeout: 100000,
});
await page.getByTestId("fit_view").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("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();
}
await page
.getByTestId("popover-anchor-input-api_key")
.last()
.fill(process.env.SEARCH_API_KEY ?? "");
await page.waitForTimeout(1000);
let openAiLlms = await page.getByText("OpenAI", { exact: true }).count();
await page.waitForSelector('[data-testid="fit_view"]', {
timeout: 100000,
});
for (let i = 0; i < openAiLlms; i++) {
await page
.getByTestId("popover-anchor-input-api_key")
.nth(i)
.fill(process.env.OPENAI_API_KEY ?? "");
await page.getByTestId("zoom_in").click();
await page.getByTestId("dropdown_str_model_name").nth(i).click();
await page.getByTestId("gpt-4o-1-option").last().click();
await page.waitForTimeout(1000);
}
await page
.getByTestId("textarea_str_input_value")
.first()
.fill("how much is an apple stock today");
await page.getByTestId("button_run_chat output").click();
await page.waitForSelector("text=built successfully", { timeout: 60000 * 3 });
await page.getByText("built successfully").last().click({
timeout: 15000,
});
await page.getByText("Playground", { exact: true }).last().click();
await page.waitForTimeout(1000);
expect(page.getByText("apple").last()).toBeVisible();
const textContents = await page
.getByTestId("div-chat-message")
.allTextContents();
const concatAllText = textContents.join(" ");
expect(concatAllText.toLocaleLowerCase()).toContain("apple");
expect(concatAllText.toLocaleLowerCase()).not.toContain("error");
expect(concatAllText.toLocaleLowerCase()).not.toContain("apologize");
const allTextLength = concatAllText.length;
expect(allTextLength).toBeGreaterThan(100);
});

View file

@ -0,0 +1,122 @@
import { expect, test } from "@playwright/test";
import * as dotenv from "dotenv";
import path from "path";
import uaParser from "ua-parser-js";
test("Hierarchical Tasks Agent", async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,
"OPENAI_API_KEY required to run this test",
);
test.skip(
!process?.env?.SEARCH_API_KEY,
"SEARCH_API_KEY required to run this test",
);
if (!process.env.CI) {
dotenv.config({ path: path.resolve(__dirname, "../../.env") });
}
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();
}
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("side_nav_options_all-templates").click();
await page
.getByRole("heading", { name: "Hierarchical Tasks Agent" })
.first()
.click();
await page.waitForSelector('[data-testid="fit_view"]', {
timeout: 100000,
});
await page.getByTestId("fit_view").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("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();
}
await page
.getByTestId("popover-anchor-input-api_key")
.nth(1)
.fill(process.env.OPENAI_API_KEY ?? "");
await page
.getByTestId("popover-anchor-input-api_key")
.nth(0)
.fill(process.env.OPENAI_API_KEY ?? "");
await page.getByTestId("dropdown_str_model_name").nth(1).click();
await page.getByTestId("gpt-4o-1-option").last().click();
await page.getByTestId("dropdown_str_model_name").nth(0).click();
await page.getByTestId("gpt-4o-1-option").first().click();
await page
.getByTestId("popover-anchor-input-api_key")
.last()
.fill(process.env.SEARCH_API_KEY ?? "");
await page.waitForTimeout(1000);
await page.getByTestId("button_run_chat output").click();
await page.waitForTimeout(1000);
await page.waitForSelector("text=built successfully", { timeout: 30000 });
await page.getByText("built successfully").last().click({
timeout: 15000,
});
await page.getByText("Playground", { exact: true }).last().click();
expect(await page.locator(".markdown").count()).toBeGreaterThan(0);
expect(await page.getByText("Langflow").count()).toBeGreaterThan(2);
});

View file

@ -0,0 +1,103 @@
import { expect, test } from "@playwright/test";
import * as dotenv from "dotenv";
import path from "path";
import uaParser from "ua-parser-js";
test("Sequential Task Agent", async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,
"OPENAI_API_KEY required to run this test",
);
if (!process.env.CI) {
dotenv.config({ path: path.resolve(__dirname, "../../.env") });
}
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();
}
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("side_nav_options_all-templates").click();
await page
.getByRole("heading", { name: "Sequential Tasks Agent" })
.first()
.click();
await page.waitForSelector('[data-testid="fit_view"]', {
timeout: 100000,
});
await page.getByTestId("fit_view").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("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();
}
await page
.getByTestId("popover-anchor-input-api_key")
.fill(process.env.OPENAI_API_KEY ?? "");
await page.getByTestId("dropdown_str_model_name").click();
await page.getByTestId("gpt-4o-1-option").click();
await page.waitForTimeout(1000);
await page.getByTestId("button_run_chat output").click();
await page.waitForTimeout(1000);
await page.waitForSelector("text=built successfully", { timeout: 30000 });
await page.getByText("built successfully").last().click({
timeout: 15000,
});
await page.getByText("Playground", { exact: true }).last().click();
expect(await page.locator(".markdown").count()).toBeGreaterThan(0);
expect(await page.getByText("Agile").count()).toBeGreaterThan(0);
});