From 1148c65c5ef2b742206b955b8f778f413ce0f94e Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 20 Dec 2023 14:41:49 -0300 Subject: [PATCH 1/4] Update type hints for inputs parameter in process_graph_data and process functions --- src/backend/langflow/api/v1/endpoints.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index df8418e97..99b7d5427 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -1,5 +1,5 @@ from http import HTTPStatus -from typing import Annotated, Optional, Union +from typing import Annotated, List, Optional, Union import sqlalchemy as sa from fastapi import APIRouter, Body, Depends, HTTPException, UploadFile, status @@ -42,7 +42,7 @@ router = APIRouter(tags=["Base"]) async def process_graph_data( graph_data: dict, - inputs: Optional[dict] = None, + inputs: Optional[Union[List[dict], dict]] = None, tweaks: Optional[dict] = None, clear_cache: bool = False, session_id: Optional[str] = None, @@ -160,7 +160,7 @@ async def process_json( async def process( session: Annotated[Session, Depends(get_session)], flow_id: str, - inputs: Optional[dict] = None, + inputs: Optional[Union[List[dict], dict]] = None, tweaks: Optional[dict] = None, clear_cache: Annotated[bool, Body(embed=True)] = False, # noqa: F821 session_id: Annotated[Union[None, str], Body(embed=True)] = None, # noqa: F821 From 931a2452eb730a440d3059c52b4982d93d295581 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 20 Dec 2023 14:41:55 -0300 Subject: [PATCH 2/4] Refactor result handling in generate_result function --- src/backend/langflow/processing/process.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index 03587cd29..766027bdf 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -136,7 +136,12 @@ async def generate_result(langchain_object: Union[Chain, VectorStore], inputs: d elif isinstance(inputs, dict): call_func = langchain_object.ainvoke result = await call_func(inputs) - result = result.content if hasattr(result, "content") else result + if isinstance(result, list): + result = [r.content if hasattr(r, "content") else r for r in result] + elif hasattr(result, "content"): + result = result.content + else: + result = result elif hasattr(langchain_object, "run") and isinstance(langchain_object, CustomComponent): result = langchain_object.run(inputs) From 3586ba8469782a38f774e56497be3700f93f485b Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 20 Dec 2023 14:53:15 -0300 Subject: [PATCH 3/4] Refactor process.py: Add import statements and update generate_result function --- src/backend/langflow/processing/process.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index 766027bdf..982ccc6f1 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -6,11 +6,12 @@ from langchain.chains.base import Chain from langchain.schema import AgentAction, Document from langchain.vectorstores.base import VectorStore from langchain_core.runnables.base import Runnable +from loguru import logger +from pydantic import BaseModel + from langflow.components.custom_components import CustomComponent from langflow.interface.run import build_sorted_vertices, get_memory_key, update_memory_keys from langflow.services.deps import get_session_service -from loguru import logger -from pydantic import BaseModel def fix_memory_inputs(langchain_object): @@ -118,7 +119,7 @@ def process_inputs(inputs: Optional[dict], artifacts: Dict[str, Any]) -> dict: return inputs -async def generate_result(langchain_object: Union[Chain, VectorStore], inputs: dict): +async def generate_result(langchain_object: Union[Chain, VectorStore, Runnable], inputs: Union[dict, List[dict]]): if isinstance(langchain_object, Chain): if inputs is None: raise ValueError("Inputs must be provided for a Chain") @@ -131,11 +132,15 @@ async def generate_result(langchain_object: Union[Chain, VectorStore], inputs: d elif isinstance(langchain_object, Document): result = langchain_object.dict() elif isinstance(langchain_object, Runnable): - if isinstance(inputs, List): - call_func = langchain_object.abatch - elif isinstance(inputs, dict): - call_func = langchain_object.ainvoke - result = await call_func(inputs) + # Define call_method as a coroutine function + # by default + if isinstance(inputs, List) and hasattr(langchain_object, "abatch"): + call_method = langchain_object.abatch + elif isinstance(inputs, dict) and hasattr(langchain_object, "ainvoke"): + call_method = langchain_object.ainvoke + else: + raise ValueError("Inputs must be provided for a Runnable") + result = await call_method(inputs) if isinstance(result, list): result = [r.content if hasattr(r, "content") else r for r in result] elif hasattr(result, "content"): From c5134d2e372ea7e2320b8e3f88e6a1ad022c38b2 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 20 Dec 2023 14:53:21 -0300 Subject: [PATCH 4/4] Update version to 0.6.3a5 in pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2856cd97a..7aed748cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow" -version = "0.6.3a4" +version = "0.6.3a5" description = "A Python package with a built-in web application" authors = ["Logspace "] maintainers = [