Skip to content

Commit 3c09b7d

Browse files
committed
Incorrect Latency
1 parent 6ae913e commit 3c09b7d

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

promptlayer/promptlayer.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ def _create_track_request_callable(
111111
input_variables,
112112
group_id,
113113
pl_run_span_id: Union[str, None] = None,
114+
request_start_time: Union[float, None] = None,
114115
):
115116
def _track_request(**body):
116117
track_request_kwargs = self._prepare_track_request_kwargs(
@@ -120,6 +121,7 @@ def _track_request(**body):
120121
input_variables,
121122
group_id,
122123
pl_run_span_id,
124+
request_start_time=request_start_time,
123125
**body,
124126
)
125127
return track_request(self.base_url, self.throw_on_error, **track_request_kwargs)
@@ -142,6 +144,8 @@ def _run_internal(
142144
provider: Union[str, None] = None,
143145
model: Union[str, None] = None,
144146
) -> Dict[str, Any]:
147+
import datetime
148+
145149
get_prompt_template_params = self._prepare_get_prompt_template_params(
146150
prompt_version=prompt_version,
147151
prompt_release_label=prompt_release_label,
@@ -168,6 +172,9 @@ def _run_internal(
168172
stream=stream,
169173
)
170174

175+
# Capture start time before making the LLM request
176+
request_start_time = datetime.datetime.now(datetime.timezone.utc).timestamp()
177+
171178
# response is just whatever the LLM call returns
172179
# streaming=False > Pydantic model instance
173180
# streaming=True > generator that yields ChatCompletionChunk pieces as they arrive
@@ -177,6 +184,9 @@ def _run_internal(
177184
function_kwargs=llm_data["function_kwargs"],
178185
)
179186

187+
# Capture end time after the LLM request completes
188+
request_end_time = datetime.datetime.now(datetime.timezone.utc).timestamp()
189+
180190
if stream:
181191
return stream_response(
182192
generator=response,
@@ -186,6 +196,7 @@ def _run_internal(
186196
input_variables=input_variables,
187197
group_id=group_id,
188198
pl_run_span_id=pl_run_span_id,
199+
request_start_time=request_start_time,
189200
),
190201
map_results=llm_data["stream_function"],
191202
metadata=llm_data["prompt_blueprint"]["metadata"],
@@ -204,6 +215,8 @@ def _run_internal(
204215
pl_run_span_id,
205216
metadata=metadata,
206217
request_response=request_response,
218+
request_start_time=request_start_time,
219+
request_end_time=request_end_time,
207220
)
208221

209222
return {
@@ -561,6 +574,7 @@ async def _create_track_request_callable(
561574
input_variables,
562575
group_id,
563576
pl_run_span_id: Union[str, None] = None,
577+
request_start_time: Union[float, None] = None,
564578
):
565579
async def _track_request(**body):
566580
track_request_kwargs = self._prepare_track_request_kwargs(
@@ -570,6 +584,7 @@ async def _track_request(**body):
570584
input_variables,
571585
group_id,
572586
pl_run_span_id,
587+
request_start_time=request_start_time,
573588
**body,
574589
)
575590
return await atrack_request(self.base_url, self.throw_on_error, **track_request_kwargs)
@@ -614,6 +629,8 @@ async def _run_internal(
614629
provider: Union[str, None] = None,
615630
model: Union[str, None] = None,
616631
) -> Dict[str, Any]:
632+
import datetime
633+
617634
get_prompt_template_params = self._prepare_get_prompt_template_params(
618635
prompt_version=prompt_version,
619636
prompt_release_label=prompt_release_label,
@@ -641,12 +658,18 @@ async def _run_internal(
641658
is_async=True,
642659
)
643660

661+
# Capture start time before making the LLM request
662+
request_start_time = datetime.datetime.now(datetime.timezone.utc).timestamp()
663+
644664
response = await llm_data["request_function"](
645665
prompt_blueprint=llm_data["prompt_blueprint"],
646666
client_kwargs=llm_data["client_kwargs"],
647667
function_kwargs=llm_data["function_kwargs"],
648668
)
649669

670+
# Capture end time after the LLM request completes
671+
request_end_time = datetime.datetime.now(datetime.timezone.utc).timestamp()
672+
650673
if hasattr(response, "model_dump"):
651674
request_response = response.model_dump(mode="json")
652675
else:
@@ -659,6 +682,7 @@ async def _run_internal(
659682
input_variables=input_variables,
660683
group_id=group_id,
661684
pl_run_span_id=pl_run_span_id,
685+
request_start_time=request_start_time,
662686
)
663687
return astream_response(
664688
request_response,
@@ -675,6 +699,8 @@ async def _run_internal(
675699
pl_run_span_id,
676700
metadata=metadata,
677701
request_response=request_response,
702+
request_start_time=request_start_time,
703+
request_end_time=request_end_time,
678704
)
679705

680706
return {

promptlayer/promptlayer_mixins.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,16 +389,25 @@ def _prepare_track_request_kwargs(
389389
group_id,
390390
pl_run_span_id: Union[str, None] = None,
391391
metadata: Union[Dict[str, str], None] = None,
392+
request_start_time: Union[float, None] = None,
393+
request_end_time: Union[float, None] = None,
392394
**body,
393395
):
396+
# If timestamps are not provided, generate them (for backward compatibility)
397+
# But note that this is the old buggy behavior
398+
if request_start_time is None:
399+
request_start_time = datetime.datetime.now(datetime.timezone.utc).timestamp()
400+
if request_end_time is None:
401+
request_end_time = datetime.datetime.now(datetime.timezone.utc).timestamp()
402+
394403
return {
395404
"function_name": request_params["function_name"],
396405
"provider_type": request_params["provider"],
397406
"args": [],
398407
"kwargs": request_params["function_kwargs"],
399408
"tags": tags,
400-
"request_start_time": datetime.datetime.now(datetime.timezone.utc).timestamp(),
401-
"request_end_time": datetime.datetime.now(datetime.timezone.utc).timestamp(),
409+
"request_start_time": request_start_time,
410+
"request_end_time": request_end_time,
402411
"api_key": api_key,
403412
"metadata": metadata,
404413
"prompt_id": request_params["prompt_blueprint"]["id"],

0 commit comments

Comments
 (0)