fix: Make from_template_and_variables async for backwards compatibility, add sync version, add tests and small fixes (#4500)

* Refactor `trace_name` property to use `_id` instead of `_vertex.id` for component identification

* Handle missing session_id attribute in component and agent classes

* Add SUPPORTED_VERSIONS constant for version tracking in tests

* Add utility to download components from GitHub in integration tests

* Rename TestComponent to ComponentForTesting to avoid conflict with pytest

* test: enhance PromptComponent tests for version support

Add parameterized testing for supported versions and a validation for the latest PromptComponent. This improves test coverage and ensures compatibility across different versions.

* refactor: move build_component_instance_for_tests utility to integration utils

* Make `from_template_and_variables` async for backwards compatibility and add sync version

* Refactor `PromptComponent` to use `Message.from_template` method across starter projects JSON files.

* add await to `from_template_and_variables` call

* Add async test for message prompt serialization and update cache directory handling

- Introduced `async` in `test_message_prompt_serialization` for asynchronous message creation.
- Added `test_message_sync_prompt_serialization` for synchronous message testing.
- Updated cache directory paths to "langflow_test" for test isolation.
- Utilized `monkeypatch` to set environment variable for cache directory in `langflow_cache_dir` fixture.

* Add fixture and existence check in test_schema_message.py

- Use `langflow_cache_dir` fixture in `test_message_with_single_image`.
- Add assertion to verify the existence of `second_image`.

* Add base test class to ensure file names are defined for all supported versions

* Remove default value for 'file_name' parameter in 'build_component_instance_for_tests' function

* Enhance `TestPromptComponent` with version-specific file name handling and base class integration

* Refactor test_prompt_component_versions to use FILE_NAMES_MAPPING directly

* Add component version tests and base classes for testing with/without client

* Simplify `build_component_instance_for_tests` by returning `cc_class` directly

* Refactor `TestPromptComponent` to use `ComponentTestBaseWithClient` and remove version tests

* Add assertion for LANGFLOW_CONFIG_DIR in test_message_with_multiple_images

* Refactor: update method call to `from_template` in `langchain_hub.py`

* Handle missing '_id' attribute in 'trace_name' method of custom_component.py

* Optimize `get_and_cache_all_types_dict` call by removing unnecessary thread usage in test.
This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-11-11 23:25:24 -03:00 • committed by GitHub
commit 768e6f02ba
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 1013 additions and 32 deletions

View file

@ -17,7 +17,7 @@ async def create_event_queue():
return asyncio.Queue()
class TestComponent(Component):
class ComponentForTesting(Component):
"""Test component that implements basic functionality."""
def build(self) -> None:
@ -40,7 +40,7 @@ async def test_component_message_sending():
event_manager = EventManager(queue)
# Create component
component = TestComponent()
component = ComponentForTesting()
component.set_event_manager(event_manager)
# Create a message
@ -68,7 +68,7 @@ async def test_component_tool_output():
event_manager = EventManager(queue)
# Create component
component = TestComponent()
component = ComponentForTesting()
component.set_event_manager(event_manager)
# Create a message with tool content
@ -101,7 +101,7 @@ async def test_component_error_handling():
event_manager = EventManager(queue)
# Create component
component = TestComponent()
component = ComponentForTesting()
component.set_event_manager(event_manager)
# Trigger an error
@ -133,7 +133,7 @@ async def test_component_build_results():
event_manager = EventManager(queue)
# Create component
component = TestComponent()
component = ComponentForTesting()
component.set_event_manager(event_manager)
# Add outputs to the component
@ -165,7 +165,7 @@ async def test_component_logging():
event_manager = EventManager(queue)
# Create component
component = TestComponent()
component = ComponentForTesting()
component.set_event_manager(event_manager)
# Set current output (required for logging)
@ -205,7 +205,7 @@ async def test_component_streaming_message():
mock_graph.flow_id = "12345678-1234-5678-1234-567812345678" # Valid UUID string
vertex.graph = mock_graph
component = TestComponent(_vertex=vertex)
component = ComponentForTesting(_vertex=vertex)
component.set_event_manager(event_manager)
# Create a chunk class that mimics LangChain's streaming format