parent
d567b8518c
commit
eccdb3a566
3 changed files with 48 additions and 66 deletions
|
|
@ -707,58 +707,6 @@ class Graph:
|
||||||
|
|
||||||
return vertex_outputs
|
return vertex_outputs
|
||||||
|
|
||||||
def run(
|
|
||||||
self,
|
|
||||||
inputs: list[dict[str, str]],
|
|
||||||
*,
|
|
||||||
input_components: list[list[str]] | None = None,
|
|
||||||
types: list[InputType | None] | None = None,
|
|
||||||
outputs: list[str] | None = None,
|
|
||||||
session_id: str | None = None,
|
|
||||||
stream: bool = False,
|
|
||||||
fallback_to_env_vars: bool = False,
|
|
||||||
) -> list[RunOutputs]:
|
|
||||||
"""Run the graph with the given inputs and return the outputs.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
inputs (Dict[str, str]): A dictionary of input values.
|
|
||||||
input_components (Optional[list[str]]): A list of input components.
|
|
||||||
types (Optional[list[str]]): A list of types.
|
|
||||||
outputs (Optional[list[str]]): A list of output components.
|
|
||||||
session_id (Optional[str]): The session ID.
|
|
||||||
stream (bool): Whether to stream the outputs.
|
|
||||||
fallback_to_env_vars (bool): Whether to fallback to environment variables.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
List[RunOutputs]: A list of RunOutputs objects representing the outputs.
|
|
||||||
"""
|
|
||||||
# run the async function in a sync way
|
|
||||||
# this could be used in a FastAPI endpoint
|
|
||||||
# so we should take care of the event loop
|
|
||||||
coro = self.arun(
|
|
||||||
inputs=inputs,
|
|
||||||
inputs_components=input_components,
|
|
||||||
types=types,
|
|
||||||
outputs=outputs,
|
|
||||||
session_id=session_id,
|
|
||||||
stream=stream,
|
|
||||||
fallback_to_env_vars=fallback_to_env_vars,
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Attempt to get the running event loop; if none, an exception is raised
|
|
||||||
loop = asyncio.get_running_loop()
|
|
||||||
except RuntimeError:
|
|
||||||
# If there's no running event loop, use asyncio.run
|
|
||||||
return asyncio.run(coro)
|
|
||||||
|
|
||||||
# If the event loop is closed, use asyncio.run
|
|
||||||
if loop.is_closed():
|
|
||||||
return asyncio.run(coro)
|
|
||||||
|
|
||||||
# If there's an existing, open event loop, use it to run the async function
|
|
||||||
return loop.run_until_complete(coro)
|
|
||||||
|
|
||||||
async def arun(
|
async def arun(
|
||||||
self,
|
self,
|
||||||
inputs: list[dict[str, str]],
|
inputs: list[dict[str, str]],
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
|
import asyncio
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from loguru import logger
|
|
||||||
|
|
||||||
from langflow.graph import Graph
|
from langflow.graph import Graph
|
||||||
from langflow.graph.schema import RunOutputs
|
from langflow.graph.schema import RunOutputs
|
||||||
|
|
@ -69,7 +69,7 @@ def load_flow_from_json(
|
||||||
return Graph.from_payload(graph_data)
|
return Graph.from_payload(graph_data)
|
||||||
|
|
||||||
|
|
||||||
def run_flow_from_json(
|
async def arun_flow_from_json(
|
||||||
flow: Path | str | dict,
|
flow: Path | str | dict,
|
||||||
input_value: str,
|
input_value: str,
|
||||||
*,
|
*,
|
||||||
|
|
@ -106,17 +106,11 @@ def run_flow_from_json(
|
||||||
Returns:
|
Returns:
|
||||||
List[RunOutputs]: A list of RunOutputs objects representing the results of running the flow.
|
List[RunOutputs]: A list of RunOutputs objects representing the results of running the flow.
|
||||||
"""
|
"""
|
||||||
# Set all streaming to false
|
|
||||||
try:
|
|
||||||
import nest_asyncio
|
|
||||||
|
|
||||||
nest_asyncio.apply()
|
|
||||||
except Exception: # noqa: BLE001
|
|
||||||
logger.opt(exception=True).warning("Could not apply nest_asyncio")
|
|
||||||
if tweaks is None:
|
if tweaks is None:
|
||||||
tweaks = {}
|
tweaks = {}
|
||||||
tweaks["stream"] = False
|
tweaks["stream"] = False
|
||||||
graph = load_flow_from_json(
|
graph = await asyncio.to_thread(
|
||||||
|
load_flow_from_json,
|
||||||
flow=flow,
|
flow=flow,
|
||||||
tweaks=tweaks,
|
tweaks=tweaks,
|
||||||
log_level=log_level,
|
log_level=log_level,
|
||||||
|
|
@ -125,7 +119,7 @@ def run_flow_from_json(
|
||||||
cache=cache,
|
cache=cache,
|
||||||
disable_logs=disable_logs,
|
disable_logs=disable_logs,
|
||||||
)
|
)
|
||||||
return run_graph(
|
return await run_graph(
|
||||||
graph=graph,
|
graph=graph,
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
input_value=input_value,
|
input_value=input_value,
|
||||||
|
|
@ -134,3 +128,43 @@ def run_flow_from_json(
|
||||||
output_component=output_component,
|
output_component=output_component,
|
||||||
fallback_to_env_vars=fallback_to_env_vars,
|
fallback_to_env_vars=fallback_to_env_vars,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def run_flow_from_json(
|
||||||
|
flow: Path | str | dict,
|
||||||
|
input_value: str,
|
||||||
|
*,
|
||||||
|
session_id: str | None = None,
|
||||||
|
tweaks: dict | None = None,
|
||||||
|
input_type: str = "chat",
|
||||||
|
output_type: str = "chat",
|
||||||
|
output_component: str | None = None,
|
||||||
|
log_level: str | None = None,
|
||||||
|
log_file: str | None = None,
|
||||||
|
env_file: str | None = None,
|
||||||
|
cache: str | None = None,
|
||||||
|
disable_logs: bool | None = True,
|
||||||
|
fallback_to_env_vars: bool = False,
|
||||||
|
) -> list[RunOutputs]:
|
||||||
|
coro = arun_flow_from_json(
|
||||||
|
flow,
|
||||||
|
input_value,
|
||||||
|
session_id=session_id,
|
||||||
|
tweaks=tweaks,
|
||||||
|
input_type=input_type,
|
||||||
|
output_type=output_type,
|
||||||
|
output_component=output_component,
|
||||||
|
log_level=log_level,
|
||||||
|
log_file=log_file,
|
||||||
|
env_file=env_file,
|
||||||
|
cache=cache,
|
||||||
|
disable_logs=disable_logs,
|
||||||
|
fallback_to_env_vars=fallback_to_env_vars,
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
loop = asyncio.get_running_loop()
|
||||||
|
except RuntimeError:
|
||||||
|
return asyncio.run(coro)
|
||||||
|
|
||||||
|
return loop.run_until_complete(coro)
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ async def run_graph_internal(
|
||||||
return run_outputs, session_id_str
|
return run_outputs, session_id_str
|
||||||
|
|
||||||
|
|
||||||
def run_graph(
|
async def run_graph(
|
||||||
graph: Graph,
|
graph: Graph,
|
||||||
input_value: str,
|
input_value: str,
|
||||||
input_type: str,
|
input_type: str,
|
||||||
|
|
@ -104,9 +104,9 @@ def run_graph(
|
||||||
components.append(input_value_request.components or [])
|
components.append(input_value_request.components or [])
|
||||||
inputs_list.append({INPUT_FIELD_NAME: input_value_request.input_value})
|
inputs_list.append({INPUT_FIELD_NAME: input_value_request.input_value})
|
||||||
types.append(input_value_request.type)
|
types.append(input_value_request.type)
|
||||||
return graph.run(
|
return await graph.arun(
|
||||||
inputs_list,
|
inputs_list,
|
||||||
input_components=components,
|
inputs_components=components,
|
||||||
types=types,
|
types=types,
|
||||||
outputs=outputs or [],
|
outputs=outputs or [],
|
||||||
stream=False,
|
stream=False,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue