opik 1.9.26__py3-none-any.whl → 1.9.39__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.
Files changed (178) hide show
  1. opik/__init__.py +10 -3
  2. opik/api_objects/dataset/rest_operations.py +2 -0
  3. opik/api_objects/experiment/experiment.py +31 -5
  4. opik/api_objects/experiment/helpers.py +34 -10
  5. opik/api_objects/local_recording.py +8 -3
  6. opik/api_objects/opik_client.py +218 -46
  7. opik/api_objects/opik_query_language.py +9 -0
  8. opik/api_objects/prompt/__init__.py +11 -3
  9. opik/api_objects/prompt/base_prompt.py +69 -0
  10. opik/api_objects/prompt/base_prompt_template.py +29 -0
  11. opik/api_objects/prompt/chat/__init__.py +1 -0
  12. opik/api_objects/prompt/chat/chat_prompt.py +193 -0
  13. opik/api_objects/prompt/chat/chat_prompt_template.py +350 -0
  14. opik/api_objects/prompt/{chat_content_renderer_registry.py → chat/content_renderer_registry.py} +31 -34
  15. opik/api_objects/prompt/client.py +101 -30
  16. opik/api_objects/prompt/text/__init__.py +1 -0
  17. opik/api_objects/prompt/{prompt.py → text/prompt.py} +55 -32
  18. opik/api_objects/prompt/{prompt_template.py → text/prompt_template.py} +8 -5
  19. opik/cli/export.py +6 -2
  20. opik/config.py +0 -5
  21. opik/decorator/base_track_decorator.py +37 -40
  22. opik/evaluation/__init__.py +13 -2
  23. opik/evaluation/engine/engine.py +195 -223
  24. opik/evaluation/engine/helpers.py +8 -7
  25. opik/evaluation/engine/metrics_evaluator.py +237 -0
  26. opik/evaluation/evaluation_result.py +35 -1
  27. opik/evaluation/evaluator.py +309 -23
  28. opik/evaluation/models/litellm/util.py +78 -6
  29. opik/evaluation/report.py +14 -2
  30. opik/evaluation/rest_operations.py +6 -9
  31. opik/evaluation/test_case.py +2 -2
  32. opik/evaluation/types.py +9 -1
  33. opik/exceptions.py +17 -0
  34. opik/id_helpers.py +18 -0
  35. opik/integrations/adk/helpers.py +16 -7
  36. opik/integrations/adk/legacy_opik_tracer.py +7 -4
  37. opik/integrations/adk/opik_tracer.py +3 -1
  38. opik/integrations/adk/patchers/adk_otel_tracer/opik_adk_otel_tracer.py +7 -3
  39. opik/integrations/dspy/callback.py +1 -4
  40. opik/integrations/haystack/opik_connector.py +2 -2
  41. opik/integrations/haystack/opik_tracer.py +2 -4
  42. opik/integrations/langchain/opik_tracer.py +1 -4
  43. opik/integrations/llama_index/callback.py +2 -4
  44. opik/integrations/openai/agents/opik_tracing_processor.py +1 -2
  45. opik/integrations/openai/opik_tracker.py +1 -1
  46. opik/opik_context.py +7 -7
  47. opik/rest_api/__init__.py +123 -11
  48. opik/rest_api/dashboards/client.py +65 -2
  49. opik/rest_api/dashboards/raw_client.py +82 -0
  50. opik/rest_api/datasets/client.py +441 -2
  51. opik/rest_api/datasets/raw_client.py +1225 -505
  52. opik/rest_api/experiments/client.py +30 -2
  53. opik/rest_api/experiments/raw_client.py +26 -0
  54. opik/rest_api/optimizations/client.py +302 -0
  55. opik/rest_api/optimizations/raw_client.py +463 -0
  56. opik/rest_api/optimizations/types/optimization_update_status.py +3 -1
  57. opik/rest_api/prompts/__init__.py +2 -2
  58. opik/rest_api/prompts/client.py +34 -4
  59. opik/rest_api/prompts/raw_client.py +32 -2
  60. opik/rest_api/prompts/types/__init__.py +3 -1
  61. opik/rest_api/prompts/types/create_prompt_version_detail_template_structure.py +5 -0
  62. opik/rest_api/prompts/types/prompt_write_template_structure.py +5 -0
  63. opik/rest_api/traces/client.py +6 -6
  64. opik/rest_api/traces/raw_client.py +4 -4
  65. opik/rest_api/types/__init__.py +121 -11
  66. opik/rest_api/types/aggregation_data.py +1 -0
  67. opik/rest_api/types/automation_rule_evaluator.py +23 -1
  68. opik/rest_api/types/automation_rule_evaluator_llm_as_judge.py +2 -0
  69. opik/rest_api/types/automation_rule_evaluator_llm_as_judge_public.py +2 -0
  70. opik/rest_api/types/automation_rule_evaluator_llm_as_judge_write.py +2 -0
  71. opik/rest_api/types/{automation_rule_evaluator_object_public.py → automation_rule_evaluator_object_object_public.py} +32 -10
  72. opik/rest_api/types/automation_rule_evaluator_page_public.py +2 -2
  73. opik/rest_api/types/automation_rule_evaluator_public.py +23 -1
  74. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge.py +22 -0
  75. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_public.py +22 -0
  76. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_write.py +22 -0
  77. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge.py +2 -0
  78. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_public.py +2 -0
  79. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_write.py +2 -0
  80. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python.py +2 -0
  81. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_public.py +2 -0
  82. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_write.py +2 -0
  83. opik/rest_api/types/automation_rule_evaluator_update.py +23 -1
  84. opik/rest_api/types/automation_rule_evaluator_update_llm_as_judge.py +2 -0
  85. opik/rest_api/types/automation_rule_evaluator_update_span_llm_as_judge.py +22 -0
  86. opik/rest_api/types/automation_rule_evaluator_update_trace_thread_llm_as_judge.py +2 -0
  87. opik/rest_api/types/automation_rule_evaluator_update_trace_thread_user_defined_metric_python.py +2 -0
  88. opik/rest_api/types/automation_rule_evaluator_update_user_defined_metric_python.py +2 -0
  89. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python.py +2 -0
  90. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_public.py +2 -0
  91. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_write.py +2 -0
  92. opik/rest_api/types/automation_rule_evaluator_write.py +23 -1
  93. opik/rest_api/types/dashboard_page_public.py +1 -0
  94. opik/rest_api/types/dataset.py +2 -0
  95. opik/rest_api/types/dataset_item.py +1 -0
  96. opik/rest_api/types/dataset_item_compare.py +1 -0
  97. opik/rest_api/types/dataset_item_page_compare.py +1 -0
  98. opik/rest_api/types/dataset_item_page_public.py +1 -0
  99. opik/rest_api/types/dataset_item_public.py +1 -0
  100. opik/rest_api/types/dataset_public.py +2 -0
  101. opik/rest_api/types/dataset_public_status.py +5 -0
  102. opik/rest_api/types/dataset_status.py +5 -0
  103. opik/rest_api/types/dataset_version_diff.py +22 -0
  104. opik/rest_api/types/dataset_version_diff_stats.py +24 -0
  105. opik/rest_api/types/dataset_version_page_public.py +23 -0
  106. opik/rest_api/types/dataset_version_public.py +49 -0
  107. opik/rest_api/types/experiment.py +2 -0
  108. opik/rest_api/types/experiment_public.py +2 -0
  109. opik/rest_api/types/experiment_score.py +20 -0
  110. opik/rest_api/types/experiment_score_public.py +20 -0
  111. opik/rest_api/types/experiment_score_write.py +20 -0
  112. opik/rest_api/types/feedback_score_public.py +4 -0
  113. opik/rest_api/types/optimization.py +2 -0
  114. opik/rest_api/types/optimization_public.py +2 -0
  115. opik/rest_api/types/optimization_public_status.py +3 -1
  116. opik/rest_api/types/optimization_status.py +3 -1
  117. opik/rest_api/types/optimization_studio_config.py +27 -0
  118. opik/rest_api/types/optimization_studio_config_public.py +27 -0
  119. opik/rest_api/types/optimization_studio_config_write.py +27 -0
  120. opik/rest_api/types/optimization_studio_log.py +22 -0
  121. opik/rest_api/types/optimization_write.py +2 -0
  122. opik/rest_api/types/optimization_write_status.py +3 -1
  123. opik/rest_api/types/prompt.py +6 -0
  124. opik/rest_api/types/prompt_detail.py +6 -0
  125. opik/rest_api/types/prompt_detail_template_structure.py +5 -0
  126. opik/rest_api/types/prompt_public.py +6 -0
  127. opik/rest_api/types/prompt_public_template_structure.py +5 -0
  128. opik/rest_api/types/prompt_template_structure.py +5 -0
  129. opik/rest_api/types/prompt_version.py +2 -0
  130. opik/rest_api/types/prompt_version_detail.py +2 -0
  131. opik/rest_api/types/prompt_version_detail_template_structure.py +5 -0
  132. opik/rest_api/types/prompt_version_public.py +2 -0
  133. opik/rest_api/types/prompt_version_public_template_structure.py +5 -0
  134. opik/rest_api/types/prompt_version_template_structure.py +5 -0
  135. opik/rest_api/types/score_name.py +1 -0
  136. opik/rest_api/types/service_toggles_config.py +5 -0
  137. opik/rest_api/types/span_filter.py +23 -0
  138. opik/rest_api/types/span_filter_operator.py +21 -0
  139. opik/rest_api/types/span_filter_write.py +23 -0
  140. opik/rest_api/types/span_filter_write_operator.py +21 -0
  141. opik/rest_api/types/span_llm_as_judge_code.py +27 -0
  142. opik/rest_api/types/span_llm_as_judge_code_public.py +27 -0
  143. opik/rest_api/types/span_llm_as_judge_code_write.py +27 -0
  144. opik/rest_api/types/studio_evaluation.py +20 -0
  145. opik/rest_api/types/studio_evaluation_public.py +20 -0
  146. opik/rest_api/types/studio_evaluation_write.py +20 -0
  147. opik/rest_api/types/studio_llm_model.py +21 -0
  148. opik/rest_api/types/studio_llm_model_public.py +21 -0
  149. opik/rest_api/types/studio_llm_model_write.py +21 -0
  150. opik/rest_api/types/studio_message.py +20 -0
  151. opik/rest_api/types/studio_message_public.py +20 -0
  152. opik/rest_api/types/studio_message_write.py +20 -0
  153. opik/rest_api/types/studio_metric.py +21 -0
  154. opik/rest_api/types/studio_metric_public.py +21 -0
  155. opik/rest_api/types/studio_metric_write.py +21 -0
  156. opik/rest_api/types/studio_optimizer.py +21 -0
  157. opik/rest_api/types/studio_optimizer_public.py +21 -0
  158. opik/rest_api/types/studio_optimizer_write.py +21 -0
  159. opik/rest_api/types/studio_prompt.py +20 -0
  160. opik/rest_api/types/studio_prompt_public.py +20 -0
  161. opik/rest_api/types/studio_prompt_write.py +20 -0
  162. opik/rest_api/types/trace.py +6 -0
  163. opik/rest_api/types/trace_public.py +6 -0
  164. opik/rest_api/types/trace_thread_filter_write.py +23 -0
  165. opik/rest_api/types/trace_thread_filter_write_operator.py +21 -0
  166. opik/rest_api/types/value_entry.py +2 -0
  167. opik/rest_api/types/value_entry_compare.py +2 -0
  168. opik/rest_api/types/value_entry_experiment_item_bulk_write_view.py +2 -0
  169. opik/rest_api/types/value_entry_public.py +2 -0
  170. opik/synchronization.py +5 -6
  171. opik/{decorator/tracing_runtime_config.py → tracing_runtime_config.py} +6 -7
  172. {opik-1.9.26.dist-info → opik-1.9.39.dist-info}/METADATA +2 -1
  173. {opik-1.9.26.dist-info → opik-1.9.39.dist-info}/RECORD +177 -119
  174. opik/api_objects/prompt/chat_prompt_template.py +0 -200
  175. {opik-1.9.26.dist-info → opik-1.9.39.dist-info}/WHEEL +0 -0
  176. {opik-1.9.26.dist-info → opik-1.9.39.dist-info}/entry_points.txt +0 -0
  177. {opik-1.9.26.dist-info → opik-1.9.39.dist-info}/licenses/LICENSE +0 -0
  178. {opik-1.9.26.dist-info → opik-1.9.39.dist-info}/top_level.txt +0 -0
@@ -13,6 +13,8 @@ from ..types.experiment_item_bulk_record_experiment_item_bulk_write_view import
13
13
  from ..types.experiment_item_public import ExperimentItemPublic
14
14
  from ..types.experiment_page_public import ExperimentPagePublic
15
15
  from ..types.experiment_public import ExperimentPublic
16
+ from ..types.experiment_score import ExperimentScore
17
+ from ..types.experiment_score_write import ExperimentScoreWrite
16
18
  from ..types.json_list_string_write import JsonListStringWrite
17
19
  from ..types.json_node import JsonNode
18
20
  from ..types.prompt_version_link_write import PromptVersionLinkWrite
@@ -120,6 +122,7 @@ class ExperimentsClient:
120
122
  type: typing.Optional[ExperimentWriteType] = OMIT,
121
123
  optimization_id: typing.Optional[str] = OMIT,
122
124
  status: typing.Optional[ExperimentWriteStatus] = OMIT,
125
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScoreWrite]] = OMIT,
123
126
  prompt_version: typing.Optional[PromptVersionLinkWrite] = OMIT,
124
127
  prompt_versions: typing.Optional[typing.Sequence[PromptVersionLinkWrite]] = OMIT,
125
128
  request_options: typing.Optional[RequestOptions] = None,
@@ -143,6 +146,8 @@ class ExperimentsClient:
143
146
 
144
147
  status : typing.Optional[ExperimentWriteStatus]
145
148
 
149
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScoreWrite]]
150
+
146
151
  prompt_version : typing.Optional[PromptVersionLinkWrite]
147
152
 
148
153
  prompt_versions : typing.Optional[typing.Sequence[PromptVersionLinkWrite]]
@@ -168,6 +173,7 @@ class ExperimentsClient:
168
173
  type=type,
169
174
  optimization_id=optimization_id,
170
175
  status=status,
176
+ experiment_scores=experiment_scores,
171
177
  prompt_version=prompt_version,
172
178
  prompt_versions=prompt_versions,
173
179
  request_options=request_options,
@@ -476,6 +482,7 @@ class ExperimentsClient:
476
482
  metadata: typing.Optional[JsonNode] = OMIT,
477
483
  type: typing.Optional[ExperimentUpdateType] = OMIT,
478
484
  status: typing.Optional[ExperimentUpdateStatus] = OMIT,
485
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScore]] = OMIT,
479
486
  request_options: typing.Optional[RequestOptions] = None,
480
487
  ) -> None:
481
488
  """
@@ -494,6 +501,8 @@ class ExperimentsClient:
494
501
  status : typing.Optional[ExperimentUpdateStatus]
495
502
  The status of the experiment
496
503
 
504
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScore]]
505
+
497
506
  request_options : typing.Optional[RequestOptions]
498
507
  Request-specific configuration.
499
508
 
@@ -508,7 +517,13 @@ class ExperimentsClient:
508
517
  client.experiments.update_experiment(id='id', )
509
518
  """
510
519
  _response = self._raw_client.update_experiment(
511
- id, name=name, metadata=metadata, type=type, status=status, request_options=request_options
520
+ id,
521
+ name=name,
522
+ metadata=metadata,
523
+ type=type,
524
+ status=status,
525
+ experiment_scores=experiment_scores,
526
+ request_options=request_options,
512
527
  )
513
528
  return _response.data
514
529
 
@@ -709,6 +724,7 @@ class AsyncExperimentsClient:
709
724
  type: typing.Optional[ExperimentWriteType] = OMIT,
710
725
  optimization_id: typing.Optional[str] = OMIT,
711
726
  status: typing.Optional[ExperimentWriteStatus] = OMIT,
727
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScoreWrite]] = OMIT,
712
728
  prompt_version: typing.Optional[PromptVersionLinkWrite] = OMIT,
713
729
  prompt_versions: typing.Optional[typing.Sequence[PromptVersionLinkWrite]] = OMIT,
714
730
  request_options: typing.Optional[RequestOptions] = None,
@@ -732,6 +748,8 @@ class AsyncExperimentsClient:
732
748
 
733
749
  status : typing.Optional[ExperimentWriteStatus]
734
750
 
751
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScoreWrite]]
752
+
735
753
  prompt_version : typing.Optional[PromptVersionLinkWrite]
736
754
 
737
755
  prompt_versions : typing.Optional[typing.Sequence[PromptVersionLinkWrite]]
@@ -760,6 +778,7 @@ class AsyncExperimentsClient:
760
778
  type=type,
761
779
  optimization_id=optimization_id,
762
780
  status=status,
781
+ experiment_scores=experiment_scores,
763
782
  prompt_version=prompt_version,
764
783
  prompt_versions=prompt_versions,
765
784
  request_options=request_options,
@@ -1095,6 +1114,7 @@ class AsyncExperimentsClient:
1095
1114
  metadata: typing.Optional[JsonNode] = OMIT,
1096
1115
  type: typing.Optional[ExperimentUpdateType] = OMIT,
1097
1116
  status: typing.Optional[ExperimentUpdateStatus] = OMIT,
1117
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScore]] = OMIT,
1098
1118
  request_options: typing.Optional[RequestOptions] = None,
1099
1119
  ) -> None:
1100
1120
  """
@@ -1113,6 +1133,8 @@ class AsyncExperimentsClient:
1113
1133
  status : typing.Optional[ExperimentUpdateStatus]
1114
1134
  The status of the experiment
1115
1135
 
1136
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScore]]
1137
+
1116
1138
  request_options : typing.Optional[RequestOptions]
1117
1139
  Request-specific configuration.
1118
1140
 
@@ -1130,7 +1152,13 @@ class AsyncExperimentsClient:
1130
1152
  asyncio.run(main())
1131
1153
  """
1132
1154
  _response = await self._raw_client.update_experiment(
1133
- id, name=name, metadata=metadata, type=type, status=status, request_options=request_options
1155
+ id,
1156
+ name=name,
1157
+ metadata=metadata,
1158
+ type=type,
1159
+ status=status,
1160
+ experiment_scores=experiment_scores,
1161
+ request_options=request_options,
1134
1162
  )
1135
1163
  return _response.data
1136
1164
 
@@ -24,6 +24,8 @@ from ..types.experiment_item_bulk_record_experiment_item_bulk_write_view import
24
24
  from ..types.experiment_item_public import ExperimentItemPublic
25
25
  from ..types.experiment_page_public import ExperimentPagePublic
26
26
  from ..types.experiment_public import ExperimentPublic
27
+ from ..types.experiment_score import ExperimentScore
28
+ from ..types.experiment_score_write import ExperimentScoreWrite
27
29
  from ..types.json_list_string_write import JsonListStringWrite
28
30
  from ..types.json_node import JsonNode
29
31
  from ..types.prompt_version_link_write import PromptVersionLinkWrite
@@ -141,6 +143,7 @@ class RawExperimentsClient:
141
143
  type: typing.Optional[ExperimentWriteType] = OMIT,
142
144
  optimization_id: typing.Optional[str] = OMIT,
143
145
  status: typing.Optional[ExperimentWriteStatus] = OMIT,
146
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScoreWrite]] = OMIT,
144
147
  prompt_version: typing.Optional[PromptVersionLinkWrite] = OMIT,
145
148
  prompt_versions: typing.Optional[typing.Sequence[PromptVersionLinkWrite]] = OMIT,
146
149
  request_options: typing.Optional[RequestOptions] = None,
@@ -164,6 +167,8 @@ class RawExperimentsClient:
164
167
 
165
168
  status : typing.Optional[ExperimentWriteStatus]
166
169
 
170
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScoreWrite]]
171
+
167
172
  prompt_version : typing.Optional[PromptVersionLinkWrite]
168
173
 
169
174
  prompt_versions : typing.Optional[typing.Sequence[PromptVersionLinkWrite]]
@@ -188,6 +193,9 @@ class RawExperimentsClient:
188
193
  "type": type,
189
194
  "optimization_id": optimization_id,
190
195
  "status": status,
196
+ "experiment_scores": convert_and_respect_annotation_metadata(
197
+ object_=experiment_scores, annotation=typing.Sequence[ExperimentScoreWrite], direction="write"
198
+ ),
191
199
  "prompt_version": convert_and_respect_annotation_metadata(
192
200
  object_=prompt_version, annotation=PromptVersionLinkWrite, direction="write"
193
201
  ),
@@ -695,6 +703,7 @@ class RawExperimentsClient:
695
703
  metadata: typing.Optional[JsonNode] = OMIT,
696
704
  type: typing.Optional[ExperimentUpdateType] = OMIT,
697
705
  status: typing.Optional[ExperimentUpdateStatus] = OMIT,
706
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScore]] = OMIT,
698
707
  request_options: typing.Optional[RequestOptions] = None,
699
708
  ) -> HttpResponse[None]:
700
709
  """
@@ -713,6 +722,8 @@ class RawExperimentsClient:
713
722
  status : typing.Optional[ExperimentUpdateStatus]
714
723
  The status of the experiment
715
724
 
725
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScore]]
726
+
716
727
  request_options : typing.Optional[RequestOptions]
717
728
  Request-specific configuration.
718
729
 
@@ -728,6 +739,9 @@ class RawExperimentsClient:
728
739
  "metadata": metadata,
729
740
  "type": type,
730
741
  "status": status,
742
+ "experiment_scores": convert_and_respect_annotation_metadata(
743
+ object_=experiment_scores, annotation=typing.Sequence[ExperimentScore], direction="write"
744
+ ),
731
745
  },
732
746
  headers={
733
747
  "content-type": "application/json",
@@ -1045,6 +1059,7 @@ class AsyncRawExperimentsClient:
1045
1059
  type: typing.Optional[ExperimentWriteType] = OMIT,
1046
1060
  optimization_id: typing.Optional[str] = OMIT,
1047
1061
  status: typing.Optional[ExperimentWriteStatus] = OMIT,
1062
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScoreWrite]] = OMIT,
1048
1063
  prompt_version: typing.Optional[PromptVersionLinkWrite] = OMIT,
1049
1064
  prompt_versions: typing.Optional[typing.Sequence[PromptVersionLinkWrite]] = OMIT,
1050
1065
  request_options: typing.Optional[RequestOptions] = None,
@@ -1068,6 +1083,8 @@ class AsyncRawExperimentsClient:
1068
1083
 
1069
1084
  status : typing.Optional[ExperimentWriteStatus]
1070
1085
 
1086
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScoreWrite]]
1087
+
1071
1088
  prompt_version : typing.Optional[PromptVersionLinkWrite]
1072
1089
 
1073
1090
  prompt_versions : typing.Optional[typing.Sequence[PromptVersionLinkWrite]]
@@ -1092,6 +1109,9 @@ class AsyncRawExperimentsClient:
1092
1109
  "type": type,
1093
1110
  "optimization_id": optimization_id,
1094
1111
  "status": status,
1112
+ "experiment_scores": convert_and_respect_annotation_metadata(
1113
+ object_=experiment_scores, annotation=typing.Sequence[ExperimentScoreWrite], direction="write"
1114
+ ),
1095
1115
  "prompt_version": convert_and_respect_annotation_metadata(
1096
1116
  object_=prompt_version, annotation=PromptVersionLinkWrite, direction="write"
1097
1117
  ),
@@ -1599,6 +1619,7 @@ class AsyncRawExperimentsClient:
1599
1619
  metadata: typing.Optional[JsonNode] = OMIT,
1600
1620
  type: typing.Optional[ExperimentUpdateType] = OMIT,
1601
1621
  status: typing.Optional[ExperimentUpdateStatus] = OMIT,
1622
+ experiment_scores: typing.Optional[typing.Sequence[ExperimentScore]] = OMIT,
1602
1623
  request_options: typing.Optional[RequestOptions] = None,
1603
1624
  ) -> AsyncHttpResponse[None]:
1604
1625
  """
@@ -1617,6 +1638,8 @@ class AsyncRawExperimentsClient:
1617
1638
  status : typing.Optional[ExperimentUpdateStatus]
1618
1639
  The status of the experiment
1619
1640
 
1641
+ experiment_scores : typing.Optional[typing.Sequence[ExperimentScore]]
1642
+
1620
1643
  request_options : typing.Optional[RequestOptions]
1621
1644
  Request-specific configuration.
1622
1645
 
@@ -1632,6 +1655,9 @@ class AsyncRawExperimentsClient:
1632
1655
  "metadata": metadata,
1633
1656
  "type": type,
1634
1657
  "status": status,
1658
+ "experiment_scores": convert_and_respect_annotation_metadata(
1659
+ object_=experiment_scores, annotation=typing.Sequence[ExperimentScore], direction="write"
1660
+ ),
1635
1661
  },
1636
1662
  headers={
1637
1663
  "content-type": "application/json",
@@ -8,6 +8,8 @@ from ..core.request_options import RequestOptions
8
8
  from ..types.json_list_string_write import JsonListStringWrite
9
9
  from ..types.optimization_page_public import OptimizationPagePublic
10
10
  from ..types.optimization_public import OptimizationPublic
11
+ from ..types.optimization_studio_config_write import OptimizationStudioConfigWrite
12
+ from ..types.optimization_studio_log import OptimizationStudioLog
11
13
  from ..types.optimization_write_status import OptimizationWriteStatus
12
14
  from .raw_client import AsyncRawOptimizationsClient, RawOptimizationsClient
13
15
  from .types.optimization_update_status import OptimizationUpdateStatus
@@ -31,6 +33,30 @@ class OptimizationsClient:
31
33
  """
32
34
  return self._raw_client
33
35
 
36
+ def cancel_studio_optimizations(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
37
+ """
38
+ Cancel Studio optimizations by id
39
+
40
+ Parameters
41
+ ----------
42
+ id : str
43
+
44
+ request_options : typing.Optional[RequestOptions]
45
+ Request-specific configuration.
46
+
47
+ Returns
48
+ -------
49
+ None
50
+
51
+ Examples
52
+ --------
53
+ from Opik import OpikApi
54
+ client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
55
+ client.optimizations.cancel_studio_optimizations(id='id', )
56
+ """
57
+ _response = self._raw_client.cancel_studio_optimizations(id, request_options=request_options)
58
+ return _response.data
59
+
34
60
  def find_optimizations(
35
61
  self,
36
62
  *,
@@ -39,6 +65,7 @@ class OptimizationsClient:
39
65
  dataset_id: typing.Optional[str] = None,
40
66
  name: typing.Optional[str] = None,
41
67
  dataset_deleted: typing.Optional[bool] = None,
68
+ filters: typing.Optional[str] = None,
42
69
  request_options: typing.Optional[RequestOptions] = None,
43
70
  ) -> OptimizationPagePublic:
44
71
  """
@@ -56,6 +83,8 @@ class OptimizationsClient:
56
83
 
57
84
  dataset_deleted : typing.Optional[bool]
58
85
 
86
+ filters : typing.Optional[str]
87
+
59
88
  request_options : typing.Optional[RequestOptions]
60
89
  Request-specific configuration.
61
90
 
@@ -76,6 +105,7 @@ class OptimizationsClient:
76
105
  dataset_id=dataset_id,
77
106
  name=name,
78
107
  dataset_deleted=dataset_deleted,
108
+ filters=filters,
79
109
  request_options=request_options,
80
110
  )
81
111
  return _response.data
@@ -89,6 +119,7 @@ class OptimizationsClient:
89
119
  id: typing.Optional[str] = OMIT,
90
120
  name: typing.Optional[str] = OMIT,
91
121
  metadata: typing.Optional[JsonListStringWrite] = OMIT,
122
+ studio_config: typing.Optional[OptimizationStudioConfigWrite] = OMIT,
92
123
  last_updated_at: typing.Optional[dt.datetime] = OMIT,
93
124
  request_options: typing.Optional[RequestOptions] = None,
94
125
  ) -> None:
@@ -109,6 +140,8 @@ class OptimizationsClient:
109
140
 
110
141
  metadata : typing.Optional[JsonListStringWrite]
111
142
 
143
+ studio_config : typing.Optional[OptimizationStudioConfigWrite]
144
+
112
145
  last_updated_at : typing.Optional[dt.datetime]
113
146
 
114
147
  request_options : typing.Optional[RequestOptions]
@@ -131,6 +164,7 @@ class OptimizationsClient:
131
164
  id=id,
132
165
  name=name,
133
166
  metadata=metadata,
167
+ studio_config=studio_config,
134
168
  last_updated_at=last_updated_at,
135
169
  request_options=request_options,
136
170
  )
@@ -145,6 +179,7 @@ class OptimizationsClient:
145
179
  id: typing.Optional[str] = OMIT,
146
180
  name: typing.Optional[str] = OMIT,
147
181
  metadata: typing.Optional[JsonListStringWrite] = OMIT,
182
+ studio_config: typing.Optional[OptimizationStudioConfigWrite] = OMIT,
148
183
  last_updated_at: typing.Optional[dt.datetime] = OMIT,
149
184
  request_options: typing.Optional[RequestOptions] = None,
150
185
  ) -> None:
@@ -165,6 +200,8 @@ class OptimizationsClient:
165
200
 
166
201
  metadata : typing.Optional[JsonListStringWrite]
167
202
 
203
+ studio_config : typing.Optional[OptimizationStudioConfigWrite]
204
+
168
205
  last_updated_at : typing.Optional[dt.datetime]
169
206
 
170
207
  request_options : typing.Optional[RequestOptions]
@@ -187,6 +224,7 @@ class OptimizationsClient:
187
224
  id=id,
188
225
  name=name,
189
226
  metadata=metadata,
227
+ studio_config=studio_config,
190
228
  last_updated_at=last_updated_at,
191
229
  request_options=request_options,
192
230
  )
@@ -218,6 +256,59 @@ class OptimizationsClient:
218
256
  _response = self._raw_client.delete_optimizations_by_id(ids=ids, request_options=request_options)
219
257
  return _response.data
220
258
 
259
+ def find_studio_optimizations(
260
+ self,
261
+ *,
262
+ page: typing.Optional[int] = None,
263
+ size: typing.Optional[int] = None,
264
+ dataset_id: typing.Optional[str] = None,
265
+ name: typing.Optional[str] = None,
266
+ dataset_deleted: typing.Optional[bool] = None,
267
+ filters: typing.Optional[str] = None,
268
+ request_options: typing.Optional[RequestOptions] = None,
269
+ ) -> OptimizationPagePublic:
270
+ """
271
+ Find Studio optimizations
272
+
273
+ Parameters
274
+ ----------
275
+ page : typing.Optional[int]
276
+
277
+ size : typing.Optional[int]
278
+
279
+ dataset_id : typing.Optional[str]
280
+
281
+ name : typing.Optional[str]
282
+
283
+ dataset_deleted : typing.Optional[bool]
284
+
285
+ filters : typing.Optional[str]
286
+
287
+ request_options : typing.Optional[RequestOptions]
288
+ Request-specific configuration.
289
+
290
+ Returns
291
+ -------
292
+ OptimizationPagePublic
293
+ Studio optimizations resource
294
+
295
+ Examples
296
+ --------
297
+ from Opik import OpikApi
298
+ client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
299
+ client.optimizations.find_studio_optimizations()
300
+ """
301
+ _response = self._raw_client.find_studio_optimizations(
302
+ page=page,
303
+ size=size,
304
+ dataset_id=dataset_id,
305
+ name=name,
306
+ dataset_deleted=dataset_deleted,
307
+ filters=filters,
308
+ request_options=request_options,
309
+ )
310
+ return _response.data
311
+
221
312
  def get_optimization_by_id(
222
313
  self, id: str, *, request_options: typing.Optional[RequestOptions] = None
223
314
  ) -> OptimizationPublic:
@@ -282,6 +373,60 @@ class OptimizationsClient:
282
373
  )
283
374
  return _response.data
284
375
 
376
+ def get_studio_optimization_by_id(
377
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
378
+ ) -> OptimizationPublic:
379
+ """
380
+ Get Studio optimization with config included
381
+
382
+ Parameters
383
+ ----------
384
+ id : str
385
+
386
+ request_options : typing.Optional[RequestOptions]
387
+ Request-specific configuration.
388
+
389
+ Returns
390
+ -------
391
+ OptimizationPublic
392
+ Studio optimization resource
393
+
394
+ Examples
395
+ --------
396
+ from Opik import OpikApi
397
+ client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
398
+ client.optimizations.get_studio_optimization_by_id(id='id', )
399
+ """
400
+ _response = self._raw_client.get_studio_optimization_by_id(id, request_options=request_options)
401
+ return _response.data
402
+
403
+ def get_studio_optimization_logs(
404
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
405
+ ) -> OptimizationStudioLog:
406
+ """
407
+ Get presigned S3 URL for downloading optimization logs
408
+
409
+ Parameters
410
+ ----------
411
+ id : str
412
+
413
+ request_options : typing.Optional[RequestOptions]
414
+ Request-specific configuration.
415
+
416
+ Returns
417
+ -------
418
+ OptimizationStudioLog
419
+ Logs response
420
+
421
+ Examples
422
+ --------
423
+ from Opik import OpikApi
424
+ client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
425
+ client.optimizations.get_studio_optimization_logs(id='id', )
426
+ """
427
+ _response = self._raw_client.get_studio_optimization_logs(id, request_options=request_options)
428
+ return _response.data
429
+
285
430
 
286
431
  class AsyncOptimizationsClient:
287
432
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -298,6 +443,35 @@ class AsyncOptimizationsClient:
298
443
  """
299
444
  return self._raw_client
300
445
 
446
+ async def cancel_studio_optimizations(
447
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
448
+ ) -> None:
449
+ """
450
+ Cancel Studio optimizations by id
451
+
452
+ Parameters
453
+ ----------
454
+ id : str
455
+
456
+ request_options : typing.Optional[RequestOptions]
457
+ Request-specific configuration.
458
+
459
+ Returns
460
+ -------
461
+ None
462
+
463
+ Examples
464
+ --------
465
+ from Opik import AsyncOpikApi
466
+ import asyncio
467
+ client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
468
+ async def main() -> None:
469
+ await client.optimizations.cancel_studio_optimizations(id='id', )
470
+ asyncio.run(main())
471
+ """
472
+ _response = await self._raw_client.cancel_studio_optimizations(id, request_options=request_options)
473
+ return _response.data
474
+
301
475
  async def find_optimizations(
302
476
  self,
303
477
  *,
@@ -306,6 +480,7 @@ class AsyncOptimizationsClient:
306
480
  dataset_id: typing.Optional[str] = None,
307
481
  name: typing.Optional[str] = None,
308
482
  dataset_deleted: typing.Optional[bool] = None,
483
+ filters: typing.Optional[str] = None,
309
484
  request_options: typing.Optional[RequestOptions] = None,
310
485
  ) -> OptimizationPagePublic:
311
486
  """
@@ -323,6 +498,8 @@ class AsyncOptimizationsClient:
323
498
 
324
499
  dataset_deleted : typing.Optional[bool]
325
500
 
501
+ filters : typing.Optional[str]
502
+
326
503
  request_options : typing.Optional[RequestOptions]
327
504
  Request-specific configuration.
328
505
 
@@ -346,6 +523,7 @@ class AsyncOptimizationsClient:
346
523
  dataset_id=dataset_id,
347
524
  name=name,
348
525
  dataset_deleted=dataset_deleted,
526
+ filters=filters,
349
527
  request_options=request_options,
350
528
  )
351
529
  return _response.data
@@ -359,6 +537,7 @@ class AsyncOptimizationsClient:
359
537
  id: typing.Optional[str] = OMIT,
360
538
  name: typing.Optional[str] = OMIT,
361
539
  metadata: typing.Optional[JsonListStringWrite] = OMIT,
540
+ studio_config: typing.Optional[OptimizationStudioConfigWrite] = OMIT,
362
541
  last_updated_at: typing.Optional[dt.datetime] = OMIT,
363
542
  request_options: typing.Optional[RequestOptions] = None,
364
543
  ) -> None:
@@ -379,6 +558,8 @@ class AsyncOptimizationsClient:
379
558
 
380
559
  metadata : typing.Optional[JsonListStringWrite]
381
560
 
561
+ studio_config : typing.Optional[OptimizationStudioConfigWrite]
562
+
382
563
  last_updated_at : typing.Optional[dt.datetime]
383
564
 
384
565
  request_options : typing.Optional[RequestOptions]
@@ -404,6 +585,7 @@ class AsyncOptimizationsClient:
404
585
  id=id,
405
586
  name=name,
406
587
  metadata=metadata,
588
+ studio_config=studio_config,
407
589
  last_updated_at=last_updated_at,
408
590
  request_options=request_options,
409
591
  )
@@ -418,6 +600,7 @@ class AsyncOptimizationsClient:
418
600
  id: typing.Optional[str] = OMIT,
419
601
  name: typing.Optional[str] = OMIT,
420
602
  metadata: typing.Optional[JsonListStringWrite] = OMIT,
603
+ studio_config: typing.Optional[OptimizationStudioConfigWrite] = OMIT,
421
604
  last_updated_at: typing.Optional[dt.datetime] = OMIT,
422
605
  request_options: typing.Optional[RequestOptions] = None,
423
606
  ) -> None:
@@ -438,6 +621,8 @@ class AsyncOptimizationsClient:
438
621
 
439
622
  metadata : typing.Optional[JsonListStringWrite]
440
623
 
624
+ studio_config : typing.Optional[OptimizationStudioConfigWrite]
625
+
441
626
  last_updated_at : typing.Optional[dt.datetime]
442
627
 
443
628
  request_options : typing.Optional[RequestOptions]
@@ -463,6 +648,7 @@ class AsyncOptimizationsClient:
463
648
  id=id,
464
649
  name=name,
465
650
  metadata=metadata,
651
+ studio_config=studio_config,
466
652
  last_updated_at=last_updated_at,
467
653
  request_options=request_options,
468
654
  )
@@ -497,6 +683,62 @@ class AsyncOptimizationsClient:
497
683
  _response = await self._raw_client.delete_optimizations_by_id(ids=ids, request_options=request_options)
498
684
  return _response.data
499
685
 
686
+ async def find_studio_optimizations(
687
+ self,
688
+ *,
689
+ page: typing.Optional[int] = None,
690
+ size: typing.Optional[int] = None,
691
+ dataset_id: typing.Optional[str] = None,
692
+ name: typing.Optional[str] = None,
693
+ dataset_deleted: typing.Optional[bool] = None,
694
+ filters: typing.Optional[str] = None,
695
+ request_options: typing.Optional[RequestOptions] = None,
696
+ ) -> OptimizationPagePublic:
697
+ """
698
+ Find Studio optimizations
699
+
700
+ Parameters
701
+ ----------
702
+ page : typing.Optional[int]
703
+
704
+ size : typing.Optional[int]
705
+
706
+ dataset_id : typing.Optional[str]
707
+
708
+ name : typing.Optional[str]
709
+
710
+ dataset_deleted : typing.Optional[bool]
711
+
712
+ filters : typing.Optional[str]
713
+
714
+ request_options : typing.Optional[RequestOptions]
715
+ Request-specific configuration.
716
+
717
+ Returns
718
+ -------
719
+ OptimizationPagePublic
720
+ Studio optimizations resource
721
+
722
+ Examples
723
+ --------
724
+ from Opik import AsyncOpikApi
725
+ import asyncio
726
+ client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
727
+ async def main() -> None:
728
+ await client.optimizations.find_studio_optimizations()
729
+ asyncio.run(main())
730
+ """
731
+ _response = await self._raw_client.find_studio_optimizations(
732
+ page=page,
733
+ size=size,
734
+ dataset_id=dataset_id,
735
+ name=name,
736
+ dataset_deleted=dataset_deleted,
737
+ filters=filters,
738
+ request_options=request_options,
739
+ )
740
+ return _response.data
741
+
500
742
  async def get_optimization_by_id(
501
743
  self, id: str, *, request_options: typing.Optional[RequestOptions] = None
502
744
  ) -> OptimizationPublic:
@@ -566,3 +808,63 @@ class AsyncOptimizationsClient:
566
808
  id, name=name, status=status, request_options=request_options
567
809
  )
568
810
  return _response.data
811
+
812
+ async def get_studio_optimization_by_id(
813
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
814
+ ) -> OptimizationPublic:
815
+ """
816
+ Get Studio optimization with config included
817
+
818
+ Parameters
819
+ ----------
820
+ id : str
821
+
822
+ request_options : typing.Optional[RequestOptions]
823
+ Request-specific configuration.
824
+
825
+ Returns
826
+ -------
827
+ OptimizationPublic
828
+ Studio optimization resource
829
+
830
+ Examples
831
+ --------
832
+ from Opik import AsyncOpikApi
833
+ import asyncio
834
+ client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
835
+ async def main() -> None:
836
+ await client.optimizations.get_studio_optimization_by_id(id='id', )
837
+ asyncio.run(main())
838
+ """
839
+ _response = await self._raw_client.get_studio_optimization_by_id(id, request_options=request_options)
840
+ return _response.data
841
+
842
+ async def get_studio_optimization_logs(
843
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
844
+ ) -> OptimizationStudioLog:
845
+ """
846
+ Get presigned S3 URL for downloading optimization logs
847
+
848
+ Parameters
849
+ ----------
850
+ id : str
851
+
852
+ request_options : typing.Optional[RequestOptions]
853
+ Request-specific configuration.
854
+
855
+ Returns
856
+ -------
857
+ OptimizationStudioLog
858
+ Logs response
859
+
860
+ Examples
861
+ --------
862
+ from Opik import AsyncOpikApi
863
+ import asyncio
864
+ client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
865
+ async def main() -> None:
866
+ await client.optimizations.get_studio_optimization_logs(id='id', )
867
+ asyncio.run(main())
868
+ """
869
+ _response = await self._raw_client.get_studio_optimization_logs(id, request_options=request_options)
870
+ return _response.data