opik 1.9.26__py3-none-any.whl → 1.9.41__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opik/__init__.py +10 -3
- opik/api_objects/dataset/rest_operations.py +2 -0
- opik/api_objects/experiment/experiment.py +31 -5
- opik/api_objects/experiment/helpers.py +34 -10
- opik/api_objects/local_recording.py +8 -3
- opik/api_objects/opik_client.py +218 -46
- opik/api_objects/opik_query_language.py +9 -0
- opik/api_objects/prompt/__init__.py +11 -3
- opik/api_objects/prompt/base_prompt.py +69 -0
- opik/api_objects/prompt/base_prompt_template.py +29 -0
- opik/api_objects/prompt/chat/__init__.py +1 -0
- opik/api_objects/prompt/chat/chat_prompt.py +193 -0
- opik/api_objects/prompt/chat/chat_prompt_template.py +350 -0
- opik/api_objects/prompt/{chat_content_renderer_registry.py → chat/content_renderer_registry.py} +31 -34
- opik/api_objects/prompt/client.py +101 -30
- opik/api_objects/prompt/text/__init__.py +1 -0
- opik/api_objects/prompt/{prompt.py → text/prompt.py} +55 -32
- opik/api_objects/prompt/{prompt_template.py → text/prompt_template.py} +8 -5
- opik/cli/export.py +6 -2
- opik/config.py +0 -5
- opik/decorator/base_track_decorator.py +37 -40
- opik/evaluation/__init__.py +13 -2
- opik/evaluation/engine/engine.py +195 -223
- opik/evaluation/engine/helpers.py +8 -7
- opik/evaluation/engine/metrics_evaluator.py +237 -0
- opik/evaluation/evaluation_result.py +35 -1
- opik/evaluation/evaluator.py +309 -23
- opik/evaluation/models/litellm/util.py +78 -6
- opik/evaluation/report.py +14 -2
- opik/evaluation/rest_operations.py +6 -9
- opik/evaluation/test_case.py +2 -2
- opik/evaluation/types.py +9 -1
- opik/exceptions.py +17 -0
- opik/id_helpers.py +18 -0
- opik/integrations/adk/helpers.py +16 -7
- opik/integrations/adk/legacy_opik_tracer.py +7 -4
- opik/integrations/adk/opik_tracer.py +3 -1
- opik/integrations/adk/patchers/adk_otel_tracer/opik_adk_otel_tracer.py +7 -3
- opik/integrations/dspy/callback.py +1 -4
- opik/integrations/haystack/opik_connector.py +2 -2
- opik/integrations/haystack/opik_tracer.py +2 -4
- opik/integrations/langchain/opik_tracer.py +1 -4
- opik/integrations/llama_index/callback.py +2 -4
- opik/integrations/openai/agents/opik_tracing_processor.py +1 -2
- opik/integrations/openai/opik_tracker.py +1 -1
- opik/opik_context.py +7 -7
- opik/rest_api/__init__.py +127 -11
- opik/rest_api/dashboards/client.py +65 -2
- opik/rest_api/dashboards/raw_client.py +82 -0
- opik/rest_api/datasets/client.py +538 -2
- opik/rest_api/datasets/raw_client.py +1347 -441
- opik/rest_api/experiments/client.py +30 -2
- opik/rest_api/experiments/raw_client.py +26 -0
- opik/rest_api/optimizations/client.py +302 -0
- opik/rest_api/optimizations/raw_client.py +463 -0
- opik/rest_api/optimizations/types/optimization_update_status.py +3 -1
- opik/rest_api/prompts/__init__.py +2 -2
- opik/rest_api/prompts/client.py +34 -4
- opik/rest_api/prompts/raw_client.py +32 -2
- opik/rest_api/prompts/types/__init__.py +3 -1
- opik/rest_api/prompts/types/create_prompt_version_detail_template_structure.py +5 -0
- opik/rest_api/prompts/types/prompt_write_template_structure.py +5 -0
- opik/rest_api/traces/client.py +6 -6
- opik/rest_api/traces/raw_client.py +4 -4
- opik/rest_api/types/__init__.py +125 -11
- opik/rest_api/types/aggregation_data.py +1 -0
- opik/rest_api/types/automation_rule_evaluator.py +23 -1
- opik/rest_api/types/automation_rule_evaluator_llm_as_judge.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_llm_as_judge_public.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_llm_as_judge_write.py +2 -0
- opik/rest_api/types/{automation_rule_evaluator_object_public.py → automation_rule_evaluator_object_object_public.py} +32 -10
- opik/rest_api/types/automation_rule_evaluator_page_public.py +2 -2
- opik/rest_api/types/automation_rule_evaluator_public.py +23 -1
- opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_public.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_write.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_public.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_write.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_public.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_write.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_update.py +23 -1
- opik/rest_api/types/automation_rule_evaluator_update_llm_as_judge.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_update_span_llm_as_judge.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_update_trace_thread_llm_as_judge.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_update_trace_thread_user_defined_metric_python.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_update_user_defined_metric_python.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_public.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_write.py +2 -0
- opik/rest_api/types/automation_rule_evaluator_write.py +23 -1
- opik/rest_api/types/dashboard_page_public.py +1 -0
- opik/rest_api/types/dataset.py +4 -0
- opik/rest_api/types/dataset_item.py +1 -0
- opik/rest_api/types/dataset_item_compare.py +1 -0
- opik/rest_api/types/dataset_item_page_compare.py +1 -0
- opik/rest_api/types/dataset_item_page_public.py +1 -0
- opik/rest_api/types/dataset_item_public.py +1 -0
- opik/rest_api/types/dataset_public.py +4 -0
- opik/rest_api/types/dataset_public_status.py +5 -0
- opik/rest_api/types/dataset_status.py +5 -0
- opik/rest_api/types/dataset_version_diff.py +22 -0
- opik/rest_api/types/dataset_version_diff_stats.py +24 -0
- opik/rest_api/types/dataset_version_page_public.py +23 -0
- opik/rest_api/types/dataset_version_public.py +54 -0
- opik/rest_api/types/dataset_version_summary.py +41 -0
- opik/rest_api/types/dataset_version_summary_public.py +41 -0
- opik/rest_api/types/experiment.py +2 -0
- opik/rest_api/types/experiment_public.py +2 -0
- opik/rest_api/types/experiment_score.py +20 -0
- opik/rest_api/types/experiment_score_public.py +20 -0
- opik/rest_api/types/experiment_score_write.py +20 -0
- opik/rest_api/types/feedback_score_public.py +4 -0
- opik/rest_api/types/group_content_with_aggregations.py +1 -0
- opik/rest_api/types/optimization.py +2 -0
- opik/rest_api/types/optimization_public.py +2 -0
- opik/rest_api/types/optimization_public_status.py +3 -1
- opik/rest_api/types/optimization_status.py +3 -1
- opik/rest_api/types/optimization_studio_config.py +27 -0
- opik/rest_api/types/optimization_studio_config_public.py +27 -0
- opik/rest_api/types/optimization_studio_config_write.py +27 -0
- opik/rest_api/types/optimization_studio_log.py +22 -0
- opik/rest_api/types/optimization_write.py +2 -0
- opik/rest_api/types/optimization_write_status.py +3 -1
- opik/rest_api/types/prompt.py +6 -0
- opik/rest_api/types/prompt_detail.py +6 -0
- opik/rest_api/types/prompt_detail_template_structure.py +5 -0
- opik/rest_api/types/prompt_public.py +6 -0
- opik/rest_api/types/prompt_public_template_structure.py +5 -0
- opik/rest_api/types/prompt_template_structure.py +5 -0
- opik/rest_api/types/prompt_version.py +2 -0
- opik/rest_api/types/prompt_version_detail.py +2 -0
- opik/rest_api/types/prompt_version_detail_template_structure.py +5 -0
- opik/rest_api/types/prompt_version_public.py +2 -0
- opik/rest_api/types/prompt_version_public_template_structure.py +5 -0
- opik/rest_api/types/prompt_version_template_structure.py +5 -0
- opik/rest_api/types/score_name.py +1 -0
- opik/rest_api/types/service_toggles_config.py +5 -0
- opik/rest_api/types/span_filter.py +23 -0
- opik/rest_api/types/span_filter_operator.py +21 -0
- opik/rest_api/types/span_filter_write.py +23 -0
- opik/rest_api/types/span_filter_write_operator.py +21 -0
- opik/rest_api/types/span_llm_as_judge_code.py +27 -0
- opik/rest_api/types/span_llm_as_judge_code_public.py +27 -0
- opik/rest_api/types/span_llm_as_judge_code_write.py +27 -0
- opik/rest_api/types/studio_evaluation.py +20 -0
- opik/rest_api/types/studio_evaluation_public.py +20 -0
- opik/rest_api/types/studio_evaluation_write.py +20 -0
- opik/rest_api/types/studio_llm_model.py +21 -0
- opik/rest_api/types/studio_llm_model_public.py +21 -0
- opik/rest_api/types/studio_llm_model_write.py +21 -0
- opik/rest_api/types/studio_message.py +20 -0
- opik/rest_api/types/studio_message_public.py +20 -0
- opik/rest_api/types/studio_message_write.py +20 -0
- opik/rest_api/types/studio_metric.py +21 -0
- opik/rest_api/types/studio_metric_public.py +21 -0
- opik/rest_api/types/studio_metric_write.py +21 -0
- opik/rest_api/types/studio_optimizer.py +21 -0
- opik/rest_api/types/studio_optimizer_public.py +21 -0
- opik/rest_api/types/studio_optimizer_write.py +21 -0
- opik/rest_api/types/studio_prompt.py +20 -0
- opik/rest_api/types/studio_prompt_public.py +20 -0
- opik/rest_api/types/studio_prompt_write.py +20 -0
- opik/rest_api/types/trace.py +6 -0
- opik/rest_api/types/trace_public.py +6 -0
- opik/rest_api/types/trace_thread_filter_write.py +23 -0
- opik/rest_api/types/trace_thread_filter_write_operator.py +21 -0
- opik/rest_api/types/value_entry.py +2 -0
- opik/rest_api/types/value_entry_compare.py +2 -0
- opik/rest_api/types/value_entry_experiment_item_bulk_write_view.py +2 -0
- opik/rest_api/types/value_entry_public.py +2 -0
- opik/synchronization.py +5 -6
- opik/{decorator/tracing_runtime_config.py → tracing_runtime_config.py} +6 -7
- {opik-1.9.26.dist-info → opik-1.9.41.dist-info}/METADATA +4 -3
- {opik-1.9.26.dist-info → opik-1.9.41.dist-info}/RECORD +180 -120
- opik/api_objects/prompt/chat_prompt_template.py +0 -200
- {opik-1.9.26.dist-info → opik-1.9.41.dist-info}/WHEEL +0 -0
- {opik-1.9.26.dist-info → opik-1.9.41.dist-info}/entry_points.txt +0 -0
- {opik-1.9.26.dist-info → opik-1.9.41.dist-info}/licenses/LICENSE +0 -0
- {opik-1.9.26.dist-info → opik-1.9.41.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
import typing_extensions
|
|
7
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
8
|
+
from ..core.serialization import FieldMetadata
|
|
9
|
+
from .llm_as_judge_message import LlmAsJudgeMessage
|
|
10
|
+
from .llm_as_judge_model_parameters import LlmAsJudgeModelParameters
|
|
11
|
+
from .llm_as_judge_output_schema import LlmAsJudgeOutputSchema
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SpanLlmAsJudgeCode(UniversalBaseModel):
|
|
15
|
+
model: LlmAsJudgeModelParameters
|
|
16
|
+
messages: typing.List[LlmAsJudgeMessage]
|
|
17
|
+
variables: typing.Dict[str, str]
|
|
18
|
+
schema_: typing_extensions.Annotated[typing.List[LlmAsJudgeOutputSchema], FieldMetadata(alias="schema")]
|
|
19
|
+
|
|
20
|
+
if IS_PYDANTIC_V2:
|
|
21
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
22
|
+
else:
|
|
23
|
+
|
|
24
|
+
class Config:
|
|
25
|
+
frozen = True
|
|
26
|
+
smart_union = True
|
|
27
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
import typing_extensions
|
|
7
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
8
|
+
from ..core.serialization import FieldMetadata
|
|
9
|
+
from .llm_as_judge_message_public import LlmAsJudgeMessagePublic
|
|
10
|
+
from .llm_as_judge_model_parameters_public import LlmAsJudgeModelParametersPublic
|
|
11
|
+
from .llm_as_judge_output_schema_public import LlmAsJudgeOutputSchemaPublic
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SpanLlmAsJudgeCodePublic(UniversalBaseModel):
|
|
15
|
+
model: LlmAsJudgeModelParametersPublic
|
|
16
|
+
messages: typing.List[LlmAsJudgeMessagePublic]
|
|
17
|
+
variables: typing.Dict[str, str]
|
|
18
|
+
schema_: typing_extensions.Annotated[typing.List[LlmAsJudgeOutputSchemaPublic], FieldMetadata(alias="schema")]
|
|
19
|
+
|
|
20
|
+
if IS_PYDANTIC_V2:
|
|
21
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
22
|
+
else:
|
|
23
|
+
|
|
24
|
+
class Config:
|
|
25
|
+
frozen = True
|
|
26
|
+
smart_union = True
|
|
27
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
import typing_extensions
|
|
7
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
8
|
+
from ..core.serialization import FieldMetadata
|
|
9
|
+
from .llm_as_judge_message_write import LlmAsJudgeMessageWrite
|
|
10
|
+
from .llm_as_judge_model_parameters_write import LlmAsJudgeModelParametersWrite
|
|
11
|
+
from .llm_as_judge_output_schema_write import LlmAsJudgeOutputSchemaWrite
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SpanLlmAsJudgeCodeWrite(UniversalBaseModel):
|
|
15
|
+
model: LlmAsJudgeModelParametersWrite
|
|
16
|
+
messages: typing.List[LlmAsJudgeMessageWrite]
|
|
17
|
+
variables: typing.Dict[str, str]
|
|
18
|
+
schema_: typing_extensions.Annotated[typing.List[LlmAsJudgeOutputSchemaWrite], FieldMetadata(alias="schema")]
|
|
19
|
+
|
|
20
|
+
if IS_PYDANTIC_V2:
|
|
21
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
22
|
+
else:
|
|
23
|
+
|
|
24
|
+
class Config:
|
|
25
|
+
frozen = True
|
|
26
|
+
smart_union = True
|
|
27
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .studio_metric import StudioMetric
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioEvaluation(UniversalBaseModel):
|
|
11
|
+
metrics: typing.List[StudioMetric]
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .studio_metric_public import StudioMetricPublic
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioEvaluationPublic(UniversalBaseModel):
|
|
11
|
+
metrics: typing.List[StudioMetricPublic]
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .studio_metric_write import StudioMetricWrite
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioEvaluationWrite(UniversalBaseModel):
|
|
11
|
+
metrics: typing.List[StudioMetricWrite]
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node import JsonNode
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioLlmModel(UniversalBaseModel):
|
|
11
|
+
model: str
|
|
12
|
+
parameters: typing.Optional[JsonNode] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node_public import JsonNodePublic
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioLlmModelPublic(UniversalBaseModel):
|
|
11
|
+
model: str
|
|
12
|
+
parameters: typing.Optional[JsonNodePublic] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node_write import JsonNodeWrite
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioLlmModelWrite(UniversalBaseModel):
|
|
11
|
+
model: str
|
|
12
|
+
parameters: typing.Optional[JsonNodeWrite] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class StudioMessage(UniversalBaseModel):
|
|
10
|
+
role: str
|
|
11
|
+
content: str
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class StudioMessagePublic(UniversalBaseModel):
|
|
10
|
+
role: str
|
|
11
|
+
content: str
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class StudioMessageWrite(UniversalBaseModel):
|
|
10
|
+
role: str
|
|
11
|
+
content: str
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node import JsonNode
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioMetric(UniversalBaseModel):
|
|
11
|
+
type: str
|
|
12
|
+
parameters: typing.Optional[JsonNode] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node_public import JsonNodePublic
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioMetricPublic(UniversalBaseModel):
|
|
11
|
+
type: str
|
|
12
|
+
parameters: typing.Optional[JsonNodePublic] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node_write import JsonNodeWrite
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioMetricWrite(UniversalBaseModel):
|
|
11
|
+
type: str
|
|
12
|
+
parameters: typing.Optional[JsonNodeWrite] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node import JsonNode
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioOptimizer(UniversalBaseModel):
|
|
11
|
+
type: str
|
|
12
|
+
parameters: typing.Optional[JsonNode] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node_public import JsonNodePublic
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioOptimizerPublic(UniversalBaseModel):
|
|
11
|
+
type: str
|
|
12
|
+
parameters: typing.Optional[JsonNodePublic] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .json_node_write import JsonNodeWrite
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioOptimizerWrite(UniversalBaseModel):
|
|
11
|
+
type: str
|
|
12
|
+
parameters: typing.Optional[JsonNodeWrite] = None
|
|
13
|
+
|
|
14
|
+
if IS_PYDANTIC_V2:
|
|
15
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
16
|
+
else:
|
|
17
|
+
|
|
18
|
+
class Config:
|
|
19
|
+
frozen = True
|
|
20
|
+
smart_union = True
|
|
21
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .studio_message import StudioMessage
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioPrompt(UniversalBaseModel):
|
|
11
|
+
messages: typing.List[StudioMessage]
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .studio_message_public import StudioMessagePublic
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioPromptPublic(UniversalBaseModel):
|
|
11
|
+
messages: typing.List[StudioMessagePublic]
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .studio_message_write import StudioMessageWrite
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StudioPromptWrite(UniversalBaseModel):
|
|
11
|
+
messages: typing.List[StudioMessageWrite]
|
|
12
|
+
|
|
13
|
+
if IS_PYDANTIC_V2:
|
|
14
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
15
|
+
else:
|
|
16
|
+
|
|
17
|
+
class Config:
|
|
18
|
+
frozen = True
|
|
19
|
+
smart_union = True
|
|
20
|
+
extra = pydantic.Extra.allow
|
opik/rest_api/types/trace.py
CHANGED
|
@@ -35,6 +35,11 @@ class Trace(UniversalBaseModel):
|
|
|
35
35
|
created_by: typing.Optional[str] = None
|
|
36
36
|
last_updated_by: typing.Optional[str] = None
|
|
37
37
|
feedback_scores: typing.Optional[typing.List[FeedbackScore]] = None
|
|
38
|
+
span_feedback_scores: typing.Optional[typing.List[FeedbackScore]] = pydantic.Field(default=None)
|
|
39
|
+
"""
|
|
40
|
+
Aggregated feedback scores from all spans in this trace, averaged by score name
|
|
41
|
+
"""
|
|
42
|
+
|
|
38
43
|
comments: typing.Optional[typing.List[Comment]] = None
|
|
39
44
|
guardrails_validations: typing.Optional[typing.List[GuardrailsValidation]] = None
|
|
40
45
|
total_estimated_cost: typing.Optional[float] = None
|
|
@@ -47,6 +52,7 @@ class Trace(UniversalBaseModel):
|
|
|
47
52
|
thread_id: typing.Optional[str] = None
|
|
48
53
|
visibility_mode: typing.Optional[TraceVisibilityMode] = None
|
|
49
54
|
llm_span_count: typing.Optional[int] = None
|
|
55
|
+
has_tool_spans: typing.Optional[bool] = None
|
|
50
56
|
providers: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
|
|
51
57
|
"""
|
|
52
58
|
List of unique provider names from all spans in this trace, sorted alphabetically
|
|
@@ -30,6 +30,11 @@ class TracePublic(UniversalBaseModel):
|
|
|
30
30
|
created_by: typing.Optional[str] = None
|
|
31
31
|
last_updated_by: typing.Optional[str] = None
|
|
32
32
|
feedback_scores: typing.Optional[typing.List[FeedbackScorePublic]] = None
|
|
33
|
+
span_feedback_scores: typing.Optional[typing.List[FeedbackScorePublic]] = pydantic.Field(default=None)
|
|
34
|
+
"""
|
|
35
|
+
Aggregated feedback scores from all spans in this trace, averaged by score name
|
|
36
|
+
"""
|
|
37
|
+
|
|
33
38
|
comments: typing.Optional[typing.List[CommentPublic]] = None
|
|
34
39
|
guardrails_validations: typing.Optional[typing.List[GuardrailsValidationPublic]] = None
|
|
35
40
|
total_estimated_cost: typing.Optional[float] = None
|
|
@@ -42,6 +47,7 @@ class TracePublic(UniversalBaseModel):
|
|
|
42
47
|
thread_id: typing.Optional[str] = None
|
|
43
48
|
visibility_mode: typing.Optional[TracePublicVisibilityMode] = None
|
|
44
49
|
llm_span_count: typing.Optional[int] = None
|
|
50
|
+
has_tool_spans: typing.Optional[bool] = None
|
|
45
51
|
providers: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
|
|
46
52
|
"""
|
|
47
53
|
List of unique provider names from all spans in this trace, sorted alphabetically
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
from .trace_thread_filter_write_operator import TraceThreadFilterWriteOperator
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TraceThreadFilterWrite(UniversalBaseModel):
|
|
11
|
+
field: typing.Optional[str] = None
|
|
12
|
+
operator: typing.Optional[TraceThreadFilterWriteOperator] = None
|
|
13
|
+
key: typing.Optional[str] = None
|
|
14
|
+
value: typing.Optional[str] = None
|
|
15
|
+
|
|
16
|
+
if IS_PYDANTIC_V2:
|
|
17
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
18
|
+
else:
|
|
19
|
+
|
|
20
|
+
class Config:
|
|
21
|
+
frozen = True
|
|
22
|
+
smart_union = True
|
|
23
|
+
extra = pydantic.Extra.allow
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
TraceThreadFilterWriteOperator = typing.Union[
|
|
6
|
+
typing.Literal[
|
|
7
|
+
"contains",
|
|
8
|
+
"not_contains",
|
|
9
|
+
"starts_with",
|
|
10
|
+
"ends_with",
|
|
11
|
+
"=",
|
|
12
|
+
"!=",
|
|
13
|
+
">",
|
|
14
|
+
">=",
|
|
15
|
+
"<",
|
|
16
|
+
"<=",
|
|
17
|
+
"is_empty",
|
|
18
|
+
"is_not_empty",
|
|
19
|
+
],
|
|
20
|
+
typing.Any,
|
|
21
|
+
]
|
|
@@ -14,6 +14,8 @@ class ValueEntry(UniversalBaseModel):
|
|
|
14
14
|
category_name: typing.Optional[str] = None
|
|
15
15
|
source: typing.Optional[ValueEntrySource] = None
|
|
16
16
|
last_updated_at: typing.Optional[dt.datetime] = None
|
|
17
|
+
span_type: typing.Optional[str] = None
|
|
18
|
+
span_id: typing.Optional[str] = None
|
|
17
19
|
|
|
18
20
|
if IS_PYDANTIC_V2:
|
|
19
21
|
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
@@ -14,6 +14,8 @@ class ValueEntryCompare(UniversalBaseModel):
|
|
|
14
14
|
category_name: typing.Optional[str] = None
|
|
15
15
|
source: typing.Optional[ValueEntryCompareSource] = None
|
|
16
16
|
last_updated_at: typing.Optional[dt.datetime] = None
|
|
17
|
+
span_type: typing.Optional[str] = None
|
|
18
|
+
span_id: typing.Optional[str] = None
|
|
17
19
|
|
|
18
20
|
if IS_PYDANTIC_V2:
|
|
19
21
|
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
@@ -14,6 +14,8 @@ class ValueEntryExperimentItemBulkWriteView(UniversalBaseModel):
|
|
|
14
14
|
category_name: typing.Optional[str] = None
|
|
15
15
|
source: typing.Optional[ValueEntryExperimentItemBulkWriteViewSource] = None
|
|
16
16
|
last_updated_at: typing.Optional[dt.datetime] = None
|
|
17
|
+
span_type: typing.Optional[str] = None
|
|
18
|
+
span_id: typing.Optional[str] = None
|
|
17
19
|
|
|
18
20
|
if IS_PYDANTIC_V2:
|
|
19
21
|
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
@@ -14,6 +14,8 @@ class ValueEntryPublic(UniversalBaseModel):
|
|
|
14
14
|
category_name: typing.Optional[str] = None
|
|
15
15
|
source: typing.Optional[ValueEntryPublicSource] = None
|
|
16
16
|
last_updated_at: typing.Optional[dt.datetime] = None
|
|
17
|
+
span_type: typing.Optional[str] = None
|
|
18
|
+
span_id: typing.Optional[str] = None
|
|
17
19
|
|
|
18
20
|
if IS_PYDANTIC_V2:
|
|
19
21
|
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
opik/synchronization.py
CHANGED
|
@@ -40,15 +40,14 @@ def until(
|
|
|
40
40
|
while True:
|
|
41
41
|
try:
|
|
42
42
|
if function():
|
|
43
|
-
|
|
43
|
+
return True
|
|
44
44
|
except Exception:
|
|
45
45
|
LOGGER.debug(
|
|
46
46
|
f"{function.__name__} raised error in 'until' function.", exc_info=True
|
|
47
47
|
)
|
|
48
48
|
if not allow_errors:
|
|
49
49
|
raise
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return True
|
|
50
|
+
|
|
51
|
+
if (time.time() - start_time) > max_try_seconds:
|
|
52
|
+
return False
|
|
53
|
+
time.sleep(sleep)
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import threading
|
|
4
4
|
from typing import Optional
|
|
5
|
+
from . import config
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class TracingRuntimeConfig:
|
|
@@ -23,9 +24,7 @@ class TracingRuntimeConfig:
|
|
|
23
24
|
return self._tracing_active
|
|
24
25
|
|
|
25
26
|
try:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
enabled = not _config_module.OpikConfig().track_disable
|
|
27
|
+
enabled = not config.OpikConfig().track_disable
|
|
29
28
|
self._tracing_active = enabled
|
|
30
29
|
|
|
31
30
|
except Exception:
|
|
@@ -34,16 +33,16 @@ class TracingRuntimeConfig:
|
|
|
34
33
|
return enabled
|
|
35
34
|
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
runtime_config = TracingRuntimeConfig()
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
def set_tracing_active(active: bool) -> None:
|
|
41
|
-
|
|
40
|
+
runtime_config.set_tracing_active(active)
|
|
42
41
|
|
|
43
42
|
|
|
44
43
|
def is_tracing_active() -> bool:
|
|
45
|
-
return
|
|
44
|
+
return runtime_config.is_tracing_active()
|
|
46
45
|
|
|
47
46
|
|
|
48
47
|
def reset_tracing_to_config_default() -> None:
|
|
49
|
-
|
|
48
|
+
runtime_config.reset_to_config_default()
|