Skip to content
Merged
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
3 changes: 3 additions & 0 deletions langfuse/api/unstable/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@
LlmAsJudgeEvaluationRuleEvaluatorReference,
LlmAsJudgeEvaluatorType,
ReadableEvaluationRule,
ReadableV2EvaluationRule,
UpdateEvaluationRuleRequest,
)
from .evaluators import (
Expand Down Expand Up @@ -284,6 +285,7 @@
"PublicNumericEvaluatorOutputDefinition": ".commons",
"PublicNumericEvaluatorOutputScoreDefinition": ".commons",
"ReadableEvaluationRule": ".evaluation_rules",
"ReadableV2EvaluationRule": ".evaluation_rules",
"StringEvaluationRuleFilter": ".commons",
"StringObjectEvaluationRuleFilter": ".commons",
"StringOptionsEvaluationRuleFilter": ".commons",
Expand Down Expand Up @@ -455,6 +457,7 @@ def __dir__():
"PublicNumericEvaluatorOutputDefinition",
"PublicNumericEvaluatorOutputScoreDefinition",
"ReadableEvaluationRule",
"ReadableV2EvaluationRule",
"StringEvaluationRuleFilter",
"StringObjectEvaluationRuleFilter",
"StringOptionsEvaluationRuleFilter",
Expand Down
3 changes: 3 additions & 0 deletions langfuse/api/unstable/evaluation_rules/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
LlmAsJudgeEvaluationRuleEvaluatorReference,
LlmAsJudgeEvaluatorType,
ReadableEvaluationRule,
ReadableV2EvaluationRule,
UpdateEvaluationRuleRequest,
)
_dynamic_imports: typing.Dict[str, str] = {
Expand All @@ -56,6 +57,7 @@
"LlmAsJudgeEvaluationRuleEvaluatorReference": ".types",
"LlmAsJudgeEvaluatorType": ".types",
"ReadableEvaluationRule": ".types",
"ReadableV2EvaluationRule": ".types",
"UpdateEvaluationRuleRequest": ".types",
}

Expand Down Expand Up @@ -111,5 +113,6 @@ def __dir__():
"LlmAsJudgeEvaluationRuleEvaluatorReference",
"LlmAsJudgeEvaluatorType",
"ReadableEvaluationRule",
"ReadableV2EvaluationRule",
"UpdateEvaluationRuleRequest",
]
9 changes: 5 additions & 4 deletions langfuse/api/unstable/evaluation_rules/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from .types.evaluation_rule_evaluator_reference import EvaluationRuleEvaluatorReference
from .types.evaluation_rules import EvaluationRules
from .types.readable_evaluation_rule import ReadableEvaluationRule
from .types.readable_v2evaluation_rule import ReadableV2EvaluationRule

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)
Expand Down Expand Up @@ -275,7 +276,7 @@ def update(
filter: typing.Optional[typing.Sequence[EvaluationRuleFilter]] = OMIT,
mapping: typing.Optional[typing.Sequence[PromptVariableMappingInput]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> EvaluationRule:
) -> ReadableV2EvaluationRule:
"""
Update an evaluation rule.

Expand Down Expand Up @@ -343,7 +344,7 @@ def update(

Returns
-------
EvaluationRule
ReadableV2EvaluationRule

Examples
--------
Expand Down Expand Up @@ -700,7 +701,7 @@ async def update(
filter: typing.Optional[typing.Sequence[EvaluationRuleFilter]] = OMIT,
mapping: typing.Optional[typing.Sequence[PromptVariableMappingInput]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> EvaluationRule:
) -> ReadableV2EvaluationRule:
"""
Update an evaluation rule.

Expand Down Expand Up @@ -768,7 +769,7 @@ async def update(

Returns
-------
EvaluationRule
ReadableV2EvaluationRule

Examples
--------
Expand Down
17 changes: 9 additions & 8 deletions langfuse/api/unstable/evaluation_rules/raw_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
from .types.evaluation_rule_evaluator_reference import EvaluationRuleEvaluatorReference
from .types.evaluation_rules import EvaluationRules
from .types.readable_evaluation_rule import ReadableEvaluationRule
from .types.readable_v2evaluation_rule import ReadableV2EvaluationRule

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)
Expand Down Expand Up @@ -702,7 +703,7 @@ def update(
filter: typing.Optional[typing.Sequence[EvaluationRuleFilter]] = OMIT,
mapping: typing.Optional[typing.Sequence[PromptVariableMappingInput]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[EvaluationRule]:
) -> HttpResponse[ReadableV2EvaluationRule]:
"""
Update an evaluation rule.

Expand Down Expand Up @@ -770,7 +771,7 @@ def update(

Returns
-------
HttpResponse[EvaluationRule]
HttpResponse[ReadableV2EvaluationRule]
"""
_response = self._client_wrapper.httpx_client.request(
f"api/public/unstable/evaluation-rules/{jsonable_encoder(evaluation_rule_id)}",
Expand Down Expand Up @@ -807,9 +808,9 @@ def update(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
EvaluationRule,
ReadableV2EvaluationRule,
parse_obj_as(
type_=EvaluationRule, # type: ignore
type_=ReadableV2EvaluationRule, # type: ignore
object_=_response.json(),
),
)
Expand Down Expand Up @@ -1801,7 +1802,7 @@ async def update(
filter: typing.Optional[typing.Sequence[EvaluationRuleFilter]] = OMIT,
mapping: typing.Optional[typing.Sequence[PromptVariableMappingInput]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[EvaluationRule]:
) -> AsyncHttpResponse[ReadableV2EvaluationRule]:
"""
Update an evaluation rule.

Expand Down Expand Up @@ -1869,7 +1870,7 @@ async def update(

Returns
-------
AsyncHttpResponse[EvaluationRule]
AsyncHttpResponse[ReadableV2EvaluationRule]
"""
_response = await self._client_wrapper.httpx_client.request(
f"api/public/unstable/evaluation-rules/{jsonable_encoder(evaluation_rule_id)}",
Expand Down Expand Up @@ -1906,9 +1907,9 @@ async def update(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
EvaluationRule,
ReadableV2EvaluationRule,
parse_obj_as(
type_=EvaluationRule, # type: ignore
type_=ReadableV2EvaluationRule, # type: ignore
object_=_response.json(),
),
)
Expand Down
3 changes: 3 additions & 0 deletions langfuse/api/unstable/evaluation_rules/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
)
from .llm_as_judge_evaluator_type import LlmAsJudgeEvaluatorType
from .readable_evaluation_rule import ReadableEvaluationRule
from .readable_v2evaluation_rule import ReadableV2EvaluationRule
from .update_evaluation_rule_request import UpdateEvaluationRuleRequest
_dynamic_imports: typing.Dict[str, str] = {
"CodeEvaluationRuleEvaluatorReference": ".code_evaluation_rule_evaluator_reference",
Expand All @@ -68,6 +69,7 @@
"LlmAsJudgeEvaluationRuleEvaluatorReference": ".llm_as_judge_evaluation_rule_evaluator_reference",
"LlmAsJudgeEvaluatorType": ".llm_as_judge_evaluator_type",
"ReadableEvaluationRule": ".readable_evaluation_rule",
"ReadableV2EvaluationRule": ".readable_v2evaluation_rule",
"UpdateEvaluationRuleRequest": ".update_evaluation_rule_request",
}

Expand Down Expand Up @@ -123,5 +125,6 @@ def __dir__():
"LlmAsJudgeEvaluationRuleEvaluatorReference",
"LlmAsJudgeEvaluatorType",
"ReadableEvaluationRule",
"ReadableV2EvaluationRule",
"UpdateEvaluationRuleRequest",
]
77 changes: 0 additions & 77 deletions langfuse/api/unstable/evaluation_rules/types/evaluation_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,83 +11,6 @@


class EvaluationRule(EvaluationRuleBase):
"""
Examples
--------
import datetime

from langfuse.unstable.commons import (
EvaluationRuleFilter_StringOptions,
EvaluationRuleOptionsFilterOperator,
EvaluationRuleStatus,
EvaluationRuleTarget,
EvaluatorType,
PromptVariableMappingRead,
PromptVariableMappingSource,
)
from langfuse.unstable.evaluation_rules import (
EvaluationRule,
EvaluationRuleEvaluator,
EvaluationRuleEvaluatorAssignment,
)

EvaluationRule(
id="erule_123",
name="answer-correctness-live",
evaluator=EvaluationRuleEvaluator(
id="evaltmpl_123",
name="answer-correctness",
type=EvaluatorType.LLM_AS_JUDGE,
),
evaluators=[
EvaluationRuleEvaluatorAssignment(
evaluator=EvaluationRuleEvaluator(
id="evaltmpl_123",
name="answer-correctness",
type=EvaluatorType.LLM_AS_JUDGE,
),
mapping=[
PromptVariableMappingRead(
variable="input",
source=PromptVariableMappingSource.INPUT,
),
PromptVariableMappingRead(
variable="output",
source=PromptVariableMappingSource.OUTPUT,
),
],
)
],
target=EvaluationRuleTarget.OBSERVATION,
enabled=True,
status=EvaluationRuleStatus.ACTIVE,
sampling=1.0,
filter=[
EvaluationRuleFilter_StringOptions(
column="type",
operator=EvaluationRuleOptionsFilterOperator.ANY_OF,
value=["GENERATION"],
)
],
mapping=[
PromptVariableMappingRead(
variable="input",
source=PromptVariableMappingSource.INPUT,
),
PromptVariableMappingRead(
variable="output",
source=PromptVariableMappingSource.OUTPUT,
),
],
created_at=datetime.datetime.fromisoformat(
"2026-03-30 09:20:00+00:00",
),
updated_at=datetime.datetime.fromisoformat(
"2026-03-30 09:20:00+00:00",
),
)
"""

evaluators: typing.List[EvaluationRuleEvaluatorAssignment] = pydantic.Field()
"""
Evaluators attached to this rule in deterministic assignment order. A `null` mapping inherits the evaluator version's default mapping.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import typing

from .evaluation_rule import EvaluationRule
from .legacy_evaluation_rule import LegacyEvaluationRule
from .readable_v2evaluation_rule import ReadableV2EvaluationRule

ReadableEvaluationRule = typing.Union[EvaluationRule, LegacyEvaluationRule]
ReadableEvaluationRule = typing.Union[ReadableV2EvaluationRule, LegacyEvaluationRule]
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# This file was auto-generated by Fern from our API Definition.

import typing

import pydantic
from ....evaluation_commons.types.evaluation_rule_read_filter import (
EvaluationRuleReadFilter,
)
from ...commons.types.evaluation_rule_target import EvaluationRuleTarget
from ...commons.types.prompt_variable_mapping_read import PromptVariableMappingRead
from .evaluation_rule_base import EvaluationRuleBase
from .evaluation_rule_evaluator_assignment import EvaluationRuleEvaluatorAssignment


class ReadableV2EvaluationRule(EvaluationRuleBase):
"""
Examples
--------
import datetime

from langfuse.evaluation_commons import EvaluationRuleReadFilterBase
from langfuse.unstable.commons import (
EvaluationRuleStatus,
EvaluationRuleTarget,
EvaluatorType,
PromptVariableMappingRead,
PromptVariableMappingSource,
)
from langfuse.unstable.evaluation_rules import (
EvaluationRuleEvaluator,
EvaluationRuleEvaluatorAssignment,
ReadableV2EvaluationRule,
)

ReadableV2EvaluationRule(
id="erule_123",
name="answer-correctness-live",
evaluator=EvaluationRuleEvaluator(
id="evaltmpl_123",
name="answer-correctness",
type=EvaluatorType.LLM_AS_JUDGE,
),
evaluators=[
EvaluationRuleEvaluatorAssignment(
evaluator=EvaluationRuleEvaluator(
id="evaltmpl_123",
name="answer-correctness",
type=EvaluatorType.LLM_AS_JUDGE,
),
mapping=[
PromptVariableMappingRead(
variable="input",
source=PromptVariableMappingSource.INPUT,
),
PromptVariableMappingRead(
variable="output",
source=PromptVariableMappingSource.OUTPUT,
),
],
)
],
target=EvaluationRuleTarget.OBSERVATION,
enabled=True,
status=EvaluationRuleStatus.ACTIVE,
sampling=1.0,
filter=[
EvaluationRuleReadFilterBase(
type="stringOptions",
column="type",
operator="any of",
value=["GENERATION"],
)
],
mapping=[
PromptVariableMappingRead(
variable="input",
source=PromptVariableMappingSource.INPUT,
),
PromptVariableMappingRead(
variable="output",
source=PromptVariableMappingSource.OUTPUT,
),
],
created_at=datetime.datetime.fromisoformat(
"2026-03-30 09:20:00+00:00",
),
updated_at=datetime.datetime.fromisoformat(
"2026-03-30 09:20:00+00:00",
),
)
"""

evaluators: typing.List[EvaluationRuleEvaluatorAssignment] = pydantic.Field()
"""
Evaluators attached to this rule in deterministic assignment order. A `null` mapping inherits the evaluator version's default mapping.
"""

target: EvaluationRuleTarget = pydantic.Field()
"""
Target object type that should trigger scoring.
"""

filter: typing.List[EvaluationRuleReadFilter] = pydantic.Field()
"""
List of stored filter conditions returned verbatim. Historical filters remain readable even when the current write contract no longer accepts their shape.
"""

mapping: typing.List[PromptVariableMappingRead] = pydantic.Field()
"""
Deprecated compatibility alias containing the effective mapping for `evaluators[0]`.
"""

model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
extra="allow", frozen=True
)