Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions langfuse/api/comments/client.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

from ..commons.types.comment import Comment
Expand Down Expand Up @@ -36,6 +37,7 @@ def create(
object_id: str,
content: str,
author_user_id: typing.Optional[str] = OMIT,
object_start_time: typing.Optional[dt.datetime] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> CreateCommentResponse:
"""
Expand All @@ -58,6 +60,9 @@ def create(
author_user_id : typing.Optional[str]
The id of the user who created the comment. Must be a member of the organization that owns the project, otherwise an error will be thrown.

object_start_time : typing.Optional[dt.datetime]
The start time of the referenced object (for observations, the observation's start time). Optional performance hint - when provided, Langfuse narrows the lookup to validate the reference faster. It only affects speed - an incorrect or omitted value never changes the result.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand Down Expand Up @@ -90,6 +95,7 @@ def create(
object_id=object_id,
content=content,
author_user_id=author_user_id,
object_start_time=object_start_time,
request_options=request_options,
)
return _response.data
Expand Down Expand Up @@ -221,6 +227,7 @@ async def create(
object_id: str,
content: str,
author_user_id: typing.Optional[str] = OMIT,
object_start_time: typing.Optional[dt.datetime] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> CreateCommentResponse:
"""
Expand All @@ -243,6 +250,9 @@ async def create(
author_user_id : typing.Optional[str]
The id of the user who created the comment. Must be a member of the organization that owns the project, otherwise an error will be thrown.

object_start_time : typing.Optional[dt.datetime]
The start time of the referenced object (for observations, the observation's start time). Optional performance hint - when provided, Langfuse narrows the lookup to validate the reference faster. It only affects speed - an incorrect or omitted value never changes the result.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand Down Expand Up @@ -283,6 +293,7 @@ async def main() -> None:
object_id=object_id,
content=content,
author_user_id=author_user_id,
object_start_time=object_start_time,
request_options=request_options,
)
return _response.data
Expand Down
11 changes: 11 additions & 0 deletions langfuse/api/comments/raw_client.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing
from json.decoder import JSONDecodeError

Expand Down Expand Up @@ -34,6 +35,7 @@ def create(
object_id: str,
content: str,
author_user_id: typing.Optional[str] = OMIT,
object_start_time: typing.Optional[dt.datetime] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[CreateCommentResponse]:
"""
Expand All @@ -56,6 +58,9 @@ def create(
author_user_id : typing.Optional[str]
The id of the user who created the comment. Must be a member of the organization that owns the project, otherwise an error will be thrown.

object_start_time : typing.Optional[dt.datetime]
The start time of the referenced object (for observations, the observation's start time). Optional performance hint - when provided, Langfuse narrows the lookup to validate the reference faster. It only affects speed - an incorrect or omitted value never changes the result.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand All @@ -72,6 +77,7 @@ def create(
"objectId": object_id,
"content": content,
"authorUserId": author_user_id,
"objectStartTime": object_start_time,
},
request_options=request_options,
omit=OMIT,
Expand Down Expand Up @@ -398,6 +404,7 @@ async def create(
object_id: str,
content: str,
author_user_id: typing.Optional[str] = OMIT,
object_start_time: typing.Optional[dt.datetime] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[CreateCommentResponse]:
"""
Expand All @@ -420,6 +427,9 @@ async def create(
author_user_id : typing.Optional[str]
The id of the user who created the comment. Must be a member of the organization that owns the project, otherwise an error will be thrown.

object_start_time : typing.Optional[dt.datetime]
The start time of the referenced object (for observations, the observation's start time). Optional performance hint - when provided, Langfuse narrows the lookup to validate the reference faster. It only affects speed - an incorrect or omitted value never changes the result.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand All @@ -436,6 +446,7 @@ async def create(
"objectId": object_id,
"content": content,
"authorUserId": author_user_id,
"objectStartTime": object_start_time,
},
request_options=request_options,
omit=OMIT,
Expand Down
8 changes: 8 additions & 0 deletions langfuse/api/comments/types/create_comment_request.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

import pydantic
Expand Down Expand Up @@ -42,6 +43,13 @@ class CreateCommentRequest(UniversalBaseModel):
The id of the user who created the comment. Must be a member of the organization that owns the project, otherwise an error will be thrown.
"""

object_start_time: typing_extensions.Annotated[
typing.Optional[dt.datetime], FieldMetadata(alias="objectStartTime")
] = pydantic.Field(default=None)
"""
The start time of the referenced object (for observations, the observation's start time). Optional performance hint - when provided, Langfuse narrows the lookup to validate the reference faster. It only affects speed - an incorrect or omitted value never changes the result.
"""

model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
extra="allow", frozen=True
)
8 changes: 4 additions & 4 deletions langfuse/api/ingestion/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def with_raw_response(self) -> RawIngestionClient:
return self._raw_client

@typing_extensions.deprecated(
"On Langfuse Cloud, Langfuse v3 is deprecated and this endpoint will be removed on November 16, 2026. Send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` instead, see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; the endpoint becomes unavailable when they upgrade to Langfuse v4.",
"On Langfuse Cloud, Langfuse v3 is deprecated and v4-only write mode begins on November 16, 2026. This endpoint is never shut down; it continues to accept score events. Trace and observation events fail only in v4-only write mode, not in dual or legacy mode. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` (for example with curl); see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; they reject trace and observation events only in v4-only write mode, not dual or legacy.",
category=None,
)
def batch(
Expand All @@ -42,7 +42,7 @@ def batch(
"""
**Legacy endpoint for batch ingestion for Langfuse Observability.**

-> Please use the OpenTelemetry endpoint (`/api/public/otel/v1/traces`). Learn more: https://langfuse.com/integrations/native/opentelemetry
This endpoint is never shut down. Trace and observation events are rejected only in v4-only write mode (not dual or legacy); score events continue to be accepted. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send traces via the OpenTelemetry endpoint (`POST /api/public/otel/v1/traces`), for example with curl. Learn more: https://langfuse.com/integrations/native/opentelemetry

Within each batch, there can be multiple events.
Each event has a type, an id, a timestamp, metadata and a body.
Expand Down Expand Up @@ -134,7 +134,7 @@ def with_raw_response(self) -> AsyncRawIngestionClient:
return self._raw_client

@typing_extensions.deprecated(
"On Langfuse Cloud, Langfuse v3 is deprecated and this endpoint will be removed on November 16, 2026. Send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` instead, see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; the endpoint becomes unavailable when they upgrade to Langfuse v4.",
"On Langfuse Cloud, Langfuse v3 is deprecated and v4-only write mode begins on November 16, 2026. This endpoint is never shut down; it continues to accept score events. Trace and observation events fail only in v4-only write mode, not in dual or legacy mode. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` (for example with curl); see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; they reject trace and observation events only in v4-only write mode, not dual or legacy.",
category=None,
)
async def batch(
Expand All @@ -147,7 +147,7 @@ async def batch(
"""
**Legacy endpoint for batch ingestion for Langfuse Observability.**

-> Please use the OpenTelemetry endpoint (`/api/public/otel/v1/traces`). Learn more: https://langfuse.com/integrations/native/opentelemetry
This endpoint is never shut down. Trace and observation events are rejected only in v4-only write mode (not dual or legacy); score events continue to be accepted. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send traces via the OpenTelemetry endpoint (`POST /api/public/otel/v1/traces`), for example with curl. Learn more: https://langfuse.com/integrations/native/opentelemetry

Within each batch, there can be multiple events.
Each event has a type, an id, a timestamp, metadata and a body.
Expand Down
8 changes: 4 additions & 4 deletions langfuse/api/ingestion/raw_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper

@typing_extensions.deprecated(
"On Langfuse Cloud, Langfuse v3 is deprecated and this endpoint will be removed on November 16, 2026. Send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` instead, see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; the endpoint becomes unavailable when they upgrade to Langfuse v4.",
"On Langfuse Cloud, Langfuse v3 is deprecated and v4-only write mode begins on November 16, 2026. This endpoint is never shut down; it continues to accept score events. Trace and observation events fail only in v4-only write mode, not in dual or legacy mode. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` (for example with curl); see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; they reject trace and observation events only in v4-only write mode, not dual or legacy.",
category=None,
)
def batch(
Expand All @@ -40,7 +40,7 @@ def batch(
"""
**Legacy endpoint for batch ingestion for Langfuse Observability.**

-> Please use the OpenTelemetry endpoint (`/api/public/otel/v1/traces`). Learn more: https://langfuse.com/integrations/native/opentelemetry
This endpoint is never shut down. Trace and observation events are rejected only in v4-only write mode (not dual or legacy); score events continue to be accepted. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send traces via the OpenTelemetry endpoint (`POST /api/public/otel/v1/traces`), for example with curl. Learn more: https://langfuse.com/integrations/native/opentelemetry

Within each batch, there can be multiple events.
Each event has a type, an id, a timestamp, metadata and a body.
Expand Down Expand Up @@ -167,7 +167,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper

@typing_extensions.deprecated(
"On Langfuse Cloud, Langfuse v3 is deprecated and this endpoint will be removed on November 16, 2026. Send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` instead, see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; the endpoint becomes unavailable when they upgrade to Langfuse v4.",
"On Langfuse Cloud, Langfuse v3 is deprecated and v4-only write mode begins on November 16, 2026. This endpoint is never shut down; it continues to accept score events. Trace and observation events fail only in v4-only write mode, not in dual or legacy mode. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send data via the OpenTelemetry endpoint at `POST /api/public/otel/v1/traces` (for example with curl); see the [OpenTelemetry integration docs](https://langfuse.com/integrations/native/opentelemetry). Self-hosted deployments are unaffected by this date; they reject trace and observation events only in v4-only write mode, not dual or legacy.",
category=None,
)
async def batch(
Expand All @@ -180,7 +180,7 @@ async def batch(
"""
**Legacy endpoint for batch ingestion for Langfuse Observability.**

-> Please use the OpenTelemetry endpoint (`/api/public/otel/v1/traces`). Learn more: https://langfuse.com/integrations/native/opentelemetry
This endpoint is never shut down. Trace and observation events are rejected only in v4-only write mode (not dual or legacy); score events continue to be accepted. Always prefer upgrading to the current Python and JS SDKs. If you use custom auto-instrumentation, only then send traces via the OpenTelemetry endpoint (`POST /api/public/otel/v1/traces`), for example with curl. Learn more: https://langfuse.com/integrations/native/opentelemetry

Within each batch, there can be multiple events.
Each event has a type, an id, a timestamp, metadata and a body.
Expand Down
6 changes: 6 additions & 0 deletions langfuse/api/ingestion/types/ingestion_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
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 .ingestion_error import IngestionError
from .ingestion_success import IngestionSuccess


class IngestionResponse(UniversalBaseModel):
successes: typing.List[IngestionSuccess]
errors: typing.List[IngestionError]
deprecation: typing_extensions.Annotated[
typing.Optional[Deprecation], FieldMetadata(alias="_deprecation")
] = None

model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
extra="allow", frozen=True
Expand Down
12 changes: 10 additions & 2 deletions langfuse/api/legacy/observations_v1/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ def get(
self,
observation_id: str,
*,
start_time: typing.Optional[dt.datetime] = None,
request_options: typing.Optional[RequestOptions] = None,
) -> ObservationsViewSingle:
"""
Expand All @@ -45,6 +46,9 @@ def get(
observation_id : str
The unique langfuse identifier of an observation, can be an event, span or generation

start_time : typing.Optional[dt.datetime]
The start time of the observation (ISO 8601 with offset, e.g. 2024-01-01T00:00:00Z). Optional performance hint - when provided, Langfuse narrows the lookup to make the request substantially faster. It only affects speed - an incorrect or omitted value never changes the result.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand All @@ -69,7 +73,7 @@ def get(
)
"""
_response = self._raw_client.get(
observation_id, request_options=request_options
observation_id, start_time=start_time, request_options=request_options
)
return _response.data

Expand Down Expand Up @@ -291,6 +295,7 @@ async def get(
self,
observation_id: str,
*,
start_time: typing.Optional[dt.datetime] = None,
request_options: typing.Optional[RequestOptions] = None,
) -> ObservationsViewSingle:
"""
Expand All @@ -301,6 +306,9 @@ async def get(
observation_id : str
The unique langfuse identifier of an observation, can be an event, span or generation

start_time : typing.Optional[dt.datetime]
The start time of the observation (ISO 8601 with offset, e.g. 2024-01-01T00:00:00Z). Optional performance hint - when provided, Langfuse narrows the lookup to make the request substantially faster. It only affects speed - an incorrect or omitted value never changes the result.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand Down Expand Up @@ -333,7 +341,7 @@ async def main() -> None:
asyncio.run(main())
"""
_response = await self._raw_client.get(
observation_id, request_options=request_options
observation_id, start_time=start_time, request_options=request_options
)
return _response.data

Expand Down
Loading