Skip to content

Commit 5114fa4

Browse files
committed
push
1 parent f5d7154 commit 5114fa4

13 files changed

Lines changed: 61 additions & 47 deletions

langfuse/_client/datasets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from opentelemetry.util._decorator import _agnosticcontextmanager
66

7-
from langfuse.api.datasets import (
7+
from langfuse.api import (
88
Dataset,
99
DatasetItem,
1010
DatasetStatus,

langfuse/_client/resource_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
from langfuse._utils.environment import get_common_release_envs
4343
from langfuse._utils.prompt_cache import PromptCache
4444
from langfuse._utils.request import LangfuseClient
45-
from langfuse.api.client import AsyncLangfuseAPI, LangfuseAPI
45+
from langfuse.api import AsyncLangfuseAPI, LangfuseAPI
4646
from langfuse.logger import langfuse_logger
4747
from langfuse.types import MaskFunction
4848

langfuse/_task_manager/media_manager.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@
1010

1111
from langfuse._client.environment_variables import LANGFUSE_MEDIA_UPLOAD_ENABLED
1212
from langfuse._utils import _get_timestamp
13-
from langfuse.api.client import LangfuseAPI
13+
from langfuse.api import LangfuseAPI, MediaContentType
1414
from langfuse.api.core import ApiError
15-
from langfuse.api.media import MediaContentType
1615
from langfuse.media import LangfuseMedia
1716

1817
from .media_upload_queue import UploadMediaJob

langfuse/_utils/parse_error.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33

44
# our own api errors
55
from langfuse._utils.request import APIError, APIErrors
6-
from langfuse.api.core import ApiError
7-
from langfuse.api.health import ServiceUnavailableError
86

97
# fern api errors
10-
from langfuse.api.utils import (
8+
from langfuse.api import (
119
AccessDeniedError,
1210
Error,
1311
MethodNotAllowedError,
1412
NotFoundError,
13+
ServiceUnavailableError,
1514
UnauthorizedError,
1615
)
16+
from langfuse.api.core import ApiError
1717

1818
SUPPORT_URL = "https://langfuse.com/support"
1919
API_DOCS_URL = "https://api.reference.langfuse.com"

langfuse/_utils/serializer.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""@private"""
22

3+
import datetime as dt
34
import enum
45
import math
56
from asyncio import Queue
@@ -14,7 +15,6 @@
1415

1516
from pydantic import BaseModel
1617

17-
from langfuse.api.core import pydantic_utilities, serialize_datetime
1818
from langfuse.media import LangfuseMedia
1919

2020
# Attempt to import Serializable
@@ -98,17 +98,13 @@ def default(self, obj: Any) -> Any:
9898
return obj.isoformat()
9999

100100
if isinstance(obj, BaseModel):
101-
obj.model_rebuild() if pydantic_utilities.IS_PYDANTIC_V2 else obj.update_forward_refs() # This method forces the OpenAI model to instantiate its serializer to avoid errors when serializing
101+
obj.model_rebuild()
102102

103103
# For LlamaIndex models, we need to rebuild the raw model as well if they include OpenAI models
104104
if isinstance(raw := getattr(obj, "raw", None), BaseModel):
105-
raw.model_rebuild() if pydantic_utilities.IS_PYDANTIC_V2 else raw.update_forward_refs()
105+
raw.model_rebuild()
106106

107-
return (
108-
obj.model_dump()
109-
if pydantic_utilities.IS_PYDANTIC_V2
110-
else obj.dict()
111-
)
107+
return obj.model_dump()
112108

113109
if isinstance(obj, Path):
114110
return str(obj)
@@ -188,3 +184,22 @@ def is_js_safe_integer(value: int) -> bool:
188184
min_safe_int = -(2**53) + 1
189185

190186
return min_safe_int <= value <= max_safe_int
187+
188+
189+
def serialize_datetime(v: dt.datetime) -> str:
190+
def _serialize_zoned_datetime(v: dt.datetime) -> str:
191+
if v.tzinfo is not None and v.tzinfo.tzname(None) == dt.timezone.utc.tzname(
192+
None
193+
):
194+
# UTC is a special case where we use "Z" at the end instead of "+00:00"
195+
return v.isoformat().replace("+00:00", "Z")
196+
else:
197+
# Delegate to the typical +/- offset format
198+
return v.isoformat()
199+
200+
if v.tzinfo is not None:
201+
return _serialize_zoned_datetime(v)
202+
else:
203+
local_tz = dt.datetime.now().astimezone().tzinfo
204+
localized_dt = v.replace(tzinfo=local_tz)
205+
return _serialize_zoned_datetime(localized_dt)

langfuse/batch_evaluation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
Union,
2323
)
2424

25-
from langfuse.api.commons import (
25+
from langfuse.api import (
2626
ObservationsView,
2727
TraceWithFullDetails,
2828
)

tests/test_datasets.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
from langchain_openai import OpenAI
88

99
from langfuse import Langfuse, observe
10-
from langfuse.api.resources.commons.types.dataset_status import DatasetStatus
11-
from langfuse.api.resources.commons.types.observation import Observation
10+
from langfuse.api import DatasetStatus
11+
from langfuse.api import Observation
1212
from langfuse.langchain import CallbackHandler
1313
from tests.utils import create_uuid, get_api
1414

@@ -220,7 +220,7 @@ def test_get_dataset_runs():
220220

221221
langfuse.flush()
222222
time.sleep(1) # Give API time to process
223-
runs = langfuse.api.datasets.get_runs(dataset_name)
223+
runs = langfuse.api
224224

225225
assert len(runs.data) == 2
226226
assert runs.data[0].name == run_name_2

tests/test_error_parsing.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
generate_error_message_fern,
66
)
77
from langfuse._utils.request import APIError, APIErrors
8-
from langfuse.api.core import ApiError
9-
from langfuse.api.resources.commons.errors import (
8+
from langfuse.api import (
109
AccessDeniedError,
1110
MethodNotAllowedError,
1211
NotFoundError,
12+
ServiceUnavailableError,
1313
UnauthorizedError,
1414
)
15-
from langfuse.api.resources.health.errors import ServiceUnavailableError
15+
from langfuse.api.core import ApiError
1616

1717

1818
def test_generate_error_message_api_error():

tests/test_json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import langfuse
1414
from langfuse._utils.serializer import EventSerializer
15-
from langfuse.api.resources.commons.types.observation_level import ObservationLevel
15+
from langfuse.api import ObservationLevel
1616

1717

1818
class TestModel(BaseModel):

tests/test_prompt.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
PromptCache,
1111
PromptCacheItem,
1212
)
13-
from langfuse.api.resources.commons.errors.not_found_error import NotFoundError
14-
from langfuse.api.resources.prompts import Prompt_Chat, Prompt_Text
13+
from langfuse.api import NotFoundError
14+
from langfuse.api import Prompt_Chat, Prompt_Text
1515
from langfuse.model import ChatPromptClient, TextPromptClient
1616
from tests.utils import create_uuid, get_api
1717

@@ -312,7 +312,7 @@ def test_compile_with_placeholders(
312312
variables, placeholders, expected_len, expected_contents
313313
) -> None:
314314
"""Test compile_with_placeholders with different variable/placeholder combinations."""
315-
from langfuse.api.resources.prompts import Prompt_Chat
315+
from langfuse.api import Prompt_Chat
316316
from langfuse.model import ChatPromptClient
317317

318318
mock_prompt = Prompt_Chat(
@@ -706,7 +706,7 @@ def test_get_fresh_prompt(langfuse):
706706
tags=[],
707707
)
708708

709-
mock_server_call = langfuse.api.prompts.get
709+
mock_server_call = langfuse.api
710710
mock_server_call.return_value = prompt
711711

712712
result = langfuse.get_prompt(prompt_name, fallback="fallback")
@@ -734,7 +734,7 @@ def test_throw_if_name_unspecified(langfuse):
734734
def test_throw_when_failing_fetch_and_no_cache(langfuse):
735735
prompt_name = "failing_fetch_and_no_cache"
736736

737-
mock_server_call = langfuse.api.prompts.get
737+
mock_server_call = langfuse.api
738738
mock_server_call.side_effect = Exception("Prompt not found")
739739

740740
with pytest.raises(Exception) as exc_info:
@@ -755,7 +755,7 @@ def test_using_custom_prompt_timeouts(langfuse):
755755
tags=[],
756756
)
757757

758-
mock_server_call = langfuse.api.prompts.get
758+
mock_server_call = langfuse.api
759759
mock_server_call.return_value = prompt
760760

761761
result = langfuse.get_prompt(
@@ -796,7 +796,7 @@ def test_get_valid_cached_prompt(langfuse):
796796
)
797797
prompt_client = TextPromptClient(prompt)
798798

799-
mock_server_call = langfuse.api.prompts.get
799+
mock_server_call = langfuse.api
800800
mock_server_call.return_value = prompt
801801

802802
result_call_1 = langfuse.get_prompt(prompt_name, fallback="fallback")
@@ -822,7 +822,7 @@ def test_get_valid_cached_chat_prompt_by_label(langfuse):
822822
)
823823
prompt_client = ChatPromptClient(prompt)
824824

825-
mock_server_call = langfuse.api.prompts.get
825+
mock_server_call = langfuse.api
826826
mock_server_call.return_value = prompt
827827

828828
result_call_1 = langfuse.get_prompt(prompt_name, label="test")
@@ -848,7 +848,7 @@ def test_get_valid_cached_chat_prompt_by_version(langfuse):
848848
)
849849
prompt_client = ChatPromptClient(prompt)
850850

851-
mock_server_call = langfuse.api.prompts.get
851+
mock_server_call = langfuse.api
852852
mock_server_call.return_value = prompt
853853

854854
result_call_1 = langfuse.get_prompt(prompt_name, version=1)
@@ -874,7 +874,7 @@ def test_get_valid_cached_production_chat_prompt(langfuse):
874874
)
875875
prompt_client = ChatPromptClient(prompt)
876876

877-
mock_server_call = langfuse.api.prompts.get
877+
mock_server_call = langfuse.api
878878
mock_server_call.return_value = prompt
879879

880880
result_call_1 = langfuse.get_prompt(prompt_name)
@@ -900,7 +900,7 @@ def test_get_valid_cached_chat_prompt(langfuse):
900900
)
901901
prompt_client = ChatPromptClient(prompt)
902902

903-
mock_server_call = langfuse.api.prompts.get
903+
mock_server_call = langfuse.api
904904
mock_server_call.return_value = prompt
905905

906906
result_call_1 = langfuse.get_prompt(prompt_name)
@@ -930,7 +930,7 @@ def test_get_fresh_prompt_when_expired_cache_custom_ttl(mock_time, langfuse: Lan
930930
)
931931
prompt_client = TextPromptClient(prompt)
932932

933-
mock_server_call = langfuse.api.prompts.get
933+
mock_server_call = langfuse.api
934934
mock_server_call.return_value = prompt
935935

936936
result_call_1 = langfuse.get_prompt(prompt_name, cache_ttl_seconds=ttl_seconds)
@@ -995,7 +995,7 @@ def test_disable_caching_when_ttl_zero(mock_time, langfuse: Langfuse):
995995
tags=[],
996996
)
997997

998-
mock_server_call = langfuse.api.prompts.get
998+
mock_server_call = langfuse.api
999999
mock_server_call.side_effect = [prompt1, prompt2, prompt3]
10001000

10011001
# First call
@@ -1037,7 +1037,7 @@ def test_get_stale_prompt_when_expired_cache_default_ttl(mock_time, langfuse: La
10371037
)
10381038
prompt_client = TextPromptClient(prompt)
10391039

1040-
mock_server_call = langfuse.api.prompts.get
1040+
mock_server_call = langfuse.api
10411041
mock_server_call.return_value = prompt
10421042

10431043
result_call_1 = langfuse.get_prompt(prompt_name)
@@ -1099,7 +1099,7 @@ def test_get_fresh_prompt_when_expired_cache_default_ttl(mock_time, langfuse: La
10991099
)
11001100
prompt_client = TextPromptClient(prompt)
11011101

1102-
mock_server_call = langfuse.api.prompts.get
1102+
mock_server_call = langfuse.api
11031103
mock_server_call.return_value = prompt
11041104

11051105
result_call_1 = langfuse.get_prompt(prompt_name)
@@ -1143,7 +1143,7 @@ def test_get_expired_prompt_when_failing_fetch(mock_time, langfuse: Langfuse):
11431143
)
11441144
prompt_client = TextPromptClient(prompt)
11451145

1146-
mock_server_call = langfuse.api.prompts.get
1146+
mock_server_call = langfuse.api
11471147
mock_server_call.return_value = prompt
11481148

11491149
result_call_1 = langfuse.get_prompt(prompt_name)
@@ -1187,7 +1187,7 @@ def test_evict_prompt_cache_entry_when_refresh_returns_not_found(
11871187
prompt_client = TextPromptClient(prompt)
11881188
cache_key = PromptCache.generate_cache_key(prompt_name, version=None, label=None)
11891189

1190-
mock_server_call = langfuse.api.prompts.get
1190+
mock_server_call = langfuse.api
11911191
mock_server_call.return_value = prompt
11921192

11931193
initial_result = langfuse.get_prompt(
@@ -1244,7 +1244,7 @@ def test_get_fresh_prompt_when_version_changes(langfuse: Langfuse):
12441244
)
12451245
prompt_client = TextPromptClient(prompt)
12461246

1247-
mock_server_call = langfuse.api.prompts.get
1247+
mock_server_call = langfuse.api
12481248
mock_server_call.return_value = prompt
12491249

12501250
result_call_1 = langfuse.get_prompt(prompt_name, version=1)

0 commit comments

Comments
 (0)