Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8c7547e

Browse files
authored
feat: add fetch_sessions() (langfuse#794)
1 parent 6973824 commit 8c7547e

File tree

2 files changed

+88
-10
lines changed

2 files changed

+88
-10
lines changed

‎langfuse/client.py‎

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
DatasetRunWithItems,
2828
)
2929
from langfuse.api.resources.commons.types.observations_view import ObservationsView
30+
from langfuse.api.resources.commons.types.session import Session
3031
from langfuse.api.resources.commons.types.trace_with_details import TraceWithDetails
3132
from langfuse.api.resources.datasets.types.paginated_dataset_runs import (
3233
PaginatedDatasetRuns,
@@ -117,6 +118,14 @@ class FetchObservationResponse:
117118
data: Observation
118119

119120

121+
@dataclass
122+
class FetchSessionsResponse:
123+
"""Response object for fetch_sessions method."""
124+
125+
data: typing.List[Session]
126+
meta: MetaResponse
127+
128+
120129
class Langfuse(object):
121130
"""Langfuse Python client.
122131
@@ -584,8 +593,8 @@ def fetch_traces(
584593
name (Optional[str]): Filter by name of traces. Defaults to None.
585594
user_id (Optional[str]): Filter by user_id. Defaults to None.
586595
session_id (Optional[str]): Filter by session_id. Defaults to None.
587-
from_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp on or after this datetime (ISO 8601). Defaults to None.
588-
to_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp before this datetime (ISO 8601). Defaults to None.
596+
from_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp on or after this datetime. Defaults to None.
597+
to_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp before this datetime. Defaults to None.
589598
order_by (Optional[str]): Format of the string `[field].[asc/desc]`. Fields: id, timestamp, name, userId, release, version, public, bookmarked, sessionId. Example: `timestamp.asc`. Defaults to None.
590599
tags (Optional[Union[str, Sequence[str]]]): Filter by tags. Defaults to None.
591600
@@ -636,8 +645,8 @@ def get_traces(
636645
name (Optional[str]): Filter by name of traces. Defaults to None.
637646
user_id (Optional[str]): Filter by user_id. Defaults to None.
638647
session_id (Optional[str]): Filter by session_id. Defaults to None.
639-
from_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp on or after this datetime (ISO 8601). Defaults to None.
640-
to_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp before this datetime (ISO 8601). Defaults to None.
648+
from_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp on or after this datetime. Defaults to None.
649+
to_timestamp (Optional[dt.datetime]): Retrieve only traces with a timestamp before this datetime. Defaults to None.
641650
order_by (Optional[str]): Format of the string `[field].[asc/desc]`. Fields: id, timestamp, name, userId, release, version, public, bookmarked, sessionId. Example: `timestamp.asc`. Defaults to None.
642651
tags (Optional[Union[str, Sequence[str]]]): Filter by tags. Defaults to None.
643652
@@ -692,8 +701,8 @@ def fetch_observations(
692701
user_id (Optional[str]): User identifier. Defaults to None.
693702
trace_id (Optional[str]): Trace identifier. Defaults to None.
694703
parent_observation_id (Optional[str]): Parent observation identifier. Defaults to None.
695-
from_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time on or after this datetime (ISO 8601). Defaults to None.
696-
to_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time before this datetime (ISO 8601). Defaults to None.
704+
from_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time on or after this datetime. Defaults to None.
705+
to_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time before this datetime. Defaults to None.
697706
type (Optional[str]): Type of the observation. Defaults to None.
698707
699708
Returns:
@@ -744,8 +753,8 @@ def get_observations(
744753
user_id (Optional[str]): User identifier. Defaults to None.
745754
trace_id (Optional[str]): Trace identifier. Defaults to None.
746755
parent_observation_id (Optional[str]): Parent observation identifier. Defaults to None.
747-
from_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time on or after this datetime (ISO 8601). Defaults to None.
748-
to_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time before this datetime (ISO 8601). Defaults to None.
756+
from_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time on or after this datetime. Defaults to None.
757+
to_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time before this datetime. Defaults to None.
749758
type (Optional[str]): Type of the observation. Defaults to None.
750759
751760
Returns:
@@ -797,8 +806,8 @@ def get_generations(
797806
name (Optional[str]): Name of the generations to return. Defaults to None.
798807
user_id (Optional[str]): User identifier of the generations to return. Defaults to None.
799808
trace_id (Optional[str]): Trace identifier of the generations to return. Defaults to None.
800-
from_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time on or after this datetime (ISO 8601). Defaults to None.
801-
to_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time before this datetime (ISO 8601). Defaults to None.
809+
from_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time on or after this datetime. Defaults to None.
810+
to_start_time (Optional[dt.datetime]): Retrieve only observations with a start_time before this datetime. Defaults to None.
802811
parent_observation_id (Optional[str]): Parent observation identifier of the generations to return. Defaults to None.
803812
804813
Returns:
@@ -869,6 +878,43 @@ def get_observation(
869878
self.log.exception(e)
870879
raise e
871880

881+
def fetch_sessions(
882+
self,
883+
*,
884+
page: typing.Optional[int] = None,
885+
limit: typing.Optional[int] = None,
886+
from_timestamp: typing.Optional[dt.datetime] = None,
887+
to_timestamp: typing.Optional[dt.datetime] = None,
888+
) -> FetchSessionsResponse:
889+
"""Get a list of sessions in the current project.
890+
891+
Args:
892+
page (Optional[int]): Page number of the sessions to return. Defaults to None.
893+
limit (Optional[int]): Maximum number of sessions to return. Defaults to None.
894+
from_timestamp (Optional[dt.datetime]): Retrieve only sessions with a timestamp on or after this datetime. Defaults to None.
895+
to_timestamp (Optional[dt.datetime]): Retrieve only sessions with a timestamp before this datetime. Defaults to None.
896+
897+
Returns:
898+
FetchSessionsResponse, list of sessions on `data` and metadata on `meta`.
899+
900+
Raises:
901+
Exception: If an error occurred during the request.
902+
"""
903+
try:
904+
self.log.debug(
905+
f"Getting sessions... {page}, {limit}, {from_timestamp}, {to_timestamp}"
906+
)
907+
res = self.client.sessions.list(
908+
page=page,
909+
limit=limit,
910+
from_timestamp=from_timestamp,
911+
to_timestamp=to_timestamp,
912+
)
913+
return FetchSessionsResponse(data=res.data, meta=res.meta)
914+
except Exception as e:
915+
self.log.exception(e)
916+
raise e
917+
872918
@overload
873919
def get_prompt(
874920
self,

‎tests/test_core_sdk.py‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from langfuse.client import (
77
FetchObservationResponse,
88
FetchObservationsResponse,
9+
FetchSessionsResponse,
910
FetchTraceResponse,
1011
FetchTracesResponse,
1112
)
@@ -1401,3 +1402,34 @@ def test_fetch_observations_empty():
14011402
assert isinstance(response, FetchObservationsResponse)
14021403
assert len(response.data) == 0
14031404
assert response.meta.total_items == 0
1405+
1406+
1407+
def test_fetch_sessions():
1408+
langfuse = Langfuse()
1409+
1410+
# unique name
1411+
name = create_uuid()
1412+
session1 = create_uuid()
1413+
session2 = create_uuid()
1414+
session3 = create_uuid()
1415+
1416+
# Create multiple traces
1417+
langfuse.trace(name=name, session_id=session1)
1418+
langfuse.trace(name=name, session_id=session2)
1419+
langfuse.trace(name=name, session_id=session3)
1420+
langfuse.flush()
1421+
1422+
# Fetch traces
1423+
response = langfuse.fetch_sessions()
1424+
1425+
# Assert the structure of the response, cannot check for the exact number of sessions as the table is not cleared between tests
1426+
assert isinstance(response, FetchSessionsResponse)
1427+
assert hasattr(response, "data")
1428+
assert hasattr(response, "meta")
1429+
assert isinstance(response.data, list)
1430+
assert response.data[0].id in [session1, session2, session3]
1431+
1432+
# fetch only one, cannot check for the exact number of sessions as the table is not cleared between tests
1433+
response = langfuse.fetch_sessions(limit=1, page=2)
1434+
assert len(response.data) == 1
1435+
assert response.data[0].id in [session1, session2, session3]

0 commit comments

Comments
 (0)