opik 1.8.39__py3-none-any.whl → 1.9.71__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 +19 -3
- opik/anonymizer/__init__.py +5 -0
- opik/anonymizer/anonymizer.py +12 -0
- opik/anonymizer/factory.py +80 -0
- opik/anonymizer/recursive_anonymizer.py +64 -0
- opik/anonymizer/rules.py +56 -0
- opik/anonymizer/rules_anonymizer.py +35 -0
- opik/api_objects/attachment/attachment_context.py +36 -0
- opik/api_objects/attachment/attachments_extractor.py +153 -0
- opik/api_objects/attachment/client.py +1 -0
- opik/api_objects/attachment/converters.py +2 -0
- opik/api_objects/attachment/decoder.py +18 -0
- opik/api_objects/attachment/decoder_base64.py +83 -0
- opik/api_objects/attachment/decoder_helpers.py +137 -0
- opik/api_objects/data_helpers.py +79 -0
- opik/api_objects/dataset/dataset.py +64 -4
- opik/api_objects/dataset/rest_operations.py +11 -2
- opik/api_objects/experiment/experiment.py +57 -57
- opik/api_objects/experiment/experiment_item.py +2 -1
- opik/api_objects/experiment/experiments_client.py +64 -0
- opik/api_objects/experiment/helpers.py +35 -11
- opik/api_objects/experiment/rest_operations.py +65 -5
- opik/api_objects/helpers.py +8 -5
- opik/api_objects/local_recording.py +81 -0
- opik/api_objects/opik_client.py +600 -108
- opik/api_objects/opik_query_language.py +39 -5
- opik/api_objects/prompt/__init__.py +12 -2
- 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 +210 -0
- opik/api_objects/prompt/chat/chat_prompt_template.py +350 -0
- opik/api_objects/prompt/chat/content_renderer_registry.py +203 -0
- opik/api_objects/prompt/client.py +189 -47
- opik/api_objects/prompt/text/__init__.py +1 -0
- opik/api_objects/prompt/text/prompt.py +174 -0
- opik/api_objects/prompt/{prompt_template.py → text/prompt_template.py} +10 -6
- opik/api_objects/prompt/types.py +23 -0
- opik/api_objects/search_helpers.py +89 -0
- opik/api_objects/span/span_data.py +35 -25
- opik/api_objects/threads/threads_client.py +39 -5
- opik/api_objects/trace/trace_client.py +52 -2
- opik/api_objects/trace/trace_data.py +15 -24
- opik/api_objects/validation_helpers.py +3 -3
- opik/cli/__init__.py +5 -0
- opik/cli/__main__.py +6 -0
- opik/cli/configure.py +66 -0
- opik/cli/exports/__init__.py +131 -0
- opik/cli/exports/dataset.py +278 -0
- opik/cli/exports/experiment.py +784 -0
- opik/cli/exports/project.py +685 -0
- opik/cli/exports/prompt.py +578 -0
- opik/cli/exports/utils.py +406 -0
- opik/cli/harbor.py +39 -0
- opik/cli/healthcheck.py +21 -0
- opik/cli/imports/__init__.py +439 -0
- opik/cli/imports/dataset.py +143 -0
- opik/cli/imports/experiment.py +1192 -0
- opik/cli/imports/project.py +262 -0
- opik/cli/imports/prompt.py +177 -0
- opik/cli/imports/utils.py +280 -0
- opik/cli/main.py +49 -0
- opik/cli/proxy.py +93 -0
- opik/cli/usage_report/__init__.py +16 -0
- opik/cli/usage_report/charts.py +783 -0
- opik/cli/usage_report/cli.py +274 -0
- opik/cli/usage_report/constants.py +9 -0
- opik/cli/usage_report/extraction.py +749 -0
- opik/cli/usage_report/pdf.py +244 -0
- opik/cli/usage_report/statistics.py +78 -0
- opik/cli/usage_report/utils.py +235 -0
- opik/config.py +13 -7
- opik/configurator/configure.py +17 -0
- opik/datetime_helpers.py +12 -0
- opik/decorator/arguments_helpers.py +9 -1
- opik/decorator/base_track_decorator.py +205 -133
- opik/decorator/context_manager/span_context_manager.py +123 -0
- opik/decorator/context_manager/trace_context_manager.py +84 -0
- opik/decorator/opik_args/__init__.py +13 -0
- opik/decorator/opik_args/api_classes.py +71 -0
- opik/decorator/opik_args/helpers.py +120 -0
- opik/decorator/span_creation_handler.py +25 -6
- opik/dict_utils.py +3 -3
- opik/evaluation/__init__.py +13 -2
- opik/evaluation/engine/engine.py +272 -75
- opik/evaluation/engine/evaluation_tasks_executor.py +6 -3
- opik/evaluation/engine/helpers.py +31 -6
- opik/evaluation/engine/metrics_evaluator.py +237 -0
- opik/evaluation/evaluation_result.py +168 -2
- opik/evaluation/evaluator.py +533 -62
- opik/evaluation/metrics/__init__.py +103 -4
- opik/evaluation/metrics/aggregated_metric.py +35 -6
- opik/evaluation/metrics/base_metric.py +1 -1
- opik/evaluation/metrics/conversation/__init__.py +48 -0
- opik/evaluation/metrics/conversation/conversation_thread_metric.py +56 -2
- opik/evaluation/metrics/conversation/g_eval_wrappers.py +19 -0
- opik/evaluation/metrics/conversation/helpers.py +14 -15
- opik/evaluation/metrics/conversation/heuristics/__init__.py +14 -0
- opik/evaluation/metrics/conversation/heuristics/degeneration/__init__.py +3 -0
- opik/evaluation/metrics/conversation/heuristics/degeneration/metric.py +189 -0
- opik/evaluation/metrics/conversation/heuristics/degeneration/phrases.py +12 -0
- opik/evaluation/metrics/conversation/heuristics/knowledge_retention/__init__.py +3 -0
- opik/evaluation/metrics/conversation/heuristics/knowledge_retention/metric.py +172 -0
- opik/evaluation/metrics/conversation/llm_judges/__init__.py +32 -0
- opik/evaluation/metrics/conversation/{conversational_coherence → llm_judges/conversational_coherence}/metric.py +22 -17
- opik/evaluation/metrics/conversation/{conversational_coherence → llm_judges/conversational_coherence}/templates.py +1 -1
- opik/evaluation/metrics/conversation/llm_judges/g_eval_wrappers.py +442 -0
- opik/evaluation/metrics/conversation/{session_completeness → llm_judges/session_completeness}/metric.py +13 -7
- opik/evaluation/metrics/conversation/{session_completeness → llm_judges/session_completeness}/templates.py +1 -1
- opik/evaluation/metrics/conversation/llm_judges/user_frustration/__init__.py +0 -0
- opik/evaluation/metrics/conversation/{user_frustration → llm_judges/user_frustration}/metric.py +21 -14
- opik/evaluation/metrics/conversation/{user_frustration → llm_judges/user_frustration}/templates.py +1 -1
- opik/evaluation/metrics/conversation/types.py +4 -5
- opik/evaluation/metrics/conversation_types.py +9 -0
- opik/evaluation/metrics/heuristics/bertscore.py +107 -0
- opik/evaluation/metrics/heuristics/bleu.py +35 -15
- opik/evaluation/metrics/heuristics/chrf.py +127 -0
- opik/evaluation/metrics/heuristics/contains.py +47 -11
- opik/evaluation/metrics/heuristics/distribution_metrics.py +331 -0
- opik/evaluation/metrics/heuristics/gleu.py +113 -0
- opik/evaluation/metrics/heuristics/language_adherence.py +123 -0
- opik/evaluation/metrics/heuristics/meteor.py +119 -0
- opik/evaluation/metrics/heuristics/prompt_injection.py +150 -0
- opik/evaluation/metrics/heuristics/readability.py +129 -0
- opik/evaluation/metrics/heuristics/rouge.py +26 -9
- opik/evaluation/metrics/heuristics/spearman.py +88 -0
- opik/evaluation/metrics/heuristics/tone.py +155 -0
- opik/evaluation/metrics/heuristics/vader_sentiment.py +77 -0
- opik/evaluation/metrics/llm_judges/answer_relevance/metric.py +20 -5
- opik/evaluation/metrics/llm_judges/context_precision/metric.py +20 -6
- opik/evaluation/metrics/llm_judges/context_recall/metric.py +20 -6
- opik/evaluation/metrics/llm_judges/g_eval/__init__.py +5 -0
- opik/evaluation/metrics/llm_judges/g_eval/metric.py +219 -68
- opik/evaluation/metrics/llm_judges/g_eval/parser.py +102 -52
- opik/evaluation/metrics/llm_judges/g_eval/presets.py +209 -0
- opik/evaluation/metrics/llm_judges/g_eval_presets/__init__.py +36 -0
- opik/evaluation/metrics/llm_judges/g_eval_presets/agent_assessment.py +77 -0
- opik/evaluation/metrics/llm_judges/g_eval_presets/bias_classifier.py +181 -0
- opik/evaluation/metrics/llm_judges/g_eval_presets/compliance_risk.py +41 -0
- opik/evaluation/metrics/llm_judges/g_eval_presets/prompt_uncertainty.py +41 -0
- opik/evaluation/metrics/llm_judges/g_eval_presets/qa_suite.py +146 -0
- opik/evaluation/metrics/llm_judges/hallucination/metric.py +16 -3
- opik/evaluation/metrics/llm_judges/llm_juries/__init__.py +3 -0
- opik/evaluation/metrics/llm_judges/llm_juries/metric.py +76 -0
- opik/evaluation/metrics/llm_judges/moderation/metric.py +16 -4
- opik/evaluation/metrics/llm_judges/structure_output_compliance/__init__.py +0 -0
- opik/evaluation/metrics/llm_judges/structure_output_compliance/metric.py +144 -0
- opik/evaluation/metrics/llm_judges/structure_output_compliance/parser.py +79 -0
- opik/evaluation/metrics/llm_judges/structure_output_compliance/schema.py +15 -0
- opik/evaluation/metrics/llm_judges/structure_output_compliance/template.py +50 -0
- opik/evaluation/metrics/llm_judges/syc_eval/__init__.py +0 -0
- opik/evaluation/metrics/llm_judges/syc_eval/metric.py +252 -0
- opik/evaluation/metrics/llm_judges/syc_eval/parser.py +82 -0
- opik/evaluation/metrics/llm_judges/syc_eval/template.py +155 -0
- opik/evaluation/metrics/llm_judges/trajectory_accuracy/metric.py +20 -5
- opik/evaluation/metrics/llm_judges/usefulness/metric.py +16 -4
- opik/evaluation/metrics/ragas_metric.py +43 -23
- opik/evaluation/models/__init__.py +8 -0
- opik/evaluation/models/base_model.py +107 -1
- opik/evaluation/models/langchain/langchain_chat_model.py +15 -7
- opik/evaluation/models/langchain/message_converters.py +97 -15
- opik/evaluation/models/litellm/litellm_chat_model.py +156 -29
- opik/evaluation/models/litellm/util.py +125 -0
- opik/evaluation/models/litellm/warning_filters.py +16 -4
- opik/evaluation/models/model_capabilities.py +187 -0
- opik/evaluation/models/models_factory.py +25 -3
- opik/evaluation/preprocessing.py +92 -0
- opik/evaluation/report.py +70 -12
- opik/evaluation/rest_operations.py +49 -45
- opik/evaluation/samplers/__init__.py +4 -0
- opik/evaluation/samplers/base_dataset_sampler.py +40 -0
- opik/evaluation/samplers/random_dataset_sampler.py +48 -0
- opik/evaluation/score_statistics.py +66 -0
- opik/evaluation/scorers/__init__.py +4 -0
- opik/evaluation/scorers/scorer_function.py +55 -0
- opik/evaluation/scorers/scorer_wrapper_metric.py +130 -0
- opik/evaluation/test_case.py +3 -2
- opik/evaluation/test_result.py +1 -0
- opik/evaluation/threads/evaluator.py +31 -3
- opik/evaluation/threads/helpers.py +3 -2
- opik/evaluation/types.py +9 -1
- opik/exceptions.py +33 -0
- opik/file_upload/file_uploader.py +13 -0
- opik/file_upload/upload_options.py +2 -0
- opik/hooks/__init__.py +23 -0
- opik/hooks/anonymizer_hook.py +36 -0
- opik/hooks/httpx_client_hook.py +112 -0
- opik/httpx_client.py +12 -9
- opik/id_helpers.py +18 -0
- opik/integrations/adk/graph/subgraph_edges_builders.py +1 -2
- opik/integrations/adk/helpers.py +16 -7
- opik/integrations/adk/legacy_opik_tracer.py +7 -4
- opik/integrations/adk/opik_tracer.py +14 -1
- opik/integrations/adk/patchers/adk_otel_tracer/opik_adk_otel_tracer.py +7 -3
- opik/integrations/adk/recursive_callback_injector.py +4 -7
- opik/integrations/bedrock/converse/__init__.py +0 -0
- opik/integrations/bedrock/converse/chunks_aggregator.py +188 -0
- opik/integrations/bedrock/{converse_decorator.py → converse/converse_decorator.py} +4 -3
- opik/integrations/bedrock/invoke_agent_decorator.py +5 -4
- opik/integrations/bedrock/invoke_model/__init__.py +0 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/__init__.py +78 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/api.py +45 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/base.py +23 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/claude.py +121 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/format_detector.py +107 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/llama.py +108 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/mistral.py +118 -0
- opik/integrations/bedrock/invoke_model/chunks_aggregator/nova.py +99 -0
- opik/integrations/bedrock/invoke_model/invoke_model_decorator.py +178 -0
- opik/integrations/bedrock/invoke_model/response_types.py +34 -0
- opik/integrations/bedrock/invoke_model/stream_wrappers.py +122 -0
- opik/integrations/bedrock/invoke_model/usage_converters.py +87 -0
- opik/integrations/bedrock/invoke_model/usage_extraction.py +108 -0
- opik/integrations/bedrock/opik_tracker.py +42 -4
- opik/integrations/bedrock/types.py +19 -0
- opik/integrations/crewai/crewai_decorator.py +8 -51
- opik/integrations/crewai/opik_tracker.py +31 -10
- opik/integrations/crewai/patchers/__init__.py +5 -0
- opik/integrations/crewai/patchers/flow.py +118 -0
- opik/integrations/crewai/patchers/litellm_completion.py +30 -0
- opik/integrations/crewai/patchers/llm_client.py +207 -0
- opik/integrations/dspy/callback.py +80 -17
- opik/integrations/dspy/parsers.py +168 -0
- opik/integrations/harbor/__init__.py +17 -0
- opik/integrations/harbor/experiment_service.py +269 -0
- opik/integrations/harbor/opik_tracker.py +528 -0
- opik/integrations/haystack/opik_connector.py +2 -2
- opik/integrations/haystack/opik_tracer.py +3 -7
- opik/integrations/langchain/__init__.py +3 -1
- opik/integrations/langchain/helpers.py +96 -0
- opik/integrations/langchain/langgraph_async_context_bridge.py +131 -0
- opik/integrations/langchain/langgraph_tracer_injector.py +88 -0
- opik/integrations/langchain/opik_encoder_extension.py +1 -1
- opik/integrations/langchain/opik_tracer.py +474 -229
- opik/integrations/litellm/__init__.py +5 -0
- opik/integrations/litellm/completion_chunks_aggregator.py +115 -0
- opik/integrations/litellm/litellm_completion_decorator.py +242 -0
- opik/integrations/litellm/opik_tracker.py +43 -0
- opik/integrations/litellm/stream_patchers.py +151 -0
- opik/integrations/llama_index/callback.py +146 -107
- opik/integrations/openai/agents/opik_tracing_processor.py +1 -2
- opik/integrations/openai/openai_chat_completions_decorator.py +2 -16
- opik/integrations/openai/opik_tracker.py +1 -1
- opik/integrations/sagemaker/auth.py +5 -1
- opik/llm_usage/google_usage.py +3 -1
- opik/llm_usage/opik_usage.py +7 -8
- opik/llm_usage/opik_usage_factory.py +4 -2
- opik/logging_messages.py +6 -0
- opik/message_processing/batching/base_batcher.py +14 -21
- opik/message_processing/batching/batch_manager.py +22 -10
- opik/message_processing/batching/batch_manager_constuctors.py +10 -0
- opik/message_processing/batching/batchers.py +59 -27
- opik/message_processing/batching/flushing_thread.py +0 -3
- opik/message_processing/emulation/__init__.py +0 -0
- opik/message_processing/emulation/emulator_message_processor.py +578 -0
- opik/message_processing/emulation/local_emulator_message_processor.py +140 -0
- opik/message_processing/emulation/models.py +162 -0
- opik/message_processing/encoder_helpers.py +79 -0
- opik/message_processing/messages.py +56 -1
- opik/message_processing/preprocessing/__init__.py +0 -0
- opik/message_processing/preprocessing/attachments_preprocessor.py +70 -0
- opik/message_processing/preprocessing/batching_preprocessor.py +53 -0
- opik/message_processing/preprocessing/constants.py +1 -0
- opik/message_processing/preprocessing/file_upload_preprocessor.py +38 -0
- opik/message_processing/preprocessing/preprocessor.py +36 -0
- opik/message_processing/processors/__init__.py +0 -0
- opik/message_processing/processors/attachments_extraction_processor.py +146 -0
- opik/message_processing/processors/message_processors.py +92 -0
- opik/message_processing/processors/message_processors_chain.py +96 -0
- opik/message_processing/{message_processors.py → processors/online_message_processor.py} +85 -29
- opik/message_processing/queue_consumer.py +9 -3
- opik/message_processing/streamer.py +71 -33
- opik/message_processing/streamer_constructors.py +43 -10
- opik/opik_context.py +16 -4
- opik/plugins/pytest/hooks.py +5 -3
- opik/rest_api/__init__.py +346 -15
- opik/rest_api/alerts/__init__.py +7 -0
- opik/rest_api/alerts/client.py +667 -0
- opik/rest_api/alerts/raw_client.py +1015 -0
- opik/rest_api/alerts/types/__init__.py +7 -0
- opik/rest_api/alerts/types/get_webhook_examples_request_alert_type.py +5 -0
- opik/rest_api/annotation_queues/__init__.py +4 -0
- opik/rest_api/annotation_queues/client.py +668 -0
- opik/rest_api/annotation_queues/raw_client.py +1019 -0
- opik/rest_api/automation_rule_evaluators/client.py +34 -2
- opik/rest_api/automation_rule_evaluators/raw_client.py +24 -0
- opik/rest_api/client.py +15 -0
- opik/rest_api/dashboards/__init__.py +4 -0
- opik/rest_api/dashboards/client.py +462 -0
- opik/rest_api/dashboards/raw_client.py +648 -0
- opik/rest_api/datasets/client.py +1310 -44
- opik/rest_api/datasets/raw_client.py +2269 -358
- opik/rest_api/experiments/__init__.py +2 -2
- opik/rest_api/experiments/client.py +191 -5
- opik/rest_api/experiments/raw_client.py +301 -7
- opik/rest_api/experiments/types/__init__.py +4 -1
- opik/rest_api/experiments/types/experiment_update_status.py +5 -0
- opik/rest_api/experiments/types/experiment_update_type.py +5 -0
- opik/rest_api/experiments/types/experiment_write_status.py +5 -0
- opik/rest_api/feedback_definitions/types/find_feedback_definitions_request_type.py +1 -1
- opik/rest_api/llm_provider_key/client.py +20 -0
- opik/rest_api/llm_provider_key/raw_client.py +20 -0
- opik/rest_api/llm_provider_key/types/provider_api_key_write_provider.py +1 -1
- opik/rest_api/manual_evaluation/__init__.py +4 -0
- opik/rest_api/manual_evaluation/client.py +347 -0
- opik/rest_api/manual_evaluation/raw_client.py +543 -0
- opik/rest_api/optimizations/client.py +145 -9
- opik/rest_api/optimizations/raw_client.py +237 -13
- 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 +227 -6
- opik/rest_api/prompts/raw_client.py +331 -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/spans/__init__.py +0 -2
- opik/rest_api/spans/client.py +238 -76
- opik/rest_api/spans/raw_client.py +307 -95
- opik/rest_api/spans/types/__init__.py +0 -2
- opik/rest_api/traces/client.py +572 -161
- opik/rest_api/traces/raw_client.py +736 -229
- opik/rest_api/types/__init__.py +352 -17
- opik/rest_api/types/aggregation_data.py +1 -0
- opik/rest_api/types/alert.py +33 -0
- opik/rest_api/types/alert_alert_type.py +5 -0
- opik/rest_api/types/alert_page_public.py +24 -0
- opik/rest_api/types/alert_public.py +33 -0
- opik/rest_api/types/alert_public_alert_type.py +5 -0
- opik/rest_api/types/alert_trigger.py +27 -0
- opik/rest_api/types/alert_trigger_config.py +28 -0
- opik/rest_api/types/alert_trigger_config_public.py +28 -0
- opik/rest_api/types/alert_trigger_config_public_type.py +10 -0
- opik/rest_api/types/alert_trigger_config_type.py +10 -0
- opik/rest_api/types/alert_trigger_config_write.py +22 -0
- opik/rest_api/types/alert_trigger_config_write_type.py +10 -0
- opik/rest_api/types/alert_trigger_event_type.py +19 -0
- opik/rest_api/types/alert_trigger_public.py +27 -0
- opik/rest_api/types/alert_trigger_public_event_type.py +19 -0
- opik/rest_api/types/alert_trigger_write.py +23 -0
- opik/rest_api/types/alert_trigger_write_event_type.py +19 -0
- opik/rest_api/types/alert_write.py +28 -0
- opik/rest_api/types/alert_write_alert_type.py +5 -0
- opik/rest_api/types/annotation_queue.py +42 -0
- opik/rest_api/types/annotation_queue_batch.py +27 -0
- opik/rest_api/types/annotation_queue_item_ids.py +19 -0
- opik/rest_api/types/annotation_queue_page_public.py +28 -0
- opik/rest_api/types/annotation_queue_public.py +38 -0
- opik/rest_api/types/annotation_queue_public_scope.py +5 -0
- opik/rest_api/types/annotation_queue_reviewer.py +20 -0
- opik/rest_api/types/annotation_queue_reviewer_public.py +20 -0
- opik/rest_api/types/annotation_queue_scope.py +5 -0
- opik/rest_api/types/annotation_queue_write.py +31 -0
- opik/rest_api/types/annotation_queue_write_scope.py +5 -0
- opik/rest_api/types/audio_url.py +19 -0
- opik/rest_api/types/audio_url_public.py +19 -0
- opik/rest_api/types/audio_url_write.py +19 -0
- opik/rest_api/types/automation_rule_evaluator.py +62 -2
- 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_object_public.py +155 -0
- opik/rest_api/types/automation_rule_evaluator_page_public.py +3 -2
- opik/rest_api/types/automation_rule_evaluator_public.py +57 -2
- 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_span_user_defined_metric_python.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_span_user_defined_metric_python_public.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_span_user_defined_metric_python_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 +51 -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_span_user_defined_metric_python.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 +51 -1
- opik/rest_api/types/boolean_feedback_definition.py +25 -0
- opik/rest_api/types/boolean_feedback_definition_create.py +20 -0
- opik/rest_api/types/boolean_feedback_definition_public.py +25 -0
- opik/rest_api/types/boolean_feedback_definition_update.py +20 -0
- opik/rest_api/types/boolean_feedback_detail.py +29 -0
- opik/rest_api/types/boolean_feedback_detail_create.py +29 -0
- opik/rest_api/types/boolean_feedback_detail_public.py +29 -0
- opik/rest_api/types/boolean_feedback_detail_update.py +29 -0
- opik/rest_api/types/dashboard_page_public.py +24 -0
- opik/rest_api/types/dashboard_public.py +30 -0
- opik/rest_api/types/dataset.py +4 -0
- opik/rest_api/types/dataset_expansion.py +42 -0
- opik/rest_api/types/dataset_expansion_response.py +39 -0
- opik/rest_api/types/dataset_item.py +2 -0
- opik/rest_api/types/dataset_item_changes_public.py +5 -0
- opik/rest_api/types/dataset_item_compare.py +2 -0
- opik/rest_api/types/dataset_item_filter.py +27 -0
- opik/rest_api/types/dataset_item_filter_operator.py +21 -0
- opik/rest_api/types/dataset_item_page_compare.py +5 -0
- opik/rest_api/types/dataset_item_page_public.py +5 -0
- opik/rest_api/types/dataset_item_public.py +2 -0
- opik/rest_api/types/dataset_item_update.py +39 -0
- opik/rest_api/types/dataset_item_write.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 +59 -0
- opik/rest_api/types/dataset_version_summary.py +46 -0
- opik/rest_api/types/dataset_version_summary_public.py +46 -0
- opik/rest_api/types/experiment.py +7 -2
- opik/rest_api/types/experiment_group_response.py +2 -0
- opik/rest_api/types/experiment_public.py +7 -2
- opik/rest_api/types/experiment_public_status.py +5 -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/experiment_status.py +5 -0
- opik/rest_api/types/feedback.py +25 -1
- opik/rest_api/types/feedback_create.py +20 -1
- opik/rest_api/types/feedback_object_public.py +27 -1
- opik/rest_api/types/feedback_public.py +25 -1
- opik/rest_api/types/feedback_score_batch_item.py +2 -1
- opik/rest_api/types/feedback_score_batch_item_thread.py +2 -1
- opik/rest_api/types/feedback_score_public.py +4 -0
- opik/rest_api/types/feedback_update.py +20 -1
- opik/rest_api/types/group_content_with_aggregations.py +1 -0
- opik/rest_api/types/group_detail.py +19 -0
- opik/rest_api/types/group_details.py +20 -0
- opik/rest_api/types/guardrail.py +1 -0
- opik/rest_api/types/guardrail_write.py +1 -0
- opik/rest_api/types/ids_holder.py +19 -0
- opik/rest_api/types/image_url.py +20 -0
- opik/rest_api/types/image_url_public.py +20 -0
- opik/rest_api/types/image_url_write.py +20 -0
- opik/rest_api/types/llm_as_judge_message.py +5 -1
- opik/rest_api/types/llm_as_judge_message_content.py +26 -0
- opik/rest_api/types/llm_as_judge_message_content_public.py +26 -0
- opik/rest_api/types/llm_as_judge_message_content_write.py +26 -0
- opik/rest_api/types/llm_as_judge_message_public.py +5 -1
- opik/rest_api/types/llm_as_judge_message_write.py +5 -1
- opik/rest_api/types/llm_as_judge_model_parameters.py +3 -0
- opik/rest_api/types/llm_as_judge_model_parameters_public.py +3 -0
- opik/rest_api/types/llm_as_judge_model_parameters_write.py +3 -0
- opik/rest_api/types/manual_evaluation_request.py +38 -0
- opik/rest_api/types/manual_evaluation_request_entity_type.py +5 -0
- opik/rest_api/types/manual_evaluation_response.py +27 -0
- opik/rest_api/types/optimization.py +4 -2
- opik/rest_api/types/optimization_public.py +4 -2
- 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 +4 -2
- opik/rest_api/types/optimization_write_status.py +3 -1
- opik/rest_api/types/project.py +1 -0
- opik/rest_api/types/project_detailed.py +1 -0
- opik/rest_api/types/project_reference.py +31 -0
- opik/rest_api/types/project_reference_public.py +31 -0
- opik/rest_api/types/project_stats_summary_item.py +1 -0
- 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 +3 -0
- opik/rest_api/types/prompt_version_detail.py +3 -0
- opik/rest_api/types/prompt_version_detail_template_structure.py +5 -0
- opik/rest_api/types/prompt_version_link.py +1 -0
- opik/rest_api/types/prompt_version_link_public.py +1 -0
- opik/rest_api/types/prompt_version_page_public.py +5 -0
- opik/rest_api/types/prompt_version_public.py +3 -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/prompt_version_update.py +33 -0
- opik/rest_api/types/provider_api_key.py +9 -0
- opik/rest_api/types/provider_api_key_provider.py +1 -1
- opik/rest_api/types/provider_api_key_public.py +9 -0
- opik/rest_api/types/provider_api_key_public_provider.py +1 -1
- opik/rest_api/types/score_name.py +1 -0
- opik/rest_api/types/service_toggles_config.py +18 -0
- opik/rest_api/types/span.py +1 -2
- opik/rest_api/types/span_enrichment_options.py +31 -0
- opik/rest_api/types/span_experiment_item_bulk_write_view.py +1 -2
- 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/span_public.py +1 -2
- opik/rest_api/types/span_update.py +46 -0
- opik/rest_api/types/span_user_defined_metric_python_code.py +20 -0
- opik/rest_api/types/span_user_defined_metric_python_code_public.py +20 -0
- opik/rest_api/types/span_user_defined_metric_python_code_write.py +20 -0
- opik/rest_api/types/span_write.py +1 -2
- 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 +11 -2
- opik/rest_api/types/trace_enrichment_options.py +32 -0
- opik/rest_api/types/trace_experiment_item_bulk_write_view.py +1 -2
- opik/rest_api/types/trace_filter.py +23 -0
- opik/rest_api/types/trace_filter_operator.py +21 -0
- opik/rest_api/types/trace_filter_write.py +23 -0
- opik/rest_api/types/trace_filter_write_operator.py +21 -0
- opik/rest_api/types/trace_public.py +11 -2
- 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/trace_thread_identifier.py +1 -0
- opik/rest_api/types/trace_update.py +39 -0
- opik/rest_api/types/trace_write.py +1 -2
- 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/rest_api/types/video_url.py +19 -0
- opik/rest_api/types/video_url_public.py +19 -0
- opik/rest_api/types/video_url_write.py +19 -0
- opik/rest_api/types/webhook.py +28 -0
- opik/rest_api/types/webhook_examples.py +19 -0
- opik/rest_api/types/webhook_public.py +28 -0
- opik/rest_api/types/webhook_test_result.py +23 -0
- opik/rest_api/types/webhook_test_result_status.py +5 -0
- opik/rest_api/types/webhook_write.py +23 -0
- opik/rest_api/types/welcome_wizard_tracking.py +22 -0
- opik/rest_api/types/workspace_configuration.py +5 -0
- opik/rest_api/welcome_wizard/__init__.py +4 -0
- opik/rest_api/welcome_wizard/client.py +195 -0
- opik/rest_api/welcome_wizard/raw_client.py +208 -0
- opik/rest_api/workspaces/client.py +14 -2
- opik/rest_api/workspaces/raw_client.py +10 -0
- opik/s3_httpx_client.py +14 -1
- opik/simulation/__init__.py +6 -0
- opik/simulation/simulated_user.py +99 -0
- opik/simulation/simulator.py +108 -0
- opik/synchronization.py +5 -6
- opik/{decorator/tracing_runtime_config.py → tracing_runtime_config.py} +6 -7
- opik/types.py +36 -0
- opik/validation/chat_prompt_messages.py +241 -0
- opik/validation/feedback_score.py +3 -3
- opik/validation/validator.py +28 -0
- opik-1.9.71.dist-info/METADATA +370 -0
- opik-1.9.71.dist-info/RECORD +1110 -0
- opik/api_objects/prompt/prompt.py +0 -112
- opik/cli.py +0 -193
- opik/hooks.py +0 -13
- opik/integrations/bedrock/chunks_aggregator.py +0 -55
- opik/integrations/bedrock/helpers.py +0 -8
- opik/rest_api/types/automation_rule_evaluator_object_public.py +0 -100
- opik/rest_api/types/json_node_experiment_item_bulk_write_view.py +0 -5
- opik-1.8.39.dist-info/METADATA +0 -339
- opik-1.8.39.dist-info/RECORD +0 -790
- /opik/{evaluation/metrics/conversation/conversational_coherence → decorator/context_manager}/__init__.py +0 -0
- /opik/evaluation/metrics/conversation/{session_completeness → llm_judges/conversational_coherence}/__init__.py +0 -0
- /opik/evaluation/metrics/conversation/{conversational_coherence → llm_judges/conversational_coherence}/schema.py +0 -0
- /opik/evaluation/metrics/conversation/{user_frustration → llm_judges/session_completeness}/__init__.py +0 -0
- /opik/evaluation/metrics/conversation/{session_completeness → llm_judges/session_completeness}/schema.py +0 -0
- /opik/evaluation/metrics/conversation/{user_frustration → llm_judges/user_frustration}/schema.py +0 -0
- /opik/integrations/bedrock/{stream_wrappers.py → converse/stream_wrappers.py} +0 -0
- /opik/rest_api/{spans/types → types}/span_update_type.py +0 -0
- {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/WHEEL +0 -0
- {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/entry_points.txt +0 -0
- {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/licenses/LICENSE +0 -0
- {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/top_level.txt +0 -0
opik/rest_api/datasets/client.py
CHANGED
|
@@ -4,13 +4,25 @@ import typing
|
|
|
4
4
|
|
|
5
5
|
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
6
6
|
from ..core.request_options import RequestOptions
|
|
7
|
+
from ..types.dataset_expansion_response import DatasetExpansionResponse
|
|
8
|
+
from ..types.dataset_item_changes_public import DatasetItemChangesPublic
|
|
9
|
+
from ..types.dataset_item_filter import DatasetItemFilter
|
|
7
10
|
from ..types.dataset_item_page_compare import DatasetItemPageCompare
|
|
8
11
|
from ..types.dataset_item_page_public import DatasetItemPagePublic
|
|
9
12
|
from ..types.dataset_item_public import DatasetItemPublic
|
|
13
|
+
from ..types.dataset_item_update import DatasetItemUpdate
|
|
10
14
|
from ..types.dataset_item_write import DatasetItemWrite
|
|
15
|
+
from ..types.dataset_item_write_source import DatasetItemWriteSource
|
|
11
16
|
from ..types.dataset_page_public import DatasetPagePublic
|
|
12
17
|
from ..types.dataset_public import DatasetPublic
|
|
18
|
+
from ..types.dataset_version_diff import DatasetVersionDiff
|
|
19
|
+
from ..types.dataset_version_page_public import DatasetVersionPagePublic
|
|
20
|
+
from ..types.dataset_version_public import DatasetVersionPublic
|
|
21
|
+
from ..types.json_node import JsonNode
|
|
13
22
|
from ..types.page_columns import PageColumns
|
|
23
|
+
from ..types.project_stats_public import ProjectStatsPublic
|
|
24
|
+
from ..types.span_enrichment_options import SpanEnrichmentOptions
|
|
25
|
+
from ..types.trace_enrichment_options import TraceEnrichmentOptions
|
|
14
26
|
from .raw_client import AsyncRawDatasetsClient, RawDatasetsClient
|
|
15
27
|
from .types.dataset_update_visibility import DatasetUpdateVisibility
|
|
16
28
|
from .types.dataset_write_visibility import DatasetWriteVisibility
|
|
@@ -34,6 +46,104 @@ class DatasetsClient:
|
|
|
34
46
|
"""
|
|
35
47
|
return self._raw_client
|
|
36
48
|
|
|
49
|
+
def apply_dataset_item_changes(
|
|
50
|
+
self,
|
|
51
|
+
id: str,
|
|
52
|
+
*,
|
|
53
|
+
request: DatasetItemChangesPublic,
|
|
54
|
+
override: typing.Optional[bool] = None,
|
|
55
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
56
|
+
) -> DatasetVersionPublic:
|
|
57
|
+
"""
|
|
58
|
+
Apply delta changes (add, edit, delete) to a dataset version with conflict detection.
|
|
59
|
+
|
|
60
|
+
This endpoint:
|
|
61
|
+
- Creates a new version with the applied changes
|
|
62
|
+
- Validates that baseVersion matches the latest version (unless override=true)
|
|
63
|
+
- Returns 409 Conflict if baseVersion is stale and override is not set
|
|
64
|
+
|
|
65
|
+
Use `override=true` query parameter to force version creation even with stale baseVersion.
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
id : str
|
|
70
|
+
|
|
71
|
+
request : DatasetItemChangesPublic
|
|
72
|
+
|
|
73
|
+
override : typing.Optional[bool]
|
|
74
|
+
|
|
75
|
+
request_options : typing.Optional[RequestOptions]
|
|
76
|
+
Request-specific configuration.
|
|
77
|
+
|
|
78
|
+
Returns
|
|
79
|
+
-------
|
|
80
|
+
DatasetVersionPublic
|
|
81
|
+
Version created successfully
|
|
82
|
+
|
|
83
|
+
Examples
|
|
84
|
+
--------
|
|
85
|
+
from Opik import OpikApi
|
|
86
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
87
|
+
client.datasets.apply_dataset_item_changes(id='id', request={'key': 'value'
|
|
88
|
+
}, )
|
|
89
|
+
"""
|
|
90
|
+
_response = self._raw_client.apply_dataset_item_changes(
|
|
91
|
+
id, request=request, override=override, request_options=request_options
|
|
92
|
+
)
|
|
93
|
+
return _response.data
|
|
94
|
+
|
|
95
|
+
def batch_update_dataset_items(
|
|
96
|
+
self,
|
|
97
|
+
*,
|
|
98
|
+
update: DatasetItemUpdate,
|
|
99
|
+
ids: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
100
|
+
filters: typing.Optional[typing.Sequence[DatasetItemFilter]] = OMIT,
|
|
101
|
+
dataset_id: typing.Optional[str] = OMIT,
|
|
102
|
+
merge_tags: typing.Optional[bool] = OMIT,
|
|
103
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
104
|
+
) -> None:
|
|
105
|
+
"""
|
|
106
|
+
Update multiple dataset items
|
|
107
|
+
|
|
108
|
+
Parameters
|
|
109
|
+
----------
|
|
110
|
+
update : DatasetItemUpdate
|
|
111
|
+
|
|
112
|
+
ids : typing.Optional[typing.Sequence[str]]
|
|
113
|
+
List of dataset item IDs to update (max 1000). Mutually exclusive with 'filters'.
|
|
114
|
+
|
|
115
|
+
filters : typing.Optional[typing.Sequence[DatasetItemFilter]]
|
|
116
|
+
|
|
117
|
+
dataset_id : typing.Optional[str]
|
|
118
|
+
Dataset ID. Required when using 'filters', optional when using 'ids'.
|
|
119
|
+
|
|
120
|
+
merge_tags : typing.Optional[bool]
|
|
121
|
+
If true, merge tags with existing tags instead of replacing them. Default: false. When using 'filters', this is automatically set to true.
|
|
122
|
+
|
|
123
|
+
request_options : typing.Optional[RequestOptions]
|
|
124
|
+
Request-specific configuration.
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
None
|
|
129
|
+
|
|
130
|
+
Examples
|
|
131
|
+
--------
|
|
132
|
+
from Opik import OpikApi
|
|
133
|
+
from Opik import DatasetItemUpdate
|
|
134
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
135
|
+
client.datasets.batch_update_dataset_items(update=DatasetItemUpdate(), )
|
|
136
|
+
"""
|
|
137
|
+
_response = self._raw_client.batch_update_dataset_items(
|
|
138
|
+
update=update,
|
|
139
|
+
ids=ids,
|
|
140
|
+
filters=filters,
|
|
141
|
+
dataset_id=dataset_id,
|
|
142
|
+
merge_tags=merge_tags,
|
|
143
|
+
request_options=request_options,
|
|
144
|
+
)
|
|
145
|
+
return _response.data
|
|
146
|
+
|
|
37
147
|
def find_datasets(
|
|
38
148
|
self,
|
|
39
149
|
*,
|
|
@@ -179,6 +289,119 @@ class DatasetsClient:
|
|
|
179
289
|
)
|
|
180
290
|
return _response.data
|
|
181
291
|
|
|
292
|
+
def create_dataset_items_from_csv(
|
|
293
|
+
self,
|
|
294
|
+
*,
|
|
295
|
+
file: typing.Dict[str, typing.Optional[typing.Any]],
|
|
296
|
+
dataset_id: str,
|
|
297
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
298
|
+
) -> None:
|
|
299
|
+
"""
|
|
300
|
+
Create dataset items from uploaded CSV file. CSV should have headers in the first row. Processing happens asynchronously in batches.
|
|
301
|
+
|
|
302
|
+
Parameters
|
|
303
|
+
----------
|
|
304
|
+
file : typing.Dict[str, typing.Optional[typing.Any]]
|
|
305
|
+
|
|
306
|
+
dataset_id : str
|
|
307
|
+
|
|
308
|
+
request_options : typing.Optional[RequestOptions]
|
|
309
|
+
Request-specific configuration.
|
|
310
|
+
|
|
311
|
+
Returns
|
|
312
|
+
-------
|
|
313
|
+
None
|
|
314
|
+
|
|
315
|
+
Examples
|
|
316
|
+
--------
|
|
317
|
+
from Opik import OpikApi
|
|
318
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
319
|
+
client.datasets.create_dataset_items_from_csv(file={'key': 'value'
|
|
320
|
+
}, dataset_id='dataset_id', )
|
|
321
|
+
"""
|
|
322
|
+
_response = self._raw_client.create_dataset_items_from_csv(
|
|
323
|
+
file=file, dataset_id=dataset_id, request_options=request_options
|
|
324
|
+
)
|
|
325
|
+
return _response.data
|
|
326
|
+
|
|
327
|
+
def create_dataset_items_from_spans(
|
|
328
|
+
self,
|
|
329
|
+
dataset_id: str,
|
|
330
|
+
*,
|
|
331
|
+
span_ids: typing.Sequence[str],
|
|
332
|
+
enrichment_options: SpanEnrichmentOptions,
|
|
333
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
334
|
+
) -> None:
|
|
335
|
+
"""
|
|
336
|
+
Create dataset items from spans with enriched metadata
|
|
337
|
+
|
|
338
|
+
Parameters
|
|
339
|
+
----------
|
|
340
|
+
dataset_id : str
|
|
341
|
+
|
|
342
|
+
span_ids : typing.Sequence[str]
|
|
343
|
+
Set of span IDs to add to the dataset
|
|
344
|
+
|
|
345
|
+
enrichment_options : SpanEnrichmentOptions
|
|
346
|
+
|
|
347
|
+
request_options : typing.Optional[RequestOptions]
|
|
348
|
+
Request-specific configuration.
|
|
349
|
+
|
|
350
|
+
Returns
|
|
351
|
+
-------
|
|
352
|
+
None
|
|
353
|
+
|
|
354
|
+
Examples
|
|
355
|
+
--------
|
|
356
|
+
from Opik import OpikApi
|
|
357
|
+
from Opik import SpanEnrichmentOptions
|
|
358
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
359
|
+
client.datasets.create_dataset_items_from_spans(dataset_id='dataset_id', span_ids=['span_ids'], enrichment_options=SpanEnrichmentOptions(), )
|
|
360
|
+
"""
|
|
361
|
+
_response = self._raw_client.create_dataset_items_from_spans(
|
|
362
|
+
dataset_id, span_ids=span_ids, enrichment_options=enrichment_options, request_options=request_options
|
|
363
|
+
)
|
|
364
|
+
return _response.data
|
|
365
|
+
|
|
366
|
+
def create_dataset_items_from_traces(
|
|
367
|
+
self,
|
|
368
|
+
dataset_id: str,
|
|
369
|
+
*,
|
|
370
|
+
trace_ids: typing.Sequence[str],
|
|
371
|
+
enrichment_options: TraceEnrichmentOptions,
|
|
372
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
373
|
+
) -> None:
|
|
374
|
+
"""
|
|
375
|
+
Create dataset items from traces with enriched metadata
|
|
376
|
+
|
|
377
|
+
Parameters
|
|
378
|
+
----------
|
|
379
|
+
dataset_id : str
|
|
380
|
+
|
|
381
|
+
trace_ids : typing.Sequence[str]
|
|
382
|
+
Set of trace IDs to add to the dataset
|
|
383
|
+
|
|
384
|
+
enrichment_options : TraceEnrichmentOptions
|
|
385
|
+
|
|
386
|
+
request_options : typing.Optional[RequestOptions]
|
|
387
|
+
Request-specific configuration.
|
|
388
|
+
|
|
389
|
+
Returns
|
|
390
|
+
-------
|
|
391
|
+
None
|
|
392
|
+
|
|
393
|
+
Examples
|
|
394
|
+
--------
|
|
395
|
+
from Opik import OpikApi
|
|
396
|
+
from Opik import TraceEnrichmentOptions
|
|
397
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
398
|
+
client.datasets.create_dataset_items_from_traces(dataset_id='dataset_id', trace_ids=['trace_ids'], enrichment_options=TraceEnrichmentOptions(), )
|
|
399
|
+
"""
|
|
400
|
+
_response = self._raw_client.create_dataset_items_from_traces(
|
|
401
|
+
dataset_id, trace_ids=trace_ids, enrichment_options=enrichment_options, request_options=request_options
|
|
402
|
+
)
|
|
403
|
+
return _response.data
|
|
404
|
+
|
|
182
405
|
def get_dataset_by_id(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> DatasetPublic:
|
|
183
406
|
"""
|
|
184
407
|
Get dataset by id
|
|
@@ -298,14 +521,30 @@ class DatasetsClient:
|
|
|
298
521
|
return _response.data
|
|
299
522
|
|
|
300
523
|
def delete_dataset_items(
|
|
301
|
-
self,
|
|
524
|
+
self,
|
|
525
|
+
*,
|
|
526
|
+
item_ids: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
527
|
+
dataset_id: typing.Optional[str] = OMIT,
|
|
528
|
+
filters: typing.Optional[typing.Sequence[DatasetItemFilter]] = OMIT,
|
|
529
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
302
530
|
) -> None:
|
|
303
531
|
"""
|
|
304
|
-
Delete dataset items
|
|
532
|
+
Delete dataset items using one of two modes:
|
|
533
|
+
1. **Delete by IDs**: Provide 'item_ids' to delete specific items by their IDs
|
|
534
|
+
2. **Delete by filters**: Provide 'dataset_id' with optional 'filters' to delete items matching criteria
|
|
535
|
+
|
|
536
|
+
When using filters, an empty 'filters' array will delete all items in the specified dataset.
|
|
305
537
|
|
|
306
538
|
Parameters
|
|
307
539
|
----------
|
|
308
|
-
item_ids : typing.Sequence[str]
|
|
540
|
+
item_ids : typing.Optional[typing.Sequence[str]]
|
|
541
|
+
List of dataset item IDs to delete (max 1000). Use this to delete specific items by their IDs. Mutually exclusive with 'dataset_id' and 'filters'.
|
|
542
|
+
|
|
543
|
+
dataset_id : typing.Optional[str]
|
|
544
|
+
Dataset ID to scope the deletion. Required when using 'filters'. Mutually exclusive with 'item_ids'.
|
|
545
|
+
|
|
546
|
+
filters : typing.Optional[typing.Sequence[DatasetItemFilter]]
|
|
547
|
+
Filters to select dataset items to delete within the specified dataset. Must be used with 'dataset_id'. Mutually exclusive with 'item_ids'. Empty array means 'delete all items in the dataset'.
|
|
309
548
|
|
|
310
549
|
request_options : typing.Optional[RequestOptions]
|
|
311
550
|
Request-specific configuration.
|
|
@@ -318,9 +557,11 @@ class DatasetsClient:
|
|
|
318
557
|
--------
|
|
319
558
|
from Opik import OpikApi
|
|
320
559
|
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
321
|
-
client.datasets.delete_dataset_items(
|
|
560
|
+
client.datasets.delete_dataset_items()
|
|
322
561
|
"""
|
|
323
|
-
_response = self._raw_client.delete_dataset_items(
|
|
562
|
+
_response = self._raw_client.delete_dataset_items(
|
|
563
|
+
item_ids=item_ids, dataset_id=dataset_id, filters=filters, request_options=request_options
|
|
564
|
+
)
|
|
324
565
|
return _response.data
|
|
325
566
|
|
|
326
567
|
def delete_datasets_batch(
|
|
@@ -349,6 +590,64 @@ class DatasetsClient:
|
|
|
349
590
|
_response = self._raw_client.delete_datasets_batch(ids=ids, request_options=request_options)
|
|
350
591
|
return _response.data
|
|
351
592
|
|
|
593
|
+
def expand_dataset(
|
|
594
|
+
self,
|
|
595
|
+
id: str,
|
|
596
|
+
*,
|
|
597
|
+
model: str,
|
|
598
|
+
sample_count: typing.Optional[int] = OMIT,
|
|
599
|
+
preserve_fields: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
600
|
+
variation_instructions: typing.Optional[str] = OMIT,
|
|
601
|
+
custom_prompt: typing.Optional[str] = OMIT,
|
|
602
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
603
|
+
) -> DatasetExpansionResponse:
|
|
604
|
+
"""
|
|
605
|
+
Generate synthetic dataset samples using LLM based on existing data patterns
|
|
606
|
+
|
|
607
|
+
Parameters
|
|
608
|
+
----------
|
|
609
|
+
id : str
|
|
610
|
+
|
|
611
|
+
model : str
|
|
612
|
+
The model to use for synthetic data generation
|
|
613
|
+
|
|
614
|
+
sample_count : typing.Optional[int]
|
|
615
|
+
Number of synthetic samples to generate
|
|
616
|
+
|
|
617
|
+
preserve_fields : typing.Optional[typing.Sequence[str]]
|
|
618
|
+
Fields to preserve patterns from original data
|
|
619
|
+
|
|
620
|
+
variation_instructions : typing.Optional[str]
|
|
621
|
+
Additional instructions for data variation
|
|
622
|
+
|
|
623
|
+
custom_prompt : typing.Optional[str]
|
|
624
|
+
Custom prompt to use for generation instead of auto-generated one
|
|
625
|
+
|
|
626
|
+
request_options : typing.Optional[RequestOptions]
|
|
627
|
+
Request-specific configuration.
|
|
628
|
+
|
|
629
|
+
Returns
|
|
630
|
+
-------
|
|
631
|
+
DatasetExpansionResponse
|
|
632
|
+
Generated synthetic samples
|
|
633
|
+
|
|
634
|
+
Examples
|
|
635
|
+
--------
|
|
636
|
+
from Opik import OpikApi
|
|
637
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
638
|
+
client.datasets.expand_dataset(id='id', model='gpt-4', )
|
|
639
|
+
"""
|
|
640
|
+
_response = self._raw_client.expand_dataset(
|
|
641
|
+
id,
|
|
642
|
+
model=model,
|
|
643
|
+
sample_count=sample_count,
|
|
644
|
+
preserve_fields=preserve_fields,
|
|
645
|
+
variation_instructions=variation_instructions,
|
|
646
|
+
custom_prompt=custom_prompt,
|
|
647
|
+
request_options=request_options,
|
|
648
|
+
)
|
|
649
|
+
return _response.data
|
|
650
|
+
|
|
352
651
|
def find_dataset_items_with_experiment_items(
|
|
353
652
|
self,
|
|
354
653
|
id: str,
|
|
@@ -357,6 +656,8 @@ class DatasetsClient:
|
|
|
357
656
|
page: typing.Optional[int] = None,
|
|
358
657
|
size: typing.Optional[int] = None,
|
|
359
658
|
filters: typing.Optional[str] = None,
|
|
659
|
+
sorting: typing.Optional[str] = None,
|
|
660
|
+
search: typing.Optional[str] = None,
|
|
360
661
|
truncate: typing.Optional[bool] = None,
|
|
361
662
|
request_options: typing.Optional[RequestOptions] = None,
|
|
362
663
|
) -> DatasetItemPageCompare:
|
|
@@ -375,6 +676,10 @@ class DatasetsClient:
|
|
|
375
676
|
|
|
376
677
|
filters : typing.Optional[str]
|
|
377
678
|
|
|
679
|
+
sorting : typing.Optional[str]
|
|
680
|
+
|
|
681
|
+
search : typing.Optional[str]
|
|
682
|
+
|
|
378
683
|
truncate : typing.Optional[bool]
|
|
379
684
|
|
|
380
685
|
request_options : typing.Optional[RequestOptions]
|
|
@@ -397,6 +702,8 @@ class DatasetsClient:
|
|
|
397
702
|
page=page,
|
|
398
703
|
size=size,
|
|
399
704
|
filters=filters,
|
|
705
|
+
sorting=sorting,
|
|
706
|
+
search=search,
|
|
400
707
|
truncate=truncate,
|
|
401
708
|
request_options=request_options,
|
|
402
709
|
)
|
|
@@ -431,6 +738,44 @@ class DatasetsClient:
|
|
|
431
738
|
)
|
|
432
739
|
return _response.data
|
|
433
740
|
|
|
741
|
+
def get_dataset_experiment_items_stats(
|
|
742
|
+
self,
|
|
743
|
+
id: str,
|
|
744
|
+
*,
|
|
745
|
+
experiment_ids: str,
|
|
746
|
+
filters: typing.Optional[str] = None,
|
|
747
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
748
|
+
) -> ProjectStatsPublic:
|
|
749
|
+
"""
|
|
750
|
+
Get experiment items stats for dataset
|
|
751
|
+
|
|
752
|
+
Parameters
|
|
753
|
+
----------
|
|
754
|
+
id : str
|
|
755
|
+
|
|
756
|
+
experiment_ids : str
|
|
757
|
+
|
|
758
|
+
filters : typing.Optional[str]
|
|
759
|
+
|
|
760
|
+
request_options : typing.Optional[RequestOptions]
|
|
761
|
+
Request-specific configuration.
|
|
762
|
+
|
|
763
|
+
Returns
|
|
764
|
+
-------
|
|
765
|
+
ProjectStatsPublic
|
|
766
|
+
Experiment items stats resource
|
|
767
|
+
|
|
768
|
+
Examples
|
|
769
|
+
--------
|
|
770
|
+
from Opik import OpikApi
|
|
771
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
772
|
+
client.datasets.get_dataset_experiment_items_stats(id='id', experiment_ids='experiment_ids', )
|
|
773
|
+
"""
|
|
774
|
+
_response = self._raw_client.get_dataset_experiment_items_stats(
|
|
775
|
+
id, experiment_ids=experiment_ids, filters=filters, request_options=request_options
|
|
776
|
+
)
|
|
777
|
+
return _response.data
|
|
778
|
+
|
|
434
779
|
def get_dataset_item_by_id(
|
|
435
780
|
self, item_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
436
781
|
) -> DatasetItemPublic:
|
|
@@ -458,12 +803,71 @@ class DatasetsClient:
|
|
|
458
803
|
_response = self._raw_client.get_dataset_item_by_id(item_id, request_options=request_options)
|
|
459
804
|
return _response.data
|
|
460
805
|
|
|
806
|
+
def patch_dataset_item(
|
|
807
|
+
self,
|
|
808
|
+
item_id: str,
|
|
809
|
+
*,
|
|
810
|
+
source: DatasetItemWriteSource,
|
|
811
|
+
data: JsonNode,
|
|
812
|
+
id: typing.Optional[str] = OMIT,
|
|
813
|
+
trace_id: typing.Optional[str] = OMIT,
|
|
814
|
+
span_id: typing.Optional[str] = OMIT,
|
|
815
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
816
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
817
|
+
) -> None:
|
|
818
|
+
"""
|
|
819
|
+
Partially update dataset item by id. Only provided fields will be updated.
|
|
820
|
+
|
|
821
|
+
Parameters
|
|
822
|
+
----------
|
|
823
|
+
item_id : str
|
|
824
|
+
|
|
825
|
+
source : DatasetItemWriteSource
|
|
826
|
+
|
|
827
|
+
data : JsonNode
|
|
828
|
+
|
|
829
|
+
id : typing.Optional[str]
|
|
830
|
+
|
|
831
|
+
trace_id : typing.Optional[str]
|
|
832
|
+
|
|
833
|
+
span_id : typing.Optional[str]
|
|
834
|
+
|
|
835
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
836
|
+
|
|
837
|
+
request_options : typing.Optional[RequestOptions]
|
|
838
|
+
Request-specific configuration.
|
|
839
|
+
|
|
840
|
+
Returns
|
|
841
|
+
-------
|
|
842
|
+
None
|
|
843
|
+
|
|
844
|
+
Examples
|
|
845
|
+
--------
|
|
846
|
+
from Opik import OpikApi
|
|
847
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
848
|
+
client.datasets.patch_dataset_item(item_id='itemId', source="manual", data={'key': 'value'
|
|
849
|
+
}, )
|
|
850
|
+
"""
|
|
851
|
+
_response = self._raw_client.patch_dataset_item(
|
|
852
|
+
item_id,
|
|
853
|
+
source=source,
|
|
854
|
+
data=data,
|
|
855
|
+
id=id,
|
|
856
|
+
trace_id=trace_id,
|
|
857
|
+
span_id=span_id,
|
|
858
|
+
tags=tags,
|
|
859
|
+
request_options=request_options,
|
|
860
|
+
)
|
|
861
|
+
return _response.data
|
|
862
|
+
|
|
461
863
|
def get_dataset_items(
|
|
462
864
|
self,
|
|
463
865
|
id: str,
|
|
464
866
|
*,
|
|
465
867
|
page: typing.Optional[int] = None,
|
|
466
868
|
size: typing.Optional[int] = None,
|
|
869
|
+
version: typing.Optional[str] = None,
|
|
870
|
+
filters: typing.Optional[str] = None,
|
|
467
871
|
truncate: typing.Optional[bool] = None,
|
|
468
872
|
request_options: typing.Optional[RequestOptions] = None,
|
|
469
873
|
) -> DatasetItemPagePublic:
|
|
@@ -478,6 +882,10 @@ class DatasetsClient:
|
|
|
478
882
|
|
|
479
883
|
size : typing.Optional[int]
|
|
480
884
|
|
|
885
|
+
version : typing.Optional[str]
|
|
886
|
+
|
|
887
|
+
filters : typing.Optional[str]
|
|
888
|
+
|
|
481
889
|
truncate : typing.Optional[bool]
|
|
482
890
|
|
|
483
891
|
request_options : typing.Optional[RequestOptions]
|
|
@@ -495,12 +903,18 @@ class DatasetsClient:
|
|
|
495
903
|
client.datasets.get_dataset_items(id='id', )
|
|
496
904
|
"""
|
|
497
905
|
_response = self._raw_client.get_dataset_items(
|
|
498
|
-
id,
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
906
|
+
id,
|
|
907
|
+
page=page,
|
|
908
|
+
size=size,
|
|
909
|
+
version=version,
|
|
910
|
+
filters=filters,
|
|
911
|
+
truncate=truncate,
|
|
912
|
+
request_options=request_options,
|
|
913
|
+
)
|
|
914
|
+
return _response.data
|
|
915
|
+
|
|
916
|
+
def get_dataset_items_output_columns(
|
|
917
|
+
self,
|
|
504
918
|
id: str,
|
|
505
919
|
*,
|
|
506
920
|
experiment_ids: typing.Optional[str] = None,
|
|
@@ -569,6 +983,208 @@ class DatasetsClient:
|
|
|
569
983
|
) as r:
|
|
570
984
|
yield from r.data
|
|
571
985
|
|
|
986
|
+
def compare_dataset_versions(
|
|
987
|
+
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
988
|
+
) -> DatasetVersionDiff:
|
|
989
|
+
"""
|
|
990
|
+
Compare the latest committed dataset version with the current draft state. This endpoint provides insights into changes made since the last version was committed. The comparison calculates additions, modifications, deletions, and unchanged items between the latest version snapshot and current draft.
|
|
991
|
+
|
|
992
|
+
Parameters
|
|
993
|
+
----------
|
|
994
|
+
id : str
|
|
995
|
+
|
|
996
|
+
request_options : typing.Optional[RequestOptions]
|
|
997
|
+
Request-specific configuration.
|
|
998
|
+
|
|
999
|
+
Returns
|
|
1000
|
+
-------
|
|
1001
|
+
DatasetVersionDiff
|
|
1002
|
+
Diff computed successfully
|
|
1003
|
+
|
|
1004
|
+
Examples
|
|
1005
|
+
--------
|
|
1006
|
+
from Opik import OpikApi
|
|
1007
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1008
|
+
client.datasets.compare_dataset_versions(id='id', )
|
|
1009
|
+
"""
|
|
1010
|
+
_response = self._raw_client.compare_dataset_versions(id, request_options=request_options)
|
|
1011
|
+
return _response.data
|
|
1012
|
+
|
|
1013
|
+
def create_version_tag(
|
|
1014
|
+
self, version_hash: str, id: str, *, tag: str, request_options: typing.Optional[RequestOptions] = None
|
|
1015
|
+
) -> None:
|
|
1016
|
+
"""
|
|
1017
|
+
Add a tag to a specific dataset version for easy reference (e.g., 'baseline', 'v1.0', 'production')
|
|
1018
|
+
|
|
1019
|
+
Parameters
|
|
1020
|
+
----------
|
|
1021
|
+
version_hash : str
|
|
1022
|
+
|
|
1023
|
+
id : str
|
|
1024
|
+
|
|
1025
|
+
tag : str
|
|
1026
|
+
|
|
1027
|
+
request_options : typing.Optional[RequestOptions]
|
|
1028
|
+
Request-specific configuration.
|
|
1029
|
+
|
|
1030
|
+
Returns
|
|
1031
|
+
-------
|
|
1032
|
+
None
|
|
1033
|
+
|
|
1034
|
+
Examples
|
|
1035
|
+
--------
|
|
1036
|
+
from Opik import OpikApi
|
|
1037
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1038
|
+
client.datasets.create_version_tag(version_hash='versionHash', id='id', tag='tag', )
|
|
1039
|
+
"""
|
|
1040
|
+
_response = self._raw_client.create_version_tag(version_hash, id, tag=tag, request_options=request_options)
|
|
1041
|
+
return _response.data
|
|
1042
|
+
|
|
1043
|
+
def delete_version_tag(
|
|
1044
|
+
self, version_hash: str, tag: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
1045
|
+
) -> None:
|
|
1046
|
+
"""
|
|
1047
|
+
Remove a tag from a dataset version. The version itself is not deleted, only the tag reference.
|
|
1048
|
+
|
|
1049
|
+
Parameters
|
|
1050
|
+
----------
|
|
1051
|
+
version_hash : str
|
|
1052
|
+
|
|
1053
|
+
tag : str
|
|
1054
|
+
|
|
1055
|
+
id : str
|
|
1056
|
+
|
|
1057
|
+
request_options : typing.Optional[RequestOptions]
|
|
1058
|
+
Request-specific configuration.
|
|
1059
|
+
|
|
1060
|
+
Returns
|
|
1061
|
+
-------
|
|
1062
|
+
None
|
|
1063
|
+
|
|
1064
|
+
Examples
|
|
1065
|
+
--------
|
|
1066
|
+
from Opik import OpikApi
|
|
1067
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1068
|
+
client.datasets.delete_version_tag(version_hash='versionHash', tag='tag', id='id', )
|
|
1069
|
+
"""
|
|
1070
|
+
_response = self._raw_client.delete_version_tag(version_hash, tag, id, request_options=request_options)
|
|
1071
|
+
return _response.data
|
|
1072
|
+
|
|
1073
|
+
def list_dataset_versions(
|
|
1074
|
+
self,
|
|
1075
|
+
id: str,
|
|
1076
|
+
*,
|
|
1077
|
+
page: typing.Optional[int] = None,
|
|
1078
|
+
size: typing.Optional[int] = None,
|
|
1079
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1080
|
+
) -> DatasetVersionPagePublic:
|
|
1081
|
+
"""
|
|
1082
|
+
Get paginated list of versions for a dataset, ordered by creation time (newest first)
|
|
1083
|
+
|
|
1084
|
+
Parameters
|
|
1085
|
+
----------
|
|
1086
|
+
id : str
|
|
1087
|
+
|
|
1088
|
+
page : typing.Optional[int]
|
|
1089
|
+
|
|
1090
|
+
size : typing.Optional[int]
|
|
1091
|
+
|
|
1092
|
+
request_options : typing.Optional[RequestOptions]
|
|
1093
|
+
Request-specific configuration.
|
|
1094
|
+
|
|
1095
|
+
Returns
|
|
1096
|
+
-------
|
|
1097
|
+
DatasetVersionPagePublic
|
|
1098
|
+
Dataset versions
|
|
1099
|
+
|
|
1100
|
+
Examples
|
|
1101
|
+
--------
|
|
1102
|
+
from Opik import OpikApi
|
|
1103
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1104
|
+
client.datasets.list_dataset_versions(id='id', )
|
|
1105
|
+
"""
|
|
1106
|
+
_response = self._raw_client.list_dataset_versions(id, page=page, size=size, request_options=request_options)
|
|
1107
|
+
return _response.data
|
|
1108
|
+
|
|
1109
|
+
def restore_dataset_version(
|
|
1110
|
+
self, id: str, *, version_ref: str, request_options: typing.Optional[RequestOptions] = None
|
|
1111
|
+
) -> DatasetVersionPublic:
|
|
1112
|
+
"""
|
|
1113
|
+
Restores the dataset to a previous version state by creating a new version with items copied from the specified version. If the version is already the latest, returns it as-is (no-op).
|
|
1114
|
+
|
|
1115
|
+
Parameters
|
|
1116
|
+
----------
|
|
1117
|
+
id : str
|
|
1118
|
+
|
|
1119
|
+
version_ref : str
|
|
1120
|
+
Version hash or tag to restore from
|
|
1121
|
+
|
|
1122
|
+
request_options : typing.Optional[RequestOptions]
|
|
1123
|
+
Request-specific configuration.
|
|
1124
|
+
|
|
1125
|
+
Returns
|
|
1126
|
+
-------
|
|
1127
|
+
DatasetVersionPublic
|
|
1128
|
+
Version restored successfully
|
|
1129
|
+
|
|
1130
|
+
Examples
|
|
1131
|
+
--------
|
|
1132
|
+
from Opik import OpikApi
|
|
1133
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1134
|
+
client.datasets.restore_dataset_version(id='id', version_ref='version_ref', )
|
|
1135
|
+
"""
|
|
1136
|
+
_response = self._raw_client.restore_dataset_version(
|
|
1137
|
+
id, version_ref=version_ref, request_options=request_options
|
|
1138
|
+
)
|
|
1139
|
+
return _response.data
|
|
1140
|
+
|
|
1141
|
+
def update_dataset_version(
|
|
1142
|
+
self,
|
|
1143
|
+
version_hash: str,
|
|
1144
|
+
id: str,
|
|
1145
|
+
*,
|
|
1146
|
+
change_description: typing.Optional[str] = OMIT,
|
|
1147
|
+
tags_to_add: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1148
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1149
|
+
) -> DatasetVersionPublic:
|
|
1150
|
+
"""
|
|
1151
|
+
Update a dataset version's change_description and/or add new tags
|
|
1152
|
+
|
|
1153
|
+
Parameters
|
|
1154
|
+
----------
|
|
1155
|
+
version_hash : str
|
|
1156
|
+
|
|
1157
|
+
id : str
|
|
1158
|
+
|
|
1159
|
+
change_description : typing.Optional[str]
|
|
1160
|
+
Optional description of changes in this version
|
|
1161
|
+
|
|
1162
|
+
tags_to_add : typing.Optional[typing.Sequence[str]]
|
|
1163
|
+
Optional list of tags to add to this version
|
|
1164
|
+
|
|
1165
|
+
request_options : typing.Optional[RequestOptions]
|
|
1166
|
+
Request-specific configuration.
|
|
1167
|
+
|
|
1168
|
+
Returns
|
|
1169
|
+
-------
|
|
1170
|
+
DatasetVersionPublic
|
|
1171
|
+
Version updated successfully
|
|
1172
|
+
|
|
1173
|
+
Examples
|
|
1174
|
+
--------
|
|
1175
|
+
from Opik import OpikApi
|
|
1176
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1177
|
+
client.datasets.update_dataset_version(version_hash='versionHash', id='id', )
|
|
1178
|
+
"""
|
|
1179
|
+
_response = self._raw_client.update_dataset_version(
|
|
1180
|
+
version_hash,
|
|
1181
|
+
id,
|
|
1182
|
+
change_description=change_description,
|
|
1183
|
+
tags_to_add=tags_to_add,
|
|
1184
|
+
request_options=request_options,
|
|
1185
|
+
)
|
|
1186
|
+
return _response.data
|
|
1187
|
+
|
|
572
1188
|
|
|
573
1189
|
class AsyncDatasetsClient:
|
|
574
1190
|
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
@@ -585,6 +1201,110 @@ class AsyncDatasetsClient:
|
|
|
585
1201
|
"""
|
|
586
1202
|
return self._raw_client
|
|
587
1203
|
|
|
1204
|
+
async def apply_dataset_item_changes(
|
|
1205
|
+
self,
|
|
1206
|
+
id: str,
|
|
1207
|
+
*,
|
|
1208
|
+
request: DatasetItemChangesPublic,
|
|
1209
|
+
override: typing.Optional[bool] = None,
|
|
1210
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1211
|
+
) -> DatasetVersionPublic:
|
|
1212
|
+
"""
|
|
1213
|
+
Apply delta changes (add, edit, delete) to a dataset version with conflict detection.
|
|
1214
|
+
|
|
1215
|
+
This endpoint:
|
|
1216
|
+
- Creates a new version with the applied changes
|
|
1217
|
+
- Validates that baseVersion matches the latest version (unless override=true)
|
|
1218
|
+
- Returns 409 Conflict if baseVersion is stale and override is not set
|
|
1219
|
+
|
|
1220
|
+
Use `override=true` query parameter to force version creation even with stale baseVersion.
|
|
1221
|
+
|
|
1222
|
+
Parameters
|
|
1223
|
+
----------
|
|
1224
|
+
id : str
|
|
1225
|
+
|
|
1226
|
+
request : DatasetItemChangesPublic
|
|
1227
|
+
|
|
1228
|
+
override : typing.Optional[bool]
|
|
1229
|
+
|
|
1230
|
+
request_options : typing.Optional[RequestOptions]
|
|
1231
|
+
Request-specific configuration.
|
|
1232
|
+
|
|
1233
|
+
Returns
|
|
1234
|
+
-------
|
|
1235
|
+
DatasetVersionPublic
|
|
1236
|
+
Version created successfully
|
|
1237
|
+
|
|
1238
|
+
Examples
|
|
1239
|
+
--------
|
|
1240
|
+
from Opik import AsyncOpikApi
|
|
1241
|
+
import asyncio
|
|
1242
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1243
|
+
async def main() -> None:
|
|
1244
|
+
await client.datasets.apply_dataset_item_changes(id='id', request={'key': 'value'
|
|
1245
|
+
}, )
|
|
1246
|
+
asyncio.run(main())
|
|
1247
|
+
"""
|
|
1248
|
+
_response = await self._raw_client.apply_dataset_item_changes(
|
|
1249
|
+
id, request=request, override=override, request_options=request_options
|
|
1250
|
+
)
|
|
1251
|
+
return _response.data
|
|
1252
|
+
|
|
1253
|
+
async def batch_update_dataset_items(
|
|
1254
|
+
self,
|
|
1255
|
+
*,
|
|
1256
|
+
update: DatasetItemUpdate,
|
|
1257
|
+
ids: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1258
|
+
filters: typing.Optional[typing.Sequence[DatasetItemFilter]] = OMIT,
|
|
1259
|
+
dataset_id: typing.Optional[str] = OMIT,
|
|
1260
|
+
merge_tags: typing.Optional[bool] = OMIT,
|
|
1261
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1262
|
+
) -> None:
|
|
1263
|
+
"""
|
|
1264
|
+
Update multiple dataset items
|
|
1265
|
+
|
|
1266
|
+
Parameters
|
|
1267
|
+
----------
|
|
1268
|
+
update : DatasetItemUpdate
|
|
1269
|
+
|
|
1270
|
+
ids : typing.Optional[typing.Sequence[str]]
|
|
1271
|
+
List of dataset item IDs to update (max 1000). Mutually exclusive with 'filters'.
|
|
1272
|
+
|
|
1273
|
+
filters : typing.Optional[typing.Sequence[DatasetItemFilter]]
|
|
1274
|
+
|
|
1275
|
+
dataset_id : typing.Optional[str]
|
|
1276
|
+
Dataset ID. Required when using 'filters', optional when using 'ids'.
|
|
1277
|
+
|
|
1278
|
+
merge_tags : typing.Optional[bool]
|
|
1279
|
+
If true, merge tags with existing tags instead of replacing them. Default: false. When using 'filters', this is automatically set to true.
|
|
1280
|
+
|
|
1281
|
+
request_options : typing.Optional[RequestOptions]
|
|
1282
|
+
Request-specific configuration.
|
|
1283
|
+
|
|
1284
|
+
Returns
|
|
1285
|
+
-------
|
|
1286
|
+
None
|
|
1287
|
+
|
|
1288
|
+
Examples
|
|
1289
|
+
--------
|
|
1290
|
+
from Opik import AsyncOpikApi
|
|
1291
|
+
from Opik import DatasetItemUpdate
|
|
1292
|
+
import asyncio
|
|
1293
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1294
|
+
async def main() -> None:
|
|
1295
|
+
await client.datasets.batch_update_dataset_items(update=DatasetItemUpdate(), )
|
|
1296
|
+
asyncio.run(main())
|
|
1297
|
+
"""
|
|
1298
|
+
_response = await self._raw_client.batch_update_dataset_items(
|
|
1299
|
+
update=update,
|
|
1300
|
+
ids=ids,
|
|
1301
|
+
filters=filters,
|
|
1302
|
+
dataset_id=dataset_id,
|
|
1303
|
+
merge_tags=merge_tags,
|
|
1304
|
+
request_options=request_options,
|
|
1305
|
+
)
|
|
1306
|
+
return _response.data
|
|
1307
|
+
|
|
588
1308
|
async def find_datasets(
|
|
589
1309
|
self,
|
|
590
1310
|
*,
|
|
@@ -739,23 +1459,28 @@ class AsyncDatasetsClient:
|
|
|
739
1459
|
)
|
|
740
1460
|
return _response.data
|
|
741
1461
|
|
|
742
|
-
async def
|
|
743
|
-
self,
|
|
744
|
-
|
|
1462
|
+
async def create_dataset_items_from_csv(
|
|
1463
|
+
self,
|
|
1464
|
+
*,
|
|
1465
|
+
file: typing.Dict[str, typing.Optional[typing.Any]],
|
|
1466
|
+
dataset_id: str,
|
|
1467
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1468
|
+
) -> None:
|
|
745
1469
|
"""
|
|
746
|
-
|
|
1470
|
+
Create dataset items from uploaded CSV file. CSV should have headers in the first row. Processing happens asynchronously in batches.
|
|
747
1471
|
|
|
748
1472
|
Parameters
|
|
749
1473
|
----------
|
|
750
|
-
|
|
1474
|
+
file : typing.Dict[str, typing.Optional[typing.Any]]
|
|
1475
|
+
|
|
1476
|
+
dataset_id : str
|
|
751
1477
|
|
|
752
1478
|
request_options : typing.Optional[RequestOptions]
|
|
753
1479
|
Request-specific configuration.
|
|
754
1480
|
|
|
755
1481
|
Returns
|
|
756
1482
|
-------
|
|
757
|
-
|
|
758
|
-
Dataset resource
|
|
1483
|
+
None
|
|
759
1484
|
|
|
760
1485
|
Examples
|
|
761
1486
|
--------
|
|
@@ -763,36 +1488,34 @@ class AsyncDatasetsClient:
|
|
|
763
1488
|
import asyncio
|
|
764
1489
|
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
765
1490
|
async def main() -> None:
|
|
766
|
-
await client.datasets.
|
|
1491
|
+
await client.datasets.create_dataset_items_from_csv(file={'key': 'value'
|
|
1492
|
+
}, dataset_id='dataset_id', )
|
|
767
1493
|
asyncio.run(main())
|
|
768
1494
|
"""
|
|
769
|
-
_response = await self._raw_client.
|
|
1495
|
+
_response = await self._raw_client.create_dataset_items_from_csv(
|
|
1496
|
+
file=file, dataset_id=dataset_id, request_options=request_options
|
|
1497
|
+
)
|
|
770
1498
|
return _response.data
|
|
771
1499
|
|
|
772
|
-
async def
|
|
1500
|
+
async def create_dataset_items_from_spans(
|
|
773
1501
|
self,
|
|
774
|
-
|
|
1502
|
+
dataset_id: str,
|
|
775
1503
|
*,
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
visibility: typing.Optional[DatasetUpdateVisibility] = OMIT,
|
|
779
|
-
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1504
|
+
span_ids: typing.Sequence[str],
|
|
1505
|
+
enrichment_options: SpanEnrichmentOptions,
|
|
780
1506
|
request_options: typing.Optional[RequestOptions] = None,
|
|
781
1507
|
) -> None:
|
|
782
1508
|
"""
|
|
783
|
-
|
|
1509
|
+
Create dataset items from spans with enriched metadata
|
|
784
1510
|
|
|
785
1511
|
Parameters
|
|
786
1512
|
----------
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
name : str
|
|
1513
|
+
dataset_id : str
|
|
790
1514
|
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
visibility : typing.Optional[DatasetUpdateVisibility]
|
|
1515
|
+
span_ids : typing.Sequence[str]
|
|
1516
|
+
Set of span IDs to add to the dataset
|
|
794
1517
|
|
|
795
|
-
|
|
1518
|
+
enrichment_options : SpanEnrichmentOptions
|
|
796
1519
|
|
|
797
1520
|
request_options : typing.Optional[RequestOptions]
|
|
798
1521
|
Request-specific configuration.
|
|
@@ -804,18 +1527,137 @@ class AsyncDatasetsClient:
|
|
|
804
1527
|
Examples
|
|
805
1528
|
--------
|
|
806
1529
|
from Opik import AsyncOpikApi
|
|
1530
|
+
from Opik import SpanEnrichmentOptions
|
|
807
1531
|
import asyncio
|
|
808
1532
|
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
809
1533
|
async def main() -> None:
|
|
810
|
-
await client.datasets.
|
|
1534
|
+
await client.datasets.create_dataset_items_from_spans(dataset_id='dataset_id', span_ids=['span_ids'], enrichment_options=SpanEnrichmentOptions(), )
|
|
811
1535
|
asyncio.run(main())
|
|
812
1536
|
"""
|
|
813
|
-
_response = await self._raw_client.
|
|
814
|
-
|
|
1537
|
+
_response = await self._raw_client.create_dataset_items_from_spans(
|
|
1538
|
+
dataset_id, span_ids=span_ids, enrichment_options=enrichment_options, request_options=request_options
|
|
815
1539
|
)
|
|
816
1540
|
return _response.data
|
|
817
1541
|
|
|
818
|
-
async def
|
|
1542
|
+
async def create_dataset_items_from_traces(
|
|
1543
|
+
self,
|
|
1544
|
+
dataset_id: str,
|
|
1545
|
+
*,
|
|
1546
|
+
trace_ids: typing.Sequence[str],
|
|
1547
|
+
enrichment_options: TraceEnrichmentOptions,
|
|
1548
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1549
|
+
) -> None:
|
|
1550
|
+
"""
|
|
1551
|
+
Create dataset items from traces with enriched metadata
|
|
1552
|
+
|
|
1553
|
+
Parameters
|
|
1554
|
+
----------
|
|
1555
|
+
dataset_id : str
|
|
1556
|
+
|
|
1557
|
+
trace_ids : typing.Sequence[str]
|
|
1558
|
+
Set of trace IDs to add to the dataset
|
|
1559
|
+
|
|
1560
|
+
enrichment_options : TraceEnrichmentOptions
|
|
1561
|
+
|
|
1562
|
+
request_options : typing.Optional[RequestOptions]
|
|
1563
|
+
Request-specific configuration.
|
|
1564
|
+
|
|
1565
|
+
Returns
|
|
1566
|
+
-------
|
|
1567
|
+
None
|
|
1568
|
+
|
|
1569
|
+
Examples
|
|
1570
|
+
--------
|
|
1571
|
+
from Opik import AsyncOpikApi
|
|
1572
|
+
from Opik import TraceEnrichmentOptions
|
|
1573
|
+
import asyncio
|
|
1574
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1575
|
+
async def main() -> None:
|
|
1576
|
+
await client.datasets.create_dataset_items_from_traces(dataset_id='dataset_id', trace_ids=['trace_ids'], enrichment_options=TraceEnrichmentOptions(), )
|
|
1577
|
+
asyncio.run(main())
|
|
1578
|
+
"""
|
|
1579
|
+
_response = await self._raw_client.create_dataset_items_from_traces(
|
|
1580
|
+
dataset_id, trace_ids=trace_ids, enrichment_options=enrichment_options, request_options=request_options
|
|
1581
|
+
)
|
|
1582
|
+
return _response.data
|
|
1583
|
+
|
|
1584
|
+
async def get_dataset_by_id(
|
|
1585
|
+
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
1586
|
+
) -> DatasetPublic:
|
|
1587
|
+
"""
|
|
1588
|
+
Get dataset by id
|
|
1589
|
+
|
|
1590
|
+
Parameters
|
|
1591
|
+
----------
|
|
1592
|
+
id : str
|
|
1593
|
+
|
|
1594
|
+
request_options : typing.Optional[RequestOptions]
|
|
1595
|
+
Request-specific configuration.
|
|
1596
|
+
|
|
1597
|
+
Returns
|
|
1598
|
+
-------
|
|
1599
|
+
DatasetPublic
|
|
1600
|
+
Dataset resource
|
|
1601
|
+
|
|
1602
|
+
Examples
|
|
1603
|
+
--------
|
|
1604
|
+
from Opik import AsyncOpikApi
|
|
1605
|
+
import asyncio
|
|
1606
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1607
|
+
async def main() -> None:
|
|
1608
|
+
await client.datasets.get_dataset_by_id(id='id', )
|
|
1609
|
+
asyncio.run(main())
|
|
1610
|
+
"""
|
|
1611
|
+
_response = await self._raw_client.get_dataset_by_id(id, request_options=request_options)
|
|
1612
|
+
return _response.data
|
|
1613
|
+
|
|
1614
|
+
async def update_dataset(
|
|
1615
|
+
self,
|
|
1616
|
+
id: str,
|
|
1617
|
+
*,
|
|
1618
|
+
name: str,
|
|
1619
|
+
description: typing.Optional[str] = OMIT,
|
|
1620
|
+
visibility: typing.Optional[DatasetUpdateVisibility] = OMIT,
|
|
1621
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1622
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1623
|
+
) -> None:
|
|
1624
|
+
"""
|
|
1625
|
+
Update dataset by id
|
|
1626
|
+
|
|
1627
|
+
Parameters
|
|
1628
|
+
----------
|
|
1629
|
+
id : str
|
|
1630
|
+
|
|
1631
|
+
name : str
|
|
1632
|
+
|
|
1633
|
+
description : typing.Optional[str]
|
|
1634
|
+
|
|
1635
|
+
visibility : typing.Optional[DatasetUpdateVisibility]
|
|
1636
|
+
|
|
1637
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
1638
|
+
|
|
1639
|
+
request_options : typing.Optional[RequestOptions]
|
|
1640
|
+
Request-specific configuration.
|
|
1641
|
+
|
|
1642
|
+
Returns
|
|
1643
|
+
-------
|
|
1644
|
+
None
|
|
1645
|
+
|
|
1646
|
+
Examples
|
|
1647
|
+
--------
|
|
1648
|
+
from Opik import AsyncOpikApi
|
|
1649
|
+
import asyncio
|
|
1650
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1651
|
+
async def main() -> None:
|
|
1652
|
+
await client.datasets.update_dataset(id='id', name='name', )
|
|
1653
|
+
asyncio.run(main())
|
|
1654
|
+
"""
|
|
1655
|
+
_response = await self._raw_client.update_dataset(
|
|
1656
|
+
id, name=name, description=description, visibility=visibility, tags=tags, request_options=request_options
|
|
1657
|
+
)
|
|
1658
|
+
return _response.data
|
|
1659
|
+
|
|
1660
|
+
async def delete_dataset(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
|
|
819
1661
|
"""
|
|
820
1662
|
Delete dataset by id
|
|
821
1663
|
|
|
@@ -874,14 +1716,30 @@ class AsyncDatasetsClient:
|
|
|
874
1716
|
return _response.data
|
|
875
1717
|
|
|
876
1718
|
async def delete_dataset_items(
|
|
877
|
-
self,
|
|
1719
|
+
self,
|
|
1720
|
+
*,
|
|
1721
|
+
item_ids: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1722
|
+
dataset_id: typing.Optional[str] = OMIT,
|
|
1723
|
+
filters: typing.Optional[typing.Sequence[DatasetItemFilter]] = OMIT,
|
|
1724
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
878
1725
|
) -> None:
|
|
879
1726
|
"""
|
|
880
|
-
Delete dataset items
|
|
1727
|
+
Delete dataset items using one of two modes:
|
|
1728
|
+
1. **Delete by IDs**: Provide 'item_ids' to delete specific items by their IDs
|
|
1729
|
+
2. **Delete by filters**: Provide 'dataset_id' with optional 'filters' to delete items matching criteria
|
|
1730
|
+
|
|
1731
|
+
When using filters, an empty 'filters' array will delete all items in the specified dataset.
|
|
881
1732
|
|
|
882
1733
|
Parameters
|
|
883
1734
|
----------
|
|
884
|
-
item_ids : typing.Sequence[str]
|
|
1735
|
+
item_ids : typing.Optional[typing.Sequence[str]]
|
|
1736
|
+
List of dataset item IDs to delete (max 1000). Use this to delete specific items by their IDs. Mutually exclusive with 'dataset_id' and 'filters'.
|
|
1737
|
+
|
|
1738
|
+
dataset_id : typing.Optional[str]
|
|
1739
|
+
Dataset ID to scope the deletion. Required when using 'filters'. Mutually exclusive with 'item_ids'.
|
|
1740
|
+
|
|
1741
|
+
filters : typing.Optional[typing.Sequence[DatasetItemFilter]]
|
|
1742
|
+
Filters to select dataset items to delete within the specified dataset. Must be used with 'dataset_id'. Mutually exclusive with 'item_ids'. Empty array means 'delete all items in the dataset'.
|
|
885
1743
|
|
|
886
1744
|
request_options : typing.Optional[RequestOptions]
|
|
887
1745
|
Request-specific configuration.
|
|
@@ -896,10 +1754,12 @@ class AsyncDatasetsClient:
|
|
|
896
1754
|
import asyncio
|
|
897
1755
|
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
898
1756
|
async def main() -> None:
|
|
899
|
-
await client.datasets.delete_dataset_items(
|
|
1757
|
+
await client.datasets.delete_dataset_items()
|
|
900
1758
|
asyncio.run(main())
|
|
901
1759
|
"""
|
|
902
|
-
_response = await self._raw_client.delete_dataset_items(
|
|
1760
|
+
_response = await self._raw_client.delete_dataset_items(
|
|
1761
|
+
item_ids=item_ids, dataset_id=dataset_id, filters=filters, request_options=request_options
|
|
1762
|
+
)
|
|
903
1763
|
return _response.data
|
|
904
1764
|
|
|
905
1765
|
async def delete_datasets_batch(
|
|
@@ -931,6 +1791,67 @@ class AsyncDatasetsClient:
|
|
|
931
1791
|
_response = await self._raw_client.delete_datasets_batch(ids=ids, request_options=request_options)
|
|
932
1792
|
return _response.data
|
|
933
1793
|
|
|
1794
|
+
async def expand_dataset(
|
|
1795
|
+
self,
|
|
1796
|
+
id: str,
|
|
1797
|
+
*,
|
|
1798
|
+
model: str,
|
|
1799
|
+
sample_count: typing.Optional[int] = OMIT,
|
|
1800
|
+
preserve_fields: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1801
|
+
variation_instructions: typing.Optional[str] = OMIT,
|
|
1802
|
+
custom_prompt: typing.Optional[str] = OMIT,
|
|
1803
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1804
|
+
) -> DatasetExpansionResponse:
|
|
1805
|
+
"""
|
|
1806
|
+
Generate synthetic dataset samples using LLM based on existing data patterns
|
|
1807
|
+
|
|
1808
|
+
Parameters
|
|
1809
|
+
----------
|
|
1810
|
+
id : str
|
|
1811
|
+
|
|
1812
|
+
model : str
|
|
1813
|
+
The model to use for synthetic data generation
|
|
1814
|
+
|
|
1815
|
+
sample_count : typing.Optional[int]
|
|
1816
|
+
Number of synthetic samples to generate
|
|
1817
|
+
|
|
1818
|
+
preserve_fields : typing.Optional[typing.Sequence[str]]
|
|
1819
|
+
Fields to preserve patterns from original data
|
|
1820
|
+
|
|
1821
|
+
variation_instructions : typing.Optional[str]
|
|
1822
|
+
Additional instructions for data variation
|
|
1823
|
+
|
|
1824
|
+
custom_prompt : typing.Optional[str]
|
|
1825
|
+
Custom prompt to use for generation instead of auto-generated one
|
|
1826
|
+
|
|
1827
|
+
request_options : typing.Optional[RequestOptions]
|
|
1828
|
+
Request-specific configuration.
|
|
1829
|
+
|
|
1830
|
+
Returns
|
|
1831
|
+
-------
|
|
1832
|
+
DatasetExpansionResponse
|
|
1833
|
+
Generated synthetic samples
|
|
1834
|
+
|
|
1835
|
+
Examples
|
|
1836
|
+
--------
|
|
1837
|
+
from Opik import AsyncOpikApi
|
|
1838
|
+
import asyncio
|
|
1839
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1840
|
+
async def main() -> None:
|
|
1841
|
+
await client.datasets.expand_dataset(id='id', model='gpt-4', )
|
|
1842
|
+
asyncio.run(main())
|
|
1843
|
+
"""
|
|
1844
|
+
_response = await self._raw_client.expand_dataset(
|
|
1845
|
+
id,
|
|
1846
|
+
model=model,
|
|
1847
|
+
sample_count=sample_count,
|
|
1848
|
+
preserve_fields=preserve_fields,
|
|
1849
|
+
variation_instructions=variation_instructions,
|
|
1850
|
+
custom_prompt=custom_prompt,
|
|
1851
|
+
request_options=request_options,
|
|
1852
|
+
)
|
|
1853
|
+
return _response.data
|
|
1854
|
+
|
|
934
1855
|
async def find_dataset_items_with_experiment_items(
|
|
935
1856
|
self,
|
|
936
1857
|
id: str,
|
|
@@ -939,6 +1860,8 @@ class AsyncDatasetsClient:
|
|
|
939
1860
|
page: typing.Optional[int] = None,
|
|
940
1861
|
size: typing.Optional[int] = None,
|
|
941
1862
|
filters: typing.Optional[str] = None,
|
|
1863
|
+
sorting: typing.Optional[str] = None,
|
|
1864
|
+
search: typing.Optional[str] = None,
|
|
942
1865
|
truncate: typing.Optional[bool] = None,
|
|
943
1866
|
request_options: typing.Optional[RequestOptions] = None,
|
|
944
1867
|
) -> DatasetItemPageCompare:
|
|
@@ -957,6 +1880,10 @@ class AsyncDatasetsClient:
|
|
|
957
1880
|
|
|
958
1881
|
filters : typing.Optional[str]
|
|
959
1882
|
|
|
1883
|
+
sorting : typing.Optional[str]
|
|
1884
|
+
|
|
1885
|
+
search : typing.Optional[str]
|
|
1886
|
+
|
|
960
1887
|
truncate : typing.Optional[bool]
|
|
961
1888
|
|
|
962
1889
|
request_options : typing.Optional[RequestOptions]
|
|
@@ -982,6 +1909,8 @@ class AsyncDatasetsClient:
|
|
|
982
1909
|
page=page,
|
|
983
1910
|
size=size,
|
|
984
1911
|
filters=filters,
|
|
1912
|
+
sorting=sorting,
|
|
1913
|
+
search=search,
|
|
985
1914
|
truncate=truncate,
|
|
986
1915
|
request_options=request_options,
|
|
987
1916
|
)
|
|
@@ -1019,6 +1948,47 @@ class AsyncDatasetsClient:
|
|
|
1019
1948
|
)
|
|
1020
1949
|
return _response.data
|
|
1021
1950
|
|
|
1951
|
+
async def get_dataset_experiment_items_stats(
|
|
1952
|
+
self,
|
|
1953
|
+
id: str,
|
|
1954
|
+
*,
|
|
1955
|
+
experiment_ids: str,
|
|
1956
|
+
filters: typing.Optional[str] = None,
|
|
1957
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1958
|
+
) -> ProjectStatsPublic:
|
|
1959
|
+
"""
|
|
1960
|
+
Get experiment items stats for dataset
|
|
1961
|
+
|
|
1962
|
+
Parameters
|
|
1963
|
+
----------
|
|
1964
|
+
id : str
|
|
1965
|
+
|
|
1966
|
+
experiment_ids : str
|
|
1967
|
+
|
|
1968
|
+
filters : typing.Optional[str]
|
|
1969
|
+
|
|
1970
|
+
request_options : typing.Optional[RequestOptions]
|
|
1971
|
+
Request-specific configuration.
|
|
1972
|
+
|
|
1973
|
+
Returns
|
|
1974
|
+
-------
|
|
1975
|
+
ProjectStatsPublic
|
|
1976
|
+
Experiment items stats resource
|
|
1977
|
+
|
|
1978
|
+
Examples
|
|
1979
|
+
--------
|
|
1980
|
+
from Opik import AsyncOpikApi
|
|
1981
|
+
import asyncio
|
|
1982
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1983
|
+
async def main() -> None:
|
|
1984
|
+
await client.datasets.get_dataset_experiment_items_stats(id='id', experiment_ids='experiment_ids', )
|
|
1985
|
+
asyncio.run(main())
|
|
1986
|
+
"""
|
|
1987
|
+
_response = await self._raw_client.get_dataset_experiment_items_stats(
|
|
1988
|
+
id, experiment_ids=experiment_ids, filters=filters, request_options=request_options
|
|
1989
|
+
)
|
|
1990
|
+
return _response.data
|
|
1991
|
+
|
|
1022
1992
|
async def get_dataset_item_by_id(
|
|
1023
1993
|
self, item_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
1024
1994
|
) -> DatasetItemPublic:
|
|
@@ -1049,12 +2019,74 @@ class AsyncDatasetsClient:
|
|
|
1049
2019
|
_response = await self._raw_client.get_dataset_item_by_id(item_id, request_options=request_options)
|
|
1050
2020
|
return _response.data
|
|
1051
2021
|
|
|
2022
|
+
async def patch_dataset_item(
|
|
2023
|
+
self,
|
|
2024
|
+
item_id: str,
|
|
2025
|
+
*,
|
|
2026
|
+
source: DatasetItemWriteSource,
|
|
2027
|
+
data: JsonNode,
|
|
2028
|
+
id: typing.Optional[str] = OMIT,
|
|
2029
|
+
trace_id: typing.Optional[str] = OMIT,
|
|
2030
|
+
span_id: typing.Optional[str] = OMIT,
|
|
2031
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
2032
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
2033
|
+
) -> None:
|
|
2034
|
+
"""
|
|
2035
|
+
Partially update dataset item by id. Only provided fields will be updated.
|
|
2036
|
+
|
|
2037
|
+
Parameters
|
|
2038
|
+
----------
|
|
2039
|
+
item_id : str
|
|
2040
|
+
|
|
2041
|
+
source : DatasetItemWriteSource
|
|
2042
|
+
|
|
2043
|
+
data : JsonNode
|
|
2044
|
+
|
|
2045
|
+
id : typing.Optional[str]
|
|
2046
|
+
|
|
2047
|
+
trace_id : typing.Optional[str]
|
|
2048
|
+
|
|
2049
|
+
span_id : typing.Optional[str]
|
|
2050
|
+
|
|
2051
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
2052
|
+
|
|
2053
|
+
request_options : typing.Optional[RequestOptions]
|
|
2054
|
+
Request-specific configuration.
|
|
2055
|
+
|
|
2056
|
+
Returns
|
|
2057
|
+
-------
|
|
2058
|
+
None
|
|
2059
|
+
|
|
2060
|
+
Examples
|
|
2061
|
+
--------
|
|
2062
|
+
from Opik import AsyncOpikApi
|
|
2063
|
+
import asyncio
|
|
2064
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2065
|
+
async def main() -> None:
|
|
2066
|
+
await client.datasets.patch_dataset_item(item_id='itemId', source="manual", data={'key': 'value'
|
|
2067
|
+
}, )
|
|
2068
|
+
asyncio.run(main())
|
|
2069
|
+
"""
|
|
2070
|
+
_response = await self._raw_client.patch_dataset_item(
|
|
2071
|
+
item_id,
|
|
2072
|
+
source=source,
|
|
2073
|
+
data=data,
|
|
2074
|
+
id=id,
|
|
2075
|
+
trace_id=trace_id,
|
|
2076
|
+
span_id=span_id,
|
|
2077
|
+
tags=tags,
|
|
2078
|
+
request_options=request_options,
|
|
2079
|
+
)
|
|
2080
|
+
return _response.data
|
|
2081
|
+
|
|
1052
2082
|
async def get_dataset_items(
|
|
1053
2083
|
self,
|
|
1054
2084
|
id: str,
|
|
1055
2085
|
*,
|
|
1056
2086
|
page: typing.Optional[int] = None,
|
|
1057
2087
|
size: typing.Optional[int] = None,
|
|
2088
|
+
version: typing.Optional[str] = None,
|
|
2089
|
+
filters: typing.Optional[str] = None,
|
|
1058
2090
|
truncate: typing.Optional[bool] = None,
|
|
1059
2091
|
request_options: typing.Optional[RequestOptions] = None,
|
|
1060
2092
|
) -> DatasetItemPagePublic:
|
|
@@ -1069,6 +2101,10 @@ class AsyncDatasetsClient:
|
|
|
1069
2101
|
|
|
1070
2102
|
size : typing.Optional[int]
|
|
1071
2103
|
|
|
2104
|
+
version : typing.Optional[str]
|
|
2105
|
+
|
|
2106
|
+
filters : typing.Optional[str]
|
|
2107
|
+
|
|
1072
2108
|
truncate : typing.Optional[bool]
|
|
1073
2109
|
|
|
1074
2110
|
request_options : typing.Optional[RequestOptions]
|
|
@@ -1089,7 +2125,13 @@ class AsyncDatasetsClient:
|
|
|
1089
2125
|
asyncio.run(main())
|
|
1090
2126
|
"""
|
|
1091
2127
|
_response = await self._raw_client.get_dataset_items(
|
|
1092
|
-
id,
|
|
2128
|
+
id,
|
|
2129
|
+
page=page,
|
|
2130
|
+
size=size,
|
|
2131
|
+
version=version,
|
|
2132
|
+
filters=filters,
|
|
2133
|
+
truncate=truncate,
|
|
2134
|
+
request_options=request_options,
|
|
1093
2135
|
)
|
|
1094
2136
|
return _response.data
|
|
1095
2137
|
|
|
@@ -1166,3 +2208,227 @@ class AsyncDatasetsClient:
|
|
|
1166
2208
|
) as r:
|
|
1167
2209
|
async for data in r.data:
|
|
1168
2210
|
yield data
|
|
2211
|
+
|
|
2212
|
+
async def compare_dataset_versions(
|
|
2213
|
+
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
2214
|
+
) -> DatasetVersionDiff:
|
|
2215
|
+
"""
|
|
2216
|
+
Compare the latest committed dataset version with the current draft state. This endpoint provides insights into changes made since the last version was committed. The comparison calculates additions, modifications, deletions, and unchanged items between the latest version snapshot and current draft.
|
|
2217
|
+
|
|
2218
|
+
Parameters
|
|
2219
|
+
----------
|
|
2220
|
+
id : str
|
|
2221
|
+
|
|
2222
|
+
request_options : typing.Optional[RequestOptions]
|
|
2223
|
+
Request-specific configuration.
|
|
2224
|
+
|
|
2225
|
+
Returns
|
|
2226
|
+
-------
|
|
2227
|
+
DatasetVersionDiff
|
|
2228
|
+
Diff computed successfully
|
|
2229
|
+
|
|
2230
|
+
Examples
|
|
2231
|
+
--------
|
|
2232
|
+
from Opik import AsyncOpikApi
|
|
2233
|
+
import asyncio
|
|
2234
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2235
|
+
async def main() -> None:
|
|
2236
|
+
await client.datasets.compare_dataset_versions(id='id', )
|
|
2237
|
+
asyncio.run(main())
|
|
2238
|
+
"""
|
|
2239
|
+
_response = await self._raw_client.compare_dataset_versions(id, request_options=request_options)
|
|
2240
|
+
return _response.data
|
|
2241
|
+
|
|
2242
|
+
async def create_version_tag(
|
|
2243
|
+
self, version_hash: str, id: str, *, tag: str, request_options: typing.Optional[RequestOptions] = None
|
|
2244
|
+
) -> None:
|
|
2245
|
+
"""
|
|
2246
|
+
Add a tag to a specific dataset version for easy reference (e.g., 'baseline', 'v1.0', 'production')
|
|
2247
|
+
|
|
2248
|
+
Parameters
|
|
2249
|
+
----------
|
|
2250
|
+
version_hash : str
|
|
2251
|
+
|
|
2252
|
+
id : str
|
|
2253
|
+
|
|
2254
|
+
tag : str
|
|
2255
|
+
|
|
2256
|
+
request_options : typing.Optional[RequestOptions]
|
|
2257
|
+
Request-specific configuration.
|
|
2258
|
+
|
|
2259
|
+
Returns
|
|
2260
|
+
-------
|
|
2261
|
+
None
|
|
2262
|
+
|
|
2263
|
+
Examples
|
|
2264
|
+
--------
|
|
2265
|
+
from Opik import AsyncOpikApi
|
|
2266
|
+
import asyncio
|
|
2267
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2268
|
+
async def main() -> None:
|
|
2269
|
+
await client.datasets.create_version_tag(version_hash='versionHash', id='id', tag='tag', )
|
|
2270
|
+
asyncio.run(main())
|
|
2271
|
+
"""
|
|
2272
|
+
_response = await self._raw_client.create_version_tag(
|
|
2273
|
+
version_hash, id, tag=tag, request_options=request_options
|
|
2274
|
+
)
|
|
2275
|
+
return _response.data
|
|
2276
|
+
|
|
2277
|
+
async def delete_version_tag(
|
|
2278
|
+
self, version_hash: str, tag: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
2279
|
+
) -> None:
|
|
2280
|
+
"""
|
|
2281
|
+
Remove a tag from a dataset version. The version itself is not deleted, only the tag reference.
|
|
2282
|
+
|
|
2283
|
+
Parameters
|
|
2284
|
+
----------
|
|
2285
|
+
version_hash : str
|
|
2286
|
+
|
|
2287
|
+
tag : str
|
|
2288
|
+
|
|
2289
|
+
id : str
|
|
2290
|
+
|
|
2291
|
+
request_options : typing.Optional[RequestOptions]
|
|
2292
|
+
Request-specific configuration.
|
|
2293
|
+
|
|
2294
|
+
Returns
|
|
2295
|
+
-------
|
|
2296
|
+
None
|
|
2297
|
+
|
|
2298
|
+
Examples
|
|
2299
|
+
--------
|
|
2300
|
+
from Opik import AsyncOpikApi
|
|
2301
|
+
import asyncio
|
|
2302
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2303
|
+
async def main() -> None:
|
|
2304
|
+
await client.datasets.delete_version_tag(version_hash='versionHash', tag='tag', id='id', )
|
|
2305
|
+
asyncio.run(main())
|
|
2306
|
+
"""
|
|
2307
|
+
_response = await self._raw_client.delete_version_tag(version_hash, tag, id, request_options=request_options)
|
|
2308
|
+
return _response.data
|
|
2309
|
+
|
|
2310
|
+
async def list_dataset_versions(
|
|
2311
|
+
self,
|
|
2312
|
+
id: str,
|
|
2313
|
+
*,
|
|
2314
|
+
page: typing.Optional[int] = None,
|
|
2315
|
+
size: typing.Optional[int] = None,
|
|
2316
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
2317
|
+
) -> DatasetVersionPagePublic:
|
|
2318
|
+
"""
|
|
2319
|
+
Get paginated list of versions for a dataset, ordered by creation time (newest first)
|
|
2320
|
+
|
|
2321
|
+
Parameters
|
|
2322
|
+
----------
|
|
2323
|
+
id : str
|
|
2324
|
+
|
|
2325
|
+
page : typing.Optional[int]
|
|
2326
|
+
|
|
2327
|
+
size : typing.Optional[int]
|
|
2328
|
+
|
|
2329
|
+
request_options : typing.Optional[RequestOptions]
|
|
2330
|
+
Request-specific configuration.
|
|
2331
|
+
|
|
2332
|
+
Returns
|
|
2333
|
+
-------
|
|
2334
|
+
DatasetVersionPagePublic
|
|
2335
|
+
Dataset versions
|
|
2336
|
+
|
|
2337
|
+
Examples
|
|
2338
|
+
--------
|
|
2339
|
+
from Opik import AsyncOpikApi
|
|
2340
|
+
import asyncio
|
|
2341
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2342
|
+
async def main() -> None:
|
|
2343
|
+
await client.datasets.list_dataset_versions(id='id', )
|
|
2344
|
+
asyncio.run(main())
|
|
2345
|
+
"""
|
|
2346
|
+
_response = await self._raw_client.list_dataset_versions(
|
|
2347
|
+
id, page=page, size=size, request_options=request_options
|
|
2348
|
+
)
|
|
2349
|
+
return _response.data
|
|
2350
|
+
|
|
2351
|
+
async def restore_dataset_version(
|
|
2352
|
+
self, id: str, *, version_ref: str, request_options: typing.Optional[RequestOptions] = None
|
|
2353
|
+
) -> DatasetVersionPublic:
|
|
2354
|
+
"""
|
|
2355
|
+
Restores the dataset to a previous version state by creating a new version with items copied from the specified version. If the version is already the latest, returns it as-is (no-op).
|
|
2356
|
+
|
|
2357
|
+
Parameters
|
|
2358
|
+
----------
|
|
2359
|
+
id : str
|
|
2360
|
+
|
|
2361
|
+
version_ref : str
|
|
2362
|
+
Version hash or tag to restore from
|
|
2363
|
+
|
|
2364
|
+
request_options : typing.Optional[RequestOptions]
|
|
2365
|
+
Request-specific configuration.
|
|
2366
|
+
|
|
2367
|
+
Returns
|
|
2368
|
+
-------
|
|
2369
|
+
DatasetVersionPublic
|
|
2370
|
+
Version restored successfully
|
|
2371
|
+
|
|
2372
|
+
Examples
|
|
2373
|
+
--------
|
|
2374
|
+
from Opik import AsyncOpikApi
|
|
2375
|
+
import asyncio
|
|
2376
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2377
|
+
async def main() -> None:
|
|
2378
|
+
await client.datasets.restore_dataset_version(id='id', version_ref='version_ref', )
|
|
2379
|
+
asyncio.run(main())
|
|
2380
|
+
"""
|
|
2381
|
+
_response = await self._raw_client.restore_dataset_version(
|
|
2382
|
+
id, version_ref=version_ref, request_options=request_options
|
|
2383
|
+
)
|
|
2384
|
+
return _response.data
|
|
2385
|
+
|
|
2386
|
+
async def update_dataset_version(
|
|
2387
|
+
self,
|
|
2388
|
+
version_hash: str,
|
|
2389
|
+
id: str,
|
|
2390
|
+
*,
|
|
2391
|
+
change_description: typing.Optional[str] = OMIT,
|
|
2392
|
+
tags_to_add: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
2393
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
2394
|
+
) -> DatasetVersionPublic:
|
|
2395
|
+
"""
|
|
2396
|
+
Update a dataset version's change_description and/or add new tags
|
|
2397
|
+
|
|
2398
|
+
Parameters
|
|
2399
|
+
----------
|
|
2400
|
+
version_hash : str
|
|
2401
|
+
|
|
2402
|
+
id : str
|
|
2403
|
+
|
|
2404
|
+
change_description : typing.Optional[str]
|
|
2405
|
+
Optional description of changes in this version
|
|
2406
|
+
|
|
2407
|
+
tags_to_add : typing.Optional[typing.Sequence[str]]
|
|
2408
|
+
Optional list of tags to add to this version
|
|
2409
|
+
|
|
2410
|
+
request_options : typing.Optional[RequestOptions]
|
|
2411
|
+
Request-specific configuration.
|
|
2412
|
+
|
|
2413
|
+
Returns
|
|
2414
|
+
-------
|
|
2415
|
+
DatasetVersionPublic
|
|
2416
|
+
Version updated successfully
|
|
2417
|
+
|
|
2418
|
+
Examples
|
|
2419
|
+
--------
|
|
2420
|
+
from Opik import AsyncOpikApi
|
|
2421
|
+
import asyncio
|
|
2422
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
2423
|
+
async def main() -> None:
|
|
2424
|
+
await client.datasets.update_dataset_version(version_hash='versionHash', id='id', )
|
|
2425
|
+
asyncio.run(main())
|
|
2426
|
+
"""
|
|
2427
|
+
_response = await self._raw_client.update_dataset_version(
|
|
2428
|
+
version_hash,
|
|
2429
|
+
id,
|
|
2430
|
+
change_description=change_description,
|
|
2431
|
+
tags_to_add=tags_to_add,
|
|
2432
|
+
request_options=request_options,
|
|
2433
|
+
)
|
|
2434
|
+
return _response.data
|