opik 1.9.5__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 (248) hide show
  1. opik/__init__.py +10 -3
  2. opik/anonymizer/__init__.py +5 -0
  3. opik/anonymizer/anonymizer.py +12 -0
  4. opik/anonymizer/factory.py +80 -0
  5. opik/anonymizer/recursive_anonymizer.py +64 -0
  6. opik/anonymizer/rules.py +56 -0
  7. opik/anonymizer/rules_anonymizer.py +35 -0
  8. opik/api_objects/dataset/rest_operations.py +5 -0
  9. opik/api_objects/experiment/experiment.py +46 -49
  10. opik/api_objects/experiment/helpers.py +34 -10
  11. opik/api_objects/local_recording.py +8 -3
  12. opik/api_objects/opik_client.py +230 -48
  13. opik/api_objects/opik_query_language.py +9 -0
  14. opik/api_objects/prompt/__init__.py +11 -3
  15. opik/api_objects/prompt/base_prompt.py +69 -0
  16. opik/api_objects/prompt/base_prompt_template.py +29 -0
  17. opik/api_objects/prompt/chat/__init__.py +1 -0
  18. opik/api_objects/prompt/chat/chat_prompt.py +193 -0
  19. opik/api_objects/prompt/chat/chat_prompt_template.py +350 -0
  20. opik/api_objects/prompt/{chat_content_renderer_registry.py → chat/content_renderer_registry.py} +37 -35
  21. opik/api_objects/prompt/client.py +101 -30
  22. opik/api_objects/prompt/text/__init__.py +1 -0
  23. opik/api_objects/prompt/text/prompt.py +174 -0
  24. opik/api_objects/prompt/{prompt_template.py → text/prompt_template.py} +10 -6
  25. opik/api_objects/prompt/types.py +1 -1
  26. opik/cli/export.py +6 -2
  27. opik/cli/usage_report/charts.py +39 -10
  28. opik/cli/usage_report/cli.py +164 -45
  29. opik/cli/usage_report/pdf.py +14 -1
  30. opik/config.py +0 -5
  31. opik/decorator/base_track_decorator.py +37 -40
  32. opik/decorator/context_manager/span_context_manager.py +9 -0
  33. opik/decorator/context_manager/trace_context_manager.py +5 -0
  34. opik/dict_utils.py +3 -3
  35. opik/evaluation/__init__.py +13 -2
  36. opik/evaluation/engine/engine.py +195 -223
  37. opik/evaluation/engine/helpers.py +8 -7
  38. opik/evaluation/engine/metrics_evaluator.py +237 -0
  39. opik/evaluation/evaluation_result.py +35 -1
  40. opik/evaluation/evaluator.py +318 -30
  41. opik/evaluation/models/litellm/util.py +78 -6
  42. opik/evaluation/models/model_capabilities.py +33 -0
  43. opik/evaluation/report.py +14 -2
  44. opik/evaluation/rest_operations.py +36 -33
  45. opik/evaluation/test_case.py +2 -2
  46. opik/evaluation/types.py +9 -1
  47. opik/exceptions.py +17 -0
  48. opik/hooks/__init__.py +17 -1
  49. opik/hooks/anonymizer_hook.py +36 -0
  50. opik/id_helpers.py +18 -0
  51. opik/integrations/adk/helpers.py +16 -7
  52. opik/integrations/adk/legacy_opik_tracer.py +7 -4
  53. opik/integrations/adk/opik_tracer.py +3 -1
  54. opik/integrations/adk/patchers/adk_otel_tracer/opik_adk_otel_tracer.py +7 -3
  55. opik/integrations/adk/recursive_callback_injector.py +1 -6
  56. opik/integrations/dspy/callback.py +1 -4
  57. opik/integrations/haystack/opik_connector.py +2 -2
  58. opik/integrations/haystack/opik_tracer.py +2 -4
  59. opik/integrations/langchain/opik_tracer.py +273 -82
  60. opik/integrations/llama_index/callback.py +110 -108
  61. opik/integrations/openai/agents/opik_tracing_processor.py +1 -2
  62. opik/integrations/openai/opik_tracker.py +1 -1
  63. opik/message_processing/batching/batchers.py +11 -7
  64. opik/message_processing/encoder_helpers.py +79 -0
  65. opik/message_processing/messages.py +25 -1
  66. opik/message_processing/online_message_processor.py +23 -8
  67. opik/opik_context.py +7 -7
  68. opik/rest_api/__init__.py +188 -12
  69. opik/rest_api/client.py +3 -0
  70. opik/rest_api/dashboards/__init__.py +4 -0
  71. opik/rest_api/dashboards/client.py +462 -0
  72. opik/rest_api/dashboards/raw_client.py +648 -0
  73. opik/rest_api/datasets/client.py +893 -89
  74. opik/rest_api/datasets/raw_client.py +1328 -87
  75. opik/rest_api/experiments/client.py +30 -2
  76. opik/rest_api/experiments/raw_client.py +26 -0
  77. opik/rest_api/feedback_definitions/types/find_feedback_definitions_request_type.py +1 -1
  78. opik/rest_api/optimizations/client.py +302 -0
  79. opik/rest_api/optimizations/raw_client.py +463 -0
  80. opik/rest_api/optimizations/types/optimization_update_status.py +3 -1
  81. opik/rest_api/prompts/__init__.py +2 -2
  82. opik/rest_api/prompts/client.py +34 -4
  83. opik/rest_api/prompts/raw_client.py +32 -2
  84. opik/rest_api/prompts/types/__init__.py +3 -1
  85. opik/rest_api/prompts/types/create_prompt_version_detail_template_structure.py +5 -0
  86. opik/rest_api/prompts/types/prompt_write_template_structure.py +5 -0
  87. opik/rest_api/spans/__init__.py +0 -2
  88. opik/rest_api/spans/client.py +148 -64
  89. opik/rest_api/spans/raw_client.py +210 -83
  90. opik/rest_api/spans/types/__init__.py +0 -2
  91. opik/rest_api/traces/client.py +241 -73
  92. opik/rest_api/traces/raw_client.py +344 -90
  93. opik/rest_api/types/__init__.py +200 -15
  94. opik/rest_api/types/aggregation_data.py +1 -0
  95. opik/rest_api/types/alert_trigger_config_public_type.py +6 -1
  96. opik/rest_api/types/alert_trigger_config_type.py +6 -1
  97. opik/rest_api/types/alert_trigger_config_write_type.py +6 -1
  98. opik/rest_api/types/automation_rule_evaluator.py +23 -1
  99. opik/rest_api/types/automation_rule_evaluator_llm_as_judge.py +2 -0
  100. opik/rest_api/types/automation_rule_evaluator_llm_as_judge_public.py +2 -0
  101. opik/rest_api/types/automation_rule_evaluator_llm_as_judge_write.py +2 -0
  102. opik/rest_api/types/{automation_rule_evaluator_object_public.py → automation_rule_evaluator_object_object_public.py} +32 -10
  103. opik/rest_api/types/automation_rule_evaluator_page_public.py +2 -2
  104. opik/rest_api/types/automation_rule_evaluator_public.py +23 -1
  105. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge.py +22 -0
  106. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_public.py +22 -0
  107. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_write.py +22 -0
  108. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge.py +2 -0
  109. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_public.py +2 -0
  110. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_write.py +2 -0
  111. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python.py +2 -0
  112. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_public.py +2 -0
  113. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_write.py +2 -0
  114. opik/rest_api/types/automation_rule_evaluator_update.py +23 -1
  115. opik/rest_api/types/automation_rule_evaluator_update_llm_as_judge.py +2 -0
  116. opik/rest_api/types/automation_rule_evaluator_update_span_llm_as_judge.py +22 -0
  117. opik/rest_api/types/automation_rule_evaluator_update_trace_thread_llm_as_judge.py +2 -0
  118. opik/rest_api/types/automation_rule_evaluator_update_trace_thread_user_defined_metric_python.py +2 -0
  119. opik/rest_api/types/automation_rule_evaluator_update_user_defined_metric_python.py +2 -0
  120. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python.py +2 -0
  121. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_public.py +2 -0
  122. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_write.py +2 -0
  123. opik/rest_api/types/automation_rule_evaluator_write.py +23 -1
  124. opik/rest_api/types/boolean_feedback_definition.py +25 -0
  125. opik/rest_api/types/boolean_feedback_definition_create.py +20 -0
  126. opik/rest_api/types/boolean_feedback_definition_public.py +25 -0
  127. opik/rest_api/types/boolean_feedback_definition_update.py +20 -0
  128. opik/rest_api/types/boolean_feedback_detail.py +29 -0
  129. opik/rest_api/types/boolean_feedback_detail_create.py +29 -0
  130. opik/rest_api/types/boolean_feedback_detail_public.py +29 -0
  131. opik/rest_api/types/boolean_feedback_detail_update.py +29 -0
  132. opik/rest_api/types/dashboard_page_public.py +24 -0
  133. opik/rest_api/types/dashboard_public.py +30 -0
  134. opik/rest_api/types/dataset.py +2 -0
  135. opik/rest_api/types/dataset_item.py +2 -0
  136. opik/rest_api/types/dataset_item_compare.py +2 -0
  137. opik/rest_api/types/dataset_item_filter.py +23 -0
  138. opik/rest_api/types/dataset_item_filter_operator.py +21 -0
  139. opik/rest_api/types/dataset_item_page_compare.py +1 -0
  140. opik/rest_api/types/dataset_item_page_public.py +1 -0
  141. opik/rest_api/types/dataset_item_public.py +2 -0
  142. opik/rest_api/types/dataset_item_update.py +39 -0
  143. opik/rest_api/types/dataset_item_write.py +1 -0
  144. opik/rest_api/types/dataset_public.py +2 -0
  145. opik/rest_api/types/dataset_public_status.py +5 -0
  146. opik/rest_api/types/dataset_status.py +5 -0
  147. opik/rest_api/types/dataset_version_diff.py +22 -0
  148. opik/rest_api/types/dataset_version_diff_stats.py +24 -0
  149. opik/rest_api/types/dataset_version_page_public.py +23 -0
  150. opik/rest_api/types/dataset_version_public.py +49 -0
  151. opik/rest_api/types/experiment.py +2 -0
  152. opik/rest_api/types/experiment_public.py +2 -0
  153. opik/rest_api/types/experiment_score.py +20 -0
  154. opik/rest_api/types/experiment_score_public.py +20 -0
  155. opik/rest_api/types/experiment_score_write.py +20 -0
  156. opik/rest_api/types/feedback.py +20 -1
  157. opik/rest_api/types/feedback_create.py +16 -1
  158. opik/rest_api/types/feedback_object_public.py +22 -1
  159. opik/rest_api/types/feedback_public.py +20 -1
  160. opik/rest_api/types/feedback_score_public.py +4 -0
  161. opik/rest_api/types/feedback_update.py +16 -1
  162. opik/rest_api/types/image_url.py +20 -0
  163. opik/rest_api/types/image_url_public.py +20 -0
  164. opik/rest_api/types/image_url_write.py +20 -0
  165. opik/rest_api/types/llm_as_judge_message.py +5 -1
  166. opik/rest_api/types/llm_as_judge_message_content.py +24 -0
  167. opik/rest_api/types/llm_as_judge_message_content_public.py +24 -0
  168. opik/rest_api/types/llm_as_judge_message_content_write.py +24 -0
  169. opik/rest_api/types/llm_as_judge_message_public.py +5 -1
  170. opik/rest_api/types/llm_as_judge_message_write.py +5 -1
  171. opik/rest_api/types/llm_as_judge_model_parameters.py +2 -0
  172. opik/rest_api/types/llm_as_judge_model_parameters_public.py +2 -0
  173. opik/rest_api/types/llm_as_judge_model_parameters_write.py +2 -0
  174. opik/rest_api/types/optimization.py +2 -0
  175. opik/rest_api/types/optimization_public.py +2 -0
  176. opik/rest_api/types/optimization_public_status.py +3 -1
  177. opik/rest_api/types/optimization_status.py +3 -1
  178. opik/rest_api/types/optimization_studio_config.py +27 -0
  179. opik/rest_api/types/optimization_studio_config_public.py +27 -0
  180. opik/rest_api/types/optimization_studio_config_write.py +27 -0
  181. opik/rest_api/types/optimization_studio_log.py +22 -0
  182. opik/rest_api/types/optimization_write.py +2 -0
  183. opik/rest_api/types/optimization_write_status.py +3 -1
  184. opik/rest_api/types/prompt.py +6 -0
  185. opik/rest_api/types/prompt_detail.py +6 -0
  186. opik/rest_api/types/prompt_detail_template_structure.py +5 -0
  187. opik/rest_api/types/prompt_public.py +6 -0
  188. opik/rest_api/types/prompt_public_template_structure.py +5 -0
  189. opik/rest_api/types/prompt_template_structure.py +5 -0
  190. opik/rest_api/types/prompt_version.py +2 -0
  191. opik/rest_api/types/prompt_version_detail.py +2 -0
  192. opik/rest_api/types/prompt_version_detail_template_structure.py +5 -0
  193. opik/rest_api/types/prompt_version_public.py +2 -0
  194. opik/rest_api/types/prompt_version_public_template_structure.py +5 -0
  195. opik/rest_api/types/prompt_version_template_structure.py +5 -0
  196. opik/rest_api/types/score_name.py +1 -0
  197. opik/rest_api/types/service_toggles_config.py +6 -0
  198. opik/rest_api/types/span_enrichment_options.py +31 -0
  199. opik/rest_api/types/span_filter.py +23 -0
  200. opik/rest_api/types/span_filter_operator.py +21 -0
  201. opik/rest_api/types/span_filter_write.py +23 -0
  202. opik/rest_api/types/span_filter_write_operator.py +21 -0
  203. opik/rest_api/types/span_llm_as_judge_code.py +27 -0
  204. opik/rest_api/types/span_llm_as_judge_code_public.py +27 -0
  205. opik/rest_api/types/span_llm_as_judge_code_write.py +27 -0
  206. opik/rest_api/types/span_update.py +46 -0
  207. opik/rest_api/types/studio_evaluation.py +20 -0
  208. opik/rest_api/types/studio_evaluation_public.py +20 -0
  209. opik/rest_api/types/studio_evaluation_write.py +20 -0
  210. opik/rest_api/types/studio_llm_model.py +21 -0
  211. opik/rest_api/types/studio_llm_model_public.py +21 -0
  212. opik/rest_api/types/studio_llm_model_write.py +21 -0
  213. opik/rest_api/types/studio_message.py +20 -0
  214. opik/rest_api/types/studio_message_public.py +20 -0
  215. opik/rest_api/types/studio_message_write.py +20 -0
  216. opik/rest_api/types/studio_metric.py +21 -0
  217. opik/rest_api/types/studio_metric_public.py +21 -0
  218. opik/rest_api/types/studio_metric_write.py +21 -0
  219. opik/rest_api/types/studio_optimizer.py +21 -0
  220. opik/rest_api/types/studio_optimizer_public.py +21 -0
  221. opik/rest_api/types/studio_optimizer_write.py +21 -0
  222. opik/rest_api/types/studio_prompt.py +20 -0
  223. opik/rest_api/types/studio_prompt_public.py +20 -0
  224. opik/rest_api/types/studio_prompt_write.py +20 -0
  225. opik/rest_api/types/trace.py +6 -0
  226. opik/rest_api/types/trace_public.py +6 -0
  227. opik/rest_api/types/trace_thread_filter_write.py +23 -0
  228. opik/rest_api/types/trace_thread_filter_write_operator.py +21 -0
  229. opik/rest_api/types/trace_thread_update.py +19 -0
  230. opik/rest_api/types/trace_update.py +39 -0
  231. opik/rest_api/types/value_entry.py +2 -0
  232. opik/rest_api/types/value_entry_compare.py +2 -0
  233. opik/rest_api/types/value_entry_experiment_item_bulk_write_view.py +2 -0
  234. opik/rest_api/types/value_entry_public.py +2 -0
  235. opik/rest_api/types/video_url.py +19 -0
  236. opik/rest_api/types/video_url_public.py +19 -0
  237. opik/rest_api/types/video_url_write.py +19 -0
  238. opik/synchronization.py +5 -6
  239. opik/{decorator/tracing_runtime_config.py → tracing_runtime_config.py} +6 -7
  240. {opik-1.9.5.dist-info → opik-1.9.39.dist-info}/METADATA +5 -4
  241. {opik-1.9.5.dist-info → opik-1.9.39.dist-info}/RECORD +246 -151
  242. opik/api_objects/prompt/chat_prompt_template.py +0 -164
  243. opik/api_objects/prompt/prompt.py +0 -131
  244. /opik/rest_api/{spans/types → types}/span_update_type.py +0 -0
  245. {opik-1.9.5.dist-info → opik-1.9.39.dist-info}/WHEEL +0 -0
  246. {opik-1.9.5.dist-info → opik-1.9.39.dist-info}/entry_points.txt +0 -0
  247. {opik-1.9.5.dist-info → opik-1.9.39.dist-info}/licenses/LICENSE +0 -0
  248. {opik-1.9.5.dist-info → opik-1.9.39.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,10 @@ import typing
7
7
  import pydantic
8
8
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
9
9
  from .llm_as_judge_code_write import LlmAsJudgeCodeWrite
10
+ from .span_filter_write import SpanFilterWrite
11
+ from .span_llm_as_judge_code_write import SpanLlmAsJudgeCodeWrite
10
12
  from .trace_filter_write import TraceFilterWrite
13
+ from .trace_thread_filter_write import TraceThreadFilterWrite
11
14
  from .trace_thread_llm_as_judge_code_write import TraceThreadLlmAsJudgeCodeWrite
12
15
  from .trace_thread_user_defined_metric_python_code_write import TraceThreadUserDefinedMetricPythonCodeWrite
13
16
  from .user_defined_metric_python_code_write import UserDefinedMetricPythonCodeWrite
@@ -18,7 +21,6 @@ class Base(UniversalBaseModel):
18
21
  name: str
19
22
  sampling_rate: typing.Optional[float] = None
20
23
  enabled: typing.Optional[bool] = None
21
- filters: typing.Optional[typing.List[TraceFilterWrite]] = None
22
24
  action: typing.Literal["evaluator"] = "evaluator"
23
25
 
24
26
  if IS_PYDANTIC_V2:
@@ -33,6 +35,7 @@ class Base(UniversalBaseModel):
33
35
 
34
36
  class AutomationRuleEvaluatorWrite_LlmAsJudge(Base):
35
37
  type: typing.Literal["llm_as_judge"] = "llm_as_judge"
38
+ filters: typing.Optional[typing.List[TraceFilterWrite]] = None
36
39
  code: typing.Optional[LlmAsJudgeCodeWrite] = None
37
40
 
38
41
  if IS_PYDANTIC_V2:
@@ -47,6 +50,7 @@ class AutomationRuleEvaluatorWrite_LlmAsJudge(Base):
47
50
 
48
51
  class AutomationRuleEvaluatorWrite_UserDefinedMetricPython(Base):
49
52
  type: typing.Literal["user_defined_metric_python"] = "user_defined_metric_python"
53
+ filters: typing.Optional[typing.List[TraceFilterWrite]] = None
50
54
  code: typing.Optional[UserDefinedMetricPythonCodeWrite] = None
51
55
 
52
56
  if IS_PYDANTIC_V2:
@@ -61,6 +65,7 @@ class AutomationRuleEvaluatorWrite_UserDefinedMetricPython(Base):
61
65
 
62
66
  class AutomationRuleEvaluatorWrite_TraceThreadLlmAsJudge(Base):
63
67
  type: typing.Literal["trace_thread_llm_as_judge"] = "trace_thread_llm_as_judge"
68
+ filters: typing.Optional[typing.List[TraceThreadFilterWrite]] = None
64
69
  code: typing.Optional[TraceThreadLlmAsJudgeCodeWrite] = None
65
70
 
66
71
  if IS_PYDANTIC_V2:
@@ -75,6 +80,7 @@ class AutomationRuleEvaluatorWrite_TraceThreadLlmAsJudge(Base):
75
80
 
76
81
  class AutomationRuleEvaluatorWrite_TraceThreadUserDefinedMetricPython(Base):
77
82
  type: typing.Literal["trace_thread_user_defined_metric_python"] = "trace_thread_user_defined_metric_python"
83
+ filters: typing.Optional[typing.List[TraceThreadFilterWrite]] = None
78
84
  code: typing.Optional[TraceThreadUserDefinedMetricPythonCodeWrite] = None
79
85
 
80
86
  if IS_PYDANTIC_V2:
@@ -87,9 +93,25 @@ class AutomationRuleEvaluatorWrite_TraceThreadUserDefinedMetricPython(Base):
87
93
  extra = pydantic.Extra.allow
88
94
 
89
95
 
96
+ class AutomationRuleEvaluatorWrite_SpanLlmAsJudge(Base):
97
+ type: typing.Literal["span_llm_as_judge"] = "span_llm_as_judge"
98
+ filters: typing.Optional[typing.List[SpanFilterWrite]] = None
99
+ code: typing.Optional[SpanLlmAsJudgeCodeWrite] = None
100
+
101
+ if IS_PYDANTIC_V2:
102
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
103
+ else:
104
+
105
+ class Config:
106
+ frozen = True
107
+ smart_union = True
108
+ extra = pydantic.Extra.allow
109
+
110
+
90
111
  AutomationRuleEvaluatorWrite = typing.Union[
91
112
  AutomationRuleEvaluatorWrite_LlmAsJudge,
92
113
  AutomationRuleEvaluatorWrite_UserDefinedMetricPython,
93
114
  AutomationRuleEvaluatorWrite_TraceThreadLlmAsJudge,
94
115
  AutomationRuleEvaluatorWrite_TraceThreadUserDefinedMetricPython,
116
+ AutomationRuleEvaluatorWrite_SpanLlmAsJudge,
95
117
  ]
@@ -0,0 +1,25 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .boolean_feedback_detail import BooleanFeedbackDetail
9
+
10
+
11
+ class BooleanFeedbackDefinition(UniversalBaseModel):
12
+ details: typing.Optional[BooleanFeedbackDetail] = None
13
+ created_at: typing.Optional[dt.datetime] = None
14
+ created_by: typing.Optional[str] = None
15
+ last_updated_at: typing.Optional[dt.datetime] = None
16
+ last_updated_by: typing.Optional[str] = None
17
+
18
+ if IS_PYDANTIC_V2:
19
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
20
+ else:
21
+
22
+ class Config:
23
+ frozen = True
24
+ smart_union = True
25
+ 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 .boolean_feedback_detail_create import BooleanFeedbackDetailCreate
8
+
9
+
10
+ class BooleanFeedbackDefinitionCreate(UniversalBaseModel):
11
+ details: typing.Optional[BooleanFeedbackDetailCreate] = None
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,25 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .boolean_feedback_detail_public import BooleanFeedbackDetailPublic
9
+
10
+
11
+ class BooleanFeedbackDefinitionPublic(UniversalBaseModel):
12
+ details: typing.Optional[BooleanFeedbackDetailPublic] = None
13
+ created_at: typing.Optional[dt.datetime] = None
14
+ created_by: typing.Optional[str] = None
15
+ last_updated_at: typing.Optional[dt.datetime] = None
16
+ last_updated_by: typing.Optional[str] = None
17
+
18
+ if IS_PYDANTIC_V2:
19
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
20
+ else:
21
+
22
+ class Config:
23
+ frozen = True
24
+ smart_union = True
25
+ 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 .boolean_feedback_detail_update import BooleanFeedbackDetailUpdate
8
+
9
+
10
+ class BooleanFeedbackDefinitionUpdate(UniversalBaseModel):
11
+ details: typing.Optional[BooleanFeedbackDetailUpdate] = None
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,29 @@
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
+
10
+
11
+ class BooleanFeedbackDetail(UniversalBaseModel):
12
+ true_label: typing_extensions.Annotated[str, FieldMetadata(alias="trueLabel")] = pydantic.Field()
13
+ """
14
+ Label for true/1 value
15
+ """
16
+
17
+ false_label: typing_extensions.Annotated[str, FieldMetadata(alias="falseLabel")] = pydantic.Field()
18
+ """
19
+ Label for false/0 value
20
+ """
21
+
22
+ if IS_PYDANTIC_V2:
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
24
+ else:
25
+
26
+ class Config:
27
+ frozen = True
28
+ smart_union = True
29
+ extra = pydantic.Extra.allow
@@ -0,0 +1,29 @@
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
+
10
+
11
+ class BooleanFeedbackDetailCreate(UniversalBaseModel):
12
+ true_label: typing_extensions.Annotated[str, FieldMetadata(alias="trueLabel")] = pydantic.Field()
13
+ """
14
+ Label for true/1 value
15
+ """
16
+
17
+ false_label: typing_extensions.Annotated[str, FieldMetadata(alias="falseLabel")] = pydantic.Field()
18
+ """
19
+ Label for false/0 value
20
+ """
21
+
22
+ if IS_PYDANTIC_V2:
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
24
+ else:
25
+
26
+ class Config:
27
+ frozen = True
28
+ smart_union = True
29
+ extra = pydantic.Extra.allow
@@ -0,0 +1,29 @@
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
+
10
+
11
+ class BooleanFeedbackDetailPublic(UniversalBaseModel):
12
+ true_label: typing_extensions.Annotated[str, FieldMetadata(alias="trueLabel")] = pydantic.Field()
13
+ """
14
+ Label for true/1 value
15
+ """
16
+
17
+ false_label: typing_extensions.Annotated[str, FieldMetadata(alias="falseLabel")] = pydantic.Field()
18
+ """
19
+ Label for false/0 value
20
+ """
21
+
22
+ if IS_PYDANTIC_V2:
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
24
+ else:
25
+
26
+ class Config:
27
+ frozen = True
28
+ smart_union = True
29
+ extra = pydantic.Extra.allow
@@ -0,0 +1,29 @@
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
+
10
+
11
+ class BooleanFeedbackDetailUpdate(UniversalBaseModel):
12
+ true_label: typing_extensions.Annotated[str, FieldMetadata(alias="trueLabel")] = pydantic.Field()
13
+ """
14
+ Label for true/1 value
15
+ """
16
+
17
+ false_label: typing_extensions.Annotated[str, FieldMetadata(alias="falseLabel")] = pydantic.Field()
18
+ """
19
+ Label for false/0 value
20
+ """
21
+
22
+ if IS_PYDANTIC_V2:
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
24
+ else:
25
+
26
+ class Config:
27
+ frozen = True
28
+ smart_union = True
29
+ extra = pydantic.Extra.allow
@@ -0,0 +1,24 @@
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 .dashboard_public import DashboardPublic
8
+
9
+
10
+ class DashboardPagePublic(UniversalBaseModel):
11
+ content: typing.Optional[typing.List[DashboardPublic]] = None
12
+ page: typing.Optional[int] = None
13
+ size: typing.Optional[int] = None
14
+ total: typing.Optional[int] = None
15
+ sortable_by: typing.Optional[typing.List[str]] = None
16
+
17
+ if IS_PYDANTIC_V2:
18
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
19
+ else:
20
+
21
+ class Config:
22
+ frozen = True
23
+ smart_union = True
24
+ extra = pydantic.Extra.allow
@@ -0,0 +1,30 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .json_node_public import JsonNodePublic
9
+
10
+
11
+ class DashboardPublic(UniversalBaseModel):
12
+ id: typing.Optional[str] = None
13
+ workspace_id: typing.Optional[str] = None
14
+ name: str
15
+ slug: typing.Optional[str] = None
16
+ description: typing.Optional[str] = None
17
+ config: JsonNodePublic
18
+ created_by: typing.Optional[str] = None
19
+ last_updated_by: typing.Optional[str] = None
20
+ created_at: typing.Optional[dt.datetime] = None
21
+ last_updated_at: typing.Optional[dt.datetime] = None
22
+
23
+ if IS_PYDANTIC_V2:
24
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
25
+ else:
26
+
27
+ class Config:
28
+ frozen = True
29
+ smart_union = True
30
+ extra = pydantic.Extra.allow
@@ -5,6 +5,7 @@ import typing
5
5
 
6
6
  import pydantic
7
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .dataset_status import DatasetStatus
8
9
  from .dataset_visibility import DatasetVisibility
9
10
 
10
11
 
@@ -25,6 +26,7 @@ class Dataset(UniversalBaseModel):
25
26
  last_created_experiment_at: typing.Optional[dt.datetime] = None
26
27
  most_recent_optimization_at: typing.Optional[dt.datetime] = None
27
28
  last_created_optimization_at: typing.Optional[dt.datetime] = None
29
+ status: typing.Optional[DatasetStatus] = None
28
30
 
29
31
  if IS_PYDANTIC_V2:
30
32
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -12,10 +12,12 @@ from .json_node import JsonNode
12
12
 
13
13
  class DatasetItem(UniversalBaseModel):
14
14
  id: typing.Optional[str] = None
15
+ draft_item_id: typing.Optional[str] = None
15
16
  trace_id: typing.Optional[str] = None
16
17
  span_id: typing.Optional[str] = None
17
18
  source: DatasetItemSource
18
19
  data: JsonNode
20
+ tags: typing.Optional[typing.List[str]] = None
19
21
  experiment_items: typing.Optional[typing.List[ExperimentItem]] = None
20
22
  dataset_id: typing.Optional[str] = None
21
23
  created_at: typing.Optional[dt.datetime] = None
@@ -12,10 +12,12 @@ from .json_node import JsonNode
12
12
 
13
13
  class DatasetItemCompare(UniversalBaseModel):
14
14
  id: typing.Optional[str] = None
15
+ draft_item_id: typing.Optional[str] = None
15
16
  trace_id: typing.Optional[str] = None
16
17
  span_id: typing.Optional[str] = None
17
18
  source: DatasetItemCompareSource
18
19
  data: JsonNode
20
+ tags: typing.Optional[typing.List[str]] = None
19
21
  experiment_items: typing.Optional[typing.List[ExperimentItemCompare]] = None
20
22
  dataset_id: typing.Optional[str] = None
21
23
  created_at: typing.Optional[dt.datetime] = None
@@ -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 .dataset_item_filter_operator import DatasetItemFilterOperator
8
+
9
+
10
+ class DatasetItemFilter(UniversalBaseModel):
11
+ field: typing.Optional[str] = None
12
+ operator: typing.Optional[DatasetItemFilterOperator] = 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
+ DatasetItemFilterOperator = 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
+ ]
@@ -19,6 +19,7 @@ class DatasetItemPageCompare(UniversalBaseModel):
19
19
  sortable_by: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="sortableBy")] = (
20
20
  None
21
21
  )
22
+ has_draft: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="hasDraft")] = None
22
23
 
23
24
  if IS_PYDANTIC_V2:
24
25
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -19,6 +19,7 @@ class DatasetItemPagePublic(UniversalBaseModel):
19
19
  sortable_by: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="sortableBy")] = (
20
20
  None
21
21
  )
22
+ has_draft: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="hasDraft")] = None
22
23
 
23
24
  if IS_PYDANTIC_V2:
24
25
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -12,10 +12,12 @@ from .json_node import JsonNode
12
12
 
13
13
  class DatasetItemPublic(UniversalBaseModel):
14
14
  id: typing.Optional[str] = None
15
+ draft_item_id: typing.Optional[str] = None
15
16
  trace_id: typing.Optional[str] = None
16
17
  span_id: typing.Optional[str] = None
17
18
  source: DatasetItemPublicSource
18
19
  data: JsonNode
20
+ tags: typing.Optional[typing.List[str]] = None
19
21
  experiment_items: typing.Optional[typing.List[ExperimentItemPublic]] = None
20
22
  dataset_id: typing.Optional[str] = None
21
23
  created_at: typing.Optional[dt.datetime] = None
@@ -0,0 +1,39 @@
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 DatasetItemUpdate(UniversalBaseModel):
11
+ """
12
+ Dataset item update request
13
+ """
14
+
15
+ input: typing.Optional[str] = pydantic.Field(default=None)
16
+ """
17
+ Dataset item input
18
+ """
19
+
20
+ expected_output: typing.Optional[str] = pydantic.Field(default=None)
21
+ """
22
+ Dataset item expected output
23
+ """
24
+
25
+ metadata: typing.Optional[JsonNode] = None
26
+ data: typing.Optional[JsonNode] = None
27
+ tags: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
28
+ """
29
+ Tags
30
+ """
31
+
32
+ if IS_PYDANTIC_V2:
33
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
34
+ else:
35
+
36
+ class Config:
37
+ frozen = True
38
+ smart_union = True
39
+ extra = pydantic.Extra.allow
@@ -14,6 +14,7 @@ class DatasetItemWrite(UniversalBaseModel):
14
14
  span_id: typing.Optional[str] = None
15
15
  source: DatasetItemWriteSource
16
16
  data: JsonNode
17
+ tags: typing.Optional[typing.List[str]] = None
17
18
 
18
19
  if IS_PYDANTIC_V2:
19
20
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -5,6 +5,7 @@ import typing
5
5
 
6
6
  import pydantic
7
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .dataset_public_status import DatasetPublicStatus
8
9
  from .dataset_public_visibility import DatasetPublicVisibility
9
10
 
10
11
 
@@ -25,6 +26,7 @@ class DatasetPublic(UniversalBaseModel):
25
26
  last_created_experiment_at: typing.Optional[dt.datetime] = None
26
27
  most_recent_optimization_at: typing.Optional[dt.datetime] = None
27
28
  last_created_optimization_at: typing.Optional[dt.datetime] = None
29
+ status: typing.Optional[DatasetPublicStatus] = None
28
30
 
29
31
  if IS_PYDANTIC_V2:
30
32
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ DatasetPublicStatus = typing.Union[typing.Literal["unknown", "processing", "completed", "failed"], typing.Any]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ DatasetStatus = typing.Union[typing.Literal["unknown", "processing", "completed", "failed"], typing.Any]
@@ -0,0 +1,22 @@
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 .dataset_version_diff_stats import DatasetVersionDiffStats
8
+
9
+
10
+ class DatasetVersionDiff(UniversalBaseModel):
11
+ from_version: typing.Optional[str] = None
12
+ to_version: typing.Optional[str] = None
13
+ statistics: typing.Optional[DatasetVersionDiffStats] = None
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow
@@ -0,0 +1,24 @@
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
+
10
+
11
+ class DatasetVersionDiffStats(UniversalBaseModel):
12
+ items_added: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="itemsAdded")] = None
13
+ items_modified: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="itemsModified")] = None
14
+ items_deleted: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="itemsDeleted")] = None
15
+ items_unchanged: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="itemsUnchanged")] = None
16
+
17
+ if IS_PYDANTIC_V2:
18
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
19
+ else:
20
+
21
+ class Config:
22
+ frozen = True
23
+ smart_union = True
24
+ extra = pydantic.Extra.allow
@@ -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 .dataset_version_public import DatasetVersionPublic
8
+
9
+
10
+ class DatasetVersionPagePublic(UniversalBaseModel):
11
+ content: typing.Optional[typing.List[DatasetVersionPublic]] = None
12
+ page: typing.Optional[int] = None
13
+ size: typing.Optional[int] = None
14
+ total: typing.Optional[int] = 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