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
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# isort: skip_file
|
|
4
4
|
|
|
5
|
+
from .experiment_update_status import ExperimentUpdateStatus
|
|
6
|
+
from .experiment_update_type import ExperimentUpdateType
|
|
7
|
+
from .experiment_write_status import ExperimentWriteStatus
|
|
5
8
|
from .experiment_write_type import ExperimentWriteType
|
|
6
9
|
|
|
7
|
-
__all__ = ["ExperimentWriteType"]
|
|
10
|
+
__all__ = ["ExperimentUpdateStatus", "ExperimentUpdateType", "ExperimentWriteStatus", "ExperimentWriteType"]
|
|
@@ -85,6 +85,7 @@ class LlmProviderKeyClient:
|
|
|
85
85
|
provider: ProviderApiKeyWriteProvider,
|
|
86
86
|
api_key: typing.Optional[str] = OMIT,
|
|
87
87
|
name: typing.Optional[str] = OMIT,
|
|
88
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
88
89
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
89
90
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
90
91
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -101,6 +102,9 @@ class LlmProviderKeyClient:
|
|
|
101
102
|
|
|
102
103
|
name : typing.Optional[str]
|
|
103
104
|
|
|
105
|
+
provider_name : typing.Optional[str]
|
|
106
|
+
Provider name - required for custom LLM providers to uniquely identify them (e.g., 'ollama', 'vllm'). Must not be blank for custom providers. Should not be set for standard providers (OpenAI, Anthropic, etc.). This requirement is conditional and validation is enforced programmatically.
|
|
107
|
+
|
|
104
108
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
105
109
|
|
|
106
110
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -124,6 +128,7 @@ class LlmProviderKeyClient:
|
|
|
124
128
|
provider=provider,
|
|
125
129
|
api_key=api_key,
|
|
126
130
|
name=name,
|
|
131
|
+
provider_name=provider_name,
|
|
127
132
|
headers=headers,
|
|
128
133
|
configuration=configuration,
|
|
129
134
|
base_url=base_url,
|
|
@@ -164,6 +169,7 @@ class LlmProviderKeyClient:
|
|
|
164
169
|
*,
|
|
165
170
|
api_key: typing.Optional[str] = OMIT,
|
|
166
171
|
name: typing.Optional[str] = OMIT,
|
|
172
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
167
173
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
168
174
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
169
175
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -180,6 +186,9 @@ class LlmProviderKeyClient:
|
|
|
180
186
|
|
|
181
187
|
name : typing.Optional[str]
|
|
182
188
|
|
|
189
|
+
provider_name : typing.Optional[str]
|
|
190
|
+
Provider name - can be set to migrate legacy custom LLM providers to the new multi-provider format. Once set, it cannot be changed. Should only be set for custom LLM providers.
|
|
191
|
+
|
|
183
192
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
184
193
|
|
|
185
194
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -203,6 +212,7 @@ class LlmProviderKeyClient:
|
|
|
203
212
|
id,
|
|
204
213
|
api_key=api_key,
|
|
205
214
|
name=name,
|
|
215
|
+
provider_name=provider_name,
|
|
206
216
|
headers=headers,
|
|
207
217
|
configuration=configuration,
|
|
208
218
|
base_url=base_url,
|
|
@@ -289,6 +299,7 @@ class AsyncLlmProviderKeyClient:
|
|
|
289
299
|
provider: ProviderApiKeyWriteProvider,
|
|
290
300
|
api_key: typing.Optional[str] = OMIT,
|
|
291
301
|
name: typing.Optional[str] = OMIT,
|
|
302
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
292
303
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
293
304
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
294
305
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -305,6 +316,9 @@ class AsyncLlmProviderKeyClient:
|
|
|
305
316
|
|
|
306
317
|
name : typing.Optional[str]
|
|
307
318
|
|
|
319
|
+
provider_name : typing.Optional[str]
|
|
320
|
+
Provider name - required for custom LLM providers to uniquely identify them (e.g., 'ollama', 'vllm'). Must not be blank for custom providers. Should not be set for standard providers (OpenAI, Anthropic, etc.). This requirement is conditional and validation is enforced programmatically.
|
|
321
|
+
|
|
308
322
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
309
323
|
|
|
310
324
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -331,6 +345,7 @@ class AsyncLlmProviderKeyClient:
|
|
|
331
345
|
provider=provider,
|
|
332
346
|
api_key=api_key,
|
|
333
347
|
name=name,
|
|
348
|
+
provider_name=provider_name,
|
|
334
349
|
headers=headers,
|
|
335
350
|
configuration=configuration,
|
|
336
351
|
base_url=base_url,
|
|
@@ -374,6 +389,7 @@ class AsyncLlmProviderKeyClient:
|
|
|
374
389
|
*,
|
|
375
390
|
api_key: typing.Optional[str] = OMIT,
|
|
376
391
|
name: typing.Optional[str] = OMIT,
|
|
392
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
377
393
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
378
394
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
379
395
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -390,6 +406,9 @@ class AsyncLlmProviderKeyClient:
|
|
|
390
406
|
|
|
391
407
|
name : typing.Optional[str]
|
|
392
408
|
|
|
409
|
+
provider_name : typing.Optional[str]
|
|
410
|
+
Provider name - can be set to migrate legacy custom LLM providers to the new multi-provider format. Once set, it cannot be changed. Should only be set for custom LLM providers.
|
|
411
|
+
|
|
393
412
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
394
413
|
|
|
395
414
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -416,6 +435,7 @@ class AsyncLlmProviderKeyClient:
|
|
|
416
435
|
id,
|
|
417
436
|
api_key=api_key,
|
|
418
437
|
name=name,
|
|
438
|
+
provider_name=provider_name,
|
|
419
439
|
headers=headers,
|
|
420
440
|
configuration=configuration,
|
|
421
441
|
base_url=base_url,
|
|
@@ -104,6 +104,7 @@ class RawLlmProviderKeyClient:
|
|
|
104
104
|
provider: ProviderApiKeyWriteProvider,
|
|
105
105
|
api_key: typing.Optional[str] = OMIT,
|
|
106
106
|
name: typing.Optional[str] = OMIT,
|
|
107
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
107
108
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
108
109
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
109
110
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -120,6 +121,9 @@ class RawLlmProviderKeyClient:
|
|
|
120
121
|
|
|
121
122
|
name : typing.Optional[str]
|
|
122
123
|
|
|
124
|
+
provider_name : typing.Optional[str]
|
|
125
|
+
Provider name - required for custom LLM providers to uniquely identify them (e.g., 'ollama', 'vllm'). Must not be blank for custom providers. Should not be set for standard providers (OpenAI, Anthropic, etc.). This requirement is conditional and validation is enforced programmatically.
|
|
126
|
+
|
|
123
127
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
124
128
|
|
|
125
129
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -140,6 +144,7 @@ class RawLlmProviderKeyClient:
|
|
|
140
144
|
"provider": provider,
|
|
141
145
|
"api_key": api_key,
|
|
142
146
|
"name": name,
|
|
147
|
+
"provider_name": provider_name,
|
|
143
148
|
"headers": headers,
|
|
144
149
|
"configuration": configuration,
|
|
145
150
|
"base_url": base_url,
|
|
@@ -235,6 +240,7 @@ class RawLlmProviderKeyClient:
|
|
|
235
240
|
*,
|
|
236
241
|
api_key: typing.Optional[str] = OMIT,
|
|
237
242
|
name: typing.Optional[str] = OMIT,
|
|
243
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
238
244
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
239
245
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
240
246
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -251,6 +257,9 @@ class RawLlmProviderKeyClient:
|
|
|
251
257
|
|
|
252
258
|
name : typing.Optional[str]
|
|
253
259
|
|
|
260
|
+
provider_name : typing.Optional[str]
|
|
261
|
+
Provider name - can be set to migrate legacy custom LLM providers to the new multi-provider format. Once set, it cannot be changed. Should only be set for custom LLM providers.
|
|
262
|
+
|
|
254
263
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
255
264
|
|
|
256
265
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -270,6 +279,7 @@ class RawLlmProviderKeyClient:
|
|
|
270
279
|
json={
|
|
271
280
|
"api_key": api_key,
|
|
272
281
|
"name": name,
|
|
282
|
+
"provider_name": provider_name,
|
|
273
283
|
"headers": headers,
|
|
274
284
|
"configuration": configuration,
|
|
275
285
|
"base_url": base_url,
|
|
@@ -405,6 +415,7 @@ class AsyncRawLlmProviderKeyClient:
|
|
|
405
415
|
provider: ProviderApiKeyWriteProvider,
|
|
406
416
|
api_key: typing.Optional[str] = OMIT,
|
|
407
417
|
name: typing.Optional[str] = OMIT,
|
|
418
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
408
419
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
409
420
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
410
421
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -421,6 +432,9 @@ class AsyncRawLlmProviderKeyClient:
|
|
|
421
432
|
|
|
422
433
|
name : typing.Optional[str]
|
|
423
434
|
|
|
435
|
+
provider_name : typing.Optional[str]
|
|
436
|
+
Provider name - required for custom LLM providers to uniquely identify them (e.g., 'ollama', 'vllm'). Must not be blank for custom providers. Should not be set for standard providers (OpenAI, Anthropic, etc.). This requirement is conditional and validation is enforced programmatically.
|
|
437
|
+
|
|
424
438
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
425
439
|
|
|
426
440
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -441,6 +455,7 @@ class AsyncRawLlmProviderKeyClient:
|
|
|
441
455
|
"provider": provider,
|
|
442
456
|
"api_key": api_key,
|
|
443
457
|
"name": name,
|
|
458
|
+
"provider_name": provider_name,
|
|
444
459
|
"headers": headers,
|
|
445
460
|
"configuration": configuration,
|
|
446
461
|
"base_url": base_url,
|
|
@@ -536,6 +551,7 @@ class AsyncRawLlmProviderKeyClient:
|
|
|
536
551
|
*,
|
|
537
552
|
api_key: typing.Optional[str] = OMIT,
|
|
538
553
|
name: typing.Optional[str] = OMIT,
|
|
554
|
+
provider_name: typing.Optional[str] = OMIT,
|
|
539
555
|
headers: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
540
556
|
configuration: typing.Optional[typing.Dict[str, str]] = OMIT,
|
|
541
557
|
base_url: typing.Optional[str] = OMIT,
|
|
@@ -552,6 +568,9 @@ class AsyncRawLlmProviderKeyClient:
|
|
|
552
568
|
|
|
553
569
|
name : typing.Optional[str]
|
|
554
570
|
|
|
571
|
+
provider_name : typing.Optional[str]
|
|
572
|
+
Provider name - can be set to migrate legacy custom LLM providers to the new multi-provider format. Once set, it cannot be changed. Should only be set for custom LLM providers.
|
|
573
|
+
|
|
555
574
|
headers : typing.Optional[typing.Dict[str, str]]
|
|
556
575
|
|
|
557
576
|
configuration : typing.Optional[typing.Dict[str, str]]
|
|
@@ -571,6 +590,7 @@ class AsyncRawLlmProviderKeyClient:
|
|
|
571
590
|
json={
|
|
572
591
|
"api_key": api_key,
|
|
573
592
|
"name": name,
|
|
593
|
+
"provider_name": provider_name,
|
|
574
594
|
"headers": headers,
|
|
575
595
|
"configuration": configuration,
|
|
576
596
|
"base_url": base_url,
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
5
|
ProviderApiKeyWriteProvider = typing.Union[
|
|
6
|
-
typing.Literal["openai", "anthropic", "gemini", "openrouter", "vertex-ai", "custom-llm"], typing.Any
|
|
6
|
+
typing.Literal["openai", "anthropic", "gemini", "openrouter", "vertex-ai", "custom-llm", "opik-free"], typing.Any
|
|
7
7
|
]
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
6
|
+
from ..core.request_options import RequestOptions
|
|
7
|
+
from ..types.manual_evaluation_request_entity_type import ManualEvaluationRequestEntityType
|
|
8
|
+
from ..types.manual_evaluation_response import ManualEvaluationResponse
|
|
9
|
+
from .raw_client import AsyncRawManualEvaluationClient, RawManualEvaluationClient
|
|
10
|
+
|
|
11
|
+
# this is used as the default value for optional parameters
|
|
12
|
+
OMIT = typing.cast(typing.Any, ...)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ManualEvaluationClient:
|
|
16
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
17
|
+
self._raw_client = RawManualEvaluationClient(client_wrapper=client_wrapper)
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def with_raw_response(self) -> RawManualEvaluationClient:
|
|
21
|
+
"""
|
|
22
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
23
|
+
|
|
24
|
+
Returns
|
|
25
|
+
-------
|
|
26
|
+
RawManualEvaluationClient
|
|
27
|
+
"""
|
|
28
|
+
return self._raw_client
|
|
29
|
+
|
|
30
|
+
def evaluate_spans(
|
|
31
|
+
self,
|
|
32
|
+
*,
|
|
33
|
+
project_id: str,
|
|
34
|
+
entity_ids: typing.Sequence[str],
|
|
35
|
+
rule_ids: typing.Sequence[str],
|
|
36
|
+
entity_type: ManualEvaluationRequestEntityType,
|
|
37
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
38
|
+
) -> ManualEvaluationResponse:
|
|
39
|
+
"""
|
|
40
|
+
Manually trigger evaluation rules on selected spans. Bypasses sampling and enqueues all specified spans for evaluation.
|
|
41
|
+
|
|
42
|
+
Parameters
|
|
43
|
+
----------
|
|
44
|
+
project_id : str
|
|
45
|
+
Project ID
|
|
46
|
+
|
|
47
|
+
entity_ids : typing.Sequence[str]
|
|
48
|
+
List of entity IDs (trace IDs or thread IDs) to evaluate
|
|
49
|
+
|
|
50
|
+
rule_ids : typing.Sequence[str]
|
|
51
|
+
List of automation rule IDs to apply
|
|
52
|
+
|
|
53
|
+
entity_type : ManualEvaluationRequestEntityType
|
|
54
|
+
Type of entity to evaluate (trace or thread)
|
|
55
|
+
|
|
56
|
+
request_options : typing.Optional[RequestOptions]
|
|
57
|
+
Request-specific configuration.
|
|
58
|
+
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
|
+
ManualEvaluationResponse
|
|
62
|
+
Accepted - Evaluation request queued successfully
|
|
63
|
+
|
|
64
|
+
Examples
|
|
65
|
+
--------
|
|
66
|
+
from Opik import OpikApi
|
|
67
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
68
|
+
client.manual_evaluation.evaluate_spans(project_id='550e8400-e29b-41d4-a716-446655440000', entity_ids=['550e8400-e29b-41d4-a716-446655440000', '550e8400-e29b-41d4-a716-446655440001'], rule_ids=['660e8400-e29b-41d4-a716-446655440000'], entity_type="trace", )
|
|
69
|
+
"""
|
|
70
|
+
_response = self._raw_client.evaluate_spans(
|
|
71
|
+
project_id=project_id,
|
|
72
|
+
entity_ids=entity_ids,
|
|
73
|
+
rule_ids=rule_ids,
|
|
74
|
+
entity_type=entity_type,
|
|
75
|
+
request_options=request_options,
|
|
76
|
+
)
|
|
77
|
+
return _response.data
|
|
78
|
+
|
|
79
|
+
def evaluate_threads(
|
|
80
|
+
self,
|
|
81
|
+
*,
|
|
82
|
+
project_id: str,
|
|
83
|
+
entity_ids: typing.Sequence[str],
|
|
84
|
+
rule_ids: typing.Sequence[str],
|
|
85
|
+
entity_type: ManualEvaluationRequestEntityType,
|
|
86
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
87
|
+
) -> ManualEvaluationResponse:
|
|
88
|
+
"""
|
|
89
|
+
Manually trigger evaluation rules on selected threads. Bypasses sampling and enqueues all specified threads for evaluation.
|
|
90
|
+
|
|
91
|
+
Parameters
|
|
92
|
+
----------
|
|
93
|
+
project_id : str
|
|
94
|
+
Project ID
|
|
95
|
+
|
|
96
|
+
entity_ids : typing.Sequence[str]
|
|
97
|
+
List of entity IDs (trace IDs or thread IDs) to evaluate
|
|
98
|
+
|
|
99
|
+
rule_ids : typing.Sequence[str]
|
|
100
|
+
List of automation rule IDs to apply
|
|
101
|
+
|
|
102
|
+
entity_type : ManualEvaluationRequestEntityType
|
|
103
|
+
Type of entity to evaluate (trace or thread)
|
|
104
|
+
|
|
105
|
+
request_options : typing.Optional[RequestOptions]
|
|
106
|
+
Request-specific configuration.
|
|
107
|
+
|
|
108
|
+
Returns
|
|
109
|
+
-------
|
|
110
|
+
ManualEvaluationResponse
|
|
111
|
+
Accepted - Evaluation request queued successfully
|
|
112
|
+
|
|
113
|
+
Examples
|
|
114
|
+
--------
|
|
115
|
+
from Opik import OpikApi
|
|
116
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
117
|
+
client.manual_evaluation.evaluate_threads(project_id='550e8400-e29b-41d4-a716-446655440000', entity_ids=['550e8400-e29b-41d4-a716-446655440000', '550e8400-e29b-41d4-a716-446655440001'], rule_ids=['660e8400-e29b-41d4-a716-446655440000'], entity_type="trace", )
|
|
118
|
+
"""
|
|
119
|
+
_response = self._raw_client.evaluate_threads(
|
|
120
|
+
project_id=project_id,
|
|
121
|
+
entity_ids=entity_ids,
|
|
122
|
+
rule_ids=rule_ids,
|
|
123
|
+
entity_type=entity_type,
|
|
124
|
+
request_options=request_options,
|
|
125
|
+
)
|
|
126
|
+
return _response.data
|
|
127
|
+
|
|
128
|
+
def evaluate_traces(
|
|
129
|
+
self,
|
|
130
|
+
*,
|
|
131
|
+
project_id: str,
|
|
132
|
+
entity_ids: typing.Sequence[str],
|
|
133
|
+
rule_ids: typing.Sequence[str],
|
|
134
|
+
entity_type: ManualEvaluationRequestEntityType,
|
|
135
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
136
|
+
) -> ManualEvaluationResponse:
|
|
137
|
+
"""
|
|
138
|
+
Manually trigger evaluation rules on selected traces. Bypasses sampling and enqueues all specified traces for evaluation.
|
|
139
|
+
|
|
140
|
+
Parameters
|
|
141
|
+
----------
|
|
142
|
+
project_id : str
|
|
143
|
+
Project ID
|
|
144
|
+
|
|
145
|
+
entity_ids : typing.Sequence[str]
|
|
146
|
+
List of entity IDs (trace IDs or thread IDs) to evaluate
|
|
147
|
+
|
|
148
|
+
rule_ids : typing.Sequence[str]
|
|
149
|
+
List of automation rule IDs to apply
|
|
150
|
+
|
|
151
|
+
entity_type : ManualEvaluationRequestEntityType
|
|
152
|
+
Type of entity to evaluate (trace or thread)
|
|
153
|
+
|
|
154
|
+
request_options : typing.Optional[RequestOptions]
|
|
155
|
+
Request-specific configuration.
|
|
156
|
+
|
|
157
|
+
Returns
|
|
158
|
+
-------
|
|
159
|
+
ManualEvaluationResponse
|
|
160
|
+
Accepted - Evaluation request queued successfully
|
|
161
|
+
|
|
162
|
+
Examples
|
|
163
|
+
--------
|
|
164
|
+
from Opik import OpikApi
|
|
165
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
166
|
+
client.manual_evaluation.evaluate_traces(project_id='550e8400-e29b-41d4-a716-446655440000', entity_ids=['550e8400-e29b-41d4-a716-446655440000', '550e8400-e29b-41d4-a716-446655440001'], rule_ids=['660e8400-e29b-41d4-a716-446655440000'], entity_type="trace", )
|
|
167
|
+
"""
|
|
168
|
+
_response = self._raw_client.evaluate_traces(
|
|
169
|
+
project_id=project_id,
|
|
170
|
+
entity_ids=entity_ids,
|
|
171
|
+
rule_ids=rule_ids,
|
|
172
|
+
entity_type=entity_type,
|
|
173
|
+
request_options=request_options,
|
|
174
|
+
)
|
|
175
|
+
return _response.data
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class AsyncManualEvaluationClient:
|
|
179
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
180
|
+
self._raw_client = AsyncRawManualEvaluationClient(client_wrapper=client_wrapper)
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def with_raw_response(self) -> AsyncRawManualEvaluationClient:
|
|
184
|
+
"""
|
|
185
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
186
|
+
|
|
187
|
+
Returns
|
|
188
|
+
-------
|
|
189
|
+
AsyncRawManualEvaluationClient
|
|
190
|
+
"""
|
|
191
|
+
return self._raw_client
|
|
192
|
+
|
|
193
|
+
async def evaluate_spans(
|
|
194
|
+
self,
|
|
195
|
+
*,
|
|
196
|
+
project_id: str,
|
|
197
|
+
entity_ids: typing.Sequence[str],
|
|
198
|
+
rule_ids: typing.Sequence[str],
|
|
199
|
+
entity_type: ManualEvaluationRequestEntityType,
|
|
200
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
201
|
+
) -> ManualEvaluationResponse:
|
|
202
|
+
"""
|
|
203
|
+
Manually trigger evaluation rules on selected spans. Bypasses sampling and enqueues all specified spans for evaluation.
|
|
204
|
+
|
|
205
|
+
Parameters
|
|
206
|
+
----------
|
|
207
|
+
project_id : str
|
|
208
|
+
Project ID
|
|
209
|
+
|
|
210
|
+
entity_ids : typing.Sequence[str]
|
|
211
|
+
List of entity IDs (trace IDs or thread IDs) to evaluate
|
|
212
|
+
|
|
213
|
+
rule_ids : typing.Sequence[str]
|
|
214
|
+
List of automation rule IDs to apply
|
|
215
|
+
|
|
216
|
+
entity_type : ManualEvaluationRequestEntityType
|
|
217
|
+
Type of entity to evaluate (trace or thread)
|
|
218
|
+
|
|
219
|
+
request_options : typing.Optional[RequestOptions]
|
|
220
|
+
Request-specific configuration.
|
|
221
|
+
|
|
222
|
+
Returns
|
|
223
|
+
-------
|
|
224
|
+
ManualEvaluationResponse
|
|
225
|
+
Accepted - Evaluation request queued successfully
|
|
226
|
+
|
|
227
|
+
Examples
|
|
228
|
+
--------
|
|
229
|
+
from Opik import AsyncOpikApi
|
|
230
|
+
import asyncio
|
|
231
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
232
|
+
async def main() -> None:
|
|
233
|
+
await client.manual_evaluation.evaluate_spans(project_id='550e8400-e29b-41d4-a716-446655440000', entity_ids=['550e8400-e29b-41d4-a716-446655440000', '550e8400-e29b-41d4-a716-446655440001'], rule_ids=['660e8400-e29b-41d4-a716-446655440000'], entity_type="trace", )
|
|
234
|
+
asyncio.run(main())
|
|
235
|
+
"""
|
|
236
|
+
_response = await self._raw_client.evaluate_spans(
|
|
237
|
+
project_id=project_id,
|
|
238
|
+
entity_ids=entity_ids,
|
|
239
|
+
rule_ids=rule_ids,
|
|
240
|
+
entity_type=entity_type,
|
|
241
|
+
request_options=request_options,
|
|
242
|
+
)
|
|
243
|
+
return _response.data
|
|
244
|
+
|
|
245
|
+
async def evaluate_threads(
|
|
246
|
+
self,
|
|
247
|
+
*,
|
|
248
|
+
project_id: str,
|
|
249
|
+
entity_ids: typing.Sequence[str],
|
|
250
|
+
rule_ids: typing.Sequence[str],
|
|
251
|
+
entity_type: ManualEvaluationRequestEntityType,
|
|
252
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
253
|
+
) -> ManualEvaluationResponse:
|
|
254
|
+
"""
|
|
255
|
+
Manually trigger evaluation rules on selected threads. Bypasses sampling and enqueues all specified threads for evaluation.
|
|
256
|
+
|
|
257
|
+
Parameters
|
|
258
|
+
----------
|
|
259
|
+
project_id : str
|
|
260
|
+
Project ID
|
|
261
|
+
|
|
262
|
+
entity_ids : typing.Sequence[str]
|
|
263
|
+
List of entity IDs (trace IDs or thread IDs) to evaluate
|
|
264
|
+
|
|
265
|
+
rule_ids : typing.Sequence[str]
|
|
266
|
+
List of automation rule IDs to apply
|
|
267
|
+
|
|
268
|
+
entity_type : ManualEvaluationRequestEntityType
|
|
269
|
+
Type of entity to evaluate (trace or thread)
|
|
270
|
+
|
|
271
|
+
request_options : typing.Optional[RequestOptions]
|
|
272
|
+
Request-specific configuration.
|
|
273
|
+
|
|
274
|
+
Returns
|
|
275
|
+
-------
|
|
276
|
+
ManualEvaluationResponse
|
|
277
|
+
Accepted - Evaluation request queued successfully
|
|
278
|
+
|
|
279
|
+
Examples
|
|
280
|
+
--------
|
|
281
|
+
from Opik import AsyncOpikApi
|
|
282
|
+
import asyncio
|
|
283
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
284
|
+
async def main() -> None:
|
|
285
|
+
await client.manual_evaluation.evaluate_threads(project_id='550e8400-e29b-41d4-a716-446655440000', entity_ids=['550e8400-e29b-41d4-a716-446655440000', '550e8400-e29b-41d4-a716-446655440001'], rule_ids=['660e8400-e29b-41d4-a716-446655440000'], entity_type="trace", )
|
|
286
|
+
asyncio.run(main())
|
|
287
|
+
"""
|
|
288
|
+
_response = await self._raw_client.evaluate_threads(
|
|
289
|
+
project_id=project_id,
|
|
290
|
+
entity_ids=entity_ids,
|
|
291
|
+
rule_ids=rule_ids,
|
|
292
|
+
entity_type=entity_type,
|
|
293
|
+
request_options=request_options,
|
|
294
|
+
)
|
|
295
|
+
return _response.data
|
|
296
|
+
|
|
297
|
+
async def evaluate_traces(
|
|
298
|
+
self,
|
|
299
|
+
*,
|
|
300
|
+
project_id: str,
|
|
301
|
+
entity_ids: typing.Sequence[str],
|
|
302
|
+
rule_ids: typing.Sequence[str],
|
|
303
|
+
entity_type: ManualEvaluationRequestEntityType,
|
|
304
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
305
|
+
) -> ManualEvaluationResponse:
|
|
306
|
+
"""
|
|
307
|
+
Manually trigger evaluation rules on selected traces. Bypasses sampling and enqueues all specified traces for evaluation.
|
|
308
|
+
|
|
309
|
+
Parameters
|
|
310
|
+
----------
|
|
311
|
+
project_id : str
|
|
312
|
+
Project ID
|
|
313
|
+
|
|
314
|
+
entity_ids : typing.Sequence[str]
|
|
315
|
+
List of entity IDs (trace IDs or thread IDs) to evaluate
|
|
316
|
+
|
|
317
|
+
rule_ids : typing.Sequence[str]
|
|
318
|
+
List of automation rule IDs to apply
|
|
319
|
+
|
|
320
|
+
entity_type : ManualEvaluationRequestEntityType
|
|
321
|
+
Type of entity to evaluate (trace or thread)
|
|
322
|
+
|
|
323
|
+
request_options : typing.Optional[RequestOptions]
|
|
324
|
+
Request-specific configuration.
|
|
325
|
+
|
|
326
|
+
Returns
|
|
327
|
+
-------
|
|
328
|
+
ManualEvaluationResponse
|
|
329
|
+
Accepted - Evaluation request queued successfully
|
|
330
|
+
|
|
331
|
+
Examples
|
|
332
|
+
--------
|
|
333
|
+
from Opik import AsyncOpikApi
|
|
334
|
+
import asyncio
|
|
335
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
336
|
+
async def main() -> None:
|
|
337
|
+
await client.manual_evaluation.evaluate_traces(project_id='550e8400-e29b-41d4-a716-446655440000', entity_ids=['550e8400-e29b-41d4-a716-446655440000', '550e8400-e29b-41d4-a716-446655440001'], rule_ids=['660e8400-e29b-41d4-a716-446655440000'], entity_type="trace", )
|
|
338
|
+
asyncio.run(main())
|
|
339
|
+
"""
|
|
340
|
+
_response = await self._raw_client.evaluate_traces(
|
|
341
|
+
project_id=project_id,
|
|
342
|
+
entity_ids=entity_ids,
|
|
343
|
+
rule_ids=rule_ids,
|
|
344
|
+
entity_type=entity_type,
|
|
345
|
+
request_options=request_options,
|
|
346
|
+
)
|
|
347
|
+
return _response.data
|