* Update styleUtils.ts * update to prompt component * update to template * update to mcp component * update to smart function * [autofix.ci] apply automated fixes * update to templates * fix sidebar * change name * update import * update import * update import * [autofix.ci] apply automated fixes * fix import * fix ollama * fix ruff * refactor(agent): standardize memory handling and update chat history logic (#8715) * update chat history * update to agents * Update Simple Agent.json * update to templates * ruff errors * Update agent.py * Update test_agent_component.py * [autofix.ci] apply automated fixes * update templates * test fix --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Mike Fortman <michael.fortman@datastax.com> * fix prompt change * feat(message): support sequencing of multiple streamable models (#8434) * feat: update OpenAI model parameters handling for reasoning models * feat: extend input_value type in LCModelComponent to support AsyncIterator and Iterator * refactor: remove assert_streaming_sequence method and related checks from Graph class * feat: add consume_iterator method to Message class for handling iterators * test: add unit tests for OpenAIModelComponent functionality and integration * feat: update OpenAIModelComponent to include temperature and seed parameters in build_model method * feat: rename consume_iterator method to consume_iterator_in_text and update its implementation for handling text * feat: add is_connected_to_chat_output method to Component class for improved message handling * feat: refactor LCModelComponent methods to support asynchronous message handling and improve chat output integration * refactor: remove consume_iterator_in_text method from Message class and clean up LCModelComponent input handling * fix: update import paths for input components in multiple starter project JSON files * fix: enhance error message formatting in ErrorMessage class to handle additional exception attributes * refactor: remove validate_stream calls from generate_flow_events and Graph class to streamline flow processing * fix: handle asyncio.CancelledError in aadd_messagetables to ensure proper session rollback and retry logic * refactor: streamline message handling in LCModelComponent by replacing async invocation with synchronous calls and updating message text handling * refactor: enhance message handling in LCModelComponent by introducing lf_message for improved return value management and updating properties for consistency * feat: add _build_source method to Component class for enhanced source handling and flexibility in source object management * feat: enhance LCModelComponent by adding _handle_stream method for improved streaming response handling and refactoring chat output integration * feat: update MemoryComponent to enhance message retrieval and storage functionality, including new sender type handling and output options for text and dataframe formats * test: refactor LanguageModelComponent tests to use ComponentTestBaseWithoutClient and add tests for Google model creation and error handling * test: add fixtures for API keys and implement live API tests for OpenAI, Anthropic, and Google models * fix: reorder JSON properties for consistency in starter projects * Updated JSON files for various starter projects to ensure consistent ordering of properties, specifically moving "type" to follow "selected_output" for better readability and maintainability. * Affected files: Basic Prompt Chaining.json, Blog Writer.json, Financial Report Parser.json, Hybrid Search RAG.json, SEO Keyword Generator.json. * refactor: simplify input_value type in LCModelComponent * Updated the input_value parameter in LCModelComponent to remove AsyncIterator and Iterator types, streamlining the input options to only str and Message for improved clarity and maintainability. * This change enhances the documentation and understanding of the expected input types for the component. * fix: clarify comment for handling source in Component class * refactor: remove unnecessary mocking in OpenAI model integration tests * auto update * update * [autofix.ci] apply automated fixes * fix openai import * revert template changes * test fixes * update templates * [autofix.ci] apply automated fixes * fix tests * fix order * fix prompts import * fix frontend tests * fix frontend * [autofix.ci] apply automated fixes * add charmander * [autofix.ci] apply automated fixes * fix prompt frontend * fix frontend * test fix * [autofix.ci] apply automated fixes * change pokedex * remove pokedex extra * update template * name fix * update template * mcp test fix --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: cristhianzl <cristhian.lousa@gmail.com> Co-authored-by: Yuqi Tang <yuqi.tang@datastax.com> Co-authored-by: Mike Fortman <michael.fortman@datastax.com> Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
82 lines
3 KiB
TypeScript
82 lines
3 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
|
|
|
|
test(
|
|
"user can search and add components using keyboard shortcuts",
|
|
{ tag: ["@release", "@workspace"] },
|
|
async ({ page }) => {
|
|
// Navigate to homepage and handle initial modal
|
|
await awaitBootstrapTest(page);
|
|
|
|
// Start with blank flow
|
|
await page.getByTestId("blank-flow").click();
|
|
await page.waitForTimeout(500);
|
|
await page.waitForSelector('[data-testid="sidebar-search-input"]', {
|
|
timeout: 3000,
|
|
});
|
|
|
|
// Press "/" to activate search
|
|
await page.keyboard.press("/");
|
|
|
|
// Verify search is focused and disclosures are closed when search is empty
|
|
await expect(page.getByTestId("sidebar-search-input")).toBeFocused({
|
|
timeout: 1000,
|
|
});
|
|
await expect(page.getByTestId("input_outputChat Input")).not.toBeVisible();
|
|
|
|
// Type "chat" to search for chat components
|
|
await page.keyboard.type("chat");
|
|
|
|
await expect(page.getByTestId("input_outputChat Input")).toBeVisible({
|
|
timeout: 1000,
|
|
});
|
|
|
|
// Verify disclosures open when search has content
|
|
await expect(page.getByTestId("input_outputChat Input")).toBeVisible();
|
|
|
|
// Press Tab to focus first result
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Tab");
|
|
|
|
// Verify some expected chat-related components are visible
|
|
await expect(page.getByTestId("input_outputChat Input")).toBeVisible();
|
|
await expect(page.getByTestId("input_outputChat Output")).toBeVisible();
|
|
|
|
// Press Space to select the component
|
|
await page.keyboard.press("Space");
|
|
|
|
// Verify component was added to flow
|
|
const addedComponent = await page.locator(".react-flow__node").first();
|
|
await expect(addedComponent).toBeVisible();
|
|
|
|
// Clear search input and verify disclosures are closed
|
|
await page.getByTestId("sidebar-search-input").clear();
|
|
await expect(page.getByTestId("input_outputChat Input")).not.toBeVisible();
|
|
|
|
// Test Enter key selection
|
|
await page.keyboard.press("/");
|
|
await page.keyboard.type("prompt");
|
|
|
|
// Verify disclosures open with new search
|
|
await expect(page.getByTestId("processingPrompt Template")).toBeVisible();
|
|
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Enter");
|
|
|
|
// Verify second component was added
|
|
const nodeCount = await page.locator(".react-flow__node").count();
|
|
expect(nodeCount).toBe(2);
|
|
|
|
// Verify search is cleared and disclosures are closed after adding component
|
|
await page.keyboard.press("/");
|
|
await page.getByTestId("sidebar-search-input").clear();
|
|
await expect(page.getByTestId("sidebar-search-input")).toHaveValue("");
|
|
await expect(page.getByTestId("input_outputChat Input")).not.toBeVisible();
|
|
|
|
await expect(page.getByTestId("sidebar-search-input")).toBeFocused();
|
|
await page.keyboard.press("Escape");
|
|
await expect(page.getByTestId("sidebar-search-input")).not.toBeFocused();
|
|
await expect(page.getByTestId("input_outputChat Input")).not.toBeVisible();
|
|
},
|
|
);
|