diff --git a/langfuse/api/__init__.py b/langfuse/api/__init__.py index baf746dbb..7458de0c7 100644 --- a/langfuse/api/__init__.py +++ b/langfuse/api/__init__.py @@ -95,6 +95,7 @@ DatasetRunItem, DatasetRunWithItems, DatasetStatus, + Deprecation, Error, MapValue, MethodNotAllowedError, @@ -108,6 +109,7 @@ ObservationLevel, ObservationV2, ObservationsView, + ObservationsViewSingle, PricingTier, PricingTierCondition, PricingTierInput, @@ -423,6 +425,7 @@ "DeleteLlmConnectionResponse": ".llm_connections", "DeleteMembershipRequest": ".organizations", "DeleteTraceResponse": ".trace", + "Deprecation": ".commons", "EmptyResponse": ".scim", "Error": ".commons", "Experiment": ".experiments", @@ -493,6 +496,7 @@ "ObservationsV2Meta": ".observations", "ObservationsV2Response": ".observations", "ObservationsView": ".commons", + "ObservationsViewSingle": ".commons", "OpenAiCompletionUsageSchema": ".ingestion", "OpenAiResponseUsageSchema": ".ingestion", "OpenAiUsage": ".ingestion", @@ -754,6 +758,7 @@ def __dir__(): "DeleteLlmConnectionResponse", "DeleteMembershipRequest", "DeleteTraceResponse", + "Deprecation", "EmptyResponse", "Error", "Experiment", @@ -824,6 +829,7 @@ def __dir__(): "ObservationsV2Meta", "ObservationsV2Response", "ObservationsView", + "ObservationsViewSingle", "OpenAiCompletionUsageSchema", "OpenAiResponseUsageSchema", "OpenAiUsage", diff --git a/langfuse/api/commons/__init__.py b/langfuse/api/commons/__init__.py index a35064081..5d5f56bcd 100644 --- a/langfuse/api/commons/__init__.py +++ b/langfuse/api/commons/__init__.py @@ -27,6 +27,7 @@ DatasetRunItem, DatasetRunWithItems, DatasetStatus, + Deprecation, MapValue, Model, ModelPrice, @@ -37,6 +38,7 @@ ObservationLevel, ObservationV2, ObservationsView, + ObservationsViewSingle, PricingTier, PricingTierCondition, PricingTierInput, @@ -94,6 +96,7 @@ "DatasetRunItem": ".types", "DatasetRunWithItems": ".types", "DatasetStatus": ".types", + "Deprecation": ".types", "Error": ".errors", "MapValue": ".types", "MethodNotAllowedError": ".errors", @@ -107,6 +110,7 @@ "ObservationLevel": ".types", "ObservationV2": ".types", "ObservationsView": ".types", + "ObservationsViewSingle": ".types", "PricingTier": ".types", "PricingTierCondition": ".types", "PricingTierInput": ".types", @@ -187,6 +191,7 @@ def __dir__(): "DatasetRunItem", "DatasetRunWithItems", "DatasetStatus", + "Deprecation", "Error", "MapValue", "MethodNotAllowedError", @@ -200,6 +205,7 @@ def __dir__(): "ObservationLevel", "ObservationV2", "ObservationsView", + "ObservationsViewSingle", "PricingTier", "PricingTierCondition", "PricingTierInput", diff --git a/langfuse/api/commons/types/__init__.py b/langfuse/api/commons/types/__init__.py index 12faf307f..7932fec73 100644 --- a/langfuse/api/commons/types/__init__.py +++ b/langfuse/api/commons/types/__init__.py @@ -26,6 +26,7 @@ from .dataset_run_item import DatasetRunItem from .dataset_run_with_items import DatasetRunWithItems from .dataset_status import DatasetStatus + from .deprecation import Deprecation from .map_value import MapValue from .model import Model from .model_price import ModelPrice @@ -36,6 +37,7 @@ from .observation_level import ObservationLevel from .observation_v2 import ObservationV2 from .observations_view import ObservationsView + from .observations_view_single import ObservationsViewSingle from .pricing_tier import PricingTier from .pricing_tier_condition import PricingTierCondition from .pricing_tier_input import PricingTierInput @@ -88,6 +90,7 @@ "DatasetRunItem": ".dataset_run_item", "DatasetRunWithItems": ".dataset_run_with_items", "DatasetStatus": ".dataset_status", + "Deprecation": ".deprecation", "MapValue": ".map_value", "Model": ".model", "ModelPrice": ".model_price", @@ -98,6 +101,7 @@ "ObservationLevel": ".observation_level", "ObservationV2": ".observation_v2", "ObservationsView": ".observations_view", + "ObservationsViewSingle": ".observations_view_single", "PricingTier": ".pricing_tier", "PricingTierCondition": ".pricing_tier_condition", "PricingTierInput": ".pricing_tier_input", @@ -176,6 +180,7 @@ def __dir__(): "DatasetRunItem", "DatasetRunWithItems", "DatasetStatus", + "Deprecation", "MapValue", "Model", "ModelPrice", @@ -186,6 +191,7 @@ def __dir__(): "ObservationLevel", "ObservationV2", "ObservationsView", + "ObservationsViewSingle", "PricingTier", "PricingTierCondition", "PricingTierInput", diff --git a/langfuse/api/commons/types/dataset_run_with_items.py b/langfuse/api/commons/types/dataset_run_with_items.py index b5995dd30..b16660b97 100644 --- a/langfuse/api/commons/types/dataset_run_with_items.py +++ b/langfuse/api/commons/types/dataset_run_with_items.py @@ -7,12 +7,16 @@ from ...core.serialization import FieldMetadata from .dataset_run import DatasetRun from .dataset_run_item import DatasetRunItem +from .deprecation import Deprecation class DatasetRunWithItems(DatasetRun): dataset_run_items: typing_extensions.Annotated[ typing.List[DatasetRunItem], FieldMetadata(alias="datasetRunItems") ] + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/commons/types/deprecation.py b/langfuse/api/commons/types/deprecation.py new file mode 100644 index 000000000..18c7bf616 --- /dev/null +++ b/langfuse/api/commons/types/deprecation.py @@ -0,0 +1,42 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ...core.pydantic_utilities import UniversalBaseModel +from ...core.serialization import FieldMetadata + + +class Deprecation(UniversalBaseModel): + """ + Migration signal returned by deprecated endpoints. Optional fields are omitted when they have no value. + """ + + message: str = pydantic.Field() + """ + Human- and agent-readable summary of the deprecation and its replacement. + """ + + replacement: typing.Optional[str] = pydantic.Field(default=None) + """ + The replacement endpoint, e.g. "GET /api/public/v2/observations". Omitted when the endpoint is being removed without a direct replacement. + """ + + docs_url: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="docsUrl") + ] = pydantic.Field(default=None) + """ + Link to the migration documentation (markdown), when available. + """ + + sunset_at: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="sunsetAt") + ] = pydantic.Field(default=None) + """ + ISO date after which the endpoint may stop working, when a removal date is committed. + """ + + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( + extra="allow", frozen=True + ) diff --git a/langfuse/api/commons/types/observations_view_single.py b/langfuse/api/commons/types/observations_view_single.py new file mode 100644 index 000000000..4c7d68ace --- /dev/null +++ b/langfuse/api/commons/types/observations_view_single.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ...core.serialization import FieldMetadata +from .deprecation import Deprecation +from .observations_view import ObservationsView + + +class ObservationsViewSingle(ObservationsView): + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None + + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( + extra="allow", frozen=True + ) diff --git a/langfuse/api/commons/types/score.py b/langfuse/api/commons/types/score.py index 33c901c5f..7b31ae39a 100644 --- a/langfuse/api/commons/types/score.py +++ b/langfuse/api/commons/types/score.py @@ -9,10 +9,21 @@ import typing_extensions from ...core.pydantic_utilities import UniversalBaseModel from ...core.serialization import FieldMetadata +from .deprecation import Deprecation from .score_source import ScoreSource -class Score_Numeric(UniversalBaseModel): +class Base(UniversalBaseModel): + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None + + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( + extra="allow", frozen=True + ) + + +class Score_Numeric(Base): data_type: typing_extensions.Annotated[ typing.Literal["NUMERIC"], FieldMetadata(alias="dataType") ] = "NUMERIC" @@ -57,7 +68,7 @@ class Score_Numeric(UniversalBaseModel): ) -class Score_Categorical(UniversalBaseModel): +class Score_Categorical(Base): data_type: typing_extensions.Annotated[ typing.Literal["CATEGORICAL"], FieldMetadata(alias="dataType") ] = "CATEGORICAL" @@ -103,7 +114,7 @@ class Score_Categorical(UniversalBaseModel): ) -class Score_Boolean(UniversalBaseModel): +class Score_Boolean(Base): data_type: typing_extensions.Annotated[ typing.Literal["BOOLEAN"], FieldMetadata(alias="dataType") ] = "BOOLEAN" @@ -149,7 +160,7 @@ class Score_Boolean(UniversalBaseModel): ) -class Score_Correction(UniversalBaseModel): +class Score_Correction(Base): data_type: typing_extensions.Annotated[ typing.Literal["CORRECTION"], FieldMetadata(alias="dataType") ] = "CORRECTION" @@ -195,7 +206,7 @@ class Score_Correction(UniversalBaseModel): ) -class Score_Text(UniversalBaseModel): +class Score_Text(Base): data_type: typing_extensions.Annotated[ typing.Literal["TEXT"], FieldMetadata(alias="dataType") ] = "TEXT" diff --git a/langfuse/api/commons/types/session_with_traces.py b/langfuse/api/commons/types/session_with_traces.py index d04eef54e..e5159ade0 100644 --- a/langfuse/api/commons/types/session_with_traces.py +++ b/langfuse/api/commons/types/session_with_traces.py @@ -3,12 +3,18 @@ import typing import pydantic +import typing_extensions +from ...core.serialization import FieldMetadata +from .deprecation import Deprecation from .session import Session from .trace import Trace class SessionWithTraces(Session): traces: typing.List[Trace] + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/commons/types/trace_with_full_details.py b/langfuse/api/commons/types/trace_with_full_details.py index f14757ce5..227730cf4 100644 --- a/langfuse/api/commons/types/trace_with_full_details.py +++ b/langfuse/api/commons/types/trace_with_full_details.py @@ -5,6 +5,7 @@ import pydantic import typing_extensions from ...core.serialization import FieldMetadata +from .deprecation import Deprecation from .observations_view import ObservationsView from .score_v1 import ScoreV1 from .trace import Trace @@ -40,6 +41,10 @@ class TraceWithFullDetails(Trace): List of scores """ + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True ) diff --git a/langfuse/api/dataset_run_items/types/paginated_dataset_run_items.py b/langfuse/api/dataset_run_items/types/paginated_dataset_run_items.py index 24f7c1996..e3d3a4889 100644 --- a/langfuse/api/dataset_run_items/types/paginated_dataset_run_items.py +++ b/langfuse/api/dataset_run_items/types/paginated_dataset_run_items.py @@ -3,14 +3,20 @@ import typing import pydantic +import typing_extensions from ...commons.types.dataset_run_item import DatasetRunItem +from ...commons.types.deprecation import Deprecation from ...core.pydantic_utilities import UniversalBaseModel +from ...core.serialization import FieldMetadata from ...utils.pagination.types.meta_response import MetaResponse class PaginatedDatasetRunItems(UniversalBaseModel): data: typing.List[DatasetRunItem] meta: MetaResponse + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/datasets/types/paginated_dataset_runs.py b/langfuse/api/datasets/types/paginated_dataset_runs.py index 85cd54c55..d70a9bf35 100644 --- a/langfuse/api/datasets/types/paginated_dataset_runs.py +++ b/langfuse/api/datasets/types/paginated_dataset_runs.py @@ -3,14 +3,20 @@ import typing import pydantic +import typing_extensions from ...commons.types.dataset_run import DatasetRun +from ...commons.types.deprecation import Deprecation from ...core.pydantic_utilities import UniversalBaseModel +from ...core.serialization import FieldMetadata from ...utils.pagination.types.meta_response import MetaResponse class PaginatedDatasetRuns(UniversalBaseModel): data: typing.List[DatasetRun] meta: MetaResponse + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/legacy/metrics_v1/types/metrics_response.py b/langfuse/api/legacy/metrics_v1/types/metrics_response.py index 734c47ffd..546f19fd6 100644 --- a/langfuse/api/legacy/metrics_v1/types/metrics_response.py +++ b/langfuse/api/legacy/metrics_v1/types/metrics_response.py @@ -3,7 +3,10 @@ import typing import pydantic +import typing_extensions +from ....commons.types.deprecation import Deprecation from ....core.pydantic_utilities import UniversalBaseModel +from ....core.serialization import FieldMetadata class MetricsResponse(UniversalBaseModel): @@ -14,6 +17,10 @@ class MetricsResponse(UniversalBaseModel): Histograms will return an array with [lower, upper, height] tuples. """ + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True ) diff --git a/langfuse/api/legacy/observations_v1/client.py b/langfuse/api/legacy/observations_v1/client.py index 40d5df6b8..631874321 100644 --- a/langfuse/api/legacy/observations_v1/client.py +++ b/langfuse/api/legacy/observations_v1/client.py @@ -4,7 +4,7 @@ import typing from ...commons.types.observation_level import ObservationLevel -from ...commons.types.observations_view import ObservationsView +from ...commons.types.observations_view_single import ObservationsViewSingle from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ...core.request_options import RequestOptions from .raw_client import AsyncRawObservationsV1Client, RawObservationsV1Client @@ -31,7 +31,7 @@ def get( observation_id: str, *, request_options: typing.Optional[RequestOptions] = None, - ) -> ObservationsView: + ) -> ObservationsViewSingle: """ Get a observation @@ -45,7 +45,7 @@ def get( Returns ------- - ObservationsView + ObservationsViewSingle Examples -------- @@ -279,7 +279,7 @@ async def get( observation_id: str, *, request_options: typing.Optional[RequestOptions] = None, - ) -> ObservationsView: + ) -> ObservationsViewSingle: """ Get a observation @@ -293,7 +293,7 @@ async def get( Returns ------- - ObservationsView + ObservationsViewSingle Examples -------- diff --git a/langfuse/api/legacy/observations_v1/raw_client.py b/langfuse/api/legacy/observations_v1/raw_client.py index 61ecf409d..f68d62937 100644 --- a/langfuse/api/legacy/observations_v1/raw_client.py +++ b/langfuse/api/legacy/observations_v1/raw_client.py @@ -10,7 +10,7 @@ from ...commons.errors.not_found_error import NotFoundError from ...commons.errors.unauthorized_error import UnauthorizedError from ...commons.types.observation_level import ObservationLevel -from ...commons.types.observations_view import ObservationsView +from ...commons.types.observations_view_single import ObservationsViewSingle from ...core.api_error import ApiError from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ...core.datetime_utils import serialize_datetime @@ -30,7 +30,7 @@ def get( observation_id: str, *, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ObservationsView]: + ) -> HttpResponse[ObservationsViewSingle]: """ Get a observation @@ -44,7 +44,7 @@ def get( Returns ------- - HttpResponse[ObservationsView] + HttpResponse[ObservationsViewSingle] """ _response = self._client_wrapper.httpx_client.request( f"api/public/observations/{jsonable_encoder(observation_id)}", @@ -54,9 +54,9 @@ def get( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ObservationsView, + ObservationsViewSingle, parse_obj_as( - type_=ObservationsView, # type: ignore + type_=ObservationsViewSingle, # type: ignore object_=_response.json(), ), ) @@ -399,7 +399,7 @@ async def get( observation_id: str, *, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ObservationsView]: + ) -> AsyncHttpResponse[ObservationsViewSingle]: """ Get a observation @@ -413,7 +413,7 @@ async def get( Returns ------- - AsyncHttpResponse[ObservationsView] + AsyncHttpResponse[ObservationsViewSingle] """ _response = await self._client_wrapper.httpx_client.request( f"api/public/observations/{jsonable_encoder(observation_id)}", @@ -423,9 +423,9 @@ async def get( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ObservationsView, + ObservationsViewSingle, parse_obj_as( - type_=ObservationsView, # type: ignore + type_=ObservationsViewSingle, # type: ignore object_=_response.json(), ), ) diff --git a/langfuse/api/legacy/observations_v1/types/observations_views.py b/langfuse/api/legacy/observations_v1/types/observations_views.py index b6d294c7d..bb1da2541 100644 --- a/langfuse/api/legacy/observations_v1/types/observations_views.py +++ b/langfuse/api/legacy/observations_v1/types/observations_views.py @@ -3,14 +3,20 @@ import typing import pydantic +import typing_extensions +from ....commons.types.deprecation import Deprecation from ....commons.types.observations_view import ObservationsView from ....core.pydantic_utilities import UniversalBaseModel +from ....core.serialization import FieldMetadata from ....utils.pagination.types.meta_response import MetaResponse class ObservationsViews(UniversalBaseModel): data: typing.List[ObservationsView] meta: MetaResponse + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/scores/types/get_scores_response.py b/langfuse/api/scores/types/get_scores_response.py index 0ca4d0e40..70f9c7a51 100644 --- a/langfuse/api/scores/types/get_scores_response.py +++ b/langfuse/api/scores/types/get_scores_response.py @@ -3,7 +3,10 @@ import typing import pydantic +import typing_extensions +from ...commons.types.deprecation import Deprecation from ...core.pydantic_utilities import UniversalBaseModel +from ...core.serialization import FieldMetadata from ...utils.pagination.types.meta_response import MetaResponse from .get_scores_response_data import GetScoresResponseData @@ -11,6 +14,9 @@ class GetScoresResponse(UniversalBaseModel): data: typing.List[GetScoresResponseData] meta: MetaResponse + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/sessions/types/paginated_sessions.py b/langfuse/api/sessions/types/paginated_sessions.py index 5d7bd3886..cc1ef68b3 100644 --- a/langfuse/api/sessions/types/paginated_sessions.py +++ b/langfuse/api/sessions/types/paginated_sessions.py @@ -3,14 +3,20 @@ import typing import pydantic +import typing_extensions +from ...commons.types.deprecation import Deprecation from ...commons.types.session import Session from ...core.pydantic_utilities import UniversalBaseModel +from ...core.serialization import FieldMetadata from ...utils.pagination.types.meta_response import MetaResponse class PaginatedSessions(UniversalBaseModel): data: typing.List[Session] meta: MetaResponse + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True diff --git a/langfuse/api/trace/types/traces.py b/langfuse/api/trace/types/traces.py index b559118e1..3ab791cf9 100644 --- a/langfuse/api/trace/types/traces.py +++ b/langfuse/api/trace/types/traces.py @@ -3,14 +3,20 @@ import typing import pydantic +import typing_extensions +from ...commons.types.deprecation import Deprecation from ...commons.types.trace_with_details import TraceWithDetails from ...core.pydantic_utilities import UniversalBaseModel +from ...core.serialization import FieldMetadata from ...utils.pagination.types.meta_response import MetaResponse class Traces(UniversalBaseModel): data: typing.List[TraceWithDetails] meta: MetaResponse + deprecation: typing_extensions.Annotated[ + typing.Optional[Deprecation], FieldMetadata(alias="_deprecation") + ] = None model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( extra="allow", frozen=True