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
|
@@ -19,6 +19,9 @@ from ..types.prompt_detail import PromptDetail
|
|
|
19
19
|
from ..types.prompt_page_public import PromptPagePublic
|
|
20
20
|
from ..types.prompt_version_detail import PromptVersionDetail
|
|
21
21
|
from ..types.prompt_version_page_public import PromptVersionPagePublic
|
|
22
|
+
from ..types.prompt_version_update import PromptVersionUpdate
|
|
23
|
+
from .types.create_prompt_version_detail_template_structure import CreatePromptVersionDetailTemplateStructure
|
|
24
|
+
from .types.prompt_write_template_structure import PromptWriteTemplateStructure
|
|
22
25
|
from .types.prompt_write_type import PromptWriteType
|
|
23
26
|
|
|
24
27
|
# this is used as the default value for optional parameters
|
|
@@ -99,6 +102,7 @@ class RawPromptsClient:
|
|
|
99
102
|
metadata: typing.Optional[JsonNodeWrite] = OMIT,
|
|
100
103
|
change_description: typing.Optional[str] = OMIT,
|
|
101
104
|
type: typing.Optional[PromptWriteType] = OMIT,
|
|
105
|
+
template_structure: typing.Optional[PromptWriteTemplateStructure] = OMIT,
|
|
102
106
|
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
103
107
|
request_options: typing.Optional[RequestOptions] = None,
|
|
104
108
|
) -> HttpResponse[None]:
|
|
@@ -121,6 +125,9 @@ class RawPromptsClient:
|
|
|
121
125
|
|
|
122
126
|
type : typing.Optional[PromptWriteType]
|
|
123
127
|
|
|
128
|
+
template_structure : typing.Optional[PromptWriteTemplateStructure]
|
|
129
|
+
Template structure type: 'text' or 'chat'. Immutable after creation.
|
|
130
|
+
|
|
124
131
|
tags : typing.Optional[typing.Sequence[str]]
|
|
125
132
|
|
|
126
133
|
request_options : typing.Optional[RequestOptions]
|
|
@@ -141,6 +148,7 @@ class RawPromptsClient:
|
|
|
141
148
|
"metadata": metadata,
|
|
142
149
|
"change_description": change_description,
|
|
143
150
|
"type": type,
|
|
151
|
+
"template_structure": template_structure,
|
|
144
152
|
"tags": tags,
|
|
145
153
|
},
|
|
146
154
|
headers={
|
|
@@ -191,7 +199,12 @@ class RawPromptsClient:
|
|
|
191
199
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
192
200
|
|
|
193
201
|
def create_prompt_version(
|
|
194
|
-
self,
|
|
202
|
+
self,
|
|
203
|
+
*,
|
|
204
|
+
name: str,
|
|
205
|
+
version: PromptVersionDetail,
|
|
206
|
+
template_structure: typing.Optional[CreatePromptVersionDetailTemplateStructure] = OMIT,
|
|
207
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
195
208
|
) -> HttpResponse[PromptVersionDetail]:
|
|
196
209
|
"""
|
|
197
210
|
Create prompt version
|
|
@@ -202,6 +215,9 @@ class RawPromptsClient:
|
|
|
202
215
|
|
|
203
216
|
version : PromptVersionDetail
|
|
204
217
|
|
|
218
|
+
template_structure : typing.Optional[CreatePromptVersionDetailTemplateStructure]
|
|
219
|
+
Template structure for the prompt: 'text' or 'chat'. Note: This field is only used when creating a new prompt. If a prompt with the given name already exists, this field is ignored and the existing prompt's template structure is used. Template structure is immutable after prompt creation.
|
|
220
|
+
|
|
205
221
|
request_options : typing.Optional[RequestOptions]
|
|
206
222
|
Request-specific configuration.
|
|
207
223
|
|
|
@@ -218,6 +234,7 @@ class RawPromptsClient:
|
|
|
218
234
|
"version": convert_and_respect_annotation_metadata(
|
|
219
235
|
object_=version, annotation=PromptVersionDetail, direction="write"
|
|
220
236
|
),
|
|
237
|
+
"template_structure": template_structure,
|
|
221
238
|
},
|
|
222
239
|
headers={
|
|
223
240
|
"content-type": "application/json",
|
|
@@ -273,6 +290,80 @@ class RawPromptsClient:
|
|
|
273
290
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
274
291
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
275
292
|
|
|
293
|
+
def update_prompt_versions(
|
|
294
|
+
self,
|
|
295
|
+
*,
|
|
296
|
+
ids: typing.Sequence[str],
|
|
297
|
+
update: PromptVersionUpdate,
|
|
298
|
+
merge_tags: typing.Optional[bool] = OMIT,
|
|
299
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
300
|
+
) -> HttpResponse[None]:
|
|
301
|
+
"""
|
|
302
|
+
Update one or more prompt versions.
|
|
303
|
+
|
|
304
|
+
Note: Prompt versions are immutable by design.
|
|
305
|
+
Only organizational properties, such as tags etc., can be updated.
|
|
306
|
+
Core properties like template and metadata cannot be modified after creation.
|
|
307
|
+
|
|
308
|
+
PATCH semantics:
|
|
309
|
+
- non-empty values update the field
|
|
310
|
+
- null values preserve existing field values (no change)
|
|
311
|
+
- empty values explicitly clear the field
|
|
312
|
+
|
|
313
|
+
Parameters
|
|
314
|
+
----------
|
|
315
|
+
ids : typing.Sequence[str]
|
|
316
|
+
IDs of prompt versions to update
|
|
317
|
+
|
|
318
|
+
update : PromptVersionUpdate
|
|
319
|
+
|
|
320
|
+
merge_tags : typing.Optional[bool]
|
|
321
|
+
Tag merge behavior:
|
|
322
|
+
- true: Add new tags to existing tags (union)
|
|
323
|
+
- false: Replace all existing tags with new tags (default behaviour if not provided)
|
|
324
|
+
|
|
325
|
+
request_options : typing.Optional[RequestOptions]
|
|
326
|
+
Request-specific configuration.
|
|
327
|
+
|
|
328
|
+
Returns
|
|
329
|
+
-------
|
|
330
|
+
HttpResponse[None]
|
|
331
|
+
"""
|
|
332
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
333
|
+
"v1/private/prompts/versions",
|
|
334
|
+
method="PATCH",
|
|
335
|
+
json={
|
|
336
|
+
"ids": ids,
|
|
337
|
+
"update": convert_and_respect_annotation_metadata(
|
|
338
|
+
object_=update, annotation=PromptVersionUpdate, direction="write"
|
|
339
|
+
),
|
|
340
|
+
"merge_tags": merge_tags,
|
|
341
|
+
},
|
|
342
|
+
headers={
|
|
343
|
+
"content-type": "application/json",
|
|
344
|
+
},
|
|
345
|
+
request_options=request_options,
|
|
346
|
+
omit=OMIT,
|
|
347
|
+
)
|
|
348
|
+
try:
|
|
349
|
+
if 200 <= _response.status_code < 300:
|
|
350
|
+
return HttpResponse(response=_response, data=None)
|
|
351
|
+
if _response.status_code == 400:
|
|
352
|
+
raise BadRequestError(
|
|
353
|
+
headers=dict(_response.headers),
|
|
354
|
+
body=typing.cast(
|
|
355
|
+
typing.Optional[typing.Any],
|
|
356
|
+
parse_obj_as(
|
|
357
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
358
|
+
object_=_response.json(),
|
|
359
|
+
),
|
|
360
|
+
),
|
|
361
|
+
)
|
|
362
|
+
_response_json = _response.json()
|
|
363
|
+
except JSONDecodeError:
|
|
364
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
365
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
366
|
+
|
|
276
367
|
def get_prompt_by_id(
|
|
277
368
|
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
278
369
|
) -> HttpResponse[PromptDetail]:
|
|
@@ -537,6 +628,9 @@ class RawPromptsClient:
|
|
|
537
628
|
*,
|
|
538
629
|
page: typing.Optional[int] = None,
|
|
539
630
|
size: typing.Optional[int] = None,
|
|
631
|
+
search: typing.Optional[str] = None,
|
|
632
|
+
sorting: typing.Optional[str] = None,
|
|
633
|
+
filters: typing.Optional[str] = None,
|
|
540
634
|
request_options: typing.Optional[RequestOptions] = None,
|
|
541
635
|
) -> HttpResponse[PromptVersionPagePublic]:
|
|
542
636
|
"""
|
|
@@ -550,6 +644,13 @@ class RawPromptsClient:
|
|
|
550
644
|
|
|
551
645
|
size : typing.Optional[int]
|
|
552
646
|
|
|
647
|
+
search : typing.Optional[str]
|
|
648
|
+
Search text to find in template or change description fields
|
|
649
|
+
|
|
650
|
+
sorting : typing.Optional[str]
|
|
651
|
+
|
|
652
|
+
filters : typing.Optional[str]
|
|
653
|
+
|
|
553
654
|
request_options : typing.Optional[RequestOptions]
|
|
554
655
|
Request-specific configuration.
|
|
555
656
|
|
|
@@ -564,6 +665,9 @@ class RawPromptsClient:
|
|
|
564
665
|
params={
|
|
565
666
|
"page": page,
|
|
566
667
|
"size": size,
|
|
668
|
+
"search": search,
|
|
669
|
+
"sorting": sorting,
|
|
670
|
+
"filters": filters,
|
|
567
671
|
},
|
|
568
672
|
request_options=request_options,
|
|
569
673
|
)
|
|
@@ -582,6 +686,68 @@ class RawPromptsClient:
|
|
|
582
686
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
583
687
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
584
688
|
|
|
689
|
+
def restore_prompt_version(
|
|
690
|
+
self, prompt_id: str, version_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
691
|
+
) -> HttpResponse[PromptVersionDetail]:
|
|
692
|
+
"""
|
|
693
|
+
Restore a prompt version by creating a new version with the content from the specified version
|
|
694
|
+
|
|
695
|
+
Parameters
|
|
696
|
+
----------
|
|
697
|
+
prompt_id : str
|
|
698
|
+
|
|
699
|
+
version_id : str
|
|
700
|
+
|
|
701
|
+
request_options : typing.Optional[RequestOptions]
|
|
702
|
+
Request-specific configuration.
|
|
703
|
+
|
|
704
|
+
Returns
|
|
705
|
+
-------
|
|
706
|
+
HttpResponse[PromptVersionDetail]
|
|
707
|
+
OK
|
|
708
|
+
"""
|
|
709
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
710
|
+
f"v1/private/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/restore",
|
|
711
|
+
method="POST",
|
|
712
|
+
request_options=request_options,
|
|
713
|
+
)
|
|
714
|
+
try:
|
|
715
|
+
if 200 <= _response.status_code < 300:
|
|
716
|
+
_data = typing.cast(
|
|
717
|
+
PromptVersionDetail,
|
|
718
|
+
parse_obj_as(
|
|
719
|
+
type_=PromptVersionDetail, # type: ignore
|
|
720
|
+
object_=_response.json(),
|
|
721
|
+
),
|
|
722
|
+
)
|
|
723
|
+
return HttpResponse(response=_response, data=_data)
|
|
724
|
+
if _response.status_code == 400:
|
|
725
|
+
raise BadRequestError(
|
|
726
|
+
headers=dict(_response.headers),
|
|
727
|
+
body=typing.cast(
|
|
728
|
+
typing.Optional[typing.Any],
|
|
729
|
+
parse_obj_as(
|
|
730
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
731
|
+
object_=_response.json(),
|
|
732
|
+
),
|
|
733
|
+
),
|
|
734
|
+
)
|
|
735
|
+
if _response.status_code == 404:
|
|
736
|
+
raise NotFoundError(
|
|
737
|
+
headers=dict(_response.headers),
|
|
738
|
+
body=typing.cast(
|
|
739
|
+
typing.Optional[typing.Any],
|
|
740
|
+
parse_obj_as(
|
|
741
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
742
|
+
object_=_response.json(),
|
|
743
|
+
),
|
|
744
|
+
),
|
|
745
|
+
)
|
|
746
|
+
_response_json = _response.json()
|
|
747
|
+
except JSONDecodeError:
|
|
748
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
749
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
750
|
+
|
|
585
751
|
def retrieve_prompt_version(
|
|
586
752
|
self, *, name: str, commit: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None
|
|
587
753
|
) -> HttpResponse[PromptVersionDetail]:
|
|
@@ -738,6 +904,7 @@ class AsyncRawPromptsClient:
|
|
|
738
904
|
metadata: typing.Optional[JsonNodeWrite] = OMIT,
|
|
739
905
|
change_description: typing.Optional[str] = OMIT,
|
|
740
906
|
type: typing.Optional[PromptWriteType] = OMIT,
|
|
907
|
+
template_structure: typing.Optional[PromptWriteTemplateStructure] = OMIT,
|
|
741
908
|
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
742
909
|
request_options: typing.Optional[RequestOptions] = None,
|
|
743
910
|
) -> AsyncHttpResponse[None]:
|
|
@@ -760,6 +927,9 @@ class AsyncRawPromptsClient:
|
|
|
760
927
|
|
|
761
928
|
type : typing.Optional[PromptWriteType]
|
|
762
929
|
|
|
930
|
+
template_structure : typing.Optional[PromptWriteTemplateStructure]
|
|
931
|
+
Template structure type: 'text' or 'chat'. Immutable after creation.
|
|
932
|
+
|
|
763
933
|
tags : typing.Optional[typing.Sequence[str]]
|
|
764
934
|
|
|
765
935
|
request_options : typing.Optional[RequestOptions]
|
|
@@ -780,6 +950,7 @@ class AsyncRawPromptsClient:
|
|
|
780
950
|
"metadata": metadata,
|
|
781
951
|
"change_description": change_description,
|
|
782
952
|
"type": type,
|
|
953
|
+
"template_structure": template_structure,
|
|
783
954
|
"tags": tags,
|
|
784
955
|
},
|
|
785
956
|
headers={
|
|
@@ -830,7 +1001,12 @@ class AsyncRawPromptsClient:
|
|
|
830
1001
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
831
1002
|
|
|
832
1003
|
async def create_prompt_version(
|
|
833
|
-
self,
|
|
1004
|
+
self,
|
|
1005
|
+
*,
|
|
1006
|
+
name: str,
|
|
1007
|
+
version: PromptVersionDetail,
|
|
1008
|
+
template_structure: typing.Optional[CreatePromptVersionDetailTemplateStructure] = OMIT,
|
|
1009
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
834
1010
|
) -> AsyncHttpResponse[PromptVersionDetail]:
|
|
835
1011
|
"""
|
|
836
1012
|
Create prompt version
|
|
@@ -841,6 +1017,9 @@ class AsyncRawPromptsClient:
|
|
|
841
1017
|
|
|
842
1018
|
version : PromptVersionDetail
|
|
843
1019
|
|
|
1020
|
+
template_structure : typing.Optional[CreatePromptVersionDetailTemplateStructure]
|
|
1021
|
+
Template structure for the prompt: 'text' or 'chat'. Note: This field is only used when creating a new prompt. If a prompt with the given name already exists, this field is ignored and the existing prompt's template structure is used. Template structure is immutable after prompt creation.
|
|
1022
|
+
|
|
844
1023
|
request_options : typing.Optional[RequestOptions]
|
|
845
1024
|
Request-specific configuration.
|
|
846
1025
|
|
|
@@ -857,6 +1036,7 @@ class AsyncRawPromptsClient:
|
|
|
857
1036
|
"version": convert_and_respect_annotation_metadata(
|
|
858
1037
|
object_=version, annotation=PromptVersionDetail, direction="write"
|
|
859
1038
|
),
|
|
1039
|
+
"template_structure": template_structure,
|
|
860
1040
|
},
|
|
861
1041
|
headers={
|
|
862
1042
|
"content-type": "application/json",
|
|
@@ -912,6 +1092,80 @@ class AsyncRawPromptsClient:
|
|
|
912
1092
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
913
1093
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
914
1094
|
|
|
1095
|
+
async def update_prompt_versions(
|
|
1096
|
+
self,
|
|
1097
|
+
*,
|
|
1098
|
+
ids: typing.Sequence[str],
|
|
1099
|
+
update: PromptVersionUpdate,
|
|
1100
|
+
merge_tags: typing.Optional[bool] = OMIT,
|
|
1101
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
1102
|
+
) -> AsyncHttpResponse[None]:
|
|
1103
|
+
"""
|
|
1104
|
+
Update one or more prompt versions.
|
|
1105
|
+
|
|
1106
|
+
Note: Prompt versions are immutable by design.
|
|
1107
|
+
Only organizational properties, such as tags etc., can be updated.
|
|
1108
|
+
Core properties like template and metadata cannot be modified after creation.
|
|
1109
|
+
|
|
1110
|
+
PATCH semantics:
|
|
1111
|
+
- non-empty values update the field
|
|
1112
|
+
- null values preserve existing field values (no change)
|
|
1113
|
+
- empty values explicitly clear the field
|
|
1114
|
+
|
|
1115
|
+
Parameters
|
|
1116
|
+
----------
|
|
1117
|
+
ids : typing.Sequence[str]
|
|
1118
|
+
IDs of prompt versions to update
|
|
1119
|
+
|
|
1120
|
+
update : PromptVersionUpdate
|
|
1121
|
+
|
|
1122
|
+
merge_tags : typing.Optional[bool]
|
|
1123
|
+
Tag merge behavior:
|
|
1124
|
+
- true: Add new tags to existing tags (union)
|
|
1125
|
+
- false: Replace all existing tags with new tags (default behaviour if not provided)
|
|
1126
|
+
|
|
1127
|
+
request_options : typing.Optional[RequestOptions]
|
|
1128
|
+
Request-specific configuration.
|
|
1129
|
+
|
|
1130
|
+
Returns
|
|
1131
|
+
-------
|
|
1132
|
+
AsyncHttpResponse[None]
|
|
1133
|
+
"""
|
|
1134
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
1135
|
+
"v1/private/prompts/versions",
|
|
1136
|
+
method="PATCH",
|
|
1137
|
+
json={
|
|
1138
|
+
"ids": ids,
|
|
1139
|
+
"update": convert_and_respect_annotation_metadata(
|
|
1140
|
+
object_=update, annotation=PromptVersionUpdate, direction="write"
|
|
1141
|
+
),
|
|
1142
|
+
"merge_tags": merge_tags,
|
|
1143
|
+
},
|
|
1144
|
+
headers={
|
|
1145
|
+
"content-type": "application/json",
|
|
1146
|
+
},
|
|
1147
|
+
request_options=request_options,
|
|
1148
|
+
omit=OMIT,
|
|
1149
|
+
)
|
|
1150
|
+
try:
|
|
1151
|
+
if 200 <= _response.status_code < 300:
|
|
1152
|
+
return AsyncHttpResponse(response=_response, data=None)
|
|
1153
|
+
if _response.status_code == 400:
|
|
1154
|
+
raise BadRequestError(
|
|
1155
|
+
headers=dict(_response.headers),
|
|
1156
|
+
body=typing.cast(
|
|
1157
|
+
typing.Optional[typing.Any],
|
|
1158
|
+
parse_obj_as(
|
|
1159
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
1160
|
+
object_=_response.json(),
|
|
1161
|
+
),
|
|
1162
|
+
),
|
|
1163
|
+
)
|
|
1164
|
+
_response_json = _response.json()
|
|
1165
|
+
except JSONDecodeError:
|
|
1166
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
1167
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
1168
|
+
|
|
915
1169
|
async def get_prompt_by_id(
|
|
916
1170
|
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
917
1171
|
) -> AsyncHttpResponse[PromptDetail]:
|
|
@@ -1178,6 +1432,9 @@ class AsyncRawPromptsClient:
|
|
|
1178
1432
|
*,
|
|
1179
1433
|
page: typing.Optional[int] = None,
|
|
1180
1434
|
size: typing.Optional[int] = None,
|
|
1435
|
+
search: typing.Optional[str] = None,
|
|
1436
|
+
sorting: typing.Optional[str] = None,
|
|
1437
|
+
filters: typing.Optional[str] = None,
|
|
1181
1438
|
request_options: typing.Optional[RequestOptions] = None,
|
|
1182
1439
|
) -> AsyncHttpResponse[PromptVersionPagePublic]:
|
|
1183
1440
|
"""
|
|
@@ -1191,6 +1448,13 @@ class AsyncRawPromptsClient:
|
|
|
1191
1448
|
|
|
1192
1449
|
size : typing.Optional[int]
|
|
1193
1450
|
|
|
1451
|
+
search : typing.Optional[str]
|
|
1452
|
+
Search text to find in template or change description fields
|
|
1453
|
+
|
|
1454
|
+
sorting : typing.Optional[str]
|
|
1455
|
+
|
|
1456
|
+
filters : typing.Optional[str]
|
|
1457
|
+
|
|
1194
1458
|
request_options : typing.Optional[RequestOptions]
|
|
1195
1459
|
Request-specific configuration.
|
|
1196
1460
|
|
|
@@ -1205,6 +1469,9 @@ class AsyncRawPromptsClient:
|
|
|
1205
1469
|
params={
|
|
1206
1470
|
"page": page,
|
|
1207
1471
|
"size": size,
|
|
1472
|
+
"search": search,
|
|
1473
|
+
"sorting": sorting,
|
|
1474
|
+
"filters": filters,
|
|
1208
1475
|
},
|
|
1209
1476
|
request_options=request_options,
|
|
1210
1477
|
)
|
|
@@ -1223,6 +1490,68 @@ class AsyncRawPromptsClient:
|
|
|
1223
1490
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
1224
1491
|
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
1225
1492
|
|
|
1493
|
+
async def restore_prompt_version(
|
|
1494
|
+
self, prompt_id: str, version_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
1495
|
+
) -> AsyncHttpResponse[PromptVersionDetail]:
|
|
1496
|
+
"""
|
|
1497
|
+
Restore a prompt version by creating a new version with the content from the specified version
|
|
1498
|
+
|
|
1499
|
+
Parameters
|
|
1500
|
+
----------
|
|
1501
|
+
prompt_id : str
|
|
1502
|
+
|
|
1503
|
+
version_id : str
|
|
1504
|
+
|
|
1505
|
+
request_options : typing.Optional[RequestOptions]
|
|
1506
|
+
Request-specific configuration.
|
|
1507
|
+
|
|
1508
|
+
Returns
|
|
1509
|
+
-------
|
|
1510
|
+
AsyncHttpResponse[PromptVersionDetail]
|
|
1511
|
+
OK
|
|
1512
|
+
"""
|
|
1513
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
1514
|
+
f"v1/private/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/restore",
|
|
1515
|
+
method="POST",
|
|
1516
|
+
request_options=request_options,
|
|
1517
|
+
)
|
|
1518
|
+
try:
|
|
1519
|
+
if 200 <= _response.status_code < 300:
|
|
1520
|
+
_data = typing.cast(
|
|
1521
|
+
PromptVersionDetail,
|
|
1522
|
+
parse_obj_as(
|
|
1523
|
+
type_=PromptVersionDetail, # type: ignore
|
|
1524
|
+
object_=_response.json(),
|
|
1525
|
+
),
|
|
1526
|
+
)
|
|
1527
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
1528
|
+
if _response.status_code == 400:
|
|
1529
|
+
raise BadRequestError(
|
|
1530
|
+
headers=dict(_response.headers),
|
|
1531
|
+
body=typing.cast(
|
|
1532
|
+
typing.Optional[typing.Any],
|
|
1533
|
+
parse_obj_as(
|
|
1534
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
1535
|
+
object_=_response.json(),
|
|
1536
|
+
),
|
|
1537
|
+
),
|
|
1538
|
+
)
|
|
1539
|
+
if _response.status_code == 404:
|
|
1540
|
+
raise NotFoundError(
|
|
1541
|
+
headers=dict(_response.headers),
|
|
1542
|
+
body=typing.cast(
|
|
1543
|
+
typing.Optional[typing.Any],
|
|
1544
|
+
parse_obj_as(
|
|
1545
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
1546
|
+
object_=_response.json(),
|
|
1547
|
+
),
|
|
1548
|
+
),
|
|
1549
|
+
)
|
|
1550
|
+
_response_json = _response.json()
|
|
1551
|
+
except JSONDecodeError:
|
|
1552
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
1553
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
1554
|
+
|
|
1226
1555
|
async def retrieve_prompt_version(
|
|
1227
1556
|
self, *, name: str, commit: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None
|
|
1228
1557
|
) -> AsyncHttpResponse[PromptVersionDetail]:
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
# isort: skip_file
|
|
4
4
|
|
|
5
|
+
from .create_prompt_version_detail_template_structure import CreatePromptVersionDetailTemplateStructure
|
|
6
|
+
from .prompt_write_template_structure import PromptWriteTemplateStructure
|
|
5
7
|
from .prompt_write_type import PromptWriteType
|
|
6
8
|
|
|
7
|
-
__all__ = ["PromptWriteType"]
|
|
9
|
+
__all__ = ["CreatePromptVersionDetailTemplateStructure", "PromptWriteTemplateStructure", "PromptWriteType"]
|
opik/rest_api/spans/__init__.py
CHANGED
|
@@ -7,7 +7,6 @@ from .types import (
|
|
|
7
7
|
GetSpanStatsRequestType,
|
|
8
8
|
GetSpansByProjectRequestType,
|
|
9
9
|
SpanSearchStreamRequestPublicType,
|
|
10
|
-
SpanUpdateType,
|
|
11
10
|
)
|
|
12
11
|
|
|
13
12
|
__all__ = [
|
|
@@ -15,5 +14,4 @@ __all__ = [
|
|
|
15
14
|
"GetSpanStatsRequestType",
|
|
16
15
|
"GetSpansByProjectRequestType",
|
|
17
16
|
"SpanSearchStreamRequestPublicType",
|
|
18
|
-
"SpanUpdateType",
|
|
19
17
|
]
|