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"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.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.graph.graph.base import Graph
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.chat.service import ChatService
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"])
@ -151,12 +154,16 @@ async def stream_build(
"log": f"Building node {vertex.vertex_type}",
}
yield str(StreamData(event="log", data=log_dict))
# time this
start_time = time.perf_counter()
if vertex.is_task:
vertex = await try_running_celery_task(vertex, user_id)
else:
await vertex.build(user_id=user_id)
time_elapded = format_elapsed_time(time.perf_counter() - start_time)
params = vertex._built_object_repr()
valid = True
logger.debug(f"Building node {str(vertex.vertex_type)}")
logger.debug(f"Output: {params[:100]}{'...' if len(params) > 100 else ''}")
if vertex.artifacts:
@ -174,9 +181,10 @@ async def stream_build(
if vertex_id in graph.top_level_vertices:
response = {
"valid": valid,
"params": params,
"params": f"Duration: {time_elapded}\n{params}",
"id": vertex_id,
"progress": round(i / number_of_nodes, 2),
"duration": time_elapded,
}
yield str(StreamData(event="message", data=response))