Add format_elapsed_time function to utils.py and display build duration in stream_build

This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-12-12 10:01:13 -03:00
commit ccc457dbdb
2 changed files with 30 additions and 4 deletions

View file

@ -169,3 +169,21 @@ async def check_langflow_version(component: StoreComponentCreate):
f"Your version of Langflow ({component.last_tested_version}) is outdated. " f"Your version of Langflow ({component.last_tested_version}) is outdated. "
f"Please update to the latest version ({langflow_version}) and try again." f"Please update to the latest version ({langflow_version}) and try again."
) )
def format_elapsed_time(elapsed_time) -> str:
# Format elapsed time to human readable format coming from
# perf_counter()
# If the elapsed time is less than 1 second, return ms
# If the elapsed time is less than 1 minute, return seconds rounded to 2 decimals
time_str = ""
if elapsed_time < 1:
elapsed_time = int(round(elapsed_time * 1000))
time_str = f"{elapsed_time} ms"
elif elapsed_time < 60:
elapsed_time = round(elapsed_time, 2)
time_str = f"{elapsed_time} seconds"
else:
elapsed_time = round(elapsed_time / 60, 2)
time_str = f"{elapsed_time} minutes"
return time_str

View file

@ -1,6 +1,11 @@
import time
from fastapi import APIRouter, Depends, HTTPException, Query, WebSocket, WebSocketException, status from fastapi import APIRouter, Depends, HTTPException, Query, WebSocket, WebSocketException, status
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
from langflow.api.utils import build_input_keys_response from loguru import logger
from sqlmodel import Session
from langflow.api.utils import build_input_keys_response, format_elapsed_time
from langflow.api.v1.schemas import BuildStatus, BuiltResponse, InitResponse, StreamData from langflow.api.v1.schemas import BuildStatus, BuiltResponse, InitResponse, StreamData
from langflow.graph.graph.base import Graph from langflow.graph.graph.base import Graph
from langflow.services.auth.utils import get_current_active_user, get_current_user_by_jwt from langflow.services.auth.utils import get_current_active_user, get_current_user_by_jwt
@ -8,8 +13,6 @@ from langflow.services.cache.service import BaseCacheService
from langflow.services.cache.utils import update_build_status from langflow.services.cache.utils import update_build_status
from langflow.services.chat.service import ChatService from langflow.services.chat.service import ChatService
from langflow.services.deps import get_cache_service, get_chat_service, get_session from langflow.services.deps import get_cache_service, get_chat_service, get_session
from loguru import logger
from sqlmodel import Session
router = APIRouter(tags=["Chat"]) router = APIRouter(tags=["Chat"])
@ -151,12 +154,16 @@ async def stream_build(
"log": f"Building node {vertex.vertex_type}", "log": f"Building node {vertex.vertex_type}",
} }
yield str(StreamData(event="log", data=log_dict)) yield str(StreamData(event="log", data=log_dict))
# time this
start_time = time.perf_counter()
if vertex.is_task: if vertex.is_task:
vertex = await try_running_celery_task(vertex, user_id) vertex = await try_running_celery_task(vertex, user_id)
else: else:
await vertex.build(user_id=user_id) await vertex.build(user_id=user_id)
time_elapded = format_elapsed_time(time.perf_counter() - start_time)
params = vertex._built_object_repr() params = vertex._built_object_repr()
valid = True valid = True
logger.debug(f"Building node {str(vertex.vertex_type)}") logger.debug(f"Building node {str(vertex.vertex_type)}")
logger.debug(f"Output: {params[:100]}{'...' if len(params) > 100 else ''}") logger.debug(f"Output: {params[:100]}{'...' if len(params) > 100 else ''}")
if vertex.artifacts: if vertex.artifacts:
@ -174,9 +181,10 @@ async def stream_build(
if vertex_id in graph.top_level_vertices: if vertex_id in graph.top_level_vertices:
response = { response = {
"valid": valid, "valid": valid,
"params": params, "params": f"Duration: {time_elapded}\n{params}",
"id": vertex_id, "id": vertex_id,
"progress": round(i / number_of_nodes, 2), "progress": round(i / number_of_nodes, 2),
"duration": time_elapded,
} }
yield str(StreamData(event="message", data=response)) yield str(StreamData(event="message", data=response))