Use tz-aware utc datetimes in tracer (#15187)

<!-- Thank you for contributing to LangChain!

Please title your PR "<package>: <description>", where <package> is
whichever of langchain, community, core, experimental, etc. is being
modified.

Replace this entire comment with:
  - **Description:** a description of the change, 
  - **Issue:** the issue # it fixes if applicable,
  - **Dependencies:** any dependencies required for this change,
- **Twitter handle:** we announce bigger features on Twitter. If your PR
gets announced, and you'd like a mention, we'll gladly shout you out!

Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` from the root
of the package you've modified to check this locally.

See contribution guidelines for more information on how to write/run
tests, lint, etc: https://python.langchain.com/docs/contributing/

If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.

If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17.
 -->
pull/15427/head
Nuno Campos 6 months ago committed by GitHub
parent 480626dc99
commit 6810b4b0bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,7 +5,7 @@ import logging
import sys import sys
import traceback import traceback
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from datetime import datetime from datetime import datetime, timezone
from typing import ( from typing import (
TYPE_CHECKING, TYPE_CHECKING,
Any, Any,
@ -160,7 +160,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Start a trace for an LLM run.""" """Start a trace for an LLM run."""
parent_run_id_ = str(parent_run_id) if parent_run_id else None parent_run_id_ = str(parent_run_id) if parent_run_id else None
execution_order = self._get_execution_order(parent_run_id_) execution_order = self._get_execution_order(parent_run_id_)
start_time = datetime.utcnow() start_time = datetime.now(timezone.utc)
if metadata: if metadata:
kwargs.update({"metadata": metadata}) kwargs.update({"metadata": metadata})
llm_run = Run( llm_run = Run(
@ -198,7 +198,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
llm_run.events.append( llm_run.events.append(
{ {
"name": "new_token", "name": "new_token",
"time": datetime.utcnow(), "time": datetime.now(timezone.utc),
"kwargs": event_kwargs, "kwargs": event_kwargs,
}, },
) )
@ -230,7 +230,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
llm_run.events.append( llm_run.events.append(
{ {
"name": "retry", "name": "retry",
"time": datetime.utcnow(), "time": datetime.now(timezone.utc),
"kwargs": retry_d, "kwargs": retry_d,
}, },
) )
@ -247,7 +247,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
output_generation["message"] = dumpd( output_generation["message"] = dumpd(
cast(ChatGeneration, generation).message cast(ChatGeneration, generation).message
) )
llm_run.end_time = datetime.utcnow() llm_run.end_time = datetime.now(timezone.utc)
llm_run.events.append({"name": "end", "time": llm_run.end_time}) llm_run.events.append({"name": "end", "time": llm_run.end_time})
self._end_trace(llm_run) self._end_trace(llm_run)
self._on_llm_end(llm_run) self._on_llm_end(llm_run)
@ -263,7 +263,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Handle an error for an LLM run.""" """Handle an error for an LLM run."""
llm_run = self._get_run(run_id, run_type="llm") llm_run = self._get_run(run_id, run_type="llm")
llm_run.error = self._get_stacktrace(error) llm_run.error = self._get_stacktrace(error)
llm_run.end_time = datetime.utcnow() llm_run.end_time = datetime.now(timezone.utc)
llm_run.events.append({"name": "error", "time": llm_run.end_time}) llm_run.events.append({"name": "error", "time": llm_run.end_time})
self._end_trace(llm_run) self._end_trace(llm_run)
self._on_llm_error(llm_run) self._on_llm_error(llm_run)
@ -285,7 +285,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Start a trace for a chain run.""" """Start a trace for a chain run."""
parent_run_id_ = str(parent_run_id) if parent_run_id else None parent_run_id_ = str(parent_run_id) if parent_run_id else None
execution_order = self._get_execution_order(parent_run_id_) execution_order = self._get_execution_order(parent_run_id_)
start_time = datetime.utcnow() start_time = datetime.now(timezone.utc)
if metadata: if metadata:
kwargs.update({"metadata": metadata}) kwargs.update({"metadata": metadata})
chain_run = Run( chain_run = Run(
@ -320,7 +320,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
chain_run.outputs = ( chain_run.outputs = (
outputs if isinstance(outputs, dict) else {"output": outputs} outputs if isinstance(outputs, dict) else {"output": outputs}
) )
chain_run.end_time = datetime.utcnow() chain_run.end_time = datetime.now(timezone.utc)
chain_run.events.append({"name": "end", "time": chain_run.end_time}) chain_run.events.append({"name": "end", "time": chain_run.end_time})
if inputs is not None: if inputs is not None:
chain_run.inputs = inputs if isinstance(inputs, dict) else {"input": inputs} chain_run.inputs = inputs if isinstance(inputs, dict) else {"input": inputs}
@ -339,7 +339,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Handle an error for a chain run.""" """Handle an error for a chain run."""
chain_run = self._get_run(run_id) chain_run = self._get_run(run_id)
chain_run.error = self._get_stacktrace(error) chain_run.error = self._get_stacktrace(error)
chain_run.end_time = datetime.utcnow() chain_run.end_time = datetime.now(timezone.utc)
chain_run.events.append({"name": "error", "time": chain_run.end_time}) chain_run.events.append({"name": "error", "time": chain_run.end_time})
if inputs is not None: if inputs is not None:
chain_run.inputs = inputs if isinstance(inputs, dict) else {"input": inputs} chain_run.inputs = inputs if isinstance(inputs, dict) else {"input": inputs}
@ -362,7 +362,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Start a trace for a tool run.""" """Start a trace for a tool run."""
parent_run_id_ = str(parent_run_id) if parent_run_id else None parent_run_id_ = str(parent_run_id) if parent_run_id else None
execution_order = self._get_execution_order(parent_run_id_) execution_order = self._get_execution_order(parent_run_id_)
start_time = datetime.utcnow() start_time = datetime.now(timezone.utc)
if metadata: if metadata:
kwargs.update({"metadata": metadata}) kwargs.update({"metadata": metadata})
tool_run = Run( tool_run = Run(
@ -388,7 +388,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""End a trace for a tool run.""" """End a trace for a tool run."""
tool_run = self._get_run(run_id, run_type="tool") tool_run = self._get_run(run_id, run_type="tool")
tool_run.outputs = {"output": output} tool_run.outputs = {"output": output}
tool_run.end_time = datetime.utcnow() tool_run.end_time = datetime.now(timezone.utc)
tool_run.events.append({"name": "end", "time": tool_run.end_time}) tool_run.events.append({"name": "end", "time": tool_run.end_time})
self._end_trace(tool_run) self._end_trace(tool_run)
self._on_tool_end(tool_run) self._on_tool_end(tool_run)
@ -404,7 +404,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Handle an error for a tool run.""" """Handle an error for a tool run."""
tool_run = self._get_run(run_id, run_type="tool") tool_run = self._get_run(run_id, run_type="tool")
tool_run.error = self._get_stacktrace(error) tool_run.error = self._get_stacktrace(error)
tool_run.end_time = datetime.utcnow() tool_run.end_time = datetime.now(timezone.utc)
tool_run.events.append({"name": "error", "time": tool_run.end_time}) tool_run.events.append({"name": "error", "time": tool_run.end_time})
self._end_trace(tool_run) self._end_trace(tool_run)
self._on_tool_error(tool_run) self._on_tool_error(tool_run)
@ -425,7 +425,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Run when Retriever starts running.""" """Run when Retriever starts running."""
parent_run_id_ = str(parent_run_id) if parent_run_id else None parent_run_id_ = str(parent_run_id) if parent_run_id else None
execution_order = self._get_execution_order(parent_run_id_) execution_order = self._get_execution_order(parent_run_id_)
start_time = datetime.utcnow() start_time = datetime.now(timezone.utc)
if metadata: if metadata:
kwargs.update({"metadata": metadata}) kwargs.update({"metadata": metadata})
retrieval_run = Run( retrieval_run = Run(
@ -457,7 +457,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Run when Retriever errors.""" """Run when Retriever errors."""
retrieval_run = self._get_run(run_id, run_type="retriever") retrieval_run = self._get_run(run_id, run_type="retriever")
retrieval_run.error = self._get_stacktrace(error) retrieval_run.error = self._get_stacktrace(error)
retrieval_run.end_time = datetime.utcnow() retrieval_run.end_time = datetime.now(timezone.utc)
retrieval_run.events.append({"name": "error", "time": retrieval_run.end_time}) retrieval_run.events.append({"name": "error", "time": retrieval_run.end_time})
self._end_trace(retrieval_run) self._end_trace(retrieval_run)
self._on_retriever_error(retrieval_run) self._on_retriever_error(retrieval_run)
@ -469,7 +469,7 @@ class BaseTracer(BaseCallbackHandler, ABC):
"""Run when Retriever ends running.""" """Run when Retriever ends running."""
retrieval_run = self._get_run(run_id, run_type="retriever") retrieval_run = self._get_run(run_id, run_type="retriever")
retrieval_run.outputs = {"documents": documents} retrieval_run.outputs = {"documents": documents}
retrieval_run.end_time = datetime.utcnow() retrieval_run.end_time = datetime.now(timezone.utc)
retrieval_run.events.append({"name": "end", "time": retrieval_run.end_time}) retrieval_run.events.append({"name": "end", "time": retrieval_run.end_time})
self._end_trace(retrieval_run) self._end_trace(retrieval_run)
self._on_retriever_end(retrieval_run) self._on_retriever_end(retrieval_run)

@ -4,7 +4,7 @@ from __future__ import annotations
import logging import logging
import weakref import weakref
from concurrent.futures import Future, ThreadPoolExecutor, wait from concurrent.futures import Future, ThreadPoolExecutor, wait
from datetime import datetime from datetime import datetime, timezone
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Union from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Union
from uuid import UUID from uuid import UUID
@ -116,7 +116,7 @@ class LangChainTracer(BaseTracer):
"""Start a trace for an LLM run.""" """Start a trace for an LLM run."""
parent_run_id_ = str(parent_run_id) if parent_run_id else None parent_run_id_ = str(parent_run_id) if parent_run_id else None
execution_order = self._get_execution_order(parent_run_id_) execution_order = self._get_execution_order(parent_run_id_)
start_time = datetime.utcnow() start_time = datetime.now(timezone.utc)
if metadata: if metadata:
kwargs.update({"metadata": metadata}) kwargs.update({"metadata": metadata})
chat_model_run = Run( chat_model_run = Run(

@ -1,7 +1,7 @@
"""Test Tracer classes.""" """Test Tracer classes."""
from __future__ import annotations from __future__ import annotations
from datetime import datetime from datetime import datetime, timezone
from typing import List from typing import List
from uuid import uuid4 from uuid import uuid4
@ -56,11 +56,11 @@ def test_tracer_llm_run() -> None:
compare_run = Run( compare_run = Run(
id=uuid, id=uuid,
parent_run_id=None, parent_run_id=None,
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -91,11 +91,11 @@ def test_tracer_chat_model_run() -> None:
compare_run = Run( compare_run = Run(
id=str(run_managers[0].run_id), id=str(run_managers[0].run_id),
name="chat_model", name="chat_model",
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -129,11 +129,11 @@ def test_tracer_multiple_llm_runs() -> None:
compare_run = Run( compare_run = Run(
id=uuid, id=uuid,
name="llm", name="llm",
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -162,11 +162,11 @@ def test_tracer_chain_run() -> None:
uuid = uuid4() uuid = uuid4()
compare_run = Run( compare_run = Run(
id=str(uuid), id=str(uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -192,11 +192,11 @@ def test_tracer_tool_run() -> None:
uuid = uuid4() uuid = uuid4()
compare_run = Run( compare_run = Run(
id=str(uuid), id=str(uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -254,11 +254,11 @@ def test_tracer_nested_run() -> None:
compare_run = Run( compare_run = Run(
id=str(chain_uuid), id=str(chain_uuid),
error=None, error=None,
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -273,11 +273,11 @@ def test_tracer_nested_run() -> None:
Run( Run(
id=tool_uuid, id=tool_uuid,
parent_run_id=chain_uuid, parent_run_id=chain_uuid,
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=2, execution_order=2,
@ -294,11 +294,11 @@ def test_tracer_nested_run() -> None:
id=str(llm_uuid1), id=str(llm_uuid1),
parent_run_id=str(tool_uuid), parent_run_id=str(tool_uuid),
error=None, error=None,
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=3, execution_order=3,
@ -316,11 +316,11 @@ def test_tracer_nested_run() -> None:
id=str(llm_uuid2), id=str(llm_uuid2),
parent_run_id=str(chain_uuid), parent_run_id=str(chain_uuid),
error=None, error=None,
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=4, execution_order=4,
@ -346,11 +346,11 @@ def test_tracer_llm_run_on_error() -> None:
compare_run = Run( compare_run = Run(
id=str(uuid), id=str(uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -379,11 +379,11 @@ def test_tracer_llm_run_on_error_callback() -> None:
compare_run = Run( compare_run = Run(
id=str(uuid), id=str(uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -418,11 +418,11 @@ def test_tracer_chain_run_on_error() -> None:
compare_run = Run( compare_run = Run(
id=str(uuid), id=str(uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -450,11 +450,11 @@ def test_tracer_tool_run_on_error() -> None:
compare_run = Run( compare_run = Run(
id=str(uuid), id=str(uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -523,11 +523,11 @@ def test_tracer_nested_runs_on_error() -> None:
compare_run = Run( compare_run = Run(
id=str(chain_uuid), id=str(chain_uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=1, execution_order=1,
@ -543,11 +543,11 @@ def test_tracer_nested_runs_on_error() -> None:
Run( Run(
id=str(llm_uuid1), id=str(llm_uuid1),
parent_run_id=str(chain_uuid), parent_run_id=str(chain_uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=2, execution_order=2,
@ -563,11 +563,11 @@ def test_tracer_nested_runs_on_error() -> None:
Run( Run(
id=str(llm_uuid2), id=str(llm_uuid2),
parent_run_id=str(chain_uuid), parent_run_id=str(chain_uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "end", "time": datetime.utcnow()}, {"name": "end", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=3, execution_order=3,
@ -583,11 +583,11 @@ def test_tracer_nested_runs_on_error() -> None:
Run( Run(
id=str(tool_uuid), id=str(tool_uuid),
parent_run_id=str(chain_uuid), parent_run_id=str(chain_uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=4, execution_order=4,
@ -603,11 +603,11 @@ def test_tracer_nested_runs_on_error() -> None:
Run( Run(
id=str(llm_uuid3), id=str(llm_uuid3),
parent_run_id=str(tool_uuid), parent_run_id=str(tool_uuid),
start_time=datetime.utcnow(), start_time=datetime.now(timezone.utc),
end_time=datetime.utcnow(), end_time=datetime.now(timezone.utc),
events=[ events=[
{"name": "start", "time": datetime.utcnow()}, {"name": "start", "time": datetime.now(timezone.utc)},
{"name": "error", "time": datetime.utcnow()}, {"name": "error", "time": datetime.now(timezone.utc)},
], ],
extra={}, extra={},
execution_order=5, execution_order=5,

File diff suppressed because one or more lines are too long

@ -2072,7 +2072,7 @@ async def test_prompt_with_llm(
"final_output": None, "final_output": None,
"metadata": {}, "metadata": {},
"name": "ChatPromptTemplate", "name": "ChatPromptTemplate",
"start_time": "2023-01-01T00:00:00.000", "start_time": "2023-01-01T00:00:00.000+00:00",
"streamed_output": [], "streamed_output": [],
"streamed_output_str": [], "streamed_output_str": [],
"tags": ["seq:step:1"], "tags": ["seq:step:1"],
@ -2094,7 +2094,7 @@ async def test_prompt_with_llm(
{ {
"op": "add", "op": "add",
"path": "/logs/ChatPromptTemplate/end_time", "path": "/logs/ChatPromptTemplate/end_time",
"value": "2023-01-01T00:00:00.000", "value": "2023-01-01T00:00:00.000+00:00",
}, },
), ),
RunLogPatch( RunLogPatch(
@ -2106,7 +2106,7 @@ async def test_prompt_with_llm(
"final_output": None, "final_output": None,
"metadata": {}, "metadata": {},
"name": "FakeListLLM", "name": "FakeListLLM",
"start_time": "2023-01-01T00:00:00.000", "start_time": "2023-01-01T00:00:00.000+00:00",
"streamed_output": [], "streamed_output": [],
"streamed_output_str": [], "streamed_output_str": [],
"tags": ["seq:step:2"], "tags": ["seq:step:2"],
@ -2129,7 +2129,7 @@ async def test_prompt_with_llm(
{ {
"op": "add", "op": "add",
"path": "/logs/FakeListLLM/end_time", "path": "/logs/FakeListLLM/end_time",
"value": "2023-01-01T00:00:00.000", "value": "2023-01-01T00:00:00.000+00:00",
}, },
), ),
RunLogPatch( RunLogPatch(

@ -7,7 +7,7 @@ import functools
import inspect import inspect
import logging import logging
import uuid import uuid
from datetime import datetime from datetime import datetime, timezone
from enum import Enum from enum import Enum
from typing import ( from typing import (
TYPE_CHECKING, TYPE_CHECKING,
@ -1050,7 +1050,9 @@ class _DatasetRunContainer:
logger.debug(f"Failed to print aggregate feedback: {repr(e)}") logger.debug(f"Failed to print aggregate feedback: {repr(e)}")
try: try:
# Closing the project permits name changing and metric optimizations # Closing the project permits name changing and metric optimizations
self.client.update_project(self.project.id, end_time=datetime.utcnow()) self.client.update_project(
self.project.id, end_time=datetime.now(timezone.utc)
)
except Exception as e: except Exception as e:
logger.debug(f"Failed to close project: {repr(e)}") logger.debug(f"Failed to close project: {repr(e)}")
return results return results

Loading…
Cancel
Save