From f09ebeba340428bff12a97cb1d82dcfbdff85a64 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 28 Feb 2024 11:03:55 -0300 Subject: [PATCH] Add support for input values in build_vertex API --- src/backend/langflow/api/v1/chat.py | 8 ++++++-- src/backend/langflow/api/v1/schemas.py | 4 ++++ src/backend/langflow/graph/vertex/base.py | 15 +++++++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/backend/langflow/api/v1/chat.py b/src/backend/langflow/api/v1/chat.py index 91b4bcd65..85a3a7abe 100644 --- a/src/backend/langflow/api/v1/chat.py +++ b/src/backend/langflow/api/v1/chat.py @@ -1,10 +1,11 @@ import time import uuid -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Annotated, Optional from fastapi import ( APIRouter, BackgroundTasks, + Body, Depends, HTTPException, WebSocket, @@ -21,6 +22,7 @@ from langflow.api.utils import ( format_exception_message, ) from langflow.api.v1.schemas import ( + InputValueRequest, ResultDataResponse, StreamData, VertexBuildResponse, @@ -139,10 +141,12 @@ async def build_vertex( flow_id: str, vertex_id: str, background_tasks: BackgroundTasks, + inputs: Annotated[InputValueRequest, Body(embed=True)] = None, chat_service: "ChatService" = Depends(get_chat_service), current_user=Depends(get_current_active_user), ): """Build a vertex instead of the entire graph.""" + {"inputs": {"input_value": "some value"}} start_time = time.perf_counter() try: start_time = time.perf_counter() @@ -163,7 +167,7 @@ async def build_vertex( vertex = graph.get_vertex(vertex_id) try: if not vertex.pinned or not vertex._built: - await vertex.build(user_id=current_user.id) + await vertex.build(user_id=current_user.id, inputs=inputs.model_dump()) if vertex.result is not None: params = vertex._built_object_repr() diff --git a/src/backend/langflow/api/v1/schemas.py b/src/backend/langflow/api/v1/schemas.py index 0092efa4e..c85f946da 100644 --- a/src/backend/langflow/api/v1/schemas.py +++ b/src/backend/langflow/api/v1/schemas.py @@ -261,3 +261,7 @@ class VertexBuildResponse(BaseModel): class VerticesBuiltResponse(BaseModel): vertices: List[VertexBuildResponse] + + +class InputValueRequest(BaseModel): + input_value: str diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py index b917889a4..c5b993f27 100644 --- a/src/backend/langflow/graph/vertex/base.py +++ b/src/backend/langflow/graph/vertex/base.py @@ -2,13 +2,16 @@ import ast import inspect import types from enum import Enum -from typing import (TYPE_CHECKING, Any, Callable, Coroutine, Dict, List, - Optional) +from typing import TYPE_CHECKING, Any, Callable, Coroutine, Dict, List, Optional from loguru import logger -from langflow.graph.schema import (INPUT_COMPONENTS, OUTPUT_COMPONENTS, - InterfaceComponentTypes, ResultData) +from langflow.graph.schema import ( + INPUT_COMPONENTS, + OUTPUT_COMPONENTS, + InterfaceComponentTypes, + ResultData, +) from langflow.graph.utils import UnbuiltObject, UnbuiltResult from langflow.graph.vertex.utils import generate_result from langflow.interface.initialize import loading @@ -608,6 +611,7 @@ class Vertex: async def build( self, user_id=None, + inputs: Optional[Dict[str, Any]] = None, requester: Optional["Vertex"] = None, **kwargs, ) -> Any: @@ -620,6 +624,9 @@ class Vertex: return self.get_requester_result(requester) self._reset() + if inputs and self.is_input: + self.update_raw_params(inputs) + # Run steps for step in self.steps: if step not in self.steps_ran: