|
|
import os |
|
|
|
|
|
import pytest |
|
|
from langflow.base.tools.component_tool import ComponentToolkit |
|
|
from langflow.components.langchain_utilities import ToolCallingAgentComponent |
|
|
from langflow.components.models import OpenAIModelComponent |
|
|
from langflow.components.outputs import ChatOutput |
|
|
from langflow.components.tools.calculator import CalculatorToolComponent |
|
|
from langflow.graph import Graph |
|
|
from langflow.schema.data import Data |
|
|
from langflow.services.settings.feature_flags import FEATURE_FLAGS |
|
|
from pydantic import BaseModel |
|
|
|
|
|
|
|
|
@pytest.fixture |
|
|
def _add_toolkit_output(): |
|
|
FEATURE_FLAGS.add_toolkit_output = True |
|
|
yield |
|
|
FEATURE_FLAGS.add_toolkit_output = False |
|
|
|
|
|
|
|
|
async def test_component_tool(): |
|
|
calculator_component = CalculatorToolComponent() |
|
|
component_toolkit = ComponentToolkit(component=calculator_component) |
|
|
component_tool = component_toolkit.get_tools()[0] |
|
|
assert component_tool.name == "CalculatorTool-run_model" |
|
|
assert issubclass(component_tool.args_schema, BaseModel) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert component_toolkit.component == calculator_component |
|
|
|
|
|
result = component_tool.invoke(input={"expression": "1+1"}) |
|
|
assert isinstance(result[0], Data) |
|
|
assert "result" in result[0].data |
|
|
assert result[0].result == "2" |
|
|
|
|
|
|
|
|
@pytest.mark.api_key_required |
|
|
@pytest.mark.usefixtures("_add_toolkit_output") |
|
|
def test_component_tool_with_api_key(): |
|
|
chat_output = ChatOutput() |
|
|
openai_llm = OpenAIModelComponent() |
|
|
openai_llm.set(api_key=os.environ["OPENAI_API_KEY"]) |
|
|
tool_calling_agent = ToolCallingAgentComponent() |
|
|
tool_calling_agent.set( |
|
|
llm=openai_llm.build_model, tools=[chat_output], input_value="Which tools are available? Please tell its name." |
|
|
) |
|
|
|
|
|
g = Graph(start=tool_calling_agent, end=tool_calling_agent) |
|
|
assert g is not None |
|
|
results = list(g.start()) |
|
|
assert len(results) == 4 |
|
|
assert "message_response" in tool_calling_agent._outputs_map["response"].value.get_text() |
|
|
|