opik 1.6.4__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 +33 -2
- 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/__init__.py +5 -0
- opik/api_objects/attachment/attachment.py +20 -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 +220 -0
- opik/api_objects/attachment/converters.py +51 -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/conversation/__init__.py +0 -0
- opik/api_objects/conversation/conversation_factory.py +43 -0
- opik/api_objects/conversation/conversation_thread.py +49 -0
- opik/api_objects/data_helpers.py +79 -0
- opik/api_objects/dataset/dataset.py +107 -45
- opik/api_objects/dataset/rest_operations.py +12 -3
- opik/api_objects/experiment/experiment.py +81 -45
- 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 +88 -19
- opik/api_objects/helpers.py +104 -7
- opik/api_objects/local_recording.py +81 -0
- opik/api_objects/opik_client.py +872 -174
- opik/api_objects/opik_query_language.py +136 -18
- opik/api_objects/optimization/__init__.py +3 -0
- opik/api_objects/optimization/optimization.py +39 -0
- opik/api_objects/prompt/__init__.py +13 -1
- 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 +193 -41
- opik/api_objects/prompt/text/__init__.py +1 -0
- opik/api_objects/prompt/text/prompt.py +174 -0
- opik/api_objects/prompt/text/prompt_template.py +55 -0
- opik/api_objects/prompt/types.py +29 -0
- opik/api_objects/rest_stream_parser.py +98 -0
- opik/api_objects/search_helpers.py +89 -0
- opik/api_objects/span/span_client.py +165 -45
- opik/api_objects/span/span_data.py +136 -25
- opik/api_objects/threads/__init__.py +0 -0
- opik/api_objects/threads/threads_client.py +185 -0
- opik/api_objects/trace/trace_client.py +72 -36
- opik/api_objects/trace/trace_data.py +112 -26
- 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 +62 -4
- opik/configurator/configure.py +45 -6
- opik/configurator/opik_rest_helpers.py +4 -1
- opik/context_storage.py +164 -65
- opik/datetime_helpers.py +12 -0
- opik/decorator/arguments_helpers.py +9 -1
- opik/decorator/base_track_decorator.py +298 -146
- opik/decorator/context_manager/__init__.py +0 -0
- opik/decorator/context_manager/span_context_manager.py +123 -0
- opik/decorator/context_manager/trace_context_manager.py +84 -0
- opik/decorator/generator_wrappers.py +3 -2
- opik/decorator/inspect_helpers.py +11 -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 +49 -21
- opik/decorator/tracker.py +9 -1
- opik/dict_utils.py +3 -3
- opik/environment.py +13 -1
- opik/error_tracking/api.py +1 -1
- opik/error_tracking/before_send.py +6 -5
- opik/error_tracking/environment_details.py +29 -7
- opik/error_tracking/error_filtering/filter_by_response_status_code.py +42 -0
- opik/error_tracking/error_filtering/filter_chain_builder.py +14 -3
- opik/evaluation/__init__.py +14 -2
- opik/evaluation/engine/engine.py +280 -82
- opik/evaluation/engine/evaluation_tasks_executor.py +15 -10
- opik/evaluation/engine/helpers.py +34 -9
- opik/evaluation/engine/metrics_evaluator.py +237 -0
- opik/evaluation/engine/types.py +5 -4
- opik/evaluation/evaluation_result.py +169 -2
- opik/evaluation/evaluator.py +659 -58
- opik/evaluation/metrics/__init__.py +121 -6
- opik/evaluation/metrics/aggregated_metric.py +92 -0
- opik/evaluation/metrics/arguments_helpers.py +15 -21
- opik/evaluation/metrics/arguments_validator.py +38 -0
- opik/evaluation/metrics/base_metric.py +20 -10
- opik/evaluation/metrics/conversation/__init__.py +48 -0
- opik/evaluation/metrics/conversation/conversation_thread_metric.py +79 -0
- opik/evaluation/metrics/conversation/conversation_turns_factory.py +39 -0
- opik/evaluation/metrics/conversation/g_eval_wrappers.py +19 -0
- opik/evaluation/metrics/conversation/helpers.py +84 -0
- 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/llm_judges/conversational_coherence/__init__.py +0 -0
- opik/evaluation/metrics/conversation/llm_judges/conversational_coherence/metric.py +274 -0
- opik/evaluation/metrics/conversation/llm_judges/conversational_coherence/schema.py +16 -0
- opik/evaluation/metrics/conversation/llm_judges/conversational_coherence/templates.py +95 -0
- opik/evaluation/metrics/conversation/llm_judges/g_eval_wrappers.py +442 -0
- opik/evaluation/metrics/conversation/llm_judges/session_completeness/__init__.py +0 -0
- opik/evaluation/metrics/conversation/llm_judges/session_completeness/metric.py +295 -0
- opik/evaluation/metrics/conversation/llm_judges/session_completeness/schema.py +22 -0
- opik/evaluation/metrics/conversation/llm_judges/session_completeness/templates.py +139 -0
- opik/evaluation/metrics/conversation/llm_judges/user_frustration/__init__.py +0 -0
- opik/evaluation/metrics/conversation/llm_judges/user_frustration/metric.py +277 -0
- opik/evaluation/metrics/conversation/llm_judges/user_frustration/schema.py +16 -0
- opik/evaluation/metrics/conversation/llm_judges/user_frustration/templates.py +135 -0
- opik/evaluation/metrics/conversation/types.py +34 -0
- opik/evaluation/metrics/conversation_types.py +9 -0
- opik/evaluation/metrics/heuristics/bertscore.py +107 -0
- opik/evaluation/metrics/heuristics/bleu.py +43 -16
- opik/evaluation/metrics/heuristics/chrf.py +127 -0
- opik/evaluation/metrics/heuristics/contains.py +50 -11
- opik/evaluation/metrics/heuristics/distribution_metrics.py +331 -0
- opik/evaluation/metrics/heuristics/equals.py +4 -1
- opik/evaluation/metrics/heuristics/gleu.py +113 -0
- opik/evaluation/metrics/heuristics/is_json.py +9 -3
- opik/evaluation/metrics/heuristics/language_adherence.py +123 -0
- opik/evaluation/metrics/heuristics/levenshtein_ratio.py +6 -5
- 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/regex_match.py +4 -1
- opik/evaluation/metrics/heuristics/rouge.py +148 -0
- opik/evaluation/metrics/heuristics/sentiment.py +98 -0
- 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 +27 -30
- opik/evaluation/metrics/llm_judges/answer_relevance/parser.py +27 -0
- opik/evaluation/metrics/llm_judges/answer_relevance/templates.py +10 -10
- opik/evaluation/metrics/llm_judges/context_precision/metric.py +28 -31
- opik/evaluation/metrics/llm_judges/context_precision/parser.py +27 -0
- opik/evaluation/metrics/llm_judges/context_precision/template.py +7 -7
- opik/evaluation/metrics/llm_judges/context_recall/metric.py +27 -31
- opik/evaluation/metrics/llm_judges/context_recall/parser.py +27 -0
- opik/evaluation/metrics/llm_judges/context_recall/template.py +7 -7
- opik/evaluation/metrics/llm_judges/factuality/metric.py +7 -26
- opik/evaluation/metrics/llm_judges/factuality/parser.py +35 -0
- opik/evaluation/metrics/llm_judges/factuality/template.py +1 -1
- opik/evaluation/metrics/llm_judges/g_eval/__init__.py +5 -0
- opik/evaluation/metrics/llm_judges/g_eval/metric.py +244 -113
- opik/evaluation/metrics/llm_judges/g_eval/parser.py +161 -0
- 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 +23 -27
- opik/evaluation/metrics/llm_judges/hallucination/parser.py +29 -0
- opik/evaluation/metrics/llm_judges/hallucination/template.py +2 -4
- 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 +23 -28
- opik/evaluation/metrics/llm_judges/moderation/parser.py +27 -0
- opik/evaluation/metrics/llm_judges/moderation/template.py +2 -2
- opik/evaluation/metrics/llm_judges/parsing_helpers.py +26 -0
- 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/__init__.py +3 -0
- opik/evaluation/metrics/llm_judges/trajectory_accuracy/metric.py +171 -0
- opik/evaluation/metrics/llm_judges/trajectory_accuracy/parser.py +38 -0
- opik/evaluation/metrics/llm_judges/trajectory_accuracy/templates.py +65 -0
- opik/evaluation/metrics/llm_judges/usefulness/metric.py +23 -32
- opik/evaluation/metrics/llm_judges/usefulness/parser.py +28 -0
- opik/evaluation/metrics/ragas_metric.py +112 -0
- opik/evaluation/models/__init__.py +10 -0
- opik/evaluation/models/base_model.py +140 -18
- opik/evaluation/models/langchain/__init__.py +3 -0
- opik/evaluation/models/langchain/langchain_chat_model.py +166 -0
- opik/evaluation/models/langchain/message_converters.py +106 -0
- opik/evaluation/models/langchain/opik_monitoring.py +23 -0
- opik/evaluation/models/litellm/litellm_chat_model.py +186 -40
- opik/evaluation/models/litellm/opik_monitor.py +24 -21
- 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/__init__.py +0 -0
- opik/evaluation/threads/context_helper.py +32 -0
- opik/evaluation/threads/evaluation_engine.py +181 -0
- opik/evaluation/threads/evaluation_result.py +18 -0
- opik/evaluation/threads/evaluator.py +120 -0
- opik/evaluation/threads/helpers.py +51 -0
- opik/evaluation/types.py +9 -1
- opik/exceptions.py +116 -3
- opik/file_upload/__init__.py +0 -0
- opik/file_upload/base_upload_manager.py +39 -0
- opik/file_upload/file_upload_monitor.py +14 -0
- opik/file_upload/file_uploader.py +141 -0
- opik/file_upload/mime_type.py +9 -0
- opik/file_upload/s3_multipart_upload/__init__.py +0 -0
- opik/file_upload/s3_multipart_upload/file_parts_strategy.py +89 -0
- opik/file_upload/s3_multipart_upload/s3_file_uploader.py +86 -0
- opik/file_upload/s3_multipart_upload/s3_upload_error.py +29 -0
- opik/file_upload/thread_pool.py +17 -0
- opik/file_upload/upload_client.py +114 -0
- opik/file_upload/upload_manager.py +255 -0
- opik/file_upload/upload_options.py +37 -0
- opik/format_helpers.py +17 -0
- opik/guardrails/__init__.py +4 -0
- opik/guardrails/guardrail.py +157 -0
- opik/guardrails/guards/__init__.py +5 -0
- opik/guardrails/guards/guard.py +17 -0
- opik/guardrails/guards/pii.py +47 -0
- opik/guardrails/guards/topic.py +76 -0
- opik/guardrails/rest_api_client.py +34 -0
- opik/guardrails/schemas.py +24 -0
- opik/guardrails/tracing.py +61 -0
- opik/healthcheck/__init__.py +2 -1
- opik/healthcheck/checks.py +2 -2
- opik/healthcheck/rich_representation.py +1 -1
- 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 +75 -4
- opik/id_helpers.py +18 -0
- opik/integrations/adk/__init__.py +14 -0
- opik/integrations/adk/callback_context_info_extractors.py +32 -0
- opik/integrations/adk/graph/__init__.py +0 -0
- opik/integrations/adk/graph/mermaid_graph_builder.py +128 -0
- opik/integrations/adk/graph/nodes.py +101 -0
- opik/integrations/adk/graph/subgraph_edges_builders.py +41 -0
- opik/integrations/adk/helpers.py +48 -0
- opik/integrations/adk/legacy_opik_tracer.py +381 -0
- opik/integrations/adk/opik_tracer.py +370 -0
- opik/integrations/adk/patchers/__init__.py +4 -0
- opik/integrations/adk/patchers/adk_otel_tracer/__init__.py +0 -0
- opik/integrations/adk/patchers/adk_otel_tracer/llm_span_helpers.py +30 -0
- opik/integrations/adk/patchers/adk_otel_tracer/opik_adk_otel_tracer.py +201 -0
- opik/integrations/adk/patchers/litellm_wrappers.py +91 -0
- opik/integrations/adk/patchers/llm_response_wrapper.py +105 -0
- opik/integrations/adk/patchers/patchers.py +64 -0
- opik/integrations/adk/recursive_callback_injector.py +126 -0
- opik/integrations/aisuite/aisuite_decorator.py +8 -3
- opik/integrations/aisuite/opik_tracker.py +1 -0
- opik/integrations/anthropic/messages_create_decorator.py +8 -3
- opik/integrations/anthropic/opik_tracker.py +0 -1
- 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} +18 -8
- opik/integrations/bedrock/invoke_agent_decorator.py +12 -7
- 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 +43 -4
- opik/integrations/bedrock/types.py +19 -0
- opik/integrations/crewai/crewai_decorator.py +34 -56
- 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 +246 -84
- opik/integrations/dspy/graph.py +88 -0
- opik/integrations/dspy/parsers.py +168 -0
- opik/integrations/genai/encoder_extension.py +2 -6
- opik/integrations/genai/generate_content_decorator.py +20 -13
- opik/integrations/guardrails/guardrails_decorator.py +4 -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/constants.py +35 -0
- opik/integrations/haystack/converters.py +1 -2
- opik/integrations/haystack/opik_connector.py +28 -6
- opik/integrations/haystack/opik_span_bridge.py +284 -0
- opik/integrations/haystack/opik_tracer.py +124 -222
- 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 +2 -2
- opik/integrations/langchain/opik_tracer.py +641 -206
- opik/integrations/langchain/provider_usage_extractors/__init__.py +5 -0
- opik/integrations/langchain/provider_usage_extractors/anthropic_usage_extractor.py +101 -0
- opik/integrations/langchain/provider_usage_extractors/anthropic_vertexai_usage_extractor.py +67 -0
- opik/integrations/langchain/provider_usage_extractors/bedrock_usage_extractor.py +94 -0
- opik/integrations/langchain/provider_usage_extractors/google_generative_ai_usage_extractor.py +109 -0
- opik/integrations/langchain/provider_usage_extractors/groq_usage_extractor.py +92 -0
- opik/integrations/langchain/provider_usage_extractors/langchain_run_helpers/__init__.py +15 -0
- opik/integrations/langchain/provider_usage_extractors/langchain_run_helpers/helpers.py +134 -0
- opik/integrations/langchain/provider_usage_extractors/langchain_run_helpers/langchain_usage.py +163 -0
- opik/integrations/langchain/provider_usage_extractors/openai_usage_extractor.py +124 -0
- opik/integrations/langchain/provider_usage_extractors/provider_usage_extractor_protocol.py +29 -0
- opik/integrations/langchain/provider_usage_extractors/usage_extractor.py +48 -0
- opik/integrations/langchain/provider_usage_extractors/vertexai_usage_extractor.py +109 -0
- 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 +179 -78
- opik/integrations/llama_index/event_parsing_utils.py +29 -9
- opik/integrations/openai/agents/opik_tracing_processor.py +204 -32
- opik/integrations/openai/agents/span_data_parsers.py +15 -6
- opik/integrations/openai/chat_completion_chunks_aggregator.py +1 -1
- opik/integrations/openai/{openai_decorator.py → openai_chat_completions_decorator.py} +45 -35
- opik/integrations/openai/openai_responses_decorator.py +158 -0
- opik/integrations/openai/opik_tracker.py +94 -13
- opik/integrations/openai/response_events_aggregator.py +36 -0
- opik/integrations/openai/stream_patchers.py +125 -15
- opik/integrations/sagemaker/auth.py +5 -1
- opik/jsonable_encoder.py +29 -1
- opik/llm_usage/base_original_provider_usage.py +15 -8
- opik/llm_usage/bedrock_usage.py +8 -2
- opik/llm_usage/google_usage.py +6 -1
- opik/llm_usage/llm_usage_info.py +6 -0
- opik/llm_usage/{openai_usage.py → openai_chat_completions_usage.py} +2 -12
- opik/llm_usage/{openai_agent_usage.py → openai_responses_usage.py} +7 -15
- opik/llm_usage/opik_usage.py +36 -10
- opik/llm_usage/opik_usage_factory.py +35 -19
- opik/logging_messages.py +19 -7
- opik/message_processing/arguments_utils.py +22 -0
- opik/message_processing/batching/base_batcher.py +45 -17
- opik/message_processing/batching/batch_manager.py +22 -10
- opik/message_processing/batching/batch_manager_constuctors.py +36 -11
- opik/message_processing/batching/batchers.py +167 -44
- opik/message_processing/batching/flushing_thread.py +0 -3
- opik/message_processing/batching/sequence_splitter.py +50 -5
- 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/message_queue.py +79 -0
- opik/message_processing/messages.py +154 -12
- 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/processors/online_message_processor.py +324 -0
- opik/message_processing/queue_consumer.py +61 -13
- opik/message_processing/streamer.py +102 -31
- opik/message_processing/streamer_constructors.py +67 -12
- opik/opik_context.py +103 -11
- opik/plugins/pytest/decorator.py +2 -2
- opik/plugins/pytest/experiment_runner.py +3 -2
- opik/plugins/pytest/hooks.py +6 -4
- opik/rate_limit/__init__.py +0 -0
- opik/rate_limit/rate_limit.py +25 -0
- opik/rest_api/__init__.py +643 -11
- 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/attachments/__init__.py +17 -0
- opik/rest_api/attachments/client.py +752 -0
- opik/rest_api/attachments/raw_client.py +1125 -0
- opik/rest_api/attachments/types/__init__.py +15 -0
- opik/rest_api/attachments/types/attachment_list_request_entity_type.py +5 -0
- opik/rest_api/attachments/types/download_attachment_request_entity_type.py +5 -0
- opik/rest_api/attachments/types/start_multipart_upload_request_entity_type.py +5 -0
- opik/rest_api/attachments/types/upload_attachment_request_entity_type.py +5 -0
- opik/rest_api/automation_rule_evaluators/__init__.py +2 -0
- opik/rest_api/automation_rule_evaluators/client.py +182 -1162
- opik/rest_api/automation_rule_evaluators/raw_client.py +598 -0
- opik/rest_api/chat_completions/__init__.py +2 -0
- opik/rest_api/chat_completions/client.py +115 -149
- opik/rest_api/chat_completions/raw_client.py +339 -0
- opik/rest_api/check/__init__.py +2 -0
- opik/rest_api/check/client.py +88 -106
- opik/rest_api/check/raw_client.py +258 -0
- opik/rest_api/client.py +112 -212
- opik/rest_api/core/__init__.py +5 -0
- opik/rest_api/core/api_error.py +12 -6
- opik/rest_api/core/client_wrapper.py +4 -14
- opik/rest_api/core/datetime_utils.py +1 -3
- opik/rest_api/core/file.py +2 -5
- opik/rest_api/core/http_client.py +42 -120
- opik/rest_api/core/http_response.py +55 -0
- opik/rest_api/core/jsonable_encoder.py +1 -4
- opik/rest_api/core/pydantic_utilities.py +79 -147
- opik/rest_api/core/query_encoder.py +1 -3
- opik/rest_api/core/serialization.py +10 -10
- 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/__init__.py +5 -0
- opik/rest_api/datasets/client.py +1638 -1091
- opik/rest_api/datasets/raw_client.py +3389 -0
- opik/rest_api/datasets/types/__init__.py +8 -0
- opik/rest_api/datasets/types/dataset_update_visibility.py +5 -0
- opik/rest_api/datasets/types/dataset_write_visibility.py +5 -0
- opik/rest_api/errors/__init__.py +2 -0
- opik/rest_api/errors/bad_request_error.py +4 -3
- opik/rest_api/errors/conflict_error.py +4 -3
- opik/rest_api/errors/forbidden_error.py +4 -2
- opik/rest_api/errors/not_found_error.py +4 -3
- opik/rest_api/errors/not_implemented_error.py +4 -3
- opik/rest_api/errors/unauthorized_error.py +4 -3
- opik/rest_api/errors/unprocessable_entity_error.py +4 -3
- opik/rest_api/experiments/__init__.py +5 -0
- opik/rest_api/experiments/client.py +676 -752
- opik/rest_api/experiments/raw_client.py +1872 -0
- opik/rest_api/experiments/types/__init__.py +10 -0
- 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/experiments/types/experiment_write_type.py +5 -0
- opik/rest_api/feedback_definitions/__init__.py +2 -0
- opik/rest_api/feedback_definitions/client.py +96 -370
- opik/rest_api/feedback_definitions/raw_client.py +541 -0
- opik/rest_api/feedback_definitions/types/__init__.py +2 -0
- opik/rest_api/feedback_definitions/types/find_feedback_definitions_request_type.py +1 -3
- opik/rest_api/guardrails/__init__.py +4 -0
- opik/rest_api/guardrails/client.py +104 -0
- opik/rest_api/guardrails/raw_client.py +102 -0
- opik/rest_api/llm_provider_key/__init__.py +2 -0
- opik/rest_api/llm_provider_key/client.py +166 -440
- opik/rest_api/llm_provider_key/raw_client.py +643 -0
- opik/rest_api/llm_provider_key/types/__init__.py +2 -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/open_telemetry_ingestion/__init__.py +2 -0
- opik/rest_api/open_telemetry_ingestion/client.py +38 -63
- opik/rest_api/open_telemetry_ingestion/raw_client.py +88 -0
- opik/rest_api/optimizations/__init__.py +7 -0
- opik/rest_api/optimizations/client.py +704 -0
- opik/rest_api/optimizations/raw_client.py +920 -0
- opik/rest_api/optimizations/types/__init__.py +7 -0
- opik/rest_api/optimizations/types/optimization_update_status.py +7 -0
- opik/rest_api/projects/__init__.py +10 -1
- opik/rest_api/projects/client.py +180 -855
- opik/rest_api/projects/raw_client.py +1216 -0
- opik/rest_api/projects/types/__init__.py +11 -4
- opik/rest_api/projects/types/project_metric_request_public_interval.py +1 -3
- opik/rest_api/projects/types/project_metric_request_public_metric_type.py +11 -1
- opik/rest_api/projects/types/project_update_visibility.py +5 -0
- opik/rest_api/projects/types/project_write_visibility.py +5 -0
- opik/rest_api/prompts/__init__.py +4 -2
- opik/rest_api/prompts/client.py +381 -970
- opik/rest_api/prompts/raw_client.py +1634 -0
- opik/rest_api/prompts/types/__init__.py +5 -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/raw_client.py +156 -0
- opik/rest_api/redirect/__init__.py +4 -0
- opik/rest_api/redirect/client.py +375 -0
- opik/rest_api/redirect/raw_client.py +566 -0
- opik/rest_api/service_toggles/__init__.py +4 -0
- opik/rest_api/service_toggles/client.py +91 -0
- opik/rest_api/service_toggles/raw_client.py +93 -0
- opik/rest_api/spans/__init__.py +2 -0
- opik/rest_api/spans/client.py +659 -1354
- opik/rest_api/spans/raw_client.py +2383 -0
- opik/rest_api/spans/types/__init__.py +2 -0
- opik/rest_api/spans/types/find_feedback_score_names_1_request_type.py +1 -3
- opik/rest_api/spans/types/get_span_stats_request_type.py +1 -3
- opik/rest_api/spans/types/get_spans_by_project_request_type.py +1 -3
- opik/rest_api/spans/types/span_search_stream_request_public_type.py +1 -3
- opik/rest_api/system_usage/__init__.py +2 -0
- opik/rest_api/system_usage/client.py +157 -216
- opik/rest_api/system_usage/raw_client.py +455 -0
- opik/rest_api/traces/__init__.py +2 -0
- opik/rest_api/traces/client.py +2102 -1625
- opik/rest_api/traces/raw_client.py +4144 -0
- opik/rest_api/types/__init__.py +629 -24
- opik/rest_api/types/aggregation_data.py +27 -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/{json_schema_element.py → annotation_queue_item_ids.py} +5 -7
- 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/{workspace_metadata.py → annotation_queue_reviewer.py} +6 -7
- 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/assistant_message.py +7 -8
- opik/rest_api/types/assistant_message_role.py +1 -3
- opik/rest_api/types/attachment.py +22 -0
- opik/rest_api/types/attachment_page.py +28 -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 +160 -0
- opik/rest_api/types/automation_rule_evaluator_llm_as_judge.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_llm_as_judge_public.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_llm_as_judge_write.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_object_object_public.py +155 -0
- opik/rest_api/types/automation_rule_evaluator_page_public.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_public.py +155 -0
- 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 +22 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_public.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_write.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_public.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_write.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_update.py +143 -0
- opik/rest_api/types/automation_rule_evaluator_update_llm_as_judge.py +6 -6
- 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 +22 -0
- opik/rest_api/types/automation_rule_evaluator_update_trace_thread_user_defined_metric_python.py +22 -0
- opik/rest_api/types/automation_rule_evaluator_update_user_defined_metric_python.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_public.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_write.py +6 -6
- opik/rest_api/types/automation_rule_evaluator_write.py +143 -0
- opik/rest_api/types/avg_value_stat_public.py +3 -5
- opik/rest_api/types/batch_delete.py +3 -5
- opik/rest_api/types/batch_delete_by_project.py +20 -0
- opik/rest_api/types/bi_information.py +3 -5
- opik/rest_api/types/bi_information_response.py +4 -6
- 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/categorical_feedback_definition.py +5 -7
- opik/rest_api/types/categorical_feedback_definition_create.py +4 -6
- opik/rest_api/types/categorical_feedback_definition_public.py +5 -7
- opik/rest_api/types/categorical_feedback_definition_update.py +4 -6
- opik/rest_api/types/categorical_feedback_detail.py +3 -5
- opik/rest_api/types/categorical_feedback_detail_create.py +3 -5
- opik/rest_api/types/categorical_feedback_detail_public.py +3 -5
- opik/rest_api/types/categorical_feedback_detail_update.py +3 -5
- opik/rest_api/types/chat_completion_choice.py +4 -6
- opik/rest_api/types/chat_completion_response.py +5 -6
- opik/rest_api/types/check.py +22 -0
- opik/rest_api/types/{json_node_compare.py → check_name.py} +1 -1
- opik/rest_api/types/check_public.py +22 -0
- opik/rest_api/types/check_public_name.py +5 -0
- opik/rest_api/types/check_public_result.py +5 -0
- opik/rest_api/types/check_result.py +5 -0
- opik/rest_api/types/chunked_output_json_node.py +4 -6
- opik/rest_api/types/chunked_output_json_node_public.py +4 -6
- opik/rest_api/types/chunked_output_json_node_public_type.py +6 -10
- opik/rest_api/types/chunked_output_json_node_type.py +6 -10
- opik/rest_api/types/column.py +8 -10
- opik/rest_api/types/column_compare.py +8 -10
- opik/rest_api/types/column_public.py +8 -10
- opik/rest_api/types/column_types_item.py +1 -3
- opik/rest_api/types/comment.py +4 -6
- opik/rest_api/types/comment_compare.py +4 -6
- opik/rest_api/types/comment_public.py +4 -6
- opik/rest_api/types/complete_multipart_upload_request.py +33 -0
- opik/rest_api/types/complete_multipart_upload_request_entity_type.py +5 -0
- opik/rest_api/types/completion_tokens_details.py +3 -5
- opik/rest_api/types/count_value_stat_public.py +3 -5
- opik/rest_api/types/dashboard_page_public.py +24 -0
- opik/rest_api/types/dashboard_public.py +30 -0
- opik/rest_api/types/data_point_double.py +21 -0
- opik/rest_api/types/data_point_number_public.py +3 -5
- opik/rest_api/types/dataset.py +14 -6
- 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 +9 -8
- opik/rest_api/types/dataset_item_batch.py +3 -5
- opik/rest_api/types/dataset_item_changes_public.py +5 -0
- opik/rest_api/types/dataset_item_compare.py +9 -8
- opik/rest_api/types/dataset_item_compare_source.py +1 -3
- 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 +10 -7
- opik/rest_api/types/dataset_item_page_public.py +10 -7
- opik/rest_api/types/dataset_item_public.py +9 -8
- opik/rest_api/types/dataset_item_public_source.py +1 -3
- opik/rest_api/types/dataset_item_source.py +1 -3
- opik/rest_api/types/dataset_item_update.py +39 -0
- opik/rest_api/types/dataset_item_write.py +5 -6
- opik/rest_api/types/dataset_item_write_source.py +1 -3
- opik/rest_api/types/dataset_page_public.py +9 -6
- opik/rest_api/types/dataset_public.py +14 -6
- opik/rest_api/types/dataset_public_status.py +5 -0
- opik/rest_api/types/dataset_public_visibility.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/dataset_visibility.py +5 -0
- opik/rest_api/types/delete_attachments_request.py +23 -0
- opik/rest_api/types/delete_attachments_request_entity_type.py +5 -0
- opik/rest_api/types/delete_feedback_score.py +4 -5
- opik/rest_api/types/delete_ids_holder.py +19 -0
- opik/rest_api/types/delta.py +7 -9
- opik/rest_api/types/error_count_with_deviation.py +21 -0
- opik/rest_api/types/error_count_with_deviation_detailed.py +21 -0
- opik/rest_api/types/error_info.py +3 -5
- opik/rest_api/types/error_info_experiment_item_bulk_write_view.py +21 -0
- opik/rest_api/types/error_info_public.py +3 -5
- opik/rest_api/types/error_info_write.py +3 -5
- opik/rest_api/types/error_message.py +3 -5
- opik/rest_api/types/error_message_detail.py +3 -5
- opik/rest_api/types/error_message_detailed.py +3 -5
- opik/rest_api/types/error_message_public.py +3 -5
- opik/rest_api/types/experiment.py +21 -10
- opik/rest_api/types/experiment_group_aggregations_response.py +20 -0
- opik/rest_api/types/experiment_group_response.py +22 -0
- opik/rest_api/types/experiment_item.py +14 -11
- opik/rest_api/types/experiment_item_bulk_record.py +27 -0
- opik/rest_api/types/experiment_item_bulk_record_experiment_item_bulk_write_view.py +27 -0
- opik/rest_api/types/experiment_item_bulk_upload.py +27 -0
- opik/rest_api/types/experiment_item_compare.py +14 -11
- opik/rest_api/types/experiment_item_compare_trace_visibility_mode.py +5 -0
- opik/rest_api/types/experiment_item_public.py +6 -6
- opik/rest_api/types/experiment_item_public_trace_visibility_mode.py +5 -0
- opik/rest_api/types/experiment_item_trace_visibility_mode.py +5 -0
- opik/rest_api/types/experiment_page_public.py +9 -6
- opik/rest_api/types/experiment_public.py +21 -10
- opik/rest_api/types/experiment_public_status.py +5 -0
- opik/rest_api/types/experiment_public_type.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/experiment_type.py +5 -0
- opik/rest_api/types/export_trace_service_request.py +5 -0
- opik/rest_api/types/feedback.py +40 -27
- opik/rest_api/types/feedback_create.py +27 -13
- opik/rest_api/types/feedback_definition_page_public.py +4 -6
- opik/rest_api/types/feedback_object_public.py +40 -27
- opik/rest_api/types/feedback_public.py +40 -27
- opik/rest_api/types/feedback_score.py +7 -7
- opik/rest_api/types/feedback_score_average.py +3 -5
- opik/rest_api/types/feedback_score_average_detailed.py +3 -5
- opik/rest_api/types/feedback_score_average_public.py +3 -5
- opik/rest_api/types/feedback_score_batch.py +4 -6
- opik/rest_api/types/feedback_score_batch_item.py +6 -6
- opik/rest_api/types/feedback_score_batch_item_source.py +1 -3
- opik/rest_api/types/feedback_score_batch_item_thread.py +32 -0
- opik/rest_api/types/feedback_score_batch_item_thread_source.py +5 -0
- opik/rest_api/types/feedback_score_compare.py +7 -7
- opik/rest_api/types/feedback_score_compare_source.py +1 -3
- opik/rest_api/types/feedback_score_experiment_item_bulk_write_view.py +31 -0
- opik/rest_api/types/feedback_score_experiment_item_bulk_write_view_source.py +5 -0
- opik/rest_api/types/feedback_score_names.py +4 -6
- opik/rest_api/types/feedback_score_public.py +11 -7
- opik/rest_api/types/feedback_score_public_source.py +1 -3
- opik/rest_api/types/feedback_score_source.py +1 -3
- opik/rest_api/types/feedback_update.py +27 -13
- opik/rest_api/types/function.py +4 -7
- opik/rest_api/types/function_call.py +3 -5
- opik/rest_api/types/group_content.py +19 -0
- opik/rest_api/types/group_content_with_aggregations.py +21 -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 +34 -0
- opik/rest_api/types/guardrail_batch.py +20 -0
- opik/rest_api/types/guardrail_name.py +5 -0
- opik/rest_api/types/guardrail_result.py +5 -0
- opik/rest_api/types/guardrail_write.py +33 -0
- opik/rest_api/types/guardrail_write_name.py +5 -0
- opik/rest_api/types/guardrail_write_result.py +5 -0
- opik/rest_api/types/guardrails_validation.py +21 -0
- opik/rest_api/types/guardrails_validation_public.py +21 -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/json_list_string.py +7 -0
- opik/rest_api/types/json_list_string_compare.py +7 -0
- opik/rest_api/types/json_list_string_experiment_item_bulk_write_view.py +7 -0
- opik/rest_api/types/json_list_string_public.py +7 -0
- opik/rest_api/types/json_list_string_write.py +7 -0
- opik/rest_api/types/json_schema.py +5 -8
- opik/rest_api/types/llm_as_judge_code.py +8 -12
- opik/rest_api/types/llm_as_judge_code_public.py +8 -12
- opik/rest_api/types/llm_as_judge_code_write.py +8 -12
- opik/rest_api/types/llm_as_judge_message.py +9 -7
- 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 +9 -7
- opik/rest_api/types/llm_as_judge_message_public_role.py +1 -1
- opik/rest_api/types/llm_as_judge_message_role.py +1 -1
- opik/rest_api/types/llm_as_judge_message_write.py +9 -7
- opik/rest_api/types/llm_as_judge_message_write_role.py +1 -1
- opik/rest_api/types/llm_as_judge_model_parameters.py +6 -5
- opik/rest_api/types/llm_as_judge_model_parameters_public.py +6 -5
- opik/rest_api/types/llm_as_judge_model_parameters_write.py +6 -5
- opik/rest_api/types/llm_as_judge_output_schema.py +4 -6
- opik/rest_api/types/llm_as_judge_output_schema_public.py +4 -6
- opik/rest_api/types/llm_as_judge_output_schema_public_type.py +1 -3
- opik/rest_api/types/llm_as_judge_output_schema_type.py +1 -3
- opik/rest_api/types/llm_as_judge_output_schema_write.py +4 -6
- opik/rest_api/types/llm_as_judge_output_schema_write_type.py +1 -3
- opik/rest_api/types/log_item.py +5 -7
- opik/rest_api/types/log_item_level.py +1 -3
- opik/rest_api/types/log_page.py +4 -6
- 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/multipart_upload_part.py +20 -0
- opik/rest_api/types/numerical_feedback_definition.py +5 -7
- opik/rest_api/types/numerical_feedback_definition_create.py +4 -6
- opik/rest_api/types/numerical_feedback_definition_public.py +5 -7
- opik/rest_api/types/numerical_feedback_definition_update.py +4 -6
- opik/rest_api/types/numerical_feedback_detail.py +3 -5
- opik/rest_api/types/numerical_feedback_detail_create.py +3 -5
- opik/rest_api/types/numerical_feedback_detail_public.py +3 -5
- opik/rest_api/types/numerical_feedback_detail_update.py +3 -5
- opik/rest_api/types/optimization.py +37 -0
- opik/rest_api/types/optimization_page_public.py +28 -0
- opik/rest_api/types/optimization_public.py +37 -0
- opik/rest_api/types/optimization_public_status.py +7 -0
- opik/rest_api/types/optimization_status.py +7 -0
- 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 +30 -0
- opik/rest_api/types/optimization_write_status.py +7 -0
- opik/rest_api/types/page_columns.py +4 -6
- opik/rest_api/types/percentage_value_stat_public.py +4 -6
- opik/rest_api/types/percentage_values.py +8 -16
- opik/rest_api/types/percentage_values_detailed.py +8 -16
- opik/rest_api/types/percentage_values_public.py +8 -16
- opik/rest_api/types/project.py +12 -7
- opik/rest_api/types/project_detailed.py +12 -7
- opik/rest_api/types/project_detailed_visibility.py +5 -0
- opik/rest_api/types/project_metric_response_public.py +5 -9
- opik/rest_api/types/project_metric_response_public_interval.py +1 -3
- opik/rest_api/types/project_metric_response_public_metric_type.py +11 -1
- opik/rest_api/types/project_page_public.py +8 -10
- opik/rest_api/types/project_public.py +6 -6
- opik/rest_api/types/project_public_visibility.py +5 -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_stat_item_object_public.py +8 -17
- opik/rest_api/types/project_stats_public.py +4 -6
- opik/rest_api/types/project_stats_summary.py +4 -6
- opik/rest_api/types/project_stats_summary_item.py +9 -6
- opik/rest_api/types/project_visibility.py +5 -0
- opik/rest_api/types/prompt.py +12 -7
- opik/rest_api/types/prompt_detail.py +12 -7
- opik/rest_api/types/prompt_detail_template_structure.py +5 -0
- opik/rest_api/types/prompt_page_public.py +9 -6
- opik/rest_api/types/prompt_public.py +11 -6
- 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_tokens_details.py +19 -0
- opik/rest_api/types/prompt_version.py +7 -6
- opik/rest_api/types/prompt_version_detail.py +7 -6
- opik/rest_api/types/prompt_version_detail_template_structure.py +5 -0
- opik/rest_api/types/prompt_version_link.py +4 -5
- opik/rest_api/types/prompt_version_link_public.py +4 -5
- opik/rest_api/types/prompt_version_link_write.py +3 -5
- opik/rest_api/types/prompt_version_page_public.py +9 -6
- opik/rest_api/types/prompt_version_public.py +7 -6
- 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 +18 -8
- opik/rest_api/types/provider_api_key_page_public.py +27 -0
- opik/rest_api/types/provider_api_key_provider.py +1 -1
- opik/rest_api/types/provider_api_key_public.py +18 -8
- opik/rest_api/types/provider_api_key_public_provider.py +1 -1
- opik/rest_api/types/response_format.py +5 -7
- opik/rest_api/types/response_format_type.py +1 -3
- opik/rest_api/types/result.py +21 -0
- opik/rest_api/types/results_number_public.py +4 -6
- opik/rest_api/types/score_name.py +4 -5
- opik/rest_api/types/service_toggles_config.py +44 -0
- opik/rest_api/types/span.py +13 -15
- opik/rest_api/types/span_batch.py +4 -6
- opik/rest_api/types/span_enrichment_options.py +31 -0
- opik/rest_api/types/span_experiment_item_bulk_write_view.py +39 -0
- opik/rest_api/types/span_experiment_item_bulk_write_view_type.py +5 -0
- 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_public.py +4 -6
- opik/rest_api/types/span_filter_public_operator.py +2 -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_page_public.py +9 -6
- opik/rest_api/types/span_public.py +19 -16
- opik/rest_api/types/span_public_type.py +1 -1
- opik/rest_api/types/span_type.py +1 -1
- opik/rest_api/types/span_update.py +46 -0
- opik/rest_api/types/span_update_type.py +5 -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 +13 -14
- opik/rest_api/types/span_write_type.py +1 -1
- opik/rest_api/types/spans_count_response.py +20 -0
- opik/rest_api/types/start_multipart_upload_response.py +20 -0
- opik/rest_api/types/stream_options.py +3 -5
- 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/tool.py +4 -6
- opik/rest_api/types/tool_call.py +4 -6
- opik/rest_api/types/trace.py +26 -12
- opik/rest_api/types/trace_batch.py +4 -6
- opik/rest_api/types/trace_count_response.py +4 -6
- opik/rest_api/types/trace_enrichment_options.py +32 -0
- opik/rest_api/types/trace_experiment_item_bulk_write_view.py +41 -0
- 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_public.py +23 -0
- opik/rest_api/types/trace_filter_public_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_page_public.py +8 -10
- opik/rest_api/types/trace_public.py +27 -13
- opik/rest_api/types/trace_public_visibility_mode.py +5 -0
- opik/rest_api/types/trace_thread.py +18 -9
- opik/rest_api/types/trace_thread_filter.py +23 -0
- opik/rest_api/types/trace_thread_filter_operator.py +21 -0
- opik/rest_api/types/trace_thread_filter_public.py +23 -0
- opik/rest_api/types/trace_thread_filter_public_operator.py +21 -0
- 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 +22 -0
- opik/rest_api/types/trace_thread_llm_as_judge_code.py +26 -0
- opik/rest_api/types/trace_thread_llm_as_judge_code_public.py +26 -0
- opik/rest_api/types/trace_thread_llm_as_judge_code_write.py +26 -0
- opik/rest_api/types/trace_thread_page.py +9 -6
- opik/rest_api/types/trace_thread_status.py +5 -0
- opik/rest_api/types/trace_thread_update.py +19 -0
- opik/rest_api/types/trace_thread_user_defined_metric_python_code.py +19 -0
- opik/rest_api/types/trace_thread_user_defined_metric_python_code_public.py +19 -0
- opik/rest_api/types/trace_thread_user_defined_metric_python_code_write.py +19 -0
- opik/rest_api/types/trace_update.py +39 -0
- opik/rest_api/types/trace_visibility_mode.py +5 -0
- opik/rest_api/types/trace_write.py +10 -11
- opik/rest_api/types/usage.py +6 -6
- opik/rest_api/types/user_defined_metric_python_code.py +3 -5
- opik/rest_api/types/user_defined_metric_python_code_public.py +3 -5
- opik/rest_api/types/user_defined_metric_python_code_write.py +3 -5
- opik/rest_api/types/value_entry.py +27 -0
- opik/rest_api/types/value_entry_compare.py +27 -0
- opik/rest_api/types/value_entry_compare_source.py +5 -0
- opik/rest_api/types/value_entry_experiment_item_bulk_write_view.py +27 -0
- opik/rest_api/types/value_entry_experiment_item_bulk_write_view_source.py +5 -0
- opik/rest_api/types/value_entry_public.py +27 -0
- opik/rest_api/types/value_entry_public_source.py +5 -0
- opik/rest_api/types/value_entry_source.py +5 -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 +27 -0
- opik/rest_api/types/workspace_metric_request.py +24 -0
- opik/rest_api/types/workspace_metric_response.py +20 -0
- opik/rest_api/types/workspace_metrics_summary_request.py +23 -0
- opik/rest_api/types/workspace_metrics_summary_response.py +20 -0
- opik/rest_api/types/workspace_name_holder.py +19 -0
- opik/rest_api/types/workspace_spans_count.py +20 -0
- opik/rest_api/types/workspace_trace_count.py +3 -5
- 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/__init__.py +2 -0
- opik/rest_api/workspaces/client.py +550 -77
- opik/rest_api/workspaces/raw_client.py +923 -0
- opik/rest_client_configurator/api.py +1 -0
- opik/rest_client_configurator/retry_decorator.py +1 -0
- opik/s3_httpx_client.py +67 -0
- opik/simulation/__init__.py +6 -0
- opik/simulation/simulated_user.py +99 -0
- opik/simulation/simulator.py +108 -0
- opik/synchronization.py +11 -24
- opik/tracing_runtime_config.py +48 -0
- opik/types.py +48 -2
- opik/url_helpers.py +13 -3
- opik/validation/chat_prompt_messages.py +241 -0
- opik/validation/feedback_score.py +4 -5
- opik/validation/parameter.py +122 -0
- opik/validation/parameters_validator.py +175 -0
- opik/validation/validator.py +30 -2
- opik/validation/validator_helpers.py +147 -0
- opik-1.9.71.dist-info/METADATA +370 -0
- opik-1.9.71.dist-info/RECORD +1110 -0
- {opik-1.6.4.dist-info → opik-1.9.71.dist-info}/WHEEL +1 -1
- opik-1.9.71.dist-info/licenses/LICENSE +203 -0
- opik/api_objects/prompt/prompt.py +0 -107
- opik/api_objects/prompt/prompt_template.py +0 -35
- opik/cli.py +0 -193
- opik/evaluation/metrics/models.py +0 -8
- opik/hooks.py +0 -13
- opik/integrations/bedrock/chunks_aggregator.py +0 -55
- opik/integrations/bedrock/helpers.py +0 -8
- opik/integrations/langchain/google_run_helpers.py +0 -75
- opik/integrations/langchain/openai_run_helpers.py +0 -122
- opik/message_processing/message_processors.py +0 -203
- opik/rest_api/types/delta_role.py +0 -7
- opik/rest_api/types/json_object_schema.py +0 -34
- opik-1.6.4.dist-info/METADATA +0 -270
- opik-1.6.4.dist-info/RECORD +0 -507
- /opik/integrations/bedrock/{stream_wrappers.py → converse/stream_wrappers.py} +0 -0
- {opik-1.6.4.dist-info → opik-1.9.71.dist-info}/entry_points.txt +0 -0
- {opik-1.6.4.dist-info → opik-1.9.71.dist-info}/top_level.txt +0 -0
opik/rest_api/prompts/client.py
CHANGED
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
5
6
|
from ..core.request_options import RequestOptions
|
|
6
|
-
from ..types.prompt_page_public import PromptPagePublic
|
|
7
|
-
from ..core.pydantic_utilities import parse_obj_as
|
|
8
|
-
from json.decoder import JSONDecodeError
|
|
9
|
-
from ..core.api_error import ApiError
|
|
10
7
|
from ..types.json_node_write import JsonNodeWrite
|
|
11
|
-
from .types.prompt_write_type import PromptWriteType
|
|
12
|
-
from ..errors.bad_request_error import BadRequestError
|
|
13
|
-
from ..errors.conflict_error import ConflictError
|
|
14
|
-
from ..errors.unprocessable_entity_error import UnprocessableEntityError
|
|
15
|
-
from ..types.prompt_version_detail import PromptVersionDetail
|
|
16
|
-
from ..core.serialization import convert_and_respect_annotation_metadata
|
|
17
8
|
from ..types.prompt_detail import PromptDetail
|
|
18
|
-
from ..
|
|
19
|
-
from ..
|
|
9
|
+
from ..types.prompt_page_public import PromptPagePublic
|
|
10
|
+
from ..types.prompt_version_detail import PromptVersionDetail
|
|
20
11
|
from ..types.prompt_version_page_public import PromptVersionPagePublic
|
|
21
|
-
from ..
|
|
12
|
+
from ..types.prompt_version_update import PromptVersionUpdate
|
|
13
|
+
from .raw_client import AsyncRawPromptsClient, RawPromptsClient
|
|
14
|
+
from .types.create_prompt_version_detail_template_structure import CreatePromptVersionDetailTemplateStructure
|
|
15
|
+
from .types.prompt_write_template_structure import PromptWriteTemplateStructure
|
|
16
|
+
from .types.prompt_write_type import PromptWriteType
|
|
22
17
|
|
|
23
18
|
# this is used as the default value for optional parameters
|
|
24
19
|
OMIT = typing.cast(typing.Any, ...)
|
|
@@ -26,7 +21,18 @@ OMIT = typing.cast(typing.Any, ...)
|
|
|
26
21
|
|
|
27
22
|
class PromptsClient:
|
|
28
23
|
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
29
|
-
self.
|
|
24
|
+
self._raw_client = RawPromptsClient(client_wrapper=client_wrapper)
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def with_raw_response(self) -> RawPromptsClient:
|
|
28
|
+
"""
|
|
29
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
30
|
+
|
|
31
|
+
Returns
|
|
32
|
+
-------
|
|
33
|
+
RawPromptsClient
|
|
34
|
+
"""
|
|
35
|
+
return self._raw_client
|
|
30
36
|
|
|
31
37
|
def get_prompts(
|
|
32
38
|
self,
|
|
@@ -34,6 +40,8 @@ class PromptsClient:
|
|
|
34
40
|
page: typing.Optional[int] = None,
|
|
35
41
|
size: typing.Optional[int] = None,
|
|
36
42
|
name: typing.Optional[str] = None,
|
|
43
|
+
sorting: typing.Optional[str] = None,
|
|
44
|
+
filters: typing.Optional[str] = None,
|
|
37
45
|
request_options: typing.Optional[RequestOptions] = None,
|
|
38
46
|
) -> PromptPagePublic:
|
|
39
47
|
"""
|
|
@@ -47,6 +55,10 @@ class PromptsClient:
|
|
|
47
55
|
|
|
48
56
|
name : typing.Optional[str]
|
|
49
57
|
|
|
58
|
+
sorting : typing.Optional[str]
|
|
59
|
+
|
|
60
|
+
filters : typing.Optional[str]
|
|
61
|
+
|
|
50
62
|
request_options : typing.Optional[RequestOptions]
|
|
51
63
|
Request-specific configuration.
|
|
52
64
|
|
|
@@ -58,36 +70,13 @@ class PromptsClient:
|
|
|
58
70
|
Examples
|
|
59
71
|
--------
|
|
60
72
|
from Opik import OpikApi
|
|
61
|
-
|
|
62
|
-
client = OpikApi(
|
|
63
|
-
api_key="YOUR_API_KEY",
|
|
64
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
65
|
-
)
|
|
73
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
66
74
|
client.prompts.get_prompts()
|
|
67
75
|
"""
|
|
68
|
-
_response = self.
|
|
69
|
-
|
|
70
|
-
method="GET",
|
|
71
|
-
params={
|
|
72
|
-
"page": page,
|
|
73
|
-
"size": size,
|
|
74
|
-
"name": name,
|
|
75
|
-
},
|
|
76
|
-
request_options=request_options,
|
|
76
|
+
_response = self._raw_client.get_prompts(
|
|
77
|
+
page=page, size=size, name=name, sorting=sorting, filters=filters, request_options=request_options
|
|
77
78
|
)
|
|
78
|
-
|
|
79
|
-
if 200 <= _response.status_code < 300:
|
|
80
|
-
return typing.cast(
|
|
81
|
-
PromptPagePublic,
|
|
82
|
-
parse_obj_as(
|
|
83
|
-
type_=PromptPagePublic, # type: ignore
|
|
84
|
-
object_=_response.json(),
|
|
85
|
-
),
|
|
86
|
-
)
|
|
87
|
-
_response_json = _response.json()
|
|
88
|
-
except JSONDecodeError:
|
|
89
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
90
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
79
|
+
return _response.data
|
|
91
80
|
|
|
92
81
|
def create_prompt(
|
|
93
82
|
self,
|
|
@@ -99,6 +88,8 @@ class PromptsClient:
|
|
|
99
88
|
metadata: typing.Optional[JsonNodeWrite] = OMIT,
|
|
100
89
|
change_description: typing.Optional[str] = OMIT,
|
|
101
90
|
type: typing.Optional[PromptWriteType] = OMIT,
|
|
91
|
+
template_structure: typing.Optional[PromptWriteTemplateStructure] = OMIT,
|
|
92
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
102
93
|
request_options: typing.Optional[RequestOptions] = None,
|
|
103
94
|
) -> None:
|
|
104
95
|
"""
|
|
@@ -120,6 +111,11 @@ class PromptsClient:
|
|
|
120
111
|
|
|
121
112
|
type : typing.Optional[PromptWriteType]
|
|
122
113
|
|
|
114
|
+
template_structure : typing.Optional[PromptWriteTemplateStructure]
|
|
115
|
+
Template structure type: 'text' or 'chat'. Immutable after creation.
|
|
116
|
+
|
|
117
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
118
|
+
|
|
123
119
|
request_options : typing.Optional[RequestOptions]
|
|
124
120
|
Request-specific configuration.
|
|
125
121
|
|
|
@@ -130,76 +126,29 @@ class PromptsClient:
|
|
|
130
126
|
Examples
|
|
131
127
|
--------
|
|
132
128
|
from Opik import OpikApi
|
|
133
|
-
|
|
134
|
-
client
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
"id": id,
|
|
147
|
-
"name": name,
|
|
148
|
-
"description": description,
|
|
149
|
-
"template": template,
|
|
150
|
-
"metadata": metadata,
|
|
151
|
-
"change_description": change_description,
|
|
152
|
-
"type": type,
|
|
153
|
-
},
|
|
154
|
-
headers={
|
|
155
|
-
"content-type": "application/json",
|
|
156
|
-
},
|
|
129
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
130
|
+
client.prompts.create_prompt(name='name', )
|
|
131
|
+
"""
|
|
132
|
+
_response = self._raw_client.create_prompt(
|
|
133
|
+
name=name,
|
|
134
|
+
id=id,
|
|
135
|
+
description=description,
|
|
136
|
+
template=template,
|
|
137
|
+
metadata=metadata,
|
|
138
|
+
change_description=change_description,
|
|
139
|
+
type=type,
|
|
140
|
+
template_structure=template_structure,
|
|
141
|
+
tags=tags,
|
|
157
142
|
request_options=request_options,
|
|
158
|
-
omit=OMIT,
|
|
159
143
|
)
|
|
160
|
-
|
|
161
|
-
if 200 <= _response.status_code < 300:
|
|
162
|
-
return
|
|
163
|
-
if _response.status_code == 400:
|
|
164
|
-
raise BadRequestError(
|
|
165
|
-
typing.cast(
|
|
166
|
-
typing.Optional[typing.Any],
|
|
167
|
-
parse_obj_as(
|
|
168
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
169
|
-
object_=_response.json(),
|
|
170
|
-
),
|
|
171
|
-
)
|
|
172
|
-
)
|
|
173
|
-
if _response.status_code == 409:
|
|
174
|
-
raise ConflictError(
|
|
175
|
-
typing.cast(
|
|
176
|
-
typing.Optional[typing.Any],
|
|
177
|
-
parse_obj_as(
|
|
178
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
179
|
-
object_=_response.json(),
|
|
180
|
-
),
|
|
181
|
-
)
|
|
182
|
-
)
|
|
183
|
-
if _response.status_code == 422:
|
|
184
|
-
raise UnprocessableEntityError(
|
|
185
|
-
typing.cast(
|
|
186
|
-
typing.Optional[typing.Any],
|
|
187
|
-
parse_obj_as(
|
|
188
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
189
|
-
object_=_response.json(),
|
|
190
|
-
),
|
|
191
|
-
)
|
|
192
|
-
)
|
|
193
|
-
_response_json = _response.json()
|
|
194
|
-
except JSONDecodeError:
|
|
195
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
196
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
144
|
+
return _response.data
|
|
197
145
|
|
|
198
146
|
def create_prompt_version(
|
|
199
147
|
self,
|
|
200
148
|
*,
|
|
201
149
|
name: str,
|
|
202
150
|
version: PromptVersionDetail,
|
|
151
|
+
template_structure: typing.Optional[CreatePromptVersionDetailTemplateStructure] = OMIT,
|
|
203
152
|
request_options: typing.Optional[RequestOptions] = None,
|
|
204
153
|
) -> PromptVersionDetail:
|
|
205
154
|
"""
|
|
@@ -211,6 +160,9 @@ class PromptsClient:
|
|
|
211
160
|
|
|
212
161
|
version : PromptVersionDetail
|
|
213
162
|
|
|
163
|
+
template_structure : typing.Optional[CreatePromptVersionDetailTemplateStructure]
|
|
164
|
+
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.
|
|
165
|
+
|
|
214
166
|
request_options : typing.Optional[RequestOptions]
|
|
215
167
|
Request-specific configuration.
|
|
216
168
|
|
|
@@ -221,81 +173,68 @@ class PromptsClient:
|
|
|
221
173
|
|
|
222
174
|
Examples
|
|
223
175
|
--------
|
|
224
|
-
from Opik import OpikApi
|
|
225
|
-
|
|
226
|
-
client = OpikApi(
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
name="name",
|
|
232
|
-
version=PromptVersionDetail(
|
|
233
|
-
template="template",
|
|
234
|
-
),
|
|
176
|
+
from Opik import OpikApi
|
|
177
|
+
from Opik import PromptVersionDetail
|
|
178
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
179
|
+
client.prompts.create_prompt_version(name='name', version=PromptVersionDetail(template='template', ), )
|
|
180
|
+
"""
|
|
181
|
+
_response = self._raw_client.create_prompt_version(
|
|
182
|
+
name=name, version=version, template_structure=template_structure, request_options=request_options
|
|
235
183
|
)
|
|
184
|
+
return _response.data
|
|
185
|
+
|
|
186
|
+
def update_prompt_versions(
|
|
187
|
+
self,
|
|
188
|
+
*,
|
|
189
|
+
ids: typing.Sequence[str],
|
|
190
|
+
update: PromptVersionUpdate,
|
|
191
|
+
merge_tags: typing.Optional[bool] = OMIT,
|
|
192
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
193
|
+
) -> None:
|
|
236
194
|
"""
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
195
|
+
Update one or more prompt versions.
|
|
196
|
+
|
|
197
|
+
Note: Prompt versions are immutable by design.
|
|
198
|
+
Only organizational properties, such as tags etc., can be updated.
|
|
199
|
+
Core properties like template and metadata cannot be modified after creation.
|
|
200
|
+
|
|
201
|
+
PATCH semantics:
|
|
202
|
+
- non-empty values update the field
|
|
203
|
+
- null values preserve existing field values (no change)
|
|
204
|
+
- empty values explicitly clear the field
|
|
205
|
+
|
|
206
|
+
Parameters
|
|
207
|
+
----------
|
|
208
|
+
ids : typing.Sequence[str]
|
|
209
|
+
IDs of prompt versions to update
|
|
210
|
+
|
|
211
|
+
update : PromptVersionUpdate
|
|
212
|
+
|
|
213
|
+
merge_tags : typing.Optional[bool]
|
|
214
|
+
Tag merge behavior:
|
|
215
|
+
- true: Add new tags to existing tags (union)
|
|
216
|
+
- false: Replace all existing tags with new tags (default behaviour if not provided)
|
|
217
|
+
|
|
218
|
+
request_options : typing.Optional[RequestOptions]
|
|
219
|
+
Request-specific configuration.
|
|
220
|
+
|
|
221
|
+
Returns
|
|
222
|
+
-------
|
|
223
|
+
None
|
|
224
|
+
|
|
225
|
+
Examples
|
|
226
|
+
--------
|
|
227
|
+
from Opik import OpikApi
|
|
228
|
+
from Opik import PromptVersionUpdate
|
|
229
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
230
|
+
client.prompts.update_prompt_versions(ids=['ids'], update=PromptVersionUpdate(), )
|
|
231
|
+
"""
|
|
232
|
+
_response = self._raw_client.update_prompt_versions(
|
|
233
|
+
ids=ids, update=update, merge_tags=merge_tags, request_options=request_options
|
|
251
234
|
)
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
PromptVersionDetail,
|
|
256
|
-
parse_obj_as(
|
|
257
|
-
type_=PromptVersionDetail, # type: ignore
|
|
258
|
-
object_=_response.json(),
|
|
259
|
-
),
|
|
260
|
-
)
|
|
261
|
-
if _response.status_code == 400:
|
|
262
|
-
raise BadRequestError(
|
|
263
|
-
typing.cast(
|
|
264
|
-
typing.Optional[typing.Any],
|
|
265
|
-
parse_obj_as(
|
|
266
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
267
|
-
object_=_response.json(),
|
|
268
|
-
),
|
|
269
|
-
)
|
|
270
|
-
)
|
|
271
|
-
if _response.status_code == 409:
|
|
272
|
-
raise ConflictError(
|
|
273
|
-
typing.cast(
|
|
274
|
-
typing.Optional[typing.Any],
|
|
275
|
-
parse_obj_as(
|
|
276
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
277
|
-
object_=_response.json(),
|
|
278
|
-
),
|
|
279
|
-
)
|
|
280
|
-
)
|
|
281
|
-
if _response.status_code == 422:
|
|
282
|
-
raise UnprocessableEntityError(
|
|
283
|
-
typing.cast(
|
|
284
|
-
typing.Optional[typing.Any],
|
|
285
|
-
parse_obj_as(
|
|
286
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
287
|
-
object_=_response.json(),
|
|
288
|
-
),
|
|
289
|
-
)
|
|
290
|
-
)
|
|
291
|
-
_response_json = _response.json()
|
|
292
|
-
except JSONDecodeError:
|
|
293
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
294
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
295
|
-
|
|
296
|
-
def get_prompt_by_id(
|
|
297
|
-
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
298
|
-
) -> PromptDetail:
|
|
235
|
+
return _response.data
|
|
236
|
+
|
|
237
|
+
def get_prompt_by_id(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> PromptDetail:
|
|
299
238
|
"""
|
|
300
239
|
Get prompt by id
|
|
301
240
|
|
|
@@ -314,43 +253,11 @@ class PromptsClient:
|
|
|
314
253
|
Examples
|
|
315
254
|
--------
|
|
316
255
|
from Opik import OpikApi
|
|
317
|
-
|
|
318
|
-
client
|
|
319
|
-
api_key="YOUR_API_KEY",
|
|
320
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
321
|
-
)
|
|
322
|
-
client.prompts.get_prompt_by_id(
|
|
323
|
-
id="id",
|
|
324
|
-
)
|
|
256
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
257
|
+
client.prompts.get_prompt_by_id(id='id', )
|
|
325
258
|
"""
|
|
326
|
-
_response = self.
|
|
327
|
-
|
|
328
|
-
method="GET",
|
|
329
|
-
request_options=request_options,
|
|
330
|
-
)
|
|
331
|
-
try:
|
|
332
|
-
if 200 <= _response.status_code < 300:
|
|
333
|
-
return typing.cast(
|
|
334
|
-
PromptDetail,
|
|
335
|
-
parse_obj_as(
|
|
336
|
-
type_=PromptDetail, # type: ignore
|
|
337
|
-
object_=_response.json(),
|
|
338
|
-
),
|
|
339
|
-
)
|
|
340
|
-
if _response.status_code == 404:
|
|
341
|
-
raise NotFoundError(
|
|
342
|
-
typing.cast(
|
|
343
|
-
typing.Optional[typing.Any],
|
|
344
|
-
parse_obj_as(
|
|
345
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
346
|
-
object_=_response.json(),
|
|
347
|
-
),
|
|
348
|
-
)
|
|
349
|
-
)
|
|
350
|
-
_response_json = _response.json()
|
|
351
|
-
except JSONDecodeError:
|
|
352
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
353
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
259
|
+
_response = self._raw_client.get_prompt_by_id(id, request_options=request_options)
|
|
260
|
+
return _response.data
|
|
354
261
|
|
|
355
262
|
def update_prompt(
|
|
356
263
|
self,
|
|
@@ -358,6 +265,7 @@ class PromptsClient:
|
|
|
358
265
|
*,
|
|
359
266
|
name: str,
|
|
360
267
|
description: typing.Optional[str] = OMIT,
|
|
268
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
361
269
|
request_options: typing.Optional[RequestOptions] = None,
|
|
362
270
|
) -> None:
|
|
363
271
|
"""
|
|
@@ -371,6 +279,8 @@ class PromptsClient:
|
|
|
371
279
|
|
|
372
280
|
description : typing.Optional[str]
|
|
373
281
|
|
|
282
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
283
|
+
|
|
374
284
|
request_options : typing.Optional[RequestOptions]
|
|
375
285
|
Request-specific configuration.
|
|
376
286
|
|
|
@@ -381,80 +291,15 @@ class PromptsClient:
|
|
|
381
291
|
Examples
|
|
382
292
|
--------
|
|
383
293
|
from Opik import OpikApi
|
|
384
|
-
|
|
385
|
-
client =
|
|
386
|
-
api_key="YOUR_API_KEY",
|
|
387
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
388
|
-
)
|
|
389
|
-
client.prompts.update_prompt(
|
|
390
|
-
id="id",
|
|
391
|
-
name="name",
|
|
392
|
-
)
|
|
294
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
295
|
+
client.prompts.update_prompt(id='id', name='name', )
|
|
393
296
|
"""
|
|
394
|
-
_response = self.
|
|
395
|
-
|
|
396
|
-
method="PUT",
|
|
397
|
-
json={
|
|
398
|
-
"name": name,
|
|
399
|
-
"description": description,
|
|
400
|
-
},
|
|
401
|
-
headers={
|
|
402
|
-
"content-type": "application/json",
|
|
403
|
-
},
|
|
404
|
-
request_options=request_options,
|
|
405
|
-
omit=OMIT,
|
|
297
|
+
_response = self._raw_client.update_prompt(
|
|
298
|
+
id, name=name, description=description, tags=tags, request_options=request_options
|
|
406
299
|
)
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
if _response.status_code == 400:
|
|
411
|
-
raise BadRequestError(
|
|
412
|
-
typing.cast(
|
|
413
|
-
typing.Optional[typing.Any],
|
|
414
|
-
parse_obj_as(
|
|
415
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
416
|
-
object_=_response.json(),
|
|
417
|
-
),
|
|
418
|
-
)
|
|
419
|
-
)
|
|
420
|
-
if _response.status_code == 404:
|
|
421
|
-
raise NotFoundError(
|
|
422
|
-
typing.cast(
|
|
423
|
-
typing.Optional[typing.Any],
|
|
424
|
-
parse_obj_as(
|
|
425
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
426
|
-
object_=_response.json(),
|
|
427
|
-
),
|
|
428
|
-
)
|
|
429
|
-
)
|
|
430
|
-
if _response.status_code == 409:
|
|
431
|
-
raise ConflictError(
|
|
432
|
-
typing.cast(
|
|
433
|
-
typing.Optional[typing.Any],
|
|
434
|
-
parse_obj_as(
|
|
435
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
436
|
-
object_=_response.json(),
|
|
437
|
-
),
|
|
438
|
-
)
|
|
439
|
-
)
|
|
440
|
-
if _response.status_code == 422:
|
|
441
|
-
raise UnprocessableEntityError(
|
|
442
|
-
typing.cast(
|
|
443
|
-
typing.Optional[typing.Any],
|
|
444
|
-
parse_obj_as(
|
|
445
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
446
|
-
object_=_response.json(),
|
|
447
|
-
),
|
|
448
|
-
)
|
|
449
|
-
)
|
|
450
|
-
_response_json = _response.json()
|
|
451
|
-
except JSONDecodeError:
|
|
452
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
453
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
454
|
-
|
|
455
|
-
def delete_prompt(
|
|
456
|
-
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
457
|
-
) -> None:
|
|
300
|
+
return _response.data
|
|
301
|
+
|
|
302
|
+
def delete_prompt(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
|
|
458
303
|
"""
|
|
459
304
|
Delete prompt
|
|
460
305
|
|
|
@@ -472,33 +317,14 @@ class PromptsClient:
|
|
|
472
317
|
Examples
|
|
473
318
|
--------
|
|
474
319
|
from Opik import OpikApi
|
|
475
|
-
|
|
476
|
-
client
|
|
477
|
-
api_key="YOUR_API_KEY",
|
|
478
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
479
|
-
)
|
|
480
|
-
client.prompts.delete_prompt(
|
|
481
|
-
id="id",
|
|
482
|
-
)
|
|
320
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
321
|
+
client.prompts.delete_prompt(id='id', )
|
|
483
322
|
"""
|
|
484
|
-
_response = self.
|
|
485
|
-
|
|
486
|
-
method="DELETE",
|
|
487
|
-
request_options=request_options,
|
|
488
|
-
)
|
|
489
|
-
try:
|
|
490
|
-
if 200 <= _response.status_code < 300:
|
|
491
|
-
return
|
|
492
|
-
_response_json = _response.json()
|
|
493
|
-
except JSONDecodeError:
|
|
494
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
495
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
323
|
+
_response = self._raw_client.delete_prompt(id, request_options=request_options)
|
|
324
|
+
return _response.data
|
|
496
325
|
|
|
497
326
|
def delete_prompts_batch(
|
|
498
|
-
self,
|
|
499
|
-
*,
|
|
500
|
-
ids: typing.Sequence[str],
|
|
501
|
-
request_options: typing.Optional[RequestOptions] = None,
|
|
327
|
+
self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
|
|
502
328
|
) -> None:
|
|
503
329
|
"""
|
|
504
330
|
Delete prompts batch
|
|
@@ -517,37 +343,14 @@ class PromptsClient:
|
|
|
517
343
|
Examples
|
|
518
344
|
--------
|
|
519
345
|
from Opik import OpikApi
|
|
520
|
-
|
|
521
|
-
client
|
|
522
|
-
api_key="YOUR_API_KEY",
|
|
523
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
524
|
-
)
|
|
525
|
-
client.prompts.delete_prompts_batch(
|
|
526
|
-
ids=["ids"],
|
|
527
|
-
)
|
|
346
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
347
|
+
client.prompts.delete_prompts_batch(ids=['ids'], )
|
|
528
348
|
"""
|
|
529
|
-
_response = self.
|
|
530
|
-
|
|
531
|
-
method="POST",
|
|
532
|
-
json={
|
|
533
|
-
"ids": ids,
|
|
534
|
-
},
|
|
535
|
-
request_options=request_options,
|
|
536
|
-
omit=OMIT,
|
|
537
|
-
)
|
|
538
|
-
try:
|
|
539
|
-
if 200 <= _response.status_code < 300:
|
|
540
|
-
return
|
|
541
|
-
_response_json = _response.json()
|
|
542
|
-
except JSONDecodeError:
|
|
543
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
544
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
349
|
+
_response = self._raw_client.delete_prompts_batch(ids=ids, request_options=request_options)
|
|
350
|
+
return _response.data
|
|
545
351
|
|
|
546
352
|
def get_prompt_version_by_id(
|
|
547
|
-
self,
|
|
548
|
-
version_id: str,
|
|
549
|
-
*,
|
|
550
|
-
request_options: typing.Optional[RequestOptions] = None,
|
|
353
|
+
self, version_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
551
354
|
) -> PromptVersionDetail:
|
|
552
355
|
"""
|
|
553
356
|
Get prompt version by id
|
|
@@ -567,43 +370,11 @@ class PromptsClient:
|
|
|
567
370
|
Examples
|
|
568
371
|
--------
|
|
569
372
|
from Opik import OpikApi
|
|
570
|
-
|
|
571
|
-
client
|
|
572
|
-
api_key="YOUR_API_KEY",
|
|
573
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
574
|
-
)
|
|
575
|
-
client.prompts.get_prompt_version_by_id(
|
|
576
|
-
version_id="versionId",
|
|
577
|
-
)
|
|
373
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
374
|
+
client.prompts.get_prompt_version_by_id(version_id='versionId', )
|
|
578
375
|
"""
|
|
579
|
-
_response = self.
|
|
580
|
-
|
|
581
|
-
method="GET",
|
|
582
|
-
request_options=request_options,
|
|
583
|
-
)
|
|
584
|
-
try:
|
|
585
|
-
if 200 <= _response.status_code < 300:
|
|
586
|
-
return typing.cast(
|
|
587
|
-
PromptVersionDetail,
|
|
588
|
-
parse_obj_as(
|
|
589
|
-
type_=PromptVersionDetail, # type: ignore
|
|
590
|
-
object_=_response.json(),
|
|
591
|
-
),
|
|
592
|
-
)
|
|
593
|
-
if _response.status_code == 404:
|
|
594
|
-
raise NotFoundError(
|
|
595
|
-
typing.cast(
|
|
596
|
-
typing.Optional[typing.Any],
|
|
597
|
-
parse_obj_as(
|
|
598
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
599
|
-
object_=_response.json(),
|
|
600
|
-
),
|
|
601
|
-
)
|
|
602
|
-
)
|
|
603
|
-
_response_json = _response.json()
|
|
604
|
-
except JSONDecodeError:
|
|
605
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
606
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
376
|
+
_response = self._raw_client.get_prompt_version_by_id(version_id, request_options=request_options)
|
|
377
|
+
return _response.data
|
|
607
378
|
|
|
608
379
|
def get_prompt_versions(
|
|
609
380
|
self,
|
|
@@ -611,6 +382,9 @@ class PromptsClient:
|
|
|
611
382
|
*,
|
|
612
383
|
page: typing.Optional[int] = None,
|
|
613
384
|
size: typing.Optional[int] = None,
|
|
385
|
+
search: typing.Optional[str] = None,
|
|
386
|
+
sorting: typing.Optional[str] = None,
|
|
387
|
+
filters: typing.Optional[str] = None,
|
|
614
388
|
request_options: typing.Optional[RequestOptions] = None,
|
|
615
389
|
) -> PromptVersionPagePublic:
|
|
616
390
|
"""
|
|
@@ -624,6 +398,13 @@ class PromptsClient:
|
|
|
624
398
|
|
|
625
399
|
size : typing.Optional[int]
|
|
626
400
|
|
|
401
|
+
search : typing.Optional[str]
|
|
402
|
+
Search text to find in template or change description fields
|
|
403
|
+
|
|
404
|
+
sorting : typing.Optional[str]
|
|
405
|
+
|
|
406
|
+
filters : typing.Optional[str]
|
|
407
|
+
|
|
627
408
|
request_options : typing.Optional[RequestOptions]
|
|
628
409
|
Request-specific configuration.
|
|
629
410
|
|
|
@@ -635,44 +416,45 @@ class PromptsClient:
|
|
|
635
416
|
Examples
|
|
636
417
|
--------
|
|
637
418
|
from Opik import OpikApi
|
|
638
|
-
|
|
639
|
-
client
|
|
640
|
-
api_key="YOUR_API_KEY",
|
|
641
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
642
|
-
)
|
|
643
|
-
client.prompts.get_prompt_versions(
|
|
644
|
-
id="id",
|
|
645
|
-
)
|
|
419
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
420
|
+
client.prompts.get_prompt_versions(id='id', )
|
|
646
421
|
"""
|
|
647
|
-
_response = self.
|
|
648
|
-
|
|
649
|
-
method="GET",
|
|
650
|
-
params={
|
|
651
|
-
"page": page,
|
|
652
|
-
"size": size,
|
|
653
|
-
},
|
|
654
|
-
request_options=request_options,
|
|
422
|
+
_response = self._raw_client.get_prompt_versions(
|
|
423
|
+
id, page=page, size=size, search=search, sorting=sorting, filters=filters, request_options=request_options
|
|
655
424
|
)
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
425
|
+
return _response.data
|
|
426
|
+
|
|
427
|
+
def restore_prompt_version(
|
|
428
|
+
self, prompt_id: str, version_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
429
|
+
) -> PromptVersionDetail:
|
|
430
|
+
"""
|
|
431
|
+
Restore a prompt version by creating a new version with the content from the specified version
|
|
432
|
+
|
|
433
|
+
Parameters
|
|
434
|
+
----------
|
|
435
|
+
prompt_id : str
|
|
436
|
+
|
|
437
|
+
version_id : str
|
|
438
|
+
|
|
439
|
+
request_options : typing.Optional[RequestOptions]
|
|
440
|
+
Request-specific configuration.
|
|
441
|
+
|
|
442
|
+
Returns
|
|
443
|
+
-------
|
|
444
|
+
PromptVersionDetail
|
|
445
|
+
OK
|
|
446
|
+
|
|
447
|
+
Examples
|
|
448
|
+
--------
|
|
449
|
+
from Opik import OpikApi
|
|
450
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
451
|
+
client.prompts.restore_prompt_version(prompt_id='promptId', version_id='versionId', )
|
|
452
|
+
"""
|
|
453
|
+
_response = self._raw_client.restore_prompt_version(prompt_id, version_id, request_options=request_options)
|
|
454
|
+
return _response.data
|
|
669
455
|
|
|
670
456
|
def retrieve_prompt_version(
|
|
671
|
-
self,
|
|
672
|
-
*,
|
|
673
|
-
name: str,
|
|
674
|
-
commit: typing.Optional[str] = OMIT,
|
|
675
|
-
request_options: typing.Optional[RequestOptions] = None,
|
|
457
|
+
self, *, name: str, commit: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None
|
|
676
458
|
) -> PromptVersionDetail:
|
|
677
459
|
"""
|
|
678
460
|
Retrieve prompt version
|
|
@@ -694,76 +476,27 @@ class PromptsClient:
|
|
|
694
476
|
Examples
|
|
695
477
|
--------
|
|
696
478
|
from Opik import OpikApi
|
|
697
|
-
|
|
698
|
-
client
|
|
699
|
-
api_key="YOUR_API_KEY",
|
|
700
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
701
|
-
)
|
|
702
|
-
client.prompts.retrieve_prompt_version(
|
|
703
|
-
name="name",
|
|
704
|
-
)
|
|
479
|
+
client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
480
|
+
client.prompts.retrieve_prompt_version(name='name', )
|
|
705
481
|
"""
|
|
706
|
-
_response = self.
|
|
707
|
-
|
|
708
|
-
method="POST",
|
|
709
|
-
json={
|
|
710
|
-
"name": name,
|
|
711
|
-
"commit": commit,
|
|
712
|
-
},
|
|
713
|
-
headers={
|
|
714
|
-
"content-type": "application/json",
|
|
715
|
-
},
|
|
716
|
-
request_options=request_options,
|
|
717
|
-
omit=OMIT,
|
|
718
|
-
)
|
|
719
|
-
try:
|
|
720
|
-
if 200 <= _response.status_code < 300:
|
|
721
|
-
return typing.cast(
|
|
722
|
-
PromptVersionDetail,
|
|
723
|
-
parse_obj_as(
|
|
724
|
-
type_=PromptVersionDetail, # type: ignore
|
|
725
|
-
object_=_response.json(),
|
|
726
|
-
),
|
|
727
|
-
)
|
|
728
|
-
if _response.status_code == 400:
|
|
729
|
-
raise BadRequestError(
|
|
730
|
-
typing.cast(
|
|
731
|
-
typing.Optional[typing.Any],
|
|
732
|
-
parse_obj_as(
|
|
733
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
734
|
-
object_=_response.json(),
|
|
735
|
-
),
|
|
736
|
-
)
|
|
737
|
-
)
|
|
738
|
-
if _response.status_code == 404:
|
|
739
|
-
raise NotFoundError(
|
|
740
|
-
typing.cast(
|
|
741
|
-
typing.Optional[typing.Any],
|
|
742
|
-
parse_obj_as(
|
|
743
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
744
|
-
object_=_response.json(),
|
|
745
|
-
),
|
|
746
|
-
)
|
|
747
|
-
)
|
|
748
|
-
if _response.status_code == 422:
|
|
749
|
-
raise UnprocessableEntityError(
|
|
750
|
-
typing.cast(
|
|
751
|
-
typing.Optional[typing.Any],
|
|
752
|
-
parse_obj_as(
|
|
753
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
754
|
-
object_=_response.json(),
|
|
755
|
-
),
|
|
756
|
-
)
|
|
757
|
-
)
|
|
758
|
-
_response_json = _response.json()
|
|
759
|
-
except JSONDecodeError:
|
|
760
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
761
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
482
|
+
_response = self._raw_client.retrieve_prompt_version(name=name, commit=commit, request_options=request_options)
|
|
483
|
+
return _response.data
|
|
762
484
|
|
|
763
485
|
|
|
764
486
|
class AsyncPromptsClient:
|
|
765
487
|
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
766
|
-
self.
|
|
488
|
+
self._raw_client = AsyncRawPromptsClient(client_wrapper=client_wrapper)
|
|
489
|
+
|
|
490
|
+
@property
|
|
491
|
+
def with_raw_response(self) -> AsyncRawPromptsClient:
|
|
492
|
+
"""
|
|
493
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
494
|
+
|
|
495
|
+
Returns
|
|
496
|
+
-------
|
|
497
|
+
AsyncRawPromptsClient
|
|
498
|
+
"""
|
|
499
|
+
return self._raw_client
|
|
767
500
|
|
|
768
501
|
async def get_prompts(
|
|
769
502
|
self,
|
|
@@ -771,6 +504,8 @@ class AsyncPromptsClient:
|
|
|
771
504
|
page: typing.Optional[int] = None,
|
|
772
505
|
size: typing.Optional[int] = None,
|
|
773
506
|
name: typing.Optional[str] = None,
|
|
507
|
+
sorting: typing.Optional[str] = None,
|
|
508
|
+
filters: typing.Optional[str] = None,
|
|
774
509
|
request_options: typing.Optional[RequestOptions] = None,
|
|
775
510
|
) -> PromptPagePublic:
|
|
776
511
|
"""
|
|
@@ -784,6 +519,10 @@ class AsyncPromptsClient:
|
|
|
784
519
|
|
|
785
520
|
name : typing.Optional[str]
|
|
786
521
|
|
|
522
|
+
sorting : typing.Optional[str]
|
|
523
|
+
|
|
524
|
+
filters : typing.Optional[str]
|
|
525
|
+
|
|
787
526
|
request_options : typing.Optional[RequestOptions]
|
|
788
527
|
Request-specific configuration.
|
|
789
528
|
|
|
@@ -794,45 +533,17 @@ class AsyncPromptsClient:
|
|
|
794
533
|
|
|
795
534
|
Examples
|
|
796
535
|
--------
|
|
797
|
-
import asyncio
|
|
798
|
-
|
|
799
536
|
from Opik import AsyncOpikApi
|
|
800
|
-
|
|
801
|
-
client = AsyncOpikApi(
|
|
802
|
-
api_key="YOUR_API_KEY",
|
|
803
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
804
|
-
)
|
|
805
|
-
|
|
806
|
-
|
|
537
|
+
import asyncio
|
|
538
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
807
539
|
async def main() -> None:
|
|
808
540
|
await client.prompts.get_prompts()
|
|
809
|
-
|
|
810
|
-
|
|
811
541
|
asyncio.run(main())
|
|
812
542
|
"""
|
|
813
|
-
_response = await self.
|
|
814
|
-
|
|
815
|
-
method="GET",
|
|
816
|
-
params={
|
|
817
|
-
"page": page,
|
|
818
|
-
"size": size,
|
|
819
|
-
"name": name,
|
|
820
|
-
},
|
|
821
|
-
request_options=request_options,
|
|
543
|
+
_response = await self._raw_client.get_prompts(
|
|
544
|
+
page=page, size=size, name=name, sorting=sorting, filters=filters, request_options=request_options
|
|
822
545
|
)
|
|
823
|
-
|
|
824
|
-
if 200 <= _response.status_code < 300:
|
|
825
|
-
return typing.cast(
|
|
826
|
-
PromptPagePublic,
|
|
827
|
-
parse_obj_as(
|
|
828
|
-
type_=PromptPagePublic, # type: ignore
|
|
829
|
-
object_=_response.json(),
|
|
830
|
-
),
|
|
831
|
-
)
|
|
832
|
-
_response_json = _response.json()
|
|
833
|
-
except JSONDecodeError:
|
|
834
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
835
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
546
|
+
return _response.data
|
|
836
547
|
|
|
837
548
|
async def create_prompt(
|
|
838
549
|
self,
|
|
@@ -844,6 +555,8 @@ class AsyncPromptsClient:
|
|
|
844
555
|
metadata: typing.Optional[JsonNodeWrite] = OMIT,
|
|
845
556
|
change_description: typing.Optional[str] = OMIT,
|
|
846
557
|
type: typing.Optional[PromptWriteType] = OMIT,
|
|
558
|
+
template_structure: typing.Optional[PromptWriteTemplateStructure] = OMIT,
|
|
559
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
847
560
|
request_options: typing.Optional[RequestOptions] = None,
|
|
848
561
|
) -> None:
|
|
849
562
|
"""
|
|
@@ -865,6 +578,11 @@ class AsyncPromptsClient:
|
|
|
865
578
|
|
|
866
579
|
type : typing.Optional[PromptWriteType]
|
|
867
580
|
|
|
581
|
+
template_structure : typing.Optional[PromptWriteTemplateStructure]
|
|
582
|
+
Template structure type: 'text' or 'chat'. Immutable after creation.
|
|
583
|
+
|
|
584
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
585
|
+
|
|
868
586
|
request_options : typing.Optional[RequestOptions]
|
|
869
587
|
Request-specific configuration.
|
|
870
588
|
|
|
@@ -874,85 +592,33 @@ class AsyncPromptsClient:
|
|
|
874
592
|
|
|
875
593
|
Examples
|
|
876
594
|
--------
|
|
877
|
-
import asyncio
|
|
878
|
-
|
|
879
595
|
from Opik import AsyncOpikApi
|
|
880
|
-
|
|
881
|
-
client = AsyncOpikApi(
|
|
882
|
-
api_key="YOUR_API_KEY",
|
|
883
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
884
|
-
)
|
|
885
|
-
|
|
886
|
-
|
|
596
|
+
import asyncio
|
|
597
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
887
598
|
async def main() -> None:
|
|
888
|
-
await client.prompts.create_prompt(
|
|
889
|
-
name="name",
|
|
890
|
-
)
|
|
891
|
-
|
|
892
|
-
|
|
599
|
+
await client.prompts.create_prompt(name='name', )
|
|
893
600
|
asyncio.run(main())
|
|
894
601
|
"""
|
|
895
|
-
_response = await self.
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
"type": type,
|
|
906
|
-
},
|
|
907
|
-
headers={
|
|
908
|
-
"content-type": "application/json",
|
|
909
|
-
},
|
|
602
|
+
_response = await self._raw_client.create_prompt(
|
|
603
|
+
name=name,
|
|
604
|
+
id=id,
|
|
605
|
+
description=description,
|
|
606
|
+
template=template,
|
|
607
|
+
metadata=metadata,
|
|
608
|
+
change_description=change_description,
|
|
609
|
+
type=type,
|
|
610
|
+
template_structure=template_structure,
|
|
611
|
+
tags=tags,
|
|
910
612
|
request_options=request_options,
|
|
911
|
-
omit=OMIT,
|
|
912
613
|
)
|
|
913
|
-
|
|
914
|
-
if 200 <= _response.status_code < 300:
|
|
915
|
-
return
|
|
916
|
-
if _response.status_code == 400:
|
|
917
|
-
raise BadRequestError(
|
|
918
|
-
typing.cast(
|
|
919
|
-
typing.Optional[typing.Any],
|
|
920
|
-
parse_obj_as(
|
|
921
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
922
|
-
object_=_response.json(),
|
|
923
|
-
),
|
|
924
|
-
)
|
|
925
|
-
)
|
|
926
|
-
if _response.status_code == 409:
|
|
927
|
-
raise ConflictError(
|
|
928
|
-
typing.cast(
|
|
929
|
-
typing.Optional[typing.Any],
|
|
930
|
-
parse_obj_as(
|
|
931
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
932
|
-
object_=_response.json(),
|
|
933
|
-
),
|
|
934
|
-
)
|
|
935
|
-
)
|
|
936
|
-
if _response.status_code == 422:
|
|
937
|
-
raise UnprocessableEntityError(
|
|
938
|
-
typing.cast(
|
|
939
|
-
typing.Optional[typing.Any],
|
|
940
|
-
parse_obj_as(
|
|
941
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
942
|
-
object_=_response.json(),
|
|
943
|
-
),
|
|
944
|
-
)
|
|
945
|
-
)
|
|
946
|
-
_response_json = _response.json()
|
|
947
|
-
except JSONDecodeError:
|
|
948
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
949
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
614
|
+
return _response.data
|
|
950
615
|
|
|
951
616
|
async def create_prompt_version(
|
|
952
617
|
self,
|
|
953
618
|
*,
|
|
954
619
|
name: str,
|
|
955
620
|
version: PromptVersionDetail,
|
|
621
|
+
template_structure: typing.Optional[CreatePromptVersionDetailTemplateStructure] = OMIT,
|
|
956
622
|
request_options: typing.Optional[RequestOptions] = None,
|
|
957
623
|
) -> PromptVersionDetail:
|
|
958
624
|
"""
|
|
@@ -964,6 +630,9 @@ class AsyncPromptsClient:
|
|
|
964
630
|
|
|
965
631
|
version : PromptVersionDetail
|
|
966
632
|
|
|
633
|
+
template_structure : typing.Optional[CreatePromptVersionDetailTemplateStructure]
|
|
634
|
+
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.
|
|
635
|
+
|
|
967
636
|
request_options : typing.Optional[RequestOptions]
|
|
968
637
|
Request-specific configuration.
|
|
969
638
|
|
|
@@ -974,85 +643,72 @@ class AsyncPromptsClient:
|
|
|
974
643
|
|
|
975
644
|
Examples
|
|
976
645
|
--------
|
|
646
|
+
from Opik import AsyncOpikApi
|
|
647
|
+
from Opik import PromptVersionDetail
|
|
977
648
|
import asyncio
|
|
649
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
650
|
+
async def main() -> None:
|
|
651
|
+
await client.prompts.create_prompt_version(name='name', version=PromptVersionDetail(template='template', ), )
|
|
652
|
+
asyncio.run(main())
|
|
653
|
+
"""
|
|
654
|
+
_response = await self._raw_client.create_prompt_version(
|
|
655
|
+
name=name, version=version, template_structure=template_structure, request_options=request_options
|
|
656
|
+
)
|
|
657
|
+
return _response.data
|
|
658
|
+
|
|
659
|
+
async def update_prompt_versions(
|
|
660
|
+
self,
|
|
661
|
+
*,
|
|
662
|
+
ids: typing.Sequence[str],
|
|
663
|
+
update: PromptVersionUpdate,
|
|
664
|
+
merge_tags: typing.Optional[bool] = OMIT,
|
|
665
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
666
|
+
) -> None:
|
|
667
|
+
"""
|
|
668
|
+
Update one or more prompt versions.
|
|
978
669
|
|
|
979
|
-
|
|
670
|
+
Note: Prompt versions are immutable by design.
|
|
671
|
+
Only organizational properties, such as tags etc., can be updated.
|
|
672
|
+
Core properties like template and metadata cannot be modified after creation.
|
|
980
673
|
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
674
|
+
PATCH semantics:
|
|
675
|
+
- non-empty values update the field
|
|
676
|
+
- null values preserve existing field values (no change)
|
|
677
|
+
- empty values explicitly clear the field
|
|
985
678
|
|
|
679
|
+
Parameters
|
|
680
|
+
----------
|
|
681
|
+
ids : typing.Sequence[str]
|
|
682
|
+
IDs of prompt versions to update
|
|
986
683
|
|
|
987
|
-
|
|
988
|
-
await client.prompts.create_prompt_version(
|
|
989
|
-
name="name",
|
|
990
|
-
version=PromptVersionDetail(
|
|
991
|
-
template="template",
|
|
992
|
-
),
|
|
993
|
-
)
|
|
684
|
+
update : PromptVersionUpdate
|
|
994
685
|
|
|
686
|
+
merge_tags : typing.Optional[bool]
|
|
687
|
+
Tag merge behavior:
|
|
688
|
+
- true: Add new tags to existing tags (union)
|
|
689
|
+
- false: Replace all existing tags with new tags (default behaviour if not provided)
|
|
995
690
|
|
|
691
|
+
request_options : typing.Optional[RequestOptions]
|
|
692
|
+
Request-specific configuration.
|
|
693
|
+
|
|
694
|
+
Returns
|
|
695
|
+
-------
|
|
696
|
+
None
|
|
697
|
+
|
|
698
|
+
Examples
|
|
699
|
+
--------
|
|
700
|
+
from Opik import AsyncOpikApi
|
|
701
|
+
from Opik import PromptVersionUpdate
|
|
702
|
+
import asyncio
|
|
703
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
704
|
+
async def main() -> None:
|
|
705
|
+
await client.prompts.update_prompt_versions(ids=['ids'], update=PromptVersionUpdate(), )
|
|
996
706
|
asyncio.run(main())
|
|
997
707
|
"""
|
|
998
|
-
_response = await self.
|
|
999
|
-
|
|
1000
|
-
method="POST",
|
|
1001
|
-
json={
|
|
1002
|
-
"name": name,
|
|
1003
|
-
"version": convert_and_respect_annotation_metadata(
|
|
1004
|
-
object_=version, annotation=PromptVersionDetail, direction="write"
|
|
1005
|
-
),
|
|
1006
|
-
},
|
|
1007
|
-
headers={
|
|
1008
|
-
"content-type": "application/json",
|
|
1009
|
-
},
|
|
1010
|
-
request_options=request_options,
|
|
1011
|
-
omit=OMIT,
|
|
708
|
+
_response = await self._raw_client.update_prompt_versions(
|
|
709
|
+
ids=ids, update=update, merge_tags=merge_tags, request_options=request_options
|
|
1012
710
|
)
|
|
1013
|
-
|
|
1014
|
-
if 200 <= _response.status_code < 300:
|
|
1015
|
-
return typing.cast(
|
|
1016
|
-
PromptVersionDetail,
|
|
1017
|
-
parse_obj_as(
|
|
1018
|
-
type_=PromptVersionDetail, # type: ignore
|
|
1019
|
-
object_=_response.json(),
|
|
1020
|
-
),
|
|
1021
|
-
)
|
|
1022
|
-
if _response.status_code == 400:
|
|
1023
|
-
raise BadRequestError(
|
|
1024
|
-
typing.cast(
|
|
1025
|
-
typing.Optional[typing.Any],
|
|
1026
|
-
parse_obj_as(
|
|
1027
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1028
|
-
object_=_response.json(),
|
|
1029
|
-
),
|
|
1030
|
-
)
|
|
1031
|
-
)
|
|
1032
|
-
if _response.status_code == 409:
|
|
1033
|
-
raise ConflictError(
|
|
1034
|
-
typing.cast(
|
|
1035
|
-
typing.Optional[typing.Any],
|
|
1036
|
-
parse_obj_as(
|
|
1037
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1038
|
-
object_=_response.json(),
|
|
1039
|
-
),
|
|
1040
|
-
)
|
|
1041
|
-
)
|
|
1042
|
-
if _response.status_code == 422:
|
|
1043
|
-
raise UnprocessableEntityError(
|
|
1044
|
-
typing.cast(
|
|
1045
|
-
typing.Optional[typing.Any],
|
|
1046
|
-
parse_obj_as(
|
|
1047
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1048
|
-
object_=_response.json(),
|
|
1049
|
-
),
|
|
1050
|
-
)
|
|
1051
|
-
)
|
|
1052
|
-
_response_json = _response.json()
|
|
1053
|
-
except JSONDecodeError:
|
|
1054
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1055
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
711
|
+
return _response.data
|
|
1056
712
|
|
|
1057
713
|
async def get_prompt_by_id(
|
|
1058
714
|
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
@@ -1074,52 +730,15 @@ class AsyncPromptsClient:
|
|
|
1074
730
|
|
|
1075
731
|
Examples
|
|
1076
732
|
--------
|
|
1077
|
-
import asyncio
|
|
1078
|
-
|
|
1079
733
|
from Opik import AsyncOpikApi
|
|
1080
|
-
|
|
1081
|
-
client = AsyncOpikApi(
|
|
1082
|
-
api_key="YOUR_API_KEY",
|
|
1083
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
1084
|
-
)
|
|
1085
|
-
|
|
1086
|
-
|
|
734
|
+
import asyncio
|
|
735
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1087
736
|
async def main() -> None:
|
|
1088
|
-
await client.prompts.get_prompt_by_id(
|
|
1089
|
-
id="id",
|
|
1090
|
-
)
|
|
1091
|
-
|
|
1092
|
-
|
|
737
|
+
await client.prompts.get_prompt_by_id(id='id', )
|
|
1093
738
|
asyncio.run(main())
|
|
1094
739
|
"""
|
|
1095
|
-
_response = await self.
|
|
1096
|
-
|
|
1097
|
-
method="GET",
|
|
1098
|
-
request_options=request_options,
|
|
1099
|
-
)
|
|
1100
|
-
try:
|
|
1101
|
-
if 200 <= _response.status_code < 300:
|
|
1102
|
-
return typing.cast(
|
|
1103
|
-
PromptDetail,
|
|
1104
|
-
parse_obj_as(
|
|
1105
|
-
type_=PromptDetail, # type: ignore
|
|
1106
|
-
object_=_response.json(),
|
|
1107
|
-
),
|
|
1108
|
-
)
|
|
1109
|
-
if _response.status_code == 404:
|
|
1110
|
-
raise NotFoundError(
|
|
1111
|
-
typing.cast(
|
|
1112
|
-
typing.Optional[typing.Any],
|
|
1113
|
-
parse_obj_as(
|
|
1114
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1115
|
-
object_=_response.json(),
|
|
1116
|
-
),
|
|
1117
|
-
)
|
|
1118
|
-
)
|
|
1119
|
-
_response_json = _response.json()
|
|
1120
|
-
except JSONDecodeError:
|
|
1121
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1122
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
740
|
+
_response = await self._raw_client.get_prompt_by_id(id, request_options=request_options)
|
|
741
|
+
return _response.data
|
|
1123
742
|
|
|
1124
743
|
async def update_prompt(
|
|
1125
744
|
self,
|
|
@@ -1127,6 +746,7 @@ class AsyncPromptsClient:
|
|
|
1127
746
|
*,
|
|
1128
747
|
name: str,
|
|
1129
748
|
description: typing.Optional[str] = OMIT,
|
|
749
|
+
tags: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
1130
750
|
request_options: typing.Optional[RequestOptions] = None,
|
|
1131
751
|
) -> None:
|
|
1132
752
|
"""
|
|
@@ -1140,6 +760,8 @@ class AsyncPromptsClient:
|
|
|
1140
760
|
|
|
1141
761
|
description : typing.Optional[str]
|
|
1142
762
|
|
|
763
|
+
tags : typing.Optional[typing.Sequence[str]]
|
|
764
|
+
|
|
1143
765
|
request_options : typing.Optional[RequestOptions]
|
|
1144
766
|
Request-specific configuration.
|
|
1145
767
|
|
|
@@ -1149,89 +771,19 @@ class AsyncPromptsClient:
|
|
|
1149
771
|
|
|
1150
772
|
Examples
|
|
1151
773
|
--------
|
|
1152
|
-
import asyncio
|
|
1153
|
-
|
|
1154
774
|
from Opik import AsyncOpikApi
|
|
1155
|
-
|
|
1156
|
-
client = AsyncOpikApi(
|
|
1157
|
-
api_key="YOUR_API_KEY",
|
|
1158
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
1159
|
-
)
|
|
1160
|
-
|
|
1161
|
-
|
|
775
|
+
import asyncio
|
|
776
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1162
777
|
async def main() -> None:
|
|
1163
|
-
await client.prompts.update_prompt(
|
|
1164
|
-
id="id",
|
|
1165
|
-
name="name",
|
|
1166
|
-
)
|
|
1167
|
-
|
|
1168
|
-
|
|
778
|
+
await client.prompts.update_prompt(id='id', name='name', )
|
|
1169
779
|
asyncio.run(main())
|
|
1170
780
|
"""
|
|
1171
|
-
_response = await self.
|
|
1172
|
-
|
|
1173
|
-
method="PUT",
|
|
1174
|
-
json={
|
|
1175
|
-
"name": name,
|
|
1176
|
-
"description": description,
|
|
1177
|
-
},
|
|
1178
|
-
headers={
|
|
1179
|
-
"content-type": "application/json",
|
|
1180
|
-
},
|
|
1181
|
-
request_options=request_options,
|
|
1182
|
-
omit=OMIT,
|
|
781
|
+
_response = await self._raw_client.update_prompt(
|
|
782
|
+
id, name=name, description=description, tags=tags, request_options=request_options
|
|
1183
783
|
)
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
if _response.status_code == 400:
|
|
1188
|
-
raise BadRequestError(
|
|
1189
|
-
typing.cast(
|
|
1190
|
-
typing.Optional[typing.Any],
|
|
1191
|
-
parse_obj_as(
|
|
1192
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1193
|
-
object_=_response.json(),
|
|
1194
|
-
),
|
|
1195
|
-
)
|
|
1196
|
-
)
|
|
1197
|
-
if _response.status_code == 404:
|
|
1198
|
-
raise NotFoundError(
|
|
1199
|
-
typing.cast(
|
|
1200
|
-
typing.Optional[typing.Any],
|
|
1201
|
-
parse_obj_as(
|
|
1202
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1203
|
-
object_=_response.json(),
|
|
1204
|
-
),
|
|
1205
|
-
)
|
|
1206
|
-
)
|
|
1207
|
-
if _response.status_code == 409:
|
|
1208
|
-
raise ConflictError(
|
|
1209
|
-
typing.cast(
|
|
1210
|
-
typing.Optional[typing.Any],
|
|
1211
|
-
parse_obj_as(
|
|
1212
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1213
|
-
object_=_response.json(),
|
|
1214
|
-
),
|
|
1215
|
-
)
|
|
1216
|
-
)
|
|
1217
|
-
if _response.status_code == 422:
|
|
1218
|
-
raise UnprocessableEntityError(
|
|
1219
|
-
typing.cast(
|
|
1220
|
-
typing.Optional[typing.Any],
|
|
1221
|
-
parse_obj_as(
|
|
1222
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1223
|
-
object_=_response.json(),
|
|
1224
|
-
),
|
|
1225
|
-
)
|
|
1226
|
-
)
|
|
1227
|
-
_response_json = _response.json()
|
|
1228
|
-
except JSONDecodeError:
|
|
1229
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1230
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
1231
|
-
|
|
1232
|
-
async def delete_prompt(
|
|
1233
|
-
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
1234
|
-
) -> None:
|
|
784
|
+
return _response.data
|
|
785
|
+
|
|
786
|
+
async def delete_prompt(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
|
|
1235
787
|
"""
|
|
1236
788
|
Delete prompt
|
|
1237
789
|
|
|
@@ -1248,42 +800,18 @@ class AsyncPromptsClient:
|
|
|
1248
800
|
|
|
1249
801
|
Examples
|
|
1250
802
|
--------
|
|
1251
|
-
import asyncio
|
|
1252
|
-
|
|
1253
803
|
from Opik import AsyncOpikApi
|
|
1254
|
-
|
|
1255
|
-
client = AsyncOpikApi(
|
|
1256
|
-
api_key="YOUR_API_KEY",
|
|
1257
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
1258
|
-
)
|
|
1259
|
-
|
|
1260
|
-
|
|
804
|
+
import asyncio
|
|
805
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1261
806
|
async def main() -> None:
|
|
1262
|
-
await client.prompts.delete_prompt(
|
|
1263
|
-
id="id",
|
|
1264
|
-
)
|
|
1265
|
-
|
|
1266
|
-
|
|
807
|
+
await client.prompts.delete_prompt(id='id', )
|
|
1267
808
|
asyncio.run(main())
|
|
1268
809
|
"""
|
|
1269
|
-
_response = await self.
|
|
1270
|
-
|
|
1271
|
-
method="DELETE",
|
|
1272
|
-
request_options=request_options,
|
|
1273
|
-
)
|
|
1274
|
-
try:
|
|
1275
|
-
if 200 <= _response.status_code < 300:
|
|
1276
|
-
return
|
|
1277
|
-
_response_json = _response.json()
|
|
1278
|
-
except JSONDecodeError:
|
|
1279
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1280
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
810
|
+
_response = await self._raw_client.delete_prompt(id, request_options=request_options)
|
|
811
|
+
return _response.data
|
|
1281
812
|
|
|
1282
813
|
async def delete_prompts_batch(
|
|
1283
|
-
self,
|
|
1284
|
-
*,
|
|
1285
|
-
ids: typing.Sequence[str],
|
|
1286
|
-
request_options: typing.Optional[RequestOptions] = None,
|
|
814
|
+
self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
|
|
1287
815
|
) -> None:
|
|
1288
816
|
"""
|
|
1289
817
|
Delete prompts batch
|
|
@@ -1301,46 +829,18 @@ class AsyncPromptsClient:
|
|
|
1301
829
|
|
|
1302
830
|
Examples
|
|
1303
831
|
--------
|
|
1304
|
-
import asyncio
|
|
1305
|
-
|
|
1306
832
|
from Opik import AsyncOpikApi
|
|
1307
|
-
|
|
1308
|
-
client = AsyncOpikApi(
|
|
1309
|
-
api_key="YOUR_API_KEY",
|
|
1310
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
1311
|
-
)
|
|
1312
|
-
|
|
1313
|
-
|
|
833
|
+
import asyncio
|
|
834
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1314
835
|
async def main() -> None:
|
|
1315
|
-
await client.prompts.delete_prompts_batch(
|
|
1316
|
-
ids=["ids"],
|
|
1317
|
-
)
|
|
1318
|
-
|
|
1319
|
-
|
|
836
|
+
await client.prompts.delete_prompts_batch(ids=['ids'], )
|
|
1320
837
|
asyncio.run(main())
|
|
1321
838
|
"""
|
|
1322
|
-
_response = await self.
|
|
1323
|
-
|
|
1324
|
-
method="POST",
|
|
1325
|
-
json={
|
|
1326
|
-
"ids": ids,
|
|
1327
|
-
},
|
|
1328
|
-
request_options=request_options,
|
|
1329
|
-
omit=OMIT,
|
|
1330
|
-
)
|
|
1331
|
-
try:
|
|
1332
|
-
if 200 <= _response.status_code < 300:
|
|
1333
|
-
return
|
|
1334
|
-
_response_json = _response.json()
|
|
1335
|
-
except JSONDecodeError:
|
|
1336
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1337
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
839
|
+
_response = await self._raw_client.delete_prompts_batch(ids=ids, request_options=request_options)
|
|
840
|
+
return _response.data
|
|
1338
841
|
|
|
1339
842
|
async def get_prompt_version_by_id(
|
|
1340
|
-
self,
|
|
1341
|
-
version_id: str,
|
|
1342
|
-
*,
|
|
1343
|
-
request_options: typing.Optional[RequestOptions] = None,
|
|
843
|
+
self, version_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
1344
844
|
) -> PromptVersionDetail:
|
|
1345
845
|
"""
|
|
1346
846
|
Get prompt version by id
|
|
@@ -1359,52 +859,15 @@ class AsyncPromptsClient:
|
|
|
1359
859
|
|
|
1360
860
|
Examples
|
|
1361
861
|
--------
|
|
1362
|
-
import asyncio
|
|
1363
|
-
|
|
1364
862
|
from Opik import AsyncOpikApi
|
|
1365
|
-
|
|
1366
|
-
client = AsyncOpikApi(
|
|
1367
|
-
api_key="YOUR_API_KEY",
|
|
1368
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
1369
|
-
)
|
|
1370
|
-
|
|
1371
|
-
|
|
863
|
+
import asyncio
|
|
864
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1372
865
|
async def main() -> None:
|
|
1373
|
-
await client.prompts.get_prompt_version_by_id(
|
|
1374
|
-
version_id="versionId",
|
|
1375
|
-
)
|
|
1376
|
-
|
|
1377
|
-
|
|
866
|
+
await client.prompts.get_prompt_version_by_id(version_id='versionId', )
|
|
1378
867
|
asyncio.run(main())
|
|
1379
868
|
"""
|
|
1380
|
-
_response = await self.
|
|
1381
|
-
|
|
1382
|
-
method="GET",
|
|
1383
|
-
request_options=request_options,
|
|
1384
|
-
)
|
|
1385
|
-
try:
|
|
1386
|
-
if 200 <= _response.status_code < 300:
|
|
1387
|
-
return typing.cast(
|
|
1388
|
-
PromptVersionDetail,
|
|
1389
|
-
parse_obj_as(
|
|
1390
|
-
type_=PromptVersionDetail, # type: ignore
|
|
1391
|
-
object_=_response.json(),
|
|
1392
|
-
),
|
|
1393
|
-
)
|
|
1394
|
-
if _response.status_code == 404:
|
|
1395
|
-
raise NotFoundError(
|
|
1396
|
-
typing.cast(
|
|
1397
|
-
typing.Optional[typing.Any],
|
|
1398
|
-
parse_obj_as(
|
|
1399
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1400
|
-
object_=_response.json(),
|
|
1401
|
-
),
|
|
1402
|
-
)
|
|
1403
|
-
)
|
|
1404
|
-
_response_json = _response.json()
|
|
1405
|
-
except JSONDecodeError:
|
|
1406
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1407
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
869
|
+
_response = await self._raw_client.get_prompt_version_by_id(version_id, request_options=request_options)
|
|
870
|
+
return _response.data
|
|
1408
871
|
|
|
1409
872
|
async def get_prompt_versions(
|
|
1410
873
|
self,
|
|
@@ -1412,6 +875,9 @@ class AsyncPromptsClient:
|
|
|
1412
875
|
*,
|
|
1413
876
|
page: typing.Optional[int] = None,
|
|
1414
877
|
size: typing.Optional[int] = None,
|
|
878
|
+
search: typing.Optional[str] = None,
|
|
879
|
+
sorting: typing.Optional[str] = None,
|
|
880
|
+
filters: typing.Optional[str] = None,
|
|
1415
881
|
request_options: typing.Optional[RequestOptions] = None,
|
|
1416
882
|
) -> PromptVersionPagePublic:
|
|
1417
883
|
"""
|
|
@@ -1425,6 +891,13 @@ class AsyncPromptsClient:
|
|
|
1425
891
|
|
|
1426
892
|
size : typing.Optional[int]
|
|
1427
893
|
|
|
894
|
+
search : typing.Optional[str]
|
|
895
|
+
Search text to find in template or change description fields
|
|
896
|
+
|
|
897
|
+
sorting : typing.Optional[str]
|
|
898
|
+
|
|
899
|
+
filters : typing.Optional[str]
|
|
900
|
+
|
|
1428
901
|
request_options : typing.Optional[RequestOptions]
|
|
1429
902
|
Request-specific configuration.
|
|
1430
903
|
|
|
@@ -1435,53 +908,54 @@ class AsyncPromptsClient:
|
|
|
1435
908
|
|
|
1436
909
|
Examples
|
|
1437
910
|
--------
|
|
911
|
+
from Opik import AsyncOpikApi
|
|
1438
912
|
import asyncio
|
|
913
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
914
|
+
async def main() -> None:
|
|
915
|
+
await client.prompts.get_prompt_versions(id='id', )
|
|
916
|
+
asyncio.run(main())
|
|
917
|
+
"""
|
|
918
|
+
_response = await self._raw_client.get_prompt_versions(
|
|
919
|
+
id, page=page, size=size, search=search, sorting=sorting, filters=filters, request_options=request_options
|
|
920
|
+
)
|
|
921
|
+
return _response.data
|
|
1439
922
|
|
|
1440
|
-
|
|
923
|
+
async def restore_prompt_version(
|
|
924
|
+
self, prompt_id: str, version_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
925
|
+
) -> PromptVersionDetail:
|
|
926
|
+
"""
|
|
927
|
+
Restore a prompt version by creating a new version with the content from the specified version
|
|
1441
928
|
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
)
|
|
929
|
+
Parameters
|
|
930
|
+
----------
|
|
931
|
+
prompt_id : str
|
|
1446
932
|
|
|
933
|
+
version_id : str
|
|
1447
934
|
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
id="id",
|
|
1451
|
-
)
|
|
935
|
+
request_options : typing.Optional[RequestOptions]
|
|
936
|
+
Request-specific configuration.
|
|
1452
937
|
|
|
938
|
+
Returns
|
|
939
|
+
-------
|
|
940
|
+
PromptVersionDetail
|
|
941
|
+
OK
|
|
1453
942
|
|
|
943
|
+
Examples
|
|
944
|
+
--------
|
|
945
|
+
from Opik import AsyncOpikApi
|
|
946
|
+
import asyncio
|
|
947
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
948
|
+
async def main() -> None:
|
|
949
|
+
await client.prompts.restore_prompt_version(prompt_id='promptId', version_id='versionId', )
|
|
1454
950
|
asyncio.run(main())
|
|
1455
951
|
"""
|
|
1456
|
-
_response = await self.
|
|
1457
|
-
|
|
1458
|
-
method="GET",
|
|
1459
|
-
params={
|
|
1460
|
-
"page": page,
|
|
1461
|
-
"size": size,
|
|
1462
|
-
},
|
|
1463
|
-
request_options=request_options,
|
|
952
|
+
_response = await self._raw_client.restore_prompt_version(
|
|
953
|
+
prompt_id, version_id, request_options=request_options
|
|
1464
954
|
)
|
|
1465
|
-
|
|
1466
|
-
if 200 <= _response.status_code < 300:
|
|
1467
|
-
return typing.cast(
|
|
1468
|
-
PromptVersionPagePublic,
|
|
1469
|
-
parse_obj_as(
|
|
1470
|
-
type_=PromptVersionPagePublic, # type: ignore
|
|
1471
|
-
object_=_response.json(),
|
|
1472
|
-
),
|
|
1473
|
-
)
|
|
1474
|
-
_response_json = _response.json()
|
|
1475
|
-
except JSONDecodeError:
|
|
1476
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1477
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
955
|
+
return _response.data
|
|
1478
956
|
|
|
1479
957
|
async def retrieve_prompt_version(
|
|
1480
|
-
self,
|
|
1481
|
-
*,
|
|
1482
|
-
name: str,
|
|
1483
|
-
commit: typing.Optional[str] = OMIT,
|
|
1484
|
-
request_options: typing.Optional[RequestOptions] = None,
|
|
958
|
+
self, *, name: str, commit: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None
|
|
1485
959
|
) -> PromptVersionDetail:
|
|
1486
960
|
"""
|
|
1487
961
|
Retrieve prompt version
|
|
@@ -1502,77 +976,14 @@ class AsyncPromptsClient:
|
|
|
1502
976
|
|
|
1503
977
|
Examples
|
|
1504
978
|
--------
|
|
1505
|
-
import asyncio
|
|
1506
|
-
|
|
1507
979
|
from Opik import AsyncOpikApi
|
|
1508
|
-
|
|
1509
|
-
client = AsyncOpikApi(
|
|
1510
|
-
api_key="YOUR_API_KEY",
|
|
1511
|
-
workspace_name="YOUR_WORKSPACE_NAME",
|
|
1512
|
-
)
|
|
1513
|
-
|
|
1514
|
-
|
|
980
|
+
import asyncio
|
|
981
|
+
client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
|
|
1515
982
|
async def main() -> None:
|
|
1516
|
-
await client.prompts.retrieve_prompt_version(
|
|
1517
|
-
name="name",
|
|
1518
|
-
)
|
|
1519
|
-
|
|
1520
|
-
|
|
983
|
+
await client.prompts.retrieve_prompt_version(name='name', )
|
|
1521
984
|
asyncio.run(main())
|
|
1522
985
|
"""
|
|
1523
|
-
_response = await self.
|
|
1524
|
-
|
|
1525
|
-
method="POST",
|
|
1526
|
-
json={
|
|
1527
|
-
"name": name,
|
|
1528
|
-
"commit": commit,
|
|
1529
|
-
},
|
|
1530
|
-
headers={
|
|
1531
|
-
"content-type": "application/json",
|
|
1532
|
-
},
|
|
1533
|
-
request_options=request_options,
|
|
1534
|
-
omit=OMIT,
|
|
986
|
+
_response = await self._raw_client.retrieve_prompt_version(
|
|
987
|
+
name=name, commit=commit, request_options=request_options
|
|
1535
988
|
)
|
|
1536
|
-
|
|
1537
|
-
if 200 <= _response.status_code < 300:
|
|
1538
|
-
return typing.cast(
|
|
1539
|
-
PromptVersionDetail,
|
|
1540
|
-
parse_obj_as(
|
|
1541
|
-
type_=PromptVersionDetail, # type: ignore
|
|
1542
|
-
object_=_response.json(),
|
|
1543
|
-
),
|
|
1544
|
-
)
|
|
1545
|
-
if _response.status_code == 400:
|
|
1546
|
-
raise BadRequestError(
|
|
1547
|
-
typing.cast(
|
|
1548
|
-
typing.Optional[typing.Any],
|
|
1549
|
-
parse_obj_as(
|
|
1550
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1551
|
-
object_=_response.json(),
|
|
1552
|
-
),
|
|
1553
|
-
)
|
|
1554
|
-
)
|
|
1555
|
-
if _response.status_code == 404:
|
|
1556
|
-
raise NotFoundError(
|
|
1557
|
-
typing.cast(
|
|
1558
|
-
typing.Optional[typing.Any],
|
|
1559
|
-
parse_obj_as(
|
|
1560
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1561
|
-
object_=_response.json(),
|
|
1562
|
-
),
|
|
1563
|
-
)
|
|
1564
|
-
)
|
|
1565
|
-
if _response.status_code == 422:
|
|
1566
|
-
raise UnprocessableEntityError(
|
|
1567
|
-
typing.cast(
|
|
1568
|
-
typing.Optional[typing.Any],
|
|
1569
|
-
parse_obj_as(
|
|
1570
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
|
1571
|
-
object_=_response.json(),
|
|
1572
|
-
),
|
|
1573
|
-
)
|
|
1574
|
-
)
|
|
1575
|
-
_response_json = _response.json()
|
|
1576
|
-
except JSONDecodeError:
|
|
1577
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
1578
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
989
|
+
return _response.data
|