Skip to content
Closed
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
9 changes: 0 additions & 9 deletions langfuse/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,6 @@
IngestionEvent_ObservationCreate,
IngestionEvent_ObservationUpdate,
IngestionEvent_ScoreCreate,
IngestionEvent_SdkLog,
IngestionEvent_SpanCreate,
IngestionEvent_SpanUpdate,
IngestionEvent_TraceCreate,
Expand All @@ -319,8 +318,6 @@
OptionalObservationBody,
ScoreBody,
ScoreEvent,
SdkLogBody,
SdkLogEvent,
TraceBody,
TraceEvent,
UpdateEventBody,
Expand Down Expand Up @@ -669,7 +666,6 @@
"IngestionEvent_ObservationCreate": ".ingestion",
"IngestionEvent_ObservationUpdate": ".ingestion",
"IngestionEvent_ScoreCreate": ".ingestion",
"IngestionEvent_SdkLog": ".ingestion",
"IngestionEvent_SpanCreate": ".ingestion",
"IngestionEvent_SpanUpdate": ".ingestion",
"IngestionEvent_TraceCreate": ".ingestion",
Expand Down Expand Up @@ -820,8 +816,6 @@
"Score_Correction": ".commons",
"Score_Numeric": ".commons",
"Score_Text": ".commons",
"SdkLogBody": ".ingestion",
"SdkLogEvent": ".ingestion",
"ServiceProviderConfig": ".scim",
"ServiceUnavailableError": ".health",
"Session": ".commons",
Expand Down Expand Up @@ -1124,7 +1118,6 @@ def __dir__():
"IngestionEvent_ObservationCreate",
"IngestionEvent_ObservationUpdate",
"IngestionEvent_ScoreCreate",
"IngestionEvent_SdkLog",
"IngestionEvent_SpanCreate",
"IngestionEvent_SpanUpdate",
"IngestionEvent_TraceCreate",
Expand Down Expand Up @@ -1275,8 +1268,6 @@ def __dir__():
"Score_Correction",
"Score_Numeric",
"Score_Text",
"SdkLogBody",
"SdkLogEvent",
"ServiceProviderConfig",
"ServiceUnavailableError",
"Session",
Expand Down
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
)
20 changes: 10 additions & 10 deletions langfuse/api/evaluation_commons/types/evaluation_rule_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class EvaluationRuleFilter_Datetime(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -97,7 +97,7 @@ class EvaluationRuleFilter_String(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -160,7 +160,7 @@ class EvaluationRuleFilter_Number(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -223,7 +223,7 @@ class EvaluationRuleFilter_StringOptions(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -286,7 +286,7 @@ class EvaluationRuleFilter_CategoryOptions(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -350,7 +350,7 @@ class EvaluationRuleFilter_ArrayOptions(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -413,7 +413,7 @@ class EvaluationRuleFilter_StringObject(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Comment on lines +416 to 419

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 (optional) Docstring for EvaluationRuleFilter_StringObject now advertises is set/is not set as valid stringObject operators for evaluation rule filters (line 416), but the operator field at line 456 is still typed EvaluationRuleStringFilterOperator, an unchanged enum with only =, contains, does not contain, starts with, ends with. Any caller following the new docs and constructing EvaluationRuleFilter_StringObject(..., operator="is set") (or the sibling StringObjectEvaluationRuleFilter) gets a pydantic ValidationError, so the newly documented feature is unusable through this SDK's typed request models even though the server accepts it. …

Extended reasoning...

…Fix: add IS_SET/IS_NOT_SET members to EvaluationRuleStringFilterOperator (evaluation_rule_string_filter_operator.py) so both EvaluationRuleFilter_StringObject and StringObjectEvaluationRuleFilter accept the documented values.

This file (evaluation_rule_filter.py) is in the diff; its docstrings at lines 37,100,163,226,289,353,416,480,544,607 were all updated to list is set/is not set for stringObject filters used when creating/updating evaluation rules via evaluation_rules/client.py. The operator field type EvaluationRuleStringFilterOperator (imported from evaluation_rule_string_filter_operator.py, not touched by this diff) is a plain Python StrEnum with only 5 members. UniversalBaseModel/pydantic validates enum fields strictly, so passing the string 'is set' raises pydantic.ValidationError at construction time, before any request is sent. Contrast: in observations/client.py, scores/client.py, trace/client.py the same new operator strings were added to docstrings too, but those filter params are plain str (raw JSON), so no type mismatch there - only the…

Verification: nit. evaluation_rule_filter.py:416 (added in this diff) documents stringObject operators including is set / is not set, but the field at line 456 is operator: EvaluationRuleStringFilterOperator. That enum (evaluation_rule_string_filter_operator.py, unchanged by the diff) has only 5 members: "=", "contains", "does not contain", "starts with", "ends with".… | nit — real…

Expand Down Expand Up @@ -477,7 +477,7 @@ class EvaluationRuleFilter_NumberObject(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -541,7 +541,7 @@ class EvaluationRuleFilter_Boolean(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down Expand Up @@ -604,7 +604,7 @@ class EvaluationRuleFilter_Null(UniversalBaseModel):
- `datetime`: `"="`, `">"`, `"<"`, `">="`, `"<="`
- `stringOptions`: `any of`, `none of`
- `arrayOptions`: `any of`, `none of`, `all of`
- `stringObject`: same operators as `string`
- `stringObject`: `"="`, `contains`, `does not contain`, `starts with`, `ends with`, `is set`, `is not set` (use `is set` / `is not set` for key presence; an empty value for `contains`, `starts with`, or `ends with` is treated as `is set`)
- `boolean`: `"="`, `"<>"`
- `null`: `is null`, `is not null`

Expand Down
9 changes: 0 additions & 9 deletions langfuse/api/ingestion/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
IngestionEvent_ObservationCreate,
IngestionEvent_ObservationUpdate,
IngestionEvent_ScoreCreate,
IngestionEvent_SdkLog,
IngestionEvent_SpanCreate,
IngestionEvent_SpanUpdate,
IngestionEvent_TraceCreate,
Expand All @@ -38,8 +37,6 @@
OptionalObservationBody,
ScoreBody,
ScoreEvent,
SdkLogBody,
SdkLogEvent,
TraceBody,
TraceEvent,
UpdateEventBody,
Expand Down Expand Up @@ -67,7 +64,6 @@
"IngestionEvent_ObservationCreate": ".types",
"IngestionEvent_ObservationUpdate": ".types",
"IngestionEvent_ScoreCreate": ".types",
"IngestionEvent_SdkLog": ".types",
"IngestionEvent_SpanCreate": ".types",
"IngestionEvent_SpanUpdate": ".types",
"IngestionEvent_TraceCreate": ".types",
Expand All @@ -82,8 +78,6 @@
"OptionalObservationBody": ".types",
"ScoreBody": ".types",
"ScoreEvent": ".types",
"SdkLogBody": ".types",
"SdkLogEvent": ".types",
"TraceBody": ".types",
"TraceEvent": ".types",
"UpdateEventBody": ".types",
Expand Down Expand Up @@ -140,7 +134,6 @@ def __dir__():
"IngestionEvent_ObservationCreate",
"IngestionEvent_ObservationUpdate",
"IngestionEvent_ScoreCreate",
"IngestionEvent_SdkLog",
"IngestionEvent_SpanCreate",
"IngestionEvent_SpanUpdate",
"IngestionEvent_TraceCreate",
Expand All @@ -155,8 +148,6 @@ def __dir__():
"OptionalObservationBody",
"ScoreBody",
"ScoreEvent",
"SdkLogBody",
"SdkLogEvent",
"TraceBody",
"TraceEvent",
"UpdateEventBody",
Expand Down
Loading