opik 1.8.39__py3-none-any.whl → 1.9.71__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. opik/__init__.py +19 -3
  2. opik/anonymizer/__init__.py +5 -0
  3. opik/anonymizer/anonymizer.py +12 -0
  4. opik/anonymizer/factory.py +80 -0
  5. opik/anonymizer/recursive_anonymizer.py +64 -0
  6. opik/anonymizer/rules.py +56 -0
  7. opik/anonymizer/rules_anonymizer.py +35 -0
  8. opik/api_objects/attachment/attachment_context.py +36 -0
  9. opik/api_objects/attachment/attachments_extractor.py +153 -0
  10. opik/api_objects/attachment/client.py +1 -0
  11. opik/api_objects/attachment/converters.py +2 -0
  12. opik/api_objects/attachment/decoder.py +18 -0
  13. opik/api_objects/attachment/decoder_base64.py +83 -0
  14. opik/api_objects/attachment/decoder_helpers.py +137 -0
  15. opik/api_objects/data_helpers.py +79 -0
  16. opik/api_objects/dataset/dataset.py +64 -4
  17. opik/api_objects/dataset/rest_operations.py +11 -2
  18. opik/api_objects/experiment/experiment.py +57 -57
  19. opik/api_objects/experiment/experiment_item.py +2 -1
  20. opik/api_objects/experiment/experiments_client.py +64 -0
  21. opik/api_objects/experiment/helpers.py +35 -11
  22. opik/api_objects/experiment/rest_operations.py +65 -5
  23. opik/api_objects/helpers.py +8 -5
  24. opik/api_objects/local_recording.py +81 -0
  25. opik/api_objects/opik_client.py +600 -108
  26. opik/api_objects/opik_query_language.py +39 -5
  27. opik/api_objects/prompt/__init__.py +12 -2
  28. opik/api_objects/prompt/base_prompt.py +69 -0
  29. opik/api_objects/prompt/base_prompt_template.py +29 -0
  30. opik/api_objects/prompt/chat/__init__.py +1 -0
  31. opik/api_objects/prompt/chat/chat_prompt.py +210 -0
  32. opik/api_objects/prompt/chat/chat_prompt_template.py +350 -0
  33. opik/api_objects/prompt/chat/content_renderer_registry.py +203 -0
  34. opik/api_objects/prompt/client.py +189 -47
  35. opik/api_objects/prompt/text/__init__.py +1 -0
  36. opik/api_objects/prompt/text/prompt.py +174 -0
  37. opik/api_objects/prompt/{prompt_template.py → text/prompt_template.py} +10 -6
  38. opik/api_objects/prompt/types.py +23 -0
  39. opik/api_objects/search_helpers.py +89 -0
  40. opik/api_objects/span/span_data.py +35 -25
  41. opik/api_objects/threads/threads_client.py +39 -5
  42. opik/api_objects/trace/trace_client.py +52 -2
  43. opik/api_objects/trace/trace_data.py +15 -24
  44. opik/api_objects/validation_helpers.py +3 -3
  45. opik/cli/__init__.py +5 -0
  46. opik/cli/__main__.py +6 -0
  47. opik/cli/configure.py +66 -0
  48. opik/cli/exports/__init__.py +131 -0
  49. opik/cli/exports/dataset.py +278 -0
  50. opik/cli/exports/experiment.py +784 -0
  51. opik/cli/exports/project.py +685 -0
  52. opik/cli/exports/prompt.py +578 -0
  53. opik/cli/exports/utils.py +406 -0
  54. opik/cli/harbor.py +39 -0
  55. opik/cli/healthcheck.py +21 -0
  56. opik/cli/imports/__init__.py +439 -0
  57. opik/cli/imports/dataset.py +143 -0
  58. opik/cli/imports/experiment.py +1192 -0
  59. opik/cli/imports/project.py +262 -0
  60. opik/cli/imports/prompt.py +177 -0
  61. opik/cli/imports/utils.py +280 -0
  62. opik/cli/main.py +49 -0
  63. opik/cli/proxy.py +93 -0
  64. opik/cli/usage_report/__init__.py +16 -0
  65. opik/cli/usage_report/charts.py +783 -0
  66. opik/cli/usage_report/cli.py +274 -0
  67. opik/cli/usage_report/constants.py +9 -0
  68. opik/cli/usage_report/extraction.py +749 -0
  69. opik/cli/usage_report/pdf.py +244 -0
  70. opik/cli/usage_report/statistics.py +78 -0
  71. opik/cli/usage_report/utils.py +235 -0
  72. opik/config.py +13 -7
  73. opik/configurator/configure.py +17 -0
  74. opik/datetime_helpers.py +12 -0
  75. opik/decorator/arguments_helpers.py +9 -1
  76. opik/decorator/base_track_decorator.py +205 -133
  77. opik/decorator/context_manager/span_context_manager.py +123 -0
  78. opik/decorator/context_manager/trace_context_manager.py +84 -0
  79. opik/decorator/opik_args/__init__.py +13 -0
  80. opik/decorator/opik_args/api_classes.py +71 -0
  81. opik/decorator/opik_args/helpers.py +120 -0
  82. opik/decorator/span_creation_handler.py +25 -6
  83. opik/dict_utils.py +3 -3
  84. opik/evaluation/__init__.py +13 -2
  85. opik/evaluation/engine/engine.py +272 -75
  86. opik/evaluation/engine/evaluation_tasks_executor.py +6 -3
  87. opik/evaluation/engine/helpers.py +31 -6
  88. opik/evaluation/engine/metrics_evaluator.py +237 -0
  89. opik/evaluation/evaluation_result.py +168 -2
  90. opik/evaluation/evaluator.py +533 -62
  91. opik/evaluation/metrics/__init__.py +103 -4
  92. opik/evaluation/metrics/aggregated_metric.py +35 -6
  93. opik/evaluation/metrics/base_metric.py +1 -1
  94. opik/evaluation/metrics/conversation/__init__.py +48 -0
  95. opik/evaluation/metrics/conversation/conversation_thread_metric.py +56 -2
  96. opik/evaluation/metrics/conversation/g_eval_wrappers.py +19 -0
  97. opik/evaluation/metrics/conversation/helpers.py +14 -15
  98. opik/evaluation/metrics/conversation/heuristics/__init__.py +14 -0
  99. opik/evaluation/metrics/conversation/heuristics/degeneration/__init__.py +3 -0
  100. opik/evaluation/metrics/conversation/heuristics/degeneration/metric.py +189 -0
  101. opik/evaluation/metrics/conversation/heuristics/degeneration/phrases.py +12 -0
  102. opik/evaluation/metrics/conversation/heuristics/knowledge_retention/__init__.py +3 -0
  103. opik/evaluation/metrics/conversation/heuristics/knowledge_retention/metric.py +172 -0
  104. opik/evaluation/metrics/conversation/llm_judges/__init__.py +32 -0
  105. opik/evaluation/metrics/conversation/{conversational_coherence → llm_judges/conversational_coherence}/metric.py +22 -17
  106. opik/evaluation/metrics/conversation/{conversational_coherence → llm_judges/conversational_coherence}/templates.py +1 -1
  107. opik/evaluation/metrics/conversation/llm_judges/g_eval_wrappers.py +442 -0
  108. opik/evaluation/metrics/conversation/{session_completeness → llm_judges/session_completeness}/metric.py +13 -7
  109. opik/evaluation/metrics/conversation/{session_completeness → llm_judges/session_completeness}/templates.py +1 -1
  110. opik/evaluation/metrics/conversation/llm_judges/user_frustration/__init__.py +0 -0
  111. opik/evaluation/metrics/conversation/{user_frustration → llm_judges/user_frustration}/metric.py +21 -14
  112. opik/evaluation/metrics/conversation/{user_frustration → llm_judges/user_frustration}/templates.py +1 -1
  113. opik/evaluation/metrics/conversation/types.py +4 -5
  114. opik/evaluation/metrics/conversation_types.py +9 -0
  115. opik/evaluation/metrics/heuristics/bertscore.py +107 -0
  116. opik/evaluation/metrics/heuristics/bleu.py +35 -15
  117. opik/evaluation/metrics/heuristics/chrf.py +127 -0
  118. opik/evaluation/metrics/heuristics/contains.py +47 -11
  119. opik/evaluation/metrics/heuristics/distribution_metrics.py +331 -0
  120. opik/evaluation/metrics/heuristics/gleu.py +113 -0
  121. opik/evaluation/metrics/heuristics/language_adherence.py +123 -0
  122. opik/evaluation/metrics/heuristics/meteor.py +119 -0
  123. opik/evaluation/metrics/heuristics/prompt_injection.py +150 -0
  124. opik/evaluation/metrics/heuristics/readability.py +129 -0
  125. opik/evaluation/metrics/heuristics/rouge.py +26 -9
  126. opik/evaluation/metrics/heuristics/spearman.py +88 -0
  127. opik/evaluation/metrics/heuristics/tone.py +155 -0
  128. opik/evaluation/metrics/heuristics/vader_sentiment.py +77 -0
  129. opik/evaluation/metrics/llm_judges/answer_relevance/metric.py +20 -5
  130. opik/evaluation/metrics/llm_judges/context_precision/metric.py +20 -6
  131. opik/evaluation/metrics/llm_judges/context_recall/metric.py +20 -6
  132. opik/evaluation/metrics/llm_judges/g_eval/__init__.py +5 -0
  133. opik/evaluation/metrics/llm_judges/g_eval/metric.py +219 -68
  134. opik/evaluation/metrics/llm_judges/g_eval/parser.py +102 -52
  135. opik/evaluation/metrics/llm_judges/g_eval/presets.py +209 -0
  136. opik/evaluation/metrics/llm_judges/g_eval_presets/__init__.py +36 -0
  137. opik/evaluation/metrics/llm_judges/g_eval_presets/agent_assessment.py +77 -0
  138. opik/evaluation/metrics/llm_judges/g_eval_presets/bias_classifier.py +181 -0
  139. opik/evaluation/metrics/llm_judges/g_eval_presets/compliance_risk.py +41 -0
  140. opik/evaluation/metrics/llm_judges/g_eval_presets/prompt_uncertainty.py +41 -0
  141. opik/evaluation/metrics/llm_judges/g_eval_presets/qa_suite.py +146 -0
  142. opik/evaluation/metrics/llm_judges/hallucination/metric.py +16 -3
  143. opik/evaluation/metrics/llm_judges/llm_juries/__init__.py +3 -0
  144. opik/evaluation/metrics/llm_judges/llm_juries/metric.py +76 -0
  145. opik/evaluation/metrics/llm_judges/moderation/metric.py +16 -4
  146. opik/evaluation/metrics/llm_judges/structure_output_compliance/__init__.py +0 -0
  147. opik/evaluation/metrics/llm_judges/structure_output_compliance/metric.py +144 -0
  148. opik/evaluation/metrics/llm_judges/structure_output_compliance/parser.py +79 -0
  149. opik/evaluation/metrics/llm_judges/structure_output_compliance/schema.py +15 -0
  150. opik/evaluation/metrics/llm_judges/structure_output_compliance/template.py +50 -0
  151. opik/evaluation/metrics/llm_judges/syc_eval/__init__.py +0 -0
  152. opik/evaluation/metrics/llm_judges/syc_eval/metric.py +252 -0
  153. opik/evaluation/metrics/llm_judges/syc_eval/parser.py +82 -0
  154. opik/evaluation/metrics/llm_judges/syc_eval/template.py +155 -0
  155. opik/evaluation/metrics/llm_judges/trajectory_accuracy/metric.py +20 -5
  156. opik/evaluation/metrics/llm_judges/usefulness/metric.py +16 -4
  157. opik/evaluation/metrics/ragas_metric.py +43 -23
  158. opik/evaluation/models/__init__.py +8 -0
  159. opik/evaluation/models/base_model.py +107 -1
  160. opik/evaluation/models/langchain/langchain_chat_model.py +15 -7
  161. opik/evaluation/models/langchain/message_converters.py +97 -15
  162. opik/evaluation/models/litellm/litellm_chat_model.py +156 -29
  163. opik/evaluation/models/litellm/util.py +125 -0
  164. opik/evaluation/models/litellm/warning_filters.py +16 -4
  165. opik/evaluation/models/model_capabilities.py +187 -0
  166. opik/evaluation/models/models_factory.py +25 -3
  167. opik/evaluation/preprocessing.py +92 -0
  168. opik/evaluation/report.py +70 -12
  169. opik/evaluation/rest_operations.py +49 -45
  170. opik/evaluation/samplers/__init__.py +4 -0
  171. opik/evaluation/samplers/base_dataset_sampler.py +40 -0
  172. opik/evaluation/samplers/random_dataset_sampler.py +48 -0
  173. opik/evaluation/score_statistics.py +66 -0
  174. opik/evaluation/scorers/__init__.py +4 -0
  175. opik/evaluation/scorers/scorer_function.py +55 -0
  176. opik/evaluation/scorers/scorer_wrapper_metric.py +130 -0
  177. opik/evaluation/test_case.py +3 -2
  178. opik/evaluation/test_result.py +1 -0
  179. opik/evaluation/threads/evaluator.py +31 -3
  180. opik/evaluation/threads/helpers.py +3 -2
  181. opik/evaluation/types.py +9 -1
  182. opik/exceptions.py +33 -0
  183. opik/file_upload/file_uploader.py +13 -0
  184. opik/file_upload/upload_options.py +2 -0
  185. opik/hooks/__init__.py +23 -0
  186. opik/hooks/anonymizer_hook.py +36 -0
  187. opik/hooks/httpx_client_hook.py +112 -0
  188. opik/httpx_client.py +12 -9
  189. opik/id_helpers.py +18 -0
  190. opik/integrations/adk/graph/subgraph_edges_builders.py +1 -2
  191. opik/integrations/adk/helpers.py +16 -7
  192. opik/integrations/adk/legacy_opik_tracer.py +7 -4
  193. opik/integrations/adk/opik_tracer.py +14 -1
  194. opik/integrations/adk/patchers/adk_otel_tracer/opik_adk_otel_tracer.py +7 -3
  195. opik/integrations/adk/recursive_callback_injector.py +4 -7
  196. opik/integrations/bedrock/converse/__init__.py +0 -0
  197. opik/integrations/bedrock/converse/chunks_aggregator.py +188 -0
  198. opik/integrations/bedrock/{converse_decorator.py → converse/converse_decorator.py} +4 -3
  199. opik/integrations/bedrock/invoke_agent_decorator.py +5 -4
  200. opik/integrations/bedrock/invoke_model/__init__.py +0 -0
  201. opik/integrations/bedrock/invoke_model/chunks_aggregator/__init__.py +78 -0
  202. opik/integrations/bedrock/invoke_model/chunks_aggregator/api.py +45 -0
  203. opik/integrations/bedrock/invoke_model/chunks_aggregator/base.py +23 -0
  204. opik/integrations/bedrock/invoke_model/chunks_aggregator/claude.py +121 -0
  205. opik/integrations/bedrock/invoke_model/chunks_aggregator/format_detector.py +107 -0
  206. opik/integrations/bedrock/invoke_model/chunks_aggregator/llama.py +108 -0
  207. opik/integrations/bedrock/invoke_model/chunks_aggregator/mistral.py +118 -0
  208. opik/integrations/bedrock/invoke_model/chunks_aggregator/nova.py +99 -0
  209. opik/integrations/bedrock/invoke_model/invoke_model_decorator.py +178 -0
  210. opik/integrations/bedrock/invoke_model/response_types.py +34 -0
  211. opik/integrations/bedrock/invoke_model/stream_wrappers.py +122 -0
  212. opik/integrations/bedrock/invoke_model/usage_converters.py +87 -0
  213. opik/integrations/bedrock/invoke_model/usage_extraction.py +108 -0
  214. opik/integrations/bedrock/opik_tracker.py +42 -4
  215. opik/integrations/bedrock/types.py +19 -0
  216. opik/integrations/crewai/crewai_decorator.py +8 -51
  217. opik/integrations/crewai/opik_tracker.py +31 -10
  218. opik/integrations/crewai/patchers/__init__.py +5 -0
  219. opik/integrations/crewai/patchers/flow.py +118 -0
  220. opik/integrations/crewai/patchers/litellm_completion.py +30 -0
  221. opik/integrations/crewai/patchers/llm_client.py +207 -0
  222. opik/integrations/dspy/callback.py +80 -17
  223. opik/integrations/dspy/parsers.py +168 -0
  224. opik/integrations/harbor/__init__.py +17 -0
  225. opik/integrations/harbor/experiment_service.py +269 -0
  226. opik/integrations/harbor/opik_tracker.py +528 -0
  227. opik/integrations/haystack/opik_connector.py +2 -2
  228. opik/integrations/haystack/opik_tracer.py +3 -7
  229. opik/integrations/langchain/__init__.py +3 -1
  230. opik/integrations/langchain/helpers.py +96 -0
  231. opik/integrations/langchain/langgraph_async_context_bridge.py +131 -0
  232. opik/integrations/langchain/langgraph_tracer_injector.py +88 -0
  233. opik/integrations/langchain/opik_encoder_extension.py +1 -1
  234. opik/integrations/langchain/opik_tracer.py +474 -229
  235. opik/integrations/litellm/__init__.py +5 -0
  236. opik/integrations/litellm/completion_chunks_aggregator.py +115 -0
  237. opik/integrations/litellm/litellm_completion_decorator.py +242 -0
  238. opik/integrations/litellm/opik_tracker.py +43 -0
  239. opik/integrations/litellm/stream_patchers.py +151 -0
  240. opik/integrations/llama_index/callback.py +146 -107
  241. opik/integrations/openai/agents/opik_tracing_processor.py +1 -2
  242. opik/integrations/openai/openai_chat_completions_decorator.py +2 -16
  243. opik/integrations/openai/opik_tracker.py +1 -1
  244. opik/integrations/sagemaker/auth.py +5 -1
  245. opik/llm_usage/google_usage.py +3 -1
  246. opik/llm_usage/opik_usage.py +7 -8
  247. opik/llm_usage/opik_usage_factory.py +4 -2
  248. opik/logging_messages.py +6 -0
  249. opik/message_processing/batching/base_batcher.py +14 -21
  250. opik/message_processing/batching/batch_manager.py +22 -10
  251. opik/message_processing/batching/batch_manager_constuctors.py +10 -0
  252. opik/message_processing/batching/batchers.py +59 -27
  253. opik/message_processing/batching/flushing_thread.py +0 -3
  254. opik/message_processing/emulation/__init__.py +0 -0
  255. opik/message_processing/emulation/emulator_message_processor.py +578 -0
  256. opik/message_processing/emulation/local_emulator_message_processor.py +140 -0
  257. opik/message_processing/emulation/models.py +162 -0
  258. opik/message_processing/encoder_helpers.py +79 -0
  259. opik/message_processing/messages.py +56 -1
  260. opik/message_processing/preprocessing/__init__.py +0 -0
  261. opik/message_processing/preprocessing/attachments_preprocessor.py +70 -0
  262. opik/message_processing/preprocessing/batching_preprocessor.py +53 -0
  263. opik/message_processing/preprocessing/constants.py +1 -0
  264. opik/message_processing/preprocessing/file_upload_preprocessor.py +38 -0
  265. opik/message_processing/preprocessing/preprocessor.py +36 -0
  266. opik/message_processing/processors/__init__.py +0 -0
  267. opik/message_processing/processors/attachments_extraction_processor.py +146 -0
  268. opik/message_processing/processors/message_processors.py +92 -0
  269. opik/message_processing/processors/message_processors_chain.py +96 -0
  270. opik/message_processing/{message_processors.py → processors/online_message_processor.py} +85 -29
  271. opik/message_processing/queue_consumer.py +9 -3
  272. opik/message_processing/streamer.py +71 -33
  273. opik/message_processing/streamer_constructors.py +43 -10
  274. opik/opik_context.py +16 -4
  275. opik/plugins/pytest/hooks.py +5 -3
  276. opik/rest_api/__init__.py +346 -15
  277. opik/rest_api/alerts/__init__.py +7 -0
  278. opik/rest_api/alerts/client.py +667 -0
  279. opik/rest_api/alerts/raw_client.py +1015 -0
  280. opik/rest_api/alerts/types/__init__.py +7 -0
  281. opik/rest_api/alerts/types/get_webhook_examples_request_alert_type.py +5 -0
  282. opik/rest_api/annotation_queues/__init__.py +4 -0
  283. opik/rest_api/annotation_queues/client.py +668 -0
  284. opik/rest_api/annotation_queues/raw_client.py +1019 -0
  285. opik/rest_api/automation_rule_evaluators/client.py +34 -2
  286. opik/rest_api/automation_rule_evaluators/raw_client.py +24 -0
  287. opik/rest_api/client.py +15 -0
  288. opik/rest_api/dashboards/__init__.py +4 -0
  289. opik/rest_api/dashboards/client.py +462 -0
  290. opik/rest_api/dashboards/raw_client.py +648 -0
  291. opik/rest_api/datasets/client.py +1310 -44
  292. opik/rest_api/datasets/raw_client.py +2269 -358
  293. opik/rest_api/experiments/__init__.py +2 -2
  294. opik/rest_api/experiments/client.py +191 -5
  295. opik/rest_api/experiments/raw_client.py +301 -7
  296. opik/rest_api/experiments/types/__init__.py +4 -1
  297. opik/rest_api/experiments/types/experiment_update_status.py +5 -0
  298. opik/rest_api/experiments/types/experiment_update_type.py +5 -0
  299. opik/rest_api/experiments/types/experiment_write_status.py +5 -0
  300. opik/rest_api/feedback_definitions/types/find_feedback_definitions_request_type.py +1 -1
  301. opik/rest_api/llm_provider_key/client.py +20 -0
  302. opik/rest_api/llm_provider_key/raw_client.py +20 -0
  303. opik/rest_api/llm_provider_key/types/provider_api_key_write_provider.py +1 -1
  304. opik/rest_api/manual_evaluation/__init__.py +4 -0
  305. opik/rest_api/manual_evaluation/client.py +347 -0
  306. opik/rest_api/manual_evaluation/raw_client.py +543 -0
  307. opik/rest_api/optimizations/client.py +145 -9
  308. opik/rest_api/optimizations/raw_client.py +237 -13
  309. opik/rest_api/optimizations/types/optimization_update_status.py +3 -1
  310. opik/rest_api/prompts/__init__.py +2 -2
  311. opik/rest_api/prompts/client.py +227 -6
  312. opik/rest_api/prompts/raw_client.py +331 -2
  313. opik/rest_api/prompts/types/__init__.py +3 -1
  314. opik/rest_api/prompts/types/create_prompt_version_detail_template_structure.py +5 -0
  315. opik/rest_api/prompts/types/prompt_write_template_structure.py +5 -0
  316. opik/rest_api/spans/__init__.py +0 -2
  317. opik/rest_api/spans/client.py +238 -76
  318. opik/rest_api/spans/raw_client.py +307 -95
  319. opik/rest_api/spans/types/__init__.py +0 -2
  320. opik/rest_api/traces/client.py +572 -161
  321. opik/rest_api/traces/raw_client.py +736 -229
  322. opik/rest_api/types/__init__.py +352 -17
  323. opik/rest_api/types/aggregation_data.py +1 -0
  324. opik/rest_api/types/alert.py +33 -0
  325. opik/rest_api/types/alert_alert_type.py +5 -0
  326. opik/rest_api/types/alert_page_public.py +24 -0
  327. opik/rest_api/types/alert_public.py +33 -0
  328. opik/rest_api/types/alert_public_alert_type.py +5 -0
  329. opik/rest_api/types/alert_trigger.py +27 -0
  330. opik/rest_api/types/alert_trigger_config.py +28 -0
  331. opik/rest_api/types/alert_trigger_config_public.py +28 -0
  332. opik/rest_api/types/alert_trigger_config_public_type.py +10 -0
  333. opik/rest_api/types/alert_trigger_config_type.py +10 -0
  334. opik/rest_api/types/alert_trigger_config_write.py +22 -0
  335. opik/rest_api/types/alert_trigger_config_write_type.py +10 -0
  336. opik/rest_api/types/alert_trigger_event_type.py +19 -0
  337. opik/rest_api/types/alert_trigger_public.py +27 -0
  338. opik/rest_api/types/alert_trigger_public_event_type.py +19 -0
  339. opik/rest_api/types/alert_trigger_write.py +23 -0
  340. opik/rest_api/types/alert_trigger_write_event_type.py +19 -0
  341. opik/rest_api/types/alert_write.py +28 -0
  342. opik/rest_api/types/alert_write_alert_type.py +5 -0
  343. opik/rest_api/types/annotation_queue.py +42 -0
  344. opik/rest_api/types/annotation_queue_batch.py +27 -0
  345. opik/rest_api/types/annotation_queue_item_ids.py +19 -0
  346. opik/rest_api/types/annotation_queue_page_public.py +28 -0
  347. opik/rest_api/types/annotation_queue_public.py +38 -0
  348. opik/rest_api/types/annotation_queue_public_scope.py +5 -0
  349. opik/rest_api/types/annotation_queue_reviewer.py +20 -0
  350. opik/rest_api/types/annotation_queue_reviewer_public.py +20 -0
  351. opik/rest_api/types/annotation_queue_scope.py +5 -0
  352. opik/rest_api/types/annotation_queue_write.py +31 -0
  353. opik/rest_api/types/annotation_queue_write_scope.py +5 -0
  354. opik/rest_api/types/audio_url.py +19 -0
  355. opik/rest_api/types/audio_url_public.py +19 -0
  356. opik/rest_api/types/audio_url_write.py +19 -0
  357. opik/rest_api/types/automation_rule_evaluator.py +62 -2
  358. opik/rest_api/types/automation_rule_evaluator_llm_as_judge.py +2 -0
  359. opik/rest_api/types/automation_rule_evaluator_llm_as_judge_public.py +2 -0
  360. opik/rest_api/types/automation_rule_evaluator_llm_as_judge_write.py +2 -0
  361. opik/rest_api/types/automation_rule_evaluator_object_object_public.py +155 -0
  362. opik/rest_api/types/automation_rule_evaluator_page_public.py +3 -2
  363. opik/rest_api/types/automation_rule_evaluator_public.py +57 -2
  364. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge.py +22 -0
  365. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_public.py +22 -0
  366. opik/rest_api/types/automation_rule_evaluator_span_llm_as_judge_write.py +22 -0
  367. opik/rest_api/types/automation_rule_evaluator_span_user_defined_metric_python.py +22 -0
  368. opik/rest_api/types/automation_rule_evaluator_span_user_defined_metric_python_public.py +22 -0
  369. opik/rest_api/types/automation_rule_evaluator_span_user_defined_metric_python_write.py +22 -0
  370. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge.py +2 -0
  371. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_public.py +2 -0
  372. opik/rest_api/types/automation_rule_evaluator_trace_thread_llm_as_judge_write.py +2 -0
  373. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python.py +2 -0
  374. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_public.py +2 -0
  375. opik/rest_api/types/automation_rule_evaluator_trace_thread_user_defined_metric_python_write.py +2 -0
  376. opik/rest_api/types/automation_rule_evaluator_update.py +51 -1
  377. opik/rest_api/types/automation_rule_evaluator_update_llm_as_judge.py +2 -0
  378. opik/rest_api/types/automation_rule_evaluator_update_span_llm_as_judge.py +22 -0
  379. opik/rest_api/types/automation_rule_evaluator_update_span_user_defined_metric_python.py +22 -0
  380. opik/rest_api/types/automation_rule_evaluator_update_trace_thread_llm_as_judge.py +2 -0
  381. opik/rest_api/types/automation_rule_evaluator_update_trace_thread_user_defined_metric_python.py +2 -0
  382. opik/rest_api/types/automation_rule_evaluator_update_user_defined_metric_python.py +2 -0
  383. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python.py +2 -0
  384. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_public.py +2 -0
  385. opik/rest_api/types/automation_rule_evaluator_user_defined_metric_python_write.py +2 -0
  386. opik/rest_api/types/automation_rule_evaluator_write.py +51 -1
  387. opik/rest_api/types/boolean_feedback_definition.py +25 -0
  388. opik/rest_api/types/boolean_feedback_definition_create.py +20 -0
  389. opik/rest_api/types/boolean_feedback_definition_public.py +25 -0
  390. opik/rest_api/types/boolean_feedback_definition_update.py +20 -0
  391. opik/rest_api/types/boolean_feedback_detail.py +29 -0
  392. opik/rest_api/types/boolean_feedback_detail_create.py +29 -0
  393. opik/rest_api/types/boolean_feedback_detail_public.py +29 -0
  394. opik/rest_api/types/boolean_feedback_detail_update.py +29 -0
  395. opik/rest_api/types/dashboard_page_public.py +24 -0
  396. opik/rest_api/types/dashboard_public.py +30 -0
  397. opik/rest_api/types/dataset.py +4 -0
  398. opik/rest_api/types/dataset_expansion.py +42 -0
  399. opik/rest_api/types/dataset_expansion_response.py +39 -0
  400. opik/rest_api/types/dataset_item.py +2 -0
  401. opik/rest_api/types/dataset_item_changes_public.py +5 -0
  402. opik/rest_api/types/dataset_item_compare.py +2 -0
  403. opik/rest_api/types/dataset_item_filter.py +27 -0
  404. opik/rest_api/types/dataset_item_filter_operator.py +21 -0
  405. opik/rest_api/types/dataset_item_page_compare.py +5 -0
  406. opik/rest_api/types/dataset_item_page_public.py +5 -0
  407. opik/rest_api/types/dataset_item_public.py +2 -0
  408. opik/rest_api/types/dataset_item_update.py +39 -0
  409. opik/rest_api/types/dataset_item_write.py +1 -0
  410. opik/rest_api/types/dataset_public.py +4 -0
  411. opik/rest_api/types/dataset_public_status.py +5 -0
  412. opik/rest_api/types/dataset_status.py +5 -0
  413. opik/rest_api/types/dataset_version_diff.py +22 -0
  414. opik/rest_api/types/dataset_version_diff_stats.py +24 -0
  415. opik/rest_api/types/dataset_version_page_public.py +23 -0
  416. opik/rest_api/types/dataset_version_public.py +59 -0
  417. opik/rest_api/types/dataset_version_summary.py +46 -0
  418. opik/rest_api/types/dataset_version_summary_public.py +46 -0
  419. opik/rest_api/types/experiment.py +7 -2
  420. opik/rest_api/types/experiment_group_response.py +2 -0
  421. opik/rest_api/types/experiment_public.py +7 -2
  422. opik/rest_api/types/experiment_public_status.py +5 -0
  423. opik/rest_api/types/experiment_score.py +20 -0
  424. opik/rest_api/types/experiment_score_public.py +20 -0
  425. opik/rest_api/types/experiment_score_write.py +20 -0
  426. opik/rest_api/types/experiment_status.py +5 -0
  427. opik/rest_api/types/feedback.py +25 -1
  428. opik/rest_api/types/feedback_create.py +20 -1
  429. opik/rest_api/types/feedback_object_public.py +27 -1
  430. opik/rest_api/types/feedback_public.py +25 -1
  431. opik/rest_api/types/feedback_score_batch_item.py +2 -1
  432. opik/rest_api/types/feedback_score_batch_item_thread.py +2 -1
  433. opik/rest_api/types/feedback_score_public.py +4 -0
  434. opik/rest_api/types/feedback_update.py +20 -1
  435. opik/rest_api/types/group_content_with_aggregations.py +1 -0
  436. opik/rest_api/types/group_detail.py +19 -0
  437. opik/rest_api/types/group_details.py +20 -0
  438. opik/rest_api/types/guardrail.py +1 -0
  439. opik/rest_api/types/guardrail_write.py +1 -0
  440. opik/rest_api/types/ids_holder.py +19 -0
  441. opik/rest_api/types/image_url.py +20 -0
  442. opik/rest_api/types/image_url_public.py +20 -0
  443. opik/rest_api/types/image_url_write.py +20 -0
  444. opik/rest_api/types/llm_as_judge_message.py +5 -1
  445. opik/rest_api/types/llm_as_judge_message_content.py +26 -0
  446. opik/rest_api/types/llm_as_judge_message_content_public.py +26 -0
  447. opik/rest_api/types/llm_as_judge_message_content_write.py +26 -0
  448. opik/rest_api/types/llm_as_judge_message_public.py +5 -1
  449. opik/rest_api/types/llm_as_judge_message_write.py +5 -1
  450. opik/rest_api/types/llm_as_judge_model_parameters.py +3 -0
  451. opik/rest_api/types/llm_as_judge_model_parameters_public.py +3 -0
  452. opik/rest_api/types/llm_as_judge_model_parameters_write.py +3 -0
  453. opik/rest_api/types/manual_evaluation_request.py +38 -0
  454. opik/rest_api/types/manual_evaluation_request_entity_type.py +5 -0
  455. opik/rest_api/types/manual_evaluation_response.py +27 -0
  456. opik/rest_api/types/optimization.py +4 -2
  457. opik/rest_api/types/optimization_public.py +4 -2
  458. opik/rest_api/types/optimization_public_status.py +3 -1
  459. opik/rest_api/types/optimization_status.py +3 -1
  460. opik/rest_api/types/optimization_studio_config.py +27 -0
  461. opik/rest_api/types/optimization_studio_config_public.py +27 -0
  462. opik/rest_api/types/optimization_studio_config_write.py +27 -0
  463. opik/rest_api/types/optimization_studio_log.py +22 -0
  464. opik/rest_api/types/optimization_write.py +4 -2
  465. opik/rest_api/types/optimization_write_status.py +3 -1
  466. opik/rest_api/types/project.py +1 -0
  467. opik/rest_api/types/project_detailed.py +1 -0
  468. opik/rest_api/types/project_reference.py +31 -0
  469. opik/rest_api/types/project_reference_public.py +31 -0
  470. opik/rest_api/types/project_stats_summary_item.py +1 -0
  471. opik/rest_api/types/prompt.py +6 -0
  472. opik/rest_api/types/prompt_detail.py +6 -0
  473. opik/rest_api/types/prompt_detail_template_structure.py +5 -0
  474. opik/rest_api/types/prompt_public.py +6 -0
  475. opik/rest_api/types/prompt_public_template_structure.py +5 -0
  476. opik/rest_api/types/prompt_template_structure.py +5 -0
  477. opik/rest_api/types/prompt_version.py +3 -0
  478. opik/rest_api/types/prompt_version_detail.py +3 -0
  479. opik/rest_api/types/prompt_version_detail_template_structure.py +5 -0
  480. opik/rest_api/types/prompt_version_link.py +1 -0
  481. opik/rest_api/types/prompt_version_link_public.py +1 -0
  482. opik/rest_api/types/prompt_version_page_public.py +5 -0
  483. opik/rest_api/types/prompt_version_public.py +3 -0
  484. opik/rest_api/types/prompt_version_public_template_structure.py +5 -0
  485. opik/rest_api/types/prompt_version_template_structure.py +5 -0
  486. opik/rest_api/types/prompt_version_update.py +33 -0
  487. opik/rest_api/types/provider_api_key.py +9 -0
  488. opik/rest_api/types/provider_api_key_provider.py +1 -1
  489. opik/rest_api/types/provider_api_key_public.py +9 -0
  490. opik/rest_api/types/provider_api_key_public_provider.py +1 -1
  491. opik/rest_api/types/score_name.py +1 -0
  492. opik/rest_api/types/service_toggles_config.py +18 -0
  493. opik/rest_api/types/span.py +1 -2
  494. opik/rest_api/types/span_enrichment_options.py +31 -0
  495. opik/rest_api/types/span_experiment_item_bulk_write_view.py +1 -2
  496. opik/rest_api/types/span_filter.py +23 -0
  497. opik/rest_api/types/span_filter_operator.py +21 -0
  498. opik/rest_api/types/span_filter_write.py +23 -0
  499. opik/rest_api/types/span_filter_write_operator.py +21 -0
  500. opik/rest_api/types/span_llm_as_judge_code.py +27 -0
  501. opik/rest_api/types/span_llm_as_judge_code_public.py +27 -0
  502. opik/rest_api/types/span_llm_as_judge_code_write.py +27 -0
  503. opik/rest_api/types/span_public.py +1 -2
  504. opik/rest_api/types/span_update.py +46 -0
  505. opik/rest_api/types/span_user_defined_metric_python_code.py +20 -0
  506. opik/rest_api/types/span_user_defined_metric_python_code_public.py +20 -0
  507. opik/rest_api/types/span_user_defined_metric_python_code_write.py +20 -0
  508. opik/rest_api/types/span_write.py +1 -2
  509. opik/rest_api/types/studio_evaluation.py +20 -0
  510. opik/rest_api/types/studio_evaluation_public.py +20 -0
  511. opik/rest_api/types/studio_evaluation_write.py +20 -0
  512. opik/rest_api/types/studio_llm_model.py +21 -0
  513. opik/rest_api/types/studio_llm_model_public.py +21 -0
  514. opik/rest_api/types/studio_llm_model_write.py +21 -0
  515. opik/rest_api/types/studio_message.py +20 -0
  516. opik/rest_api/types/studio_message_public.py +20 -0
  517. opik/rest_api/types/studio_message_write.py +20 -0
  518. opik/rest_api/types/studio_metric.py +21 -0
  519. opik/rest_api/types/studio_metric_public.py +21 -0
  520. opik/rest_api/types/studio_metric_write.py +21 -0
  521. opik/rest_api/types/studio_optimizer.py +21 -0
  522. opik/rest_api/types/studio_optimizer_public.py +21 -0
  523. opik/rest_api/types/studio_optimizer_write.py +21 -0
  524. opik/rest_api/types/studio_prompt.py +20 -0
  525. opik/rest_api/types/studio_prompt_public.py +20 -0
  526. opik/rest_api/types/studio_prompt_write.py +20 -0
  527. opik/rest_api/types/trace.py +11 -2
  528. opik/rest_api/types/trace_enrichment_options.py +32 -0
  529. opik/rest_api/types/trace_experiment_item_bulk_write_view.py +1 -2
  530. opik/rest_api/types/trace_filter.py +23 -0
  531. opik/rest_api/types/trace_filter_operator.py +21 -0
  532. opik/rest_api/types/trace_filter_write.py +23 -0
  533. opik/rest_api/types/trace_filter_write_operator.py +21 -0
  534. opik/rest_api/types/trace_public.py +11 -2
  535. opik/rest_api/types/trace_thread_filter_write.py +23 -0
  536. opik/rest_api/types/trace_thread_filter_write_operator.py +21 -0
  537. opik/rest_api/types/trace_thread_identifier.py +1 -0
  538. opik/rest_api/types/trace_update.py +39 -0
  539. opik/rest_api/types/trace_write.py +1 -2
  540. opik/rest_api/types/value_entry.py +2 -0
  541. opik/rest_api/types/value_entry_compare.py +2 -0
  542. opik/rest_api/types/value_entry_experiment_item_bulk_write_view.py +2 -0
  543. opik/rest_api/types/value_entry_public.py +2 -0
  544. opik/rest_api/types/video_url.py +19 -0
  545. opik/rest_api/types/video_url_public.py +19 -0
  546. opik/rest_api/types/video_url_write.py +19 -0
  547. opik/rest_api/types/webhook.py +28 -0
  548. opik/rest_api/types/webhook_examples.py +19 -0
  549. opik/rest_api/types/webhook_public.py +28 -0
  550. opik/rest_api/types/webhook_test_result.py +23 -0
  551. opik/rest_api/types/webhook_test_result_status.py +5 -0
  552. opik/rest_api/types/webhook_write.py +23 -0
  553. opik/rest_api/types/welcome_wizard_tracking.py +22 -0
  554. opik/rest_api/types/workspace_configuration.py +5 -0
  555. opik/rest_api/welcome_wizard/__init__.py +4 -0
  556. opik/rest_api/welcome_wizard/client.py +195 -0
  557. opik/rest_api/welcome_wizard/raw_client.py +208 -0
  558. opik/rest_api/workspaces/client.py +14 -2
  559. opik/rest_api/workspaces/raw_client.py +10 -0
  560. opik/s3_httpx_client.py +14 -1
  561. opik/simulation/__init__.py +6 -0
  562. opik/simulation/simulated_user.py +99 -0
  563. opik/simulation/simulator.py +108 -0
  564. opik/synchronization.py +5 -6
  565. opik/{decorator/tracing_runtime_config.py → tracing_runtime_config.py} +6 -7
  566. opik/types.py +36 -0
  567. opik/validation/chat_prompt_messages.py +241 -0
  568. opik/validation/feedback_score.py +3 -3
  569. opik/validation/validator.py +28 -0
  570. opik-1.9.71.dist-info/METADATA +370 -0
  571. opik-1.9.71.dist-info/RECORD +1110 -0
  572. opik/api_objects/prompt/prompt.py +0 -112
  573. opik/cli.py +0 -193
  574. opik/hooks.py +0 -13
  575. opik/integrations/bedrock/chunks_aggregator.py +0 -55
  576. opik/integrations/bedrock/helpers.py +0 -8
  577. opik/rest_api/types/automation_rule_evaluator_object_public.py +0 -100
  578. opik/rest_api/types/json_node_experiment_item_bulk_write_view.py +0 -5
  579. opik-1.8.39.dist-info/METADATA +0 -339
  580. opik-1.8.39.dist-info/RECORD +0 -790
  581. /opik/{evaluation/metrics/conversation/conversational_coherence → decorator/context_manager}/__init__.py +0 -0
  582. /opik/evaluation/metrics/conversation/{session_completeness → llm_judges/conversational_coherence}/__init__.py +0 -0
  583. /opik/evaluation/metrics/conversation/{conversational_coherence → llm_judges/conversational_coherence}/schema.py +0 -0
  584. /opik/evaluation/metrics/conversation/{user_frustration → llm_judges/session_completeness}/__init__.py +0 -0
  585. /opik/evaluation/metrics/conversation/{session_completeness → llm_judges/session_completeness}/schema.py +0 -0
  586. /opik/evaluation/metrics/conversation/{user_frustration → llm_judges/user_frustration}/schema.py +0 -0
  587. /opik/integrations/bedrock/{stream_wrappers.py → converse/stream_wrappers.py} +0 -0
  588. /opik/rest_api/{spans/types → types}/span_update_type.py +0 -0
  589. {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/WHEEL +0 -0
  590. {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/entry_points.txt +0 -0
  591. {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/licenses/LICENSE +0 -0
  592. {opik-1.8.39.dist-info → opik-1.9.71.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,1019 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.pydantic_utilities import parse_obj_as
11
+ from ..core.request_options import RequestOptions
12
+ from ..core.serialization import convert_and_respect_annotation_metadata
13
+ from ..errors.bad_request_error import BadRequestError
14
+ from ..errors.conflict_error import ConflictError
15
+ from ..errors.not_found_error import NotFoundError
16
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
17
+ from ..types.annotation_queue_page_public import AnnotationQueuePagePublic
18
+ from ..types.annotation_queue_public import AnnotationQueuePublic
19
+ from ..types.annotation_queue_write import AnnotationQueueWrite
20
+ from ..types.annotation_queue_write_scope import AnnotationQueueWriteScope
21
+
22
+ # this is used as the default value for optional parameters
23
+ OMIT = typing.cast(typing.Any, ...)
24
+
25
+
26
+ class RawAnnotationQueuesClient:
27
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
28
+ self._client_wrapper = client_wrapper
29
+
30
+ def add_items_to_annotation_queue(
31
+ self, id: str, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
32
+ ) -> HttpResponse[None]:
33
+ """
34
+ Add traces or threads to annotation queue
35
+
36
+ Parameters
37
+ ----------
38
+ id : str
39
+
40
+ ids : typing.Sequence[str]
41
+
42
+ request_options : typing.Optional[RequestOptions]
43
+ Request-specific configuration.
44
+
45
+ Returns
46
+ -------
47
+ HttpResponse[None]
48
+ """
49
+ _response = self._client_wrapper.httpx_client.request(
50
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}/items/add",
51
+ method="POST",
52
+ json={
53
+ "ids": ids,
54
+ },
55
+ headers={
56
+ "content-type": "application/json",
57
+ },
58
+ request_options=request_options,
59
+ omit=OMIT,
60
+ )
61
+ try:
62
+ if 200 <= _response.status_code < 300:
63
+ return HttpResponse(response=_response, data=None)
64
+ if _response.status_code == 404:
65
+ raise NotFoundError(
66
+ headers=dict(_response.headers),
67
+ body=typing.cast(
68
+ typing.Optional[typing.Any],
69
+ parse_obj_as(
70
+ type_=typing.Optional[typing.Any], # type: ignore
71
+ object_=_response.json(),
72
+ ),
73
+ ),
74
+ )
75
+ _response_json = _response.json()
76
+ except JSONDecodeError:
77
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
78
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
79
+
80
+ def find_annotation_queues(
81
+ self,
82
+ *,
83
+ page: typing.Optional[int] = None,
84
+ size: typing.Optional[int] = None,
85
+ name: typing.Optional[str] = None,
86
+ filters: typing.Optional[str] = None,
87
+ sorting: typing.Optional[str] = None,
88
+ request_options: typing.Optional[RequestOptions] = None,
89
+ ) -> HttpResponse[AnnotationQueuePagePublic]:
90
+ """
91
+ Find annotation queues with filtering and sorting
92
+
93
+ Parameters
94
+ ----------
95
+ page : typing.Optional[int]
96
+
97
+ size : typing.Optional[int]
98
+
99
+ name : typing.Optional[str]
100
+
101
+ filters : typing.Optional[str]
102
+
103
+ sorting : typing.Optional[str]
104
+
105
+ request_options : typing.Optional[RequestOptions]
106
+ Request-specific configuration.
107
+
108
+ Returns
109
+ -------
110
+ HttpResponse[AnnotationQueuePagePublic]
111
+ Annotation queues page
112
+ """
113
+ _response = self._client_wrapper.httpx_client.request(
114
+ "v1/private/annotation-queues",
115
+ method="GET",
116
+ params={
117
+ "page": page,
118
+ "size": size,
119
+ "name": name,
120
+ "filters": filters,
121
+ "sorting": sorting,
122
+ },
123
+ request_options=request_options,
124
+ )
125
+ try:
126
+ if 200 <= _response.status_code < 300:
127
+ _data = typing.cast(
128
+ AnnotationQueuePagePublic,
129
+ parse_obj_as(
130
+ type_=AnnotationQueuePagePublic, # type: ignore
131
+ object_=_response.json(),
132
+ ),
133
+ )
134
+ return HttpResponse(response=_response, data=_data)
135
+ _response_json = _response.json()
136
+ except JSONDecodeError:
137
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
138
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
139
+
140
+ def create_annotation_queue(
141
+ self,
142
+ *,
143
+ project_id: str,
144
+ name: str,
145
+ scope: AnnotationQueueWriteScope,
146
+ id: typing.Optional[str] = OMIT,
147
+ description: typing.Optional[str] = OMIT,
148
+ instructions: typing.Optional[str] = OMIT,
149
+ comments_enabled: typing.Optional[bool] = OMIT,
150
+ feedback_definition_names: typing.Optional[typing.Sequence[str]] = OMIT,
151
+ request_options: typing.Optional[RequestOptions] = None,
152
+ ) -> HttpResponse[None]:
153
+ """
154
+ Create annotation queue for human annotation workflows
155
+
156
+ Parameters
157
+ ----------
158
+ project_id : str
159
+
160
+ name : str
161
+
162
+ scope : AnnotationQueueWriteScope
163
+
164
+ id : typing.Optional[str]
165
+
166
+ description : typing.Optional[str]
167
+
168
+ instructions : typing.Optional[str]
169
+
170
+ comments_enabled : typing.Optional[bool]
171
+
172
+ feedback_definition_names : typing.Optional[typing.Sequence[str]]
173
+
174
+ request_options : typing.Optional[RequestOptions]
175
+ Request-specific configuration.
176
+
177
+ Returns
178
+ -------
179
+ HttpResponse[None]
180
+ """
181
+ _response = self._client_wrapper.httpx_client.request(
182
+ "v1/private/annotation-queues",
183
+ method="POST",
184
+ json={
185
+ "id": id,
186
+ "project_id": project_id,
187
+ "name": name,
188
+ "description": description,
189
+ "instructions": instructions,
190
+ "scope": scope,
191
+ "comments_enabled": comments_enabled,
192
+ "feedback_definition_names": feedback_definition_names,
193
+ },
194
+ headers={
195
+ "content-type": "application/json",
196
+ },
197
+ request_options=request_options,
198
+ omit=OMIT,
199
+ )
200
+ try:
201
+ if 200 <= _response.status_code < 300:
202
+ return HttpResponse(response=_response, data=None)
203
+ if _response.status_code == 400:
204
+ raise BadRequestError(
205
+ headers=dict(_response.headers),
206
+ body=typing.cast(
207
+ typing.Optional[typing.Any],
208
+ parse_obj_as(
209
+ type_=typing.Optional[typing.Any], # type: ignore
210
+ object_=_response.json(),
211
+ ),
212
+ ),
213
+ )
214
+ if _response.status_code == 422:
215
+ raise UnprocessableEntityError(
216
+ headers=dict(_response.headers),
217
+ body=typing.cast(
218
+ typing.Optional[typing.Any],
219
+ parse_obj_as(
220
+ type_=typing.Optional[typing.Any], # type: ignore
221
+ object_=_response.json(),
222
+ ),
223
+ ),
224
+ )
225
+ _response_json = _response.json()
226
+ except JSONDecodeError:
227
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
228
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
229
+
230
+ def create_annotation_queue_batch(
231
+ self,
232
+ *,
233
+ annotation_queues: typing.Sequence[AnnotationQueueWrite],
234
+ request_options: typing.Optional[RequestOptions] = None,
235
+ ) -> HttpResponse[None]:
236
+ """
237
+ Create multiple annotation queues for human annotation workflows
238
+
239
+ Parameters
240
+ ----------
241
+ annotation_queues : typing.Sequence[AnnotationQueueWrite]
242
+ List of annotation queues to create
243
+
244
+ request_options : typing.Optional[RequestOptions]
245
+ Request-specific configuration.
246
+
247
+ Returns
248
+ -------
249
+ HttpResponse[None]
250
+ """
251
+ _response = self._client_wrapper.httpx_client.request(
252
+ "v1/private/annotation-queues/batch",
253
+ method="POST",
254
+ json={
255
+ "annotation_queues": convert_and_respect_annotation_metadata(
256
+ object_=annotation_queues, annotation=typing.Sequence[AnnotationQueueWrite], direction="write"
257
+ ),
258
+ },
259
+ headers={
260
+ "content-type": "application/json",
261
+ },
262
+ request_options=request_options,
263
+ omit=OMIT,
264
+ )
265
+ try:
266
+ if 200 <= _response.status_code < 300:
267
+ return HttpResponse(response=_response, data=None)
268
+ if _response.status_code == 400:
269
+ raise BadRequestError(
270
+ headers=dict(_response.headers),
271
+ body=typing.cast(
272
+ typing.Optional[typing.Any],
273
+ parse_obj_as(
274
+ type_=typing.Optional[typing.Any], # type: ignore
275
+ object_=_response.json(),
276
+ ),
277
+ ),
278
+ )
279
+ if _response.status_code == 409:
280
+ raise ConflictError(
281
+ headers=dict(_response.headers),
282
+ body=typing.cast(
283
+ typing.Optional[typing.Any],
284
+ parse_obj_as(
285
+ type_=typing.Optional[typing.Any], # type: ignore
286
+ object_=_response.json(),
287
+ ),
288
+ ),
289
+ )
290
+ if _response.status_code == 422:
291
+ raise UnprocessableEntityError(
292
+ headers=dict(_response.headers),
293
+ body=typing.cast(
294
+ typing.Optional[typing.Any],
295
+ parse_obj_as(
296
+ type_=typing.Optional[typing.Any], # type: ignore
297
+ object_=_response.json(),
298
+ ),
299
+ ),
300
+ )
301
+ _response_json = _response.json()
302
+ except JSONDecodeError:
303
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
304
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
305
+
306
+ def delete_annotation_queue_batch(
307
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
308
+ ) -> HttpResponse[None]:
309
+ """
310
+ Delete multiple annotation queues by their IDs
311
+
312
+ Parameters
313
+ ----------
314
+ ids : typing.Sequence[str]
315
+
316
+ request_options : typing.Optional[RequestOptions]
317
+ Request-specific configuration.
318
+
319
+ Returns
320
+ -------
321
+ HttpResponse[None]
322
+ """
323
+ _response = self._client_wrapper.httpx_client.request(
324
+ "v1/private/annotation-queues/delete",
325
+ method="POST",
326
+ json={
327
+ "ids": ids,
328
+ },
329
+ headers={
330
+ "content-type": "application/json",
331
+ },
332
+ request_options=request_options,
333
+ omit=OMIT,
334
+ )
335
+ try:
336
+ if 200 <= _response.status_code < 300:
337
+ return HttpResponse(response=_response, data=None)
338
+ if _response.status_code == 400:
339
+ raise BadRequestError(
340
+ headers=dict(_response.headers),
341
+ body=typing.cast(
342
+ typing.Optional[typing.Any],
343
+ parse_obj_as(
344
+ type_=typing.Optional[typing.Any], # type: ignore
345
+ object_=_response.json(),
346
+ ),
347
+ ),
348
+ )
349
+ _response_json = _response.json()
350
+ except JSONDecodeError:
351
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
352
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
353
+
354
+ def get_annotation_queue_by_id(
355
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
356
+ ) -> HttpResponse[AnnotationQueuePublic]:
357
+ """
358
+ Get annotation queue by id
359
+
360
+ Parameters
361
+ ----------
362
+ id : str
363
+
364
+ request_options : typing.Optional[RequestOptions]
365
+ Request-specific configuration.
366
+
367
+ Returns
368
+ -------
369
+ HttpResponse[AnnotationQueuePublic]
370
+ Annotation queue resource
371
+ """
372
+ _response = self._client_wrapper.httpx_client.request(
373
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}",
374
+ method="GET",
375
+ request_options=request_options,
376
+ )
377
+ try:
378
+ if 200 <= _response.status_code < 300:
379
+ _data = typing.cast(
380
+ AnnotationQueuePublic,
381
+ parse_obj_as(
382
+ type_=AnnotationQueuePublic, # type: ignore
383
+ object_=_response.json(),
384
+ ),
385
+ )
386
+ return HttpResponse(response=_response, data=_data)
387
+ if _response.status_code == 404:
388
+ raise NotFoundError(
389
+ headers=dict(_response.headers),
390
+ body=typing.cast(
391
+ typing.Optional[typing.Any],
392
+ parse_obj_as(
393
+ type_=typing.Optional[typing.Any], # type: ignore
394
+ object_=_response.json(),
395
+ ),
396
+ ),
397
+ )
398
+ _response_json = _response.json()
399
+ except JSONDecodeError:
400
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
401
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
402
+
403
+ def update_annotation_queue(
404
+ self,
405
+ id: str,
406
+ *,
407
+ name: typing.Optional[str] = OMIT,
408
+ description: typing.Optional[str] = OMIT,
409
+ instructions: typing.Optional[str] = OMIT,
410
+ comments_enabled: typing.Optional[bool] = OMIT,
411
+ feedback_definition_names: typing.Optional[typing.Sequence[str]] = OMIT,
412
+ request_options: typing.Optional[RequestOptions] = None,
413
+ ) -> HttpResponse[None]:
414
+ """
415
+ Update annotation queue by id
416
+
417
+ Parameters
418
+ ----------
419
+ id : str
420
+
421
+ name : typing.Optional[str]
422
+
423
+ description : typing.Optional[str]
424
+
425
+ instructions : typing.Optional[str]
426
+
427
+ comments_enabled : typing.Optional[bool]
428
+
429
+ feedback_definition_names : typing.Optional[typing.Sequence[str]]
430
+
431
+ request_options : typing.Optional[RequestOptions]
432
+ Request-specific configuration.
433
+
434
+ Returns
435
+ -------
436
+ HttpResponse[None]
437
+ """
438
+ _response = self._client_wrapper.httpx_client.request(
439
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}",
440
+ method="PATCH",
441
+ json={
442
+ "name": name,
443
+ "description": description,
444
+ "instructions": instructions,
445
+ "comments_enabled": comments_enabled,
446
+ "feedback_definition_names": feedback_definition_names,
447
+ },
448
+ headers={
449
+ "content-type": "application/json",
450
+ },
451
+ request_options=request_options,
452
+ omit=OMIT,
453
+ )
454
+ try:
455
+ if 200 <= _response.status_code < 300:
456
+ return HttpResponse(response=_response, data=None)
457
+ if _response.status_code == 400:
458
+ raise BadRequestError(
459
+ headers=dict(_response.headers),
460
+ body=typing.cast(
461
+ typing.Optional[typing.Any],
462
+ parse_obj_as(
463
+ type_=typing.Optional[typing.Any], # type: ignore
464
+ object_=_response.json(),
465
+ ),
466
+ ),
467
+ )
468
+ _response_json = _response.json()
469
+ except JSONDecodeError:
470
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
471
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
472
+
473
+ def remove_items_from_annotation_queue(
474
+ self, id: str, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
475
+ ) -> HttpResponse[None]:
476
+ """
477
+ Remove items from annotation queue
478
+
479
+ Parameters
480
+ ----------
481
+ id : str
482
+
483
+ ids : typing.Sequence[str]
484
+
485
+ request_options : typing.Optional[RequestOptions]
486
+ Request-specific configuration.
487
+
488
+ Returns
489
+ -------
490
+ HttpResponse[None]
491
+ """
492
+ _response = self._client_wrapper.httpx_client.request(
493
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}/items/delete",
494
+ method="POST",
495
+ json={
496
+ "ids": ids,
497
+ },
498
+ headers={
499
+ "content-type": "application/json",
500
+ },
501
+ request_options=request_options,
502
+ omit=OMIT,
503
+ )
504
+ try:
505
+ if 200 <= _response.status_code < 300:
506
+ return HttpResponse(response=_response, data=None)
507
+ if _response.status_code == 404:
508
+ raise NotFoundError(
509
+ headers=dict(_response.headers),
510
+ body=typing.cast(
511
+ typing.Optional[typing.Any],
512
+ parse_obj_as(
513
+ type_=typing.Optional[typing.Any], # type: ignore
514
+ object_=_response.json(),
515
+ ),
516
+ ),
517
+ )
518
+ _response_json = _response.json()
519
+ except JSONDecodeError:
520
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
521
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
522
+
523
+
524
+ class AsyncRawAnnotationQueuesClient:
525
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
526
+ self._client_wrapper = client_wrapper
527
+
528
+ async def add_items_to_annotation_queue(
529
+ self, id: str, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
530
+ ) -> AsyncHttpResponse[None]:
531
+ """
532
+ Add traces or threads to annotation queue
533
+
534
+ Parameters
535
+ ----------
536
+ id : str
537
+
538
+ ids : typing.Sequence[str]
539
+
540
+ request_options : typing.Optional[RequestOptions]
541
+ Request-specific configuration.
542
+
543
+ Returns
544
+ -------
545
+ AsyncHttpResponse[None]
546
+ """
547
+ _response = await self._client_wrapper.httpx_client.request(
548
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}/items/add",
549
+ method="POST",
550
+ json={
551
+ "ids": ids,
552
+ },
553
+ headers={
554
+ "content-type": "application/json",
555
+ },
556
+ request_options=request_options,
557
+ omit=OMIT,
558
+ )
559
+ try:
560
+ if 200 <= _response.status_code < 300:
561
+ return AsyncHttpResponse(response=_response, data=None)
562
+ if _response.status_code == 404:
563
+ raise NotFoundError(
564
+ headers=dict(_response.headers),
565
+ body=typing.cast(
566
+ typing.Optional[typing.Any],
567
+ parse_obj_as(
568
+ type_=typing.Optional[typing.Any], # type: ignore
569
+ object_=_response.json(),
570
+ ),
571
+ ),
572
+ )
573
+ _response_json = _response.json()
574
+ except JSONDecodeError:
575
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
576
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
577
+
578
+ async def find_annotation_queues(
579
+ self,
580
+ *,
581
+ page: typing.Optional[int] = None,
582
+ size: typing.Optional[int] = None,
583
+ name: typing.Optional[str] = None,
584
+ filters: typing.Optional[str] = None,
585
+ sorting: typing.Optional[str] = None,
586
+ request_options: typing.Optional[RequestOptions] = None,
587
+ ) -> AsyncHttpResponse[AnnotationQueuePagePublic]:
588
+ """
589
+ Find annotation queues with filtering and sorting
590
+
591
+ Parameters
592
+ ----------
593
+ page : typing.Optional[int]
594
+
595
+ size : typing.Optional[int]
596
+
597
+ name : typing.Optional[str]
598
+
599
+ filters : typing.Optional[str]
600
+
601
+ sorting : typing.Optional[str]
602
+
603
+ request_options : typing.Optional[RequestOptions]
604
+ Request-specific configuration.
605
+
606
+ Returns
607
+ -------
608
+ AsyncHttpResponse[AnnotationQueuePagePublic]
609
+ Annotation queues page
610
+ """
611
+ _response = await self._client_wrapper.httpx_client.request(
612
+ "v1/private/annotation-queues",
613
+ method="GET",
614
+ params={
615
+ "page": page,
616
+ "size": size,
617
+ "name": name,
618
+ "filters": filters,
619
+ "sorting": sorting,
620
+ },
621
+ request_options=request_options,
622
+ )
623
+ try:
624
+ if 200 <= _response.status_code < 300:
625
+ _data = typing.cast(
626
+ AnnotationQueuePagePublic,
627
+ parse_obj_as(
628
+ type_=AnnotationQueuePagePublic, # type: ignore
629
+ object_=_response.json(),
630
+ ),
631
+ )
632
+ return AsyncHttpResponse(response=_response, data=_data)
633
+ _response_json = _response.json()
634
+ except JSONDecodeError:
635
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
636
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
637
+
638
+ async def create_annotation_queue(
639
+ self,
640
+ *,
641
+ project_id: str,
642
+ name: str,
643
+ scope: AnnotationQueueWriteScope,
644
+ id: typing.Optional[str] = OMIT,
645
+ description: typing.Optional[str] = OMIT,
646
+ instructions: typing.Optional[str] = OMIT,
647
+ comments_enabled: typing.Optional[bool] = OMIT,
648
+ feedback_definition_names: typing.Optional[typing.Sequence[str]] = OMIT,
649
+ request_options: typing.Optional[RequestOptions] = None,
650
+ ) -> AsyncHttpResponse[None]:
651
+ """
652
+ Create annotation queue for human annotation workflows
653
+
654
+ Parameters
655
+ ----------
656
+ project_id : str
657
+
658
+ name : str
659
+
660
+ scope : AnnotationQueueWriteScope
661
+
662
+ id : typing.Optional[str]
663
+
664
+ description : typing.Optional[str]
665
+
666
+ instructions : typing.Optional[str]
667
+
668
+ comments_enabled : typing.Optional[bool]
669
+
670
+ feedback_definition_names : typing.Optional[typing.Sequence[str]]
671
+
672
+ request_options : typing.Optional[RequestOptions]
673
+ Request-specific configuration.
674
+
675
+ Returns
676
+ -------
677
+ AsyncHttpResponse[None]
678
+ """
679
+ _response = await self._client_wrapper.httpx_client.request(
680
+ "v1/private/annotation-queues",
681
+ method="POST",
682
+ json={
683
+ "id": id,
684
+ "project_id": project_id,
685
+ "name": name,
686
+ "description": description,
687
+ "instructions": instructions,
688
+ "scope": scope,
689
+ "comments_enabled": comments_enabled,
690
+ "feedback_definition_names": feedback_definition_names,
691
+ },
692
+ headers={
693
+ "content-type": "application/json",
694
+ },
695
+ request_options=request_options,
696
+ omit=OMIT,
697
+ )
698
+ try:
699
+ if 200 <= _response.status_code < 300:
700
+ return AsyncHttpResponse(response=_response, data=None)
701
+ if _response.status_code == 400:
702
+ raise BadRequestError(
703
+ headers=dict(_response.headers),
704
+ body=typing.cast(
705
+ typing.Optional[typing.Any],
706
+ parse_obj_as(
707
+ type_=typing.Optional[typing.Any], # type: ignore
708
+ object_=_response.json(),
709
+ ),
710
+ ),
711
+ )
712
+ if _response.status_code == 422:
713
+ raise UnprocessableEntityError(
714
+ headers=dict(_response.headers),
715
+ body=typing.cast(
716
+ typing.Optional[typing.Any],
717
+ parse_obj_as(
718
+ type_=typing.Optional[typing.Any], # type: ignore
719
+ object_=_response.json(),
720
+ ),
721
+ ),
722
+ )
723
+ _response_json = _response.json()
724
+ except JSONDecodeError:
725
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
726
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
727
+
728
+ async def create_annotation_queue_batch(
729
+ self,
730
+ *,
731
+ annotation_queues: typing.Sequence[AnnotationQueueWrite],
732
+ request_options: typing.Optional[RequestOptions] = None,
733
+ ) -> AsyncHttpResponse[None]:
734
+ """
735
+ Create multiple annotation queues for human annotation workflows
736
+
737
+ Parameters
738
+ ----------
739
+ annotation_queues : typing.Sequence[AnnotationQueueWrite]
740
+ List of annotation queues to create
741
+
742
+ request_options : typing.Optional[RequestOptions]
743
+ Request-specific configuration.
744
+
745
+ Returns
746
+ -------
747
+ AsyncHttpResponse[None]
748
+ """
749
+ _response = await self._client_wrapper.httpx_client.request(
750
+ "v1/private/annotation-queues/batch",
751
+ method="POST",
752
+ json={
753
+ "annotation_queues": convert_and_respect_annotation_metadata(
754
+ object_=annotation_queues, annotation=typing.Sequence[AnnotationQueueWrite], direction="write"
755
+ ),
756
+ },
757
+ headers={
758
+ "content-type": "application/json",
759
+ },
760
+ request_options=request_options,
761
+ omit=OMIT,
762
+ )
763
+ try:
764
+ if 200 <= _response.status_code < 300:
765
+ return AsyncHttpResponse(response=_response, data=None)
766
+ if _response.status_code == 400:
767
+ raise BadRequestError(
768
+ headers=dict(_response.headers),
769
+ body=typing.cast(
770
+ typing.Optional[typing.Any],
771
+ parse_obj_as(
772
+ type_=typing.Optional[typing.Any], # type: ignore
773
+ object_=_response.json(),
774
+ ),
775
+ ),
776
+ )
777
+ if _response.status_code == 409:
778
+ raise ConflictError(
779
+ headers=dict(_response.headers),
780
+ body=typing.cast(
781
+ typing.Optional[typing.Any],
782
+ parse_obj_as(
783
+ type_=typing.Optional[typing.Any], # type: ignore
784
+ object_=_response.json(),
785
+ ),
786
+ ),
787
+ )
788
+ if _response.status_code == 422:
789
+ raise UnprocessableEntityError(
790
+ headers=dict(_response.headers),
791
+ body=typing.cast(
792
+ typing.Optional[typing.Any],
793
+ parse_obj_as(
794
+ type_=typing.Optional[typing.Any], # type: ignore
795
+ object_=_response.json(),
796
+ ),
797
+ ),
798
+ )
799
+ _response_json = _response.json()
800
+ except JSONDecodeError:
801
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
802
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
803
+
804
+ async def delete_annotation_queue_batch(
805
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
806
+ ) -> AsyncHttpResponse[None]:
807
+ """
808
+ Delete multiple annotation queues by their IDs
809
+
810
+ Parameters
811
+ ----------
812
+ ids : typing.Sequence[str]
813
+
814
+ request_options : typing.Optional[RequestOptions]
815
+ Request-specific configuration.
816
+
817
+ Returns
818
+ -------
819
+ AsyncHttpResponse[None]
820
+ """
821
+ _response = await self._client_wrapper.httpx_client.request(
822
+ "v1/private/annotation-queues/delete",
823
+ method="POST",
824
+ json={
825
+ "ids": ids,
826
+ },
827
+ headers={
828
+ "content-type": "application/json",
829
+ },
830
+ request_options=request_options,
831
+ omit=OMIT,
832
+ )
833
+ try:
834
+ if 200 <= _response.status_code < 300:
835
+ return AsyncHttpResponse(response=_response, data=None)
836
+ if _response.status_code == 400:
837
+ raise BadRequestError(
838
+ headers=dict(_response.headers),
839
+ body=typing.cast(
840
+ typing.Optional[typing.Any],
841
+ parse_obj_as(
842
+ type_=typing.Optional[typing.Any], # type: ignore
843
+ object_=_response.json(),
844
+ ),
845
+ ),
846
+ )
847
+ _response_json = _response.json()
848
+ except JSONDecodeError:
849
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
850
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
851
+
852
+ async def get_annotation_queue_by_id(
853
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
854
+ ) -> AsyncHttpResponse[AnnotationQueuePublic]:
855
+ """
856
+ Get annotation queue by id
857
+
858
+ Parameters
859
+ ----------
860
+ id : str
861
+
862
+ request_options : typing.Optional[RequestOptions]
863
+ Request-specific configuration.
864
+
865
+ Returns
866
+ -------
867
+ AsyncHttpResponse[AnnotationQueuePublic]
868
+ Annotation queue resource
869
+ """
870
+ _response = await self._client_wrapper.httpx_client.request(
871
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}",
872
+ method="GET",
873
+ request_options=request_options,
874
+ )
875
+ try:
876
+ if 200 <= _response.status_code < 300:
877
+ _data = typing.cast(
878
+ AnnotationQueuePublic,
879
+ parse_obj_as(
880
+ type_=AnnotationQueuePublic, # type: ignore
881
+ object_=_response.json(),
882
+ ),
883
+ )
884
+ return AsyncHttpResponse(response=_response, data=_data)
885
+ if _response.status_code == 404:
886
+ raise NotFoundError(
887
+ headers=dict(_response.headers),
888
+ body=typing.cast(
889
+ typing.Optional[typing.Any],
890
+ parse_obj_as(
891
+ type_=typing.Optional[typing.Any], # type: ignore
892
+ object_=_response.json(),
893
+ ),
894
+ ),
895
+ )
896
+ _response_json = _response.json()
897
+ except JSONDecodeError:
898
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
899
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
900
+
901
+ async def update_annotation_queue(
902
+ self,
903
+ id: str,
904
+ *,
905
+ name: typing.Optional[str] = OMIT,
906
+ description: typing.Optional[str] = OMIT,
907
+ instructions: typing.Optional[str] = OMIT,
908
+ comments_enabled: typing.Optional[bool] = OMIT,
909
+ feedback_definition_names: typing.Optional[typing.Sequence[str]] = OMIT,
910
+ request_options: typing.Optional[RequestOptions] = None,
911
+ ) -> AsyncHttpResponse[None]:
912
+ """
913
+ Update annotation queue by id
914
+
915
+ Parameters
916
+ ----------
917
+ id : str
918
+
919
+ name : typing.Optional[str]
920
+
921
+ description : typing.Optional[str]
922
+
923
+ instructions : typing.Optional[str]
924
+
925
+ comments_enabled : typing.Optional[bool]
926
+
927
+ feedback_definition_names : typing.Optional[typing.Sequence[str]]
928
+
929
+ request_options : typing.Optional[RequestOptions]
930
+ Request-specific configuration.
931
+
932
+ Returns
933
+ -------
934
+ AsyncHttpResponse[None]
935
+ """
936
+ _response = await self._client_wrapper.httpx_client.request(
937
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}",
938
+ method="PATCH",
939
+ json={
940
+ "name": name,
941
+ "description": description,
942
+ "instructions": instructions,
943
+ "comments_enabled": comments_enabled,
944
+ "feedback_definition_names": feedback_definition_names,
945
+ },
946
+ headers={
947
+ "content-type": "application/json",
948
+ },
949
+ request_options=request_options,
950
+ omit=OMIT,
951
+ )
952
+ try:
953
+ if 200 <= _response.status_code < 300:
954
+ return AsyncHttpResponse(response=_response, data=None)
955
+ if _response.status_code == 400:
956
+ raise BadRequestError(
957
+ headers=dict(_response.headers),
958
+ body=typing.cast(
959
+ typing.Optional[typing.Any],
960
+ parse_obj_as(
961
+ type_=typing.Optional[typing.Any], # type: ignore
962
+ object_=_response.json(),
963
+ ),
964
+ ),
965
+ )
966
+ _response_json = _response.json()
967
+ except JSONDecodeError:
968
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
969
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
970
+
971
+ async def remove_items_from_annotation_queue(
972
+ self, id: str, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
973
+ ) -> AsyncHttpResponse[None]:
974
+ """
975
+ Remove items from annotation queue
976
+
977
+ Parameters
978
+ ----------
979
+ id : str
980
+
981
+ ids : typing.Sequence[str]
982
+
983
+ request_options : typing.Optional[RequestOptions]
984
+ Request-specific configuration.
985
+
986
+ Returns
987
+ -------
988
+ AsyncHttpResponse[None]
989
+ """
990
+ _response = await self._client_wrapper.httpx_client.request(
991
+ f"v1/private/annotation-queues/{jsonable_encoder(id)}/items/delete",
992
+ method="POST",
993
+ json={
994
+ "ids": ids,
995
+ },
996
+ headers={
997
+ "content-type": "application/json",
998
+ },
999
+ request_options=request_options,
1000
+ omit=OMIT,
1001
+ )
1002
+ try:
1003
+ if 200 <= _response.status_code < 300:
1004
+ return AsyncHttpResponse(response=_response, data=None)
1005
+ if _response.status_code == 404:
1006
+ raise NotFoundError(
1007
+ headers=dict(_response.headers),
1008
+ body=typing.cast(
1009
+ typing.Optional[typing.Any],
1010
+ parse_obj_as(
1011
+ type_=typing.Optional[typing.Any], # type: ignore
1012
+ object_=_response.json(),
1013
+ ),
1014
+ ),
1015
+ )
1016
+ _response_json = _response.json()
1017
+ except JSONDecodeError:
1018
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1019
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)