aeri-python 4.0.0__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 (391) hide show
  1. aeri/__init__.py +72 -0
  2. aeri/_client/_validation.py +204 -0
  3. aeri/_client/attributes.py +188 -0
  4. aeri/_client/client.py +3761 -0
  5. aeri/_client/constants.py +65 -0
  6. aeri/_client/datasets.py +302 -0
  7. aeri/_client/environment_variables.py +158 -0
  8. aeri/_client/get_client.py +149 -0
  9. aeri/_client/observe.py +661 -0
  10. aeri/_client/propagation.py +475 -0
  11. aeri/_client/resource_manager.py +510 -0
  12. aeri/_client/span.py +1519 -0
  13. aeri/_client/span_filter.py +76 -0
  14. aeri/_client/span_processor.py +206 -0
  15. aeri/_client/utils.py +132 -0
  16. aeri/_task_manager/media_manager.py +331 -0
  17. aeri/_task_manager/media_upload_consumer.py +44 -0
  18. aeri/_task_manager/media_upload_queue.py +12 -0
  19. aeri/_task_manager/score_ingestion_consumer.py +208 -0
  20. aeri/_task_manager/task_manager.py +475 -0
  21. aeri/_utils/__init__.py +19 -0
  22. aeri/_utils/environment.py +34 -0
  23. aeri/_utils/error_logging.py +47 -0
  24. aeri/_utils/parse_error.py +99 -0
  25. aeri/_utils/prompt_cache.py +188 -0
  26. aeri/_utils/request.py +137 -0
  27. aeri/_utils/serializer.py +205 -0
  28. aeri/api/.fern/metadata.json +14 -0
  29. aeri/api/__init__.py +836 -0
  30. aeri/api/annotation_queues/__init__.py +82 -0
  31. aeri/api/annotation_queues/client.py +1111 -0
  32. aeri/api/annotation_queues/raw_client.py +2288 -0
  33. aeri/api/annotation_queues/types/__init__.py +84 -0
  34. aeri/api/annotation_queues/types/annotation_queue.py +28 -0
  35. aeri/api/annotation_queues/types/annotation_queue_assignment_request.py +16 -0
  36. aeri/api/annotation_queues/types/annotation_queue_item.py +34 -0
  37. aeri/api/annotation_queues/types/annotation_queue_object_type.py +26 -0
  38. aeri/api/annotation_queues/types/annotation_queue_status.py +22 -0
  39. aeri/api/annotation_queues/types/create_annotation_queue_assignment_response.py +18 -0
  40. aeri/api/annotation_queues/types/create_annotation_queue_item_request.py +25 -0
  41. aeri/api/annotation_queues/types/create_annotation_queue_request.py +20 -0
  42. aeri/api/annotation_queues/types/delete_annotation_queue_assignment_response.py +14 -0
  43. aeri/api/annotation_queues/types/delete_annotation_queue_item_response.py +15 -0
  44. aeri/api/annotation_queues/types/paginated_annotation_queue_items.py +17 -0
  45. aeri/api/annotation_queues/types/paginated_annotation_queues.py +17 -0
  46. aeri/api/annotation_queues/types/update_annotation_queue_item_request.py +15 -0
  47. aeri/api/blob_storage_integrations/__init__.py +73 -0
  48. aeri/api/blob_storage_integrations/client.py +550 -0
  49. aeri/api/blob_storage_integrations/raw_client.py +976 -0
  50. aeri/api/blob_storage_integrations/types/__init__.py +77 -0
  51. aeri/api/blob_storage_integrations/types/blob_storage_export_frequency.py +26 -0
  52. aeri/api/blob_storage_integrations/types/blob_storage_export_mode.py +26 -0
  53. aeri/api/blob_storage_integrations/types/blob_storage_integration_deletion_response.py +14 -0
  54. aeri/api/blob_storage_integrations/types/blob_storage_integration_file_type.py +26 -0
  55. aeri/api/blob_storage_integrations/types/blob_storage_integration_response.py +64 -0
  56. aeri/api/blob_storage_integrations/types/blob_storage_integration_status_response.py +50 -0
  57. aeri/api/blob_storage_integrations/types/blob_storage_integration_type.py +26 -0
  58. aeri/api/blob_storage_integrations/types/blob_storage_integrations_response.py +15 -0
  59. aeri/api/blob_storage_integrations/types/blob_storage_sync_status.py +47 -0
  60. aeri/api/blob_storage_integrations/types/create_blob_storage_integration_request.py +91 -0
  61. aeri/api/client.py +679 -0
  62. aeri/api/comments/__init__.py +44 -0
  63. aeri/api/comments/client.py +407 -0
  64. aeri/api/comments/raw_client.py +750 -0
  65. aeri/api/comments/types/__init__.py +46 -0
  66. aeri/api/comments/types/create_comment_request.py +47 -0
  67. aeri/api/comments/types/create_comment_response.py +17 -0
  68. aeri/api/comments/types/get_comments_response.py +17 -0
  69. aeri/api/commons/__init__.py +210 -0
  70. aeri/api/commons/errors/__init__.py +56 -0
  71. aeri/api/commons/errors/access_denied_error.py +12 -0
  72. aeri/api/commons/errors/error.py +12 -0
  73. aeri/api/commons/errors/method_not_allowed_error.py +12 -0
  74. aeri/api/commons/errors/not_found_error.py +12 -0
  75. aeri/api/commons/errors/unauthorized_error.py +12 -0
  76. aeri/api/commons/types/__init__.py +190 -0
  77. aeri/api/commons/types/base_score.py +90 -0
  78. aeri/api/commons/types/base_score_v1.py +70 -0
  79. aeri/api/commons/types/boolean_score.py +26 -0
  80. aeri/api/commons/types/boolean_score_v1.py +26 -0
  81. aeri/api/commons/types/categorical_score.py +26 -0
  82. aeri/api/commons/types/categorical_score_v1.py +26 -0
  83. aeri/api/commons/types/comment.py +36 -0
  84. aeri/api/commons/types/comment_object_type.py +30 -0
  85. aeri/api/commons/types/config_category.py +15 -0
  86. aeri/api/commons/types/correction_score.py +26 -0
  87. aeri/api/commons/types/create_score_value.py +5 -0
  88. aeri/api/commons/types/dataset.py +49 -0
  89. aeri/api/commons/types/dataset_item.py +58 -0
  90. aeri/api/commons/types/dataset_run.py +63 -0
  91. aeri/api/commons/types/dataset_run_item.py +40 -0
  92. aeri/api/commons/types/dataset_run_with_items.py +19 -0
  93. aeri/api/commons/types/dataset_status.py +22 -0
  94. aeri/api/commons/types/map_value.py +11 -0
  95. aeri/api/commons/types/model.py +125 -0
  96. aeri/api/commons/types/model_price.py +14 -0
  97. aeri/api/commons/types/model_usage_unit.py +42 -0
  98. aeri/api/commons/types/numeric_score.py +17 -0
  99. aeri/api/commons/types/numeric_score_v1.py +17 -0
  100. aeri/api/commons/types/observation.py +142 -0
  101. aeri/api/commons/types/observation_level.py +30 -0
  102. aeri/api/commons/types/observation_v2.py +235 -0
  103. aeri/api/commons/types/observations_view.py +89 -0
  104. aeri/api/commons/types/pricing_tier.py +91 -0
  105. aeri/api/commons/types/pricing_tier_condition.py +68 -0
  106. aeri/api/commons/types/pricing_tier_input.py +76 -0
  107. aeri/api/commons/types/pricing_tier_operator.py +42 -0
  108. aeri/api/commons/types/score.py +201 -0
  109. aeri/api/commons/types/score_config.py +66 -0
  110. aeri/api/commons/types/score_config_data_type.py +26 -0
  111. aeri/api/commons/types/score_data_type.py +30 -0
  112. aeri/api/commons/types/score_source.py +26 -0
  113. aeri/api/commons/types/score_v1.py +131 -0
  114. aeri/api/commons/types/session.py +25 -0
  115. aeri/api/commons/types/session_with_traces.py +15 -0
  116. aeri/api/commons/types/trace.py +84 -0
  117. aeri/api/commons/types/trace_with_details.py +43 -0
  118. aeri/api/commons/types/trace_with_full_details.py +45 -0
  119. aeri/api/commons/types/usage.py +59 -0
  120. aeri/api/core/__init__.py +111 -0
  121. aeri/api/core/api_error.py +23 -0
  122. aeri/api/core/client_wrapper.py +141 -0
  123. aeri/api/core/datetime_utils.py +30 -0
  124. aeri/api/core/enum.py +20 -0
  125. aeri/api/core/file.py +70 -0
  126. aeri/api/core/force_multipart.py +18 -0
  127. aeri/api/core/http_client.py +711 -0
  128. aeri/api/core/http_response.py +55 -0
  129. aeri/api/core/http_sse/__init__.py +48 -0
  130. aeri/api/core/http_sse/_api.py +114 -0
  131. aeri/api/core/http_sse/_decoders.py +66 -0
  132. aeri/api/core/http_sse/_exceptions.py +7 -0
  133. aeri/api/core/http_sse/_models.py +17 -0
  134. aeri/api/core/jsonable_encoder.py +102 -0
  135. aeri/api/core/pydantic_utilities.py +310 -0
  136. aeri/api/core/query_encoder.py +60 -0
  137. aeri/api/core/remove_none_from_dict.py +11 -0
  138. aeri/api/core/request_options.py +35 -0
  139. aeri/api/core/serialization.py +282 -0
  140. aeri/api/dataset_items/__init__.py +52 -0
  141. aeri/api/dataset_items/client.py +499 -0
  142. aeri/api/dataset_items/raw_client.py +973 -0
  143. aeri/api/dataset_items/types/__init__.py +50 -0
  144. aeri/api/dataset_items/types/create_dataset_item_request.py +37 -0
  145. aeri/api/dataset_items/types/delete_dataset_item_response.py +17 -0
  146. aeri/api/dataset_items/types/paginated_dataset_items.py +17 -0
  147. aeri/api/dataset_run_items/__init__.py +43 -0
  148. aeri/api/dataset_run_items/client.py +323 -0
  149. aeri/api/dataset_run_items/raw_client.py +547 -0
  150. aeri/api/dataset_run_items/types/__init__.py +44 -0
  151. aeri/api/dataset_run_items/types/create_dataset_run_item_request.py +51 -0
  152. aeri/api/dataset_run_items/types/paginated_dataset_run_items.py +17 -0
  153. aeri/api/datasets/__init__.py +55 -0
  154. aeri/api/datasets/client.py +661 -0
  155. aeri/api/datasets/raw_client.py +1368 -0
  156. aeri/api/datasets/types/__init__.py +53 -0
  157. aeri/api/datasets/types/create_dataset_request.py +31 -0
  158. aeri/api/datasets/types/delete_dataset_run_response.py +14 -0
  159. aeri/api/datasets/types/paginated_dataset_runs.py +17 -0
  160. aeri/api/datasets/types/paginated_datasets.py +17 -0
  161. aeri/api/health/__init__.py +44 -0
  162. aeri/api/health/client.py +112 -0
  163. aeri/api/health/errors/__init__.py +42 -0
  164. aeri/api/health/errors/service_unavailable_error.py +13 -0
  165. aeri/api/health/raw_client.py +227 -0
  166. aeri/api/health/types/__init__.py +40 -0
  167. aeri/api/health/types/health_response.py +30 -0
  168. aeri/api/ingestion/__init__.py +169 -0
  169. aeri/api/ingestion/client.py +221 -0
  170. aeri/api/ingestion/raw_client.py +293 -0
  171. aeri/api/ingestion/types/__init__.py +169 -0
  172. aeri/api/ingestion/types/base_event.py +27 -0
  173. aeri/api/ingestion/types/create_event_body.py +14 -0
  174. aeri/api/ingestion/types/create_event_event.py +15 -0
  175. aeri/api/ingestion/types/create_generation_body.py +40 -0
  176. aeri/api/ingestion/types/create_generation_event.py +15 -0
  177. aeri/api/ingestion/types/create_observation_event.py +15 -0
  178. aeri/api/ingestion/types/create_span_body.py +19 -0
  179. aeri/api/ingestion/types/create_span_event.py +15 -0
  180. aeri/api/ingestion/types/ingestion_error.py +17 -0
  181. aeri/api/ingestion/types/ingestion_event.py +155 -0
  182. aeri/api/ingestion/types/ingestion_response.py +17 -0
  183. aeri/api/ingestion/types/ingestion_success.py +15 -0
  184. aeri/api/ingestion/types/ingestion_usage.py +8 -0
  185. aeri/api/ingestion/types/observation_body.py +53 -0
  186. aeri/api/ingestion/types/observation_type.py +54 -0
  187. aeri/api/ingestion/types/open_ai_completion_usage_schema.py +26 -0
  188. aeri/api/ingestion/types/open_ai_response_usage_schema.py +24 -0
  189. aeri/api/ingestion/types/open_ai_usage.py +28 -0
  190. aeri/api/ingestion/types/optional_observation_body.py +36 -0
  191. aeri/api/ingestion/types/score_body.py +75 -0
  192. aeri/api/ingestion/types/score_event.py +15 -0
  193. aeri/api/ingestion/types/sdk_log_body.py +14 -0
  194. aeri/api/ingestion/types/sdk_log_event.py +15 -0
  195. aeri/api/ingestion/types/trace_body.py +36 -0
  196. aeri/api/ingestion/types/trace_event.py +15 -0
  197. aeri/api/ingestion/types/update_event_body.py +14 -0
  198. aeri/api/ingestion/types/update_generation_body.py +40 -0
  199. aeri/api/ingestion/types/update_generation_event.py +15 -0
  200. aeri/api/ingestion/types/update_observation_event.py +15 -0
  201. aeri/api/ingestion/types/update_span_body.py +19 -0
  202. aeri/api/ingestion/types/update_span_event.py +15 -0
  203. aeri/api/ingestion/types/usage_details.py +10 -0
  204. aeri/api/legacy/__init__.py +61 -0
  205. aeri/api/legacy/client.py +105 -0
  206. aeri/api/legacy/metrics_v1/__init__.py +40 -0
  207. aeri/api/legacy/metrics_v1/client.py +214 -0
  208. aeri/api/legacy/metrics_v1/raw_client.py +322 -0
  209. aeri/api/legacy/metrics_v1/types/__init__.py +40 -0
  210. aeri/api/legacy/metrics_v1/types/metrics_response.py +19 -0
  211. aeri/api/legacy/observations_v1/__init__.py +43 -0
  212. aeri/api/legacy/observations_v1/client.py +523 -0
  213. aeri/api/legacy/observations_v1/raw_client.py +759 -0
  214. aeri/api/legacy/observations_v1/types/__init__.py +44 -0
  215. aeri/api/legacy/observations_v1/types/observations.py +17 -0
  216. aeri/api/legacy/observations_v1/types/observations_views.py +17 -0
  217. aeri/api/legacy/raw_client.py +13 -0
  218. aeri/api/legacy/score_v1/__init__.py +43 -0
  219. aeri/api/legacy/score_v1/client.py +329 -0
  220. aeri/api/legacy/score_v1/raw_client.py +545 -0
  221. aeri/api/legacy/score_v1/types/__init__.py +44 -0
  222. aeri/api/legacy/score_v1/types/create_score_request.py +75 -0
  223. aeri/api/legacy/score_v1/types/create_score_response.py +17 -0
  224. aeri/api/llm_connections/__init__.py +55 -0
  225. aeri/api/llm_connections/client.py +311 -0
  226. aeri/api/llm_connections/raw_client.py +541 -0
  227. aeri/api/llm_connections/types/__init__.py +53 -0
  228. aeri/api/llm_connections/types/llm_adapter.py +38 -0
  229. aeri/api/llm_connections/types/llm_connection.py +77 -0
  230. aeri/api/llm_connections/types/paginated_llm_connections.py +17 -0
  231. aeri/api/llm_connections/types/upsert_llm_connection_request.py +69 -0
  232. aeri/api/media/__init__.py +58 -0
  233. aeri/api/media/client.py +427 -0
  234. aeri/api/media/raw_client.py +739 -0
  235. aeri/api/media/types/__init__.py +56 -0
  236. aeri/api/media/types/get_media_response.py +55 -0
  237. aeri/api/media/types/get_media_upload_url_request.py +51 -0
  238. aeri/api/media/types/get_media_upload_url_response.py +28 -0
  239. aeri/api/media/types/media_content_type.py +232 -0
  240. aeri/api/media/types/patch_media_body.py +43 -0
  241. aeri/api/metrics/__init__.py +40 -0
  242. aeri/api/metrics/client.py +422 -0
  243. aeri/api/metrics/raw_client.py +530 -0
  244. aeri/api/metrics/types/__init__.py +40 -0
  245. aeri/api/metrics/types/metrics_v2response.py +19 -0
  246. aeri/api/models/__init__.py +43 -0
  247. aeri/api/models/client.py +523 -0
  248. aeri/api/models/raw_client.py +993 -0
  249. aeri/api/models/types/__init__.py +44 -0
  250. aeri/api/models/types/create_model_request.py +103 -0
  251. aeri/api/models/types/paginated_models.py +17 -0
  252. aeri/api/observations/__init__.py +43 -0
  253. aeri/api/observations/client.py +522 -0
  254. aeri/api/observations/raw_client.py +641 -0
  255. aeri/api/observations/types/__init__.py +44 -0
  256. aeri/api/observations/types/observations_v2meta.py +21 -0
  257. aeri/api/observations/types/observations_v2response.py +28 -0
  258. aeri/api/opentelemetry/__init__.py +67 -0
  259. aeri/api/opentelemetry/client.py +276 -0
  260. aeri/api/opentelemetry/raw_client.py +291 -0
  261. aeri/api/opentelemetry/types/__init__.py +65 -0
  262. aeri/api/opentelemetry/types/otel_attribute.py +27 -0
  263. aeri/api/opentelemetry/types/otel_attribute_value.py +46 -0
  264. aeri/api/opentelemetry/types/otel_resource.py +24 -0
  265. aeri/api/opentelemetry/types/otel_resource_span.py +32 -0
  266. aeri/api/opentelemetry/types/otel_scope.py +34 -0
  267. aeri/api/opentelemetry/types/otel_scope_span.py +28 -0
  268. aeri/api/opentelemetry/types/otel_span.py +76 -0
  269. aeri/api/opentelemetry/types/otel_trace_response.py +16 -0
  270. aeri/api/organizations/__init__.py +73 -0
  271. aeri/api/organizations/client.py +756 -0
  272. aeri/api/organizations/raw_client.py +1707 -0
  273. aeri/api/organizations/types/__init__.py +71 -0
  274. aeri/api/organizations/types/delete_membership_request.py +16 -0
  275. aeri/api/organizations/types/membership_deletion_response.py +17 -0
  276. aeri/api/organizations/types/membership_request.py +18 -0
  277. aeri/api/organizations/types/membership_response.py +20 -0
  278. aeri/api/organizations/types/membership_role.py +30 -0
  279. aeri/api/organizations/types/memberships_response.py +15 -0
  280. aeri/api/organizations/types/organization_api_key.py +31 -0
  281. aeri/api/organizations/types/organization_api_keys_response.py +19 -0
  282. aeri/api/organizations/types/organization_project.py +25 -0
  283. aeri/api/organizations/types/organization_projects_response.py +15 -0
  284. aeri/api/projects/__init__.py +67 -0
  285. aeri/api/projects/client.py +760 -0
  286. aeri/api/projects/raw_client.py +1577 -0
  287. aeri/api/projects/types/__init__.py +65 -0
  288. aeri/api/projects/types/api_key_deletion_response.py +18 -0
  289. aeri/api/projects/types/api_key_list.py +23 -0
  290. aeri/api/projects/types/api_key_response.py +30 -0
  291. aeri/api/projects/types/api_key_summary.py +35 -0
  292. aeri/api/projects/types/organization.py +22 -0
  293. aeri/api/projects/types/project.py +34 -0
  294. aeri/api/projects/types/project_deletion_response.py +15 -0
  295. aeri/api/projects/types/projects.py +15 -0
  296. aeri/api/prompt_version/__init__.py +4 -0
  297. aeri/api/prompt_version/client.py +157 -0
  298. aeri/api/prompt_version/raw_client.py +264 -0
  299. aeri/api/prompts/__init__.py +100 -0
  300. aeri/api/prompts/client.py +550 -0
  301. aeri/api/prompts/raw_client.py +987 -0
  302. aeri/api/prompts/types/__init__.py +96 -0
  303. aeri/api/prompts/types/base_prompt.py +42 -0
  304. aeri/api/prompts/types/chat_message.py +17 -0
  305. aeri/api/prompts/types/chat_message_type.py +15 -0
  306. aeri/api/prompts/types/chat_message_with_placeholders.py +8 -0
  307. aeri/api/prompts/types/chat_prompt.py +15 -0
  308. aeri/api/prompts/types/create_chat_prompt_request.py +37 -0
  309. aeri/api/prompts/types/create_chat_prompt_type.py +15 -0
  310. aeri/api/prompts/types/create_prompt_request.py +8 -0
  311. aeri/api/prompts/types/create_text_prompt_request.py +36 -0
  312. aeri/api/prompts/types/create_text_prompt_type.py +15 -0
  313. aeri/api/prompts/types/placeholder_message.py +16 -0
  314. aeri/api/prompts/types/placeholder_message_type.py +15 -0
  315. aeri/api/prompts/types/prompt.py +58 -0
  316. aeri/api/prompts/types/prompt_meta.py +35 -0
  317. aeri/api/prompts/types/prompt_meta_list_response.py +17 -0
  318. aeri/api/prompts/types/prompt_type.py +20 -0
  319. aeri/api/prompts/types/text_prompt.py +14 -0
  320. aeri/api/scim/__init__.py +94 -0
  321. aeri/api/scim/client.py +686 -0
  322. aeri/api/scim/raw_client.py +1528 -0
  323. aeri/api/scim/types/__init__.py +92 -0
  324. aeri/api/scim/types/authentication_scheme.py +20 -0
  325. aeri/api/scim/types/bulk_config.py +22 -0
  326. aeri/api/scim/types/empty_response.py +16 -0
  327. aeri/api/scim/types/filter_config.py +17 -0
  328. aeri/api/scim/types/resource_meta.py +17 -0
  329. aeri/api/scim/types/resource_type.py +27 -0
  330. aeri/api/scim/types/resource_types_response.py +21 -0
  331. aeri/api/scim/types/schema_extension.py +17 -0
  332. aeri/api/scim/types/schema_resource.py +19 -0
  333. aeri/api/scim/types/schemas_response.py +21 -0
  334. aeri/api/scim/types/scim_email.py +16 -0
  335. aeri/api/scim/types/scim_feature_support.py +14 -0
  336. aeri/api/scim/types/scim_name.py +14 -0
  337. aeri/api/scim/types/scim_user.py +24 -0
  338. aeri/api/scim/types/scim_users_list_response.py +25 -0
  339. aeri/api/scim/types/service_provider_config.py +36 -0
  340. aeri/api/scim/types/user_meta.py +20 -0
  341. aeri/api/score_configs/__init__.py +44 -0
  342. aeri/api/score_configs/client.py +526 -0
  343. aeri/api/score_configs/raw_client.py +1012 -0
  344. aeri/api/score_configs/types/__init__.py +46 -0
  345. aeri/api/score_configs/types/create_score_config_request.py +46 -0
  346. aeri/api/score_configs/types/score_configs.py +17 -0
  347. aeri/api/score_configs/types/update_score_config_request.py +53 -0
  348. aeri/api/scores/__init__.py +76 -0
  349. aeri/api/scores/client.py +420 -0
  350. aeri/api/scores/raw_client.py +656 -0
  351. aeri/api/scores/types/__init__.py +76 -0
  352. aeri/api/scores/types/get_scores_response.py +17 -0
  353. aeri/api/scores/types/get_scores_response_data.py +211 -0
  354. aeri/api/scores/types/get_scores_response_data_boolean.py +15 -0
  355. aeri/api/scores/types/get_scores_response_data_categorical.py +15 -0
  356. aeri/api/scores/types/get_scores_response_data_correction.py +15 -0
  357. aeri/api/scores/types/get_scores_response_data_numeric.py +15 -0
  358. aeri/api/scores/types/get_scores_response_trace_data.py +38 -0
  359. aeri/api/sessions/__init__.py +40 -0
  360. aeri/api/sessions/client.py +262 -0
  361. aeri/api/sessions/raw_client.py +500 -0
  362. aeri/api/sessions/types/__init__.py +40 -0
  363. aeri/api/sessions/types/paginated_sessions.py +17 -0
  364. aeri/api/trace/__init__.py +44 -0
  365. aeri/api/trace/client.py +728 -0
  366. aeri/api/trace/raw_client.py +1208 -0
  367. aeri/api/trace/types/__init__.py +46 -0
  368. aeri/api/trace/types/delete_trace_response.py +14 -0
  369. aeri/api/trace/types/sort.py +14 -0
  370. aeri/api/trace/types/traces.py +17 -0
  371. aeri/api/utils/__init__.py +44 -0
  372. aeri/api/utils/pagination/__init__.py +40 -0
  373. aeri/api/utils/pagination/types/__init__.py +40 -0
  374. aeri/api/utils/pagination/types/meta_response.py +38 -0
  375. aeri/batch_evaluation.py +1643 -0
  376. aeri/experiment.py +1044 -0
  377. aeri/langchain/CallbackHandler.py +1377 -0
  378. aeri/langchain/__init__.py +5 -0
  379. aeri/langchain/utils.py +212 -0
  380. aeri/logger.py +28 -0
  381. aeri/media.py +352 -0
  382. aeri/model.py +477 -0
  383. aeri/openai.py +1124 -0
  384. aeri/py.typed +0 -0
  385. aeri/span_filter.py +17 -0
  386. aeri/types.py +79 -0
  387. aeri/version.py +3 -0
  388. aeri_python-4.0.0.dist-info/METADATA +51 -0
  389. aeri_python-4.0.0.dist-info/RECORD +391 -0
  390. aeri_python-4.0.0.dist-info/WHEEL +4 -0
  391. aeri_python-4.0.0.dist-info/licenses/LICENSE +21 -0
aeri/api/client.py ADDED
@@ -0,0 +1,679 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import typing
6
+
7
+ import httpx
8
+ from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+
10
+ if typing.TYPE_CHECKING:
11
+ from .annotation_queues.client import (
12
+ AnnotationQueuesClient,
13
+ AsyncAnnotationQueuesClient,
14
+ )
15
+ from .blob_storage_integrations.client import (
16
+ AsyncBlobStorageIntegrationsClient,
17
+ BlobStorageIntegrationsClient,
18
+ )
19
+ from .comments.client import AsyncCommentsClient, CommentsClient
20
+ from .dataset_items.client import AsyncDatasetItemsClient, DatasetItemsClient
21
+ from .dataset_run_items.client import (
22
+ AsyncDatasetRunItemsClient,
23
+ DatasetRunItemsClient,
24
+ )
25
+ from .datasets.client import AsyncDatasetsClient, DatasetsClient
26
+ from .health.client import AsyncHealthClient, HealthClient
27
+ from .ingestion.client import AsyncIngestionClient, IngestionClient
28
+ from .legacy.client import AsyncLegacyClient, LegacyClient
29
+ from .llm_connections.client import AsyncLlmConnectionsClient, LlmConnectionsClient
30
+ from .media.client import AsyncMediaClient, MediaClient
31
+ from .metrics.client import AsyncMetricsClient, MetricsClient
32
+ from .models.client import AsyncModelsClient, ModelsClient
33
+ from .observations.client import AsyncObservationsClient, ObservationsClient
34
+ from .opentelemetry.client import AsyncOpentelemetryClient, OpentelemetryClient
35
+ from .organizations.client import AsyncOrganizationsClient, OrganizationsClient
36
+ from .projects.client import AsyncProjectsClient, ProjectsClient
37
+ from .prompt_version.client import AsyncPromptVersionClient, PromptVersionClient
38
+ from .prompts.client import AsyncPromptsClient, PromptsClient
39
+ from .scim.client import AsyncScimClient, ScimClient
40
+ from .score_configs.client import AsyncScoreConfigsClient, ScoreConfigsClient
41
+ from .scores.client import AsyncScoresClient, ScoresClient
42
+ from .sessions.client import AsyncSessionsClient, SessionsClient
43
+ from .trace.client import AsyncTraceClient, TraceClient
44
+
45
+
46
+ class AeriAPI:
47
+ """
48
+ Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions.
49
+
50
+ Parameters
51
+ ----------
52
+ base_url : str
53
+ The base url to use for requests from the client.
54
+
55
+ x_aeri_sdk_name : typing.Optional[str]
56
+ x_aeri_sdk_version : typing.Optional[str]
57
+ x_aeri_public_key : typing.Optional[str]
58
+ username : typing.Optional[typing.Union[str, typing.Callable[[], str]]]
59
+ password : typing.Optional[typing.Union[str, typing.Callable[[], str]]]
60
+ headers : typing.Optional[typing.Dict[str, str]]
61
+ Additional headers to send with every request.
62
+
63
+ timeout : typing.Optional[float]
64
+ The timeout to be used, in seconds, for requests. By default the timeout is 60 seconds, unless a custom httpx client is used, in which case this default is not enforced.
65
+
66
+ follow_redirects : typing.Optional[bool]
67
+ Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in.
68
+
69
+ httpx_client : typing.Optional[httpx.Client]
70
+ The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
71
+
72
+ Examples
73
+ --------
74
+ from aeri import AeriAPI
75
+
76
+ client = AeriAPI(
77
+ x_aeri_sdk_name="YOUR_X_AERI_SDK_NAME",
78
+ x_aeri_sdk_version="YOUR_X_AERI_SDK_VERSION",
79
+ x_aeri_public_key="YOUR_X_AERI_PUBLIC_KEY",
80
+ username="YOUR_USERNAME",
81
+ password="YOUR_PASSWORD",
82
+ base_url="https://yourhost.com/path/to/api",
83
+ )
84
+ """
85
+
86
+ def __init__(
87
+ self,
88
+ *,
89
+ base_url: str,
90
+ x_aeri_sdk_name: typing.Optional[str] = None,
91
+ x_aeri_sdk_version: typing.Optional[str] = None,
92
+ x_aeri_public_key: typing.Optional[str] = None,
93
+ username: typing.Optional[typing.Union[str, typing.Callable[[], str]]] = None,
94
+ password: typing.Optional[typing.Union[str, typing.Callable[[], str]]] = None,
95
+ headers: typing.Optional[typing.Dict[str, str]] = None,
96
+ timeout: typing.Optional[float] = None,
97
+ follow_redirects: typing.Optional[bool] = True,
98
+ httpx_client: typing.Optional[httpx.Client] = None,
99
+ ):
100
+ _defaulted_timeout = (
101
+ timeout
102
+ if timeout is not None
103
+ else 60
104
+ if httpx_client is None
105
+ else httpx_client.timeout.read
106
+ )
107
+ self._client_wrapper = SyncClientWrapper(
108
+ base_url=base_url,
109
+ x_aeri_sdk_name=x_aeri_sdk_name,
110
+ x_aeri_sdk_version=x_aeri_sdk_version,
111
+ x_aeri_public_key=x_aeri_public_key,
112
+ username=username,
113
+ password=password,
114
+ headers=headers,
115
+ httpx_client=httpx_client
116
+ if httpx_client is not None
117
+ else httpx.Client(
118
+ timeout=_defaulted_timeout, follow_redirects=follow_redirects
119
+ )
120
+ if follow_redirects is not None
121
+ else httpx.Client(timeout=_defaulted_timeout),
122
+ timeout=_defaulted_timeout,
123
+ )
124
+ self._annotation_queues: typing.Optional[AnnotationQueuesClient] = None
125
+ self._blob_storage_integrations: typing.Optional[
126
+ BlobStorageIntegrationsClient
127
+ ] = None
128
+ self._comments: typing.Optional[CommentsClient] = None
129
+ self._dataset_items: typing.Optional[DatasetItemsClient] = None
130
+ self._dataset_run_items: typing.Optional[DatasetRunItemsClient] = None
131
+ self._datasets: typing.Optional[DatasetsClient] = None
132
+ self._health: typing.Optional[HealthClient] = None
133
+ self._ingestion: typing.Optional[IngestionClient] = None
134
+ self._legacy: typing.Optional[LegacyClient] = None
135
+ self._llm_connections: typing.Optional[LlmConnectionsClient] = None
136
+ self._media: typing.Optional[MediaClient] = None
137
+ self._metrics: typing.Optional[MetricsClient] = None
138
+ self._models: typing.Optional[ModelsClient] = None
139
+ self._observations: typing.Optional[ObservationsClient] = None
140
+ self._opentelemetry: typing.Optional[OpentelemetryClient] = None
141
+ self._organizations: typing.Optional[OrganizationsClient] = None
142
+ self._projects: typing.Optional[ProjectsClient] = None
143
+ self._prompt_version: typing.Optional[PromptVersionClient] = None
144
+ self._prompts: typing.Optional[PromptsClient] = None
145
+ self._scim: typing.Optional[ScimClient] = None
146
+ self._score_configs: typing.Optional[ScoreConfigsClient] = None
147
+ self._scores: typing.Optional[ScoresClient] = None
148
+ self._sessions: typing.Optional[SessionsClient] = None
149
+ self._trace: typing.Optional[TraceClient] = None
150
+
151
+ @property
152
+ def annotation_queues(self):
153
+ if self._annotation_queues is None:
154
+ from .annotation_queues.client import AnnotationQueuesClient # noqa: E402
155
+
156
+ self._annotation_queues = AnnotationQueuesClient(
157
+ client_wrapper=self._client_wrapper
158
+ )
159
+ return self._annotation_queues
160
+
161
+ @property
162
+ def blob_storage_integrations(self):
163
+ if self._blob_storage_integrations is None:
164
+ from .blob_storage_integrations.client import BlobStorageIntegrationsClient # noqa: E402
165
+
166
+ self._blob_storage_integrations = BlobStorageIntegrationsClient(
167
+ client_wrapper=self._client_wrapper
168
+ )
169
+ return self._blob_storage_integrations
170
+
171
+ @property
172
+ def comments(self):
173
+ if self._comments is None:
174
+ from .comments.client import CommentsClient # noqa: E402
175
+
176
+ self._comments = CommentsClient(client_wrapper=self._client_wrapper)
177
+ return self._comments
178
+
179
+ @property
180
+ def dataset_items(self):
181
+ if self._dataset_items is None:
182
+ from .dataset_items.client import DatasetItemsClient # noqa: E402
183
+
184
+ self._dataset_items = DatasetItemsClient(
185
+ client_wrapper=self._client_wrapper
186
+ )
187
+ return self._dataset_items
188
+
189
+ @property
190
+ def dataset_run_items(self):
191
+ if self._dataset_run_items is None:
192
+ from .dataset_run_items.client import DatasetRunItemsClient # noqa: E402
193
+
194
+ self._dataset_run_items = DatasetRunItemsClient(
195
+ client_wrapper=self._client_wrapper
196
+ )
197
+ return self._dataset_run_items
198
+
199
+ @property
200
+ def datasets(self):
201
+ if self._datasets is None:
202
+ from .datasets.client import DatasetsClient # noqa: E402
203
+
204
+ self._datasets = DatasetsClient(client_wrapper=self._client_wrapper)
205
+ return self._datasets
206
+
207
+ @property
208
+ def health(self):
209
+ if self._health is None:
210
+ from .health.client import HealthClient # noqa: E402
211
+
212
+ self._health = HealthClient(client_wrapper=self._client_wrapper)
213
+ return self._health
214
+
215
+ @property
216
+ def ingestion(self):
217
+ if self._ingestion is None:
218
+ from .ingestion.client import IngestionClient # noqa: E402
219
+
220
+ self._ingestion = IngestionClient(client_wrapper=self._client_wrapper)
221
+ return self._ingestion
222
+
223
+ @property
224
+ def legacy(self):
225
+ if self._legacy is None:
226
+ from .legacy.client import LegacyClient # noqa: E402
227
+
228
+ self._legacy = LegacyClient(client_wrapper=self._client_wrapper)
229
+ return self._legacy
230
+
231
+ @property
232
+ def llm_connections(self):
233
+ if self._llm_connections is None:
234
+ from .llm_connections.client import LlmConnectionsClient # noqa: E402
235
+
236
+ self._llm_connections = LlmConnectionsClient(
237
+ client_wrapper=self._client_wrapper
238
+ )
239
+ return self._llm_connections
240
+
241
+ @property
242
+ def media(self):
243
+ if self._media is None:
244
+ from .media.client import MediaClient # noqa: E402
245
+
246
+ self._media = MediaClient(client_wrapper=self._client_wrapper)
247
+ return self._media
248
+
249
+ @property
250
+ def metrics(self):
251
+ if self._metrics is None:
252
+ from .metrics.client import MetricsClient # noqa: E402
253
+
254
+ self._metrics = MetricsClient(client_wrapper=self._client_wrapper)
255
+ return self._metrics
256
+
257
+ @property
258
+ def models(self):
259
+ if self._models is None:
260
+ from .models.client import ModelsClient # noqa: E402
261
+
262
+ self._models = ModelsClient(client_wrapper=self._client_wrapper)
263
+ return self._models
264
+
265
+ @property
266
+ def observations(self):
267
+ if self._observations is None:
268
+ from .observations.client import ObservationsClient # noqa: E402
269
+
270
+ self._observations = ObservationsClient(client_wrapper=self._client_wrapper)
271
+ return self._observations
272
+
273
+ @property
274
+ def opentelemetry(self):
275
+ if self._opentelemetry is None:
276
+ from .opentelemetry.client import OpentelemetryClient # noqa: E402
277
+
278
+ self._opentelemetry = OpentelemetryClient(
279
+ client_wrapper=self._client_wrapper
280
+ )
281
+ return self._opentelemetry
282
+
283
+ @property
284
+ def organizations(self):
285
+ if self._organizations is None:
286
+ from .organizations.client import OrganizationsClient # noqa: E402
287
+
288
+ self._organizations = OrganizationsClient(
289
+ client_wrapper=self._client_wrapper
290
+ )
291
+ return self._organizations
292
+
293
+ @property
294
+ def projects(self):
295
+ if self._projects is None:
296
+ from .projects.client import ProjectsClient # noqa: E402
297
+
298
+ self._projects = ProjectsClient(client_wrapper=self._client_wrapper)
299
+ return self._projects
300
+
301
+ @property
302
+ def prompt_version(self):
303
+ if self._prompt_version is None:
304
+ from .prompt_version.client import PromptVersionClient # noqa: E402
305
+
306
+ self._prompt_version = PromptVersionClient(
307
+ client_wrapper=self._client_wrapper
308
+ )
309
+ return self._prompt_version
310
+
311
+ @property
312
+ def prompts(self):
313
+ if self._prompts is None:
314
+ from .prompts.client import PromptsClient # noqa: E402
315
+
316
+ self._prompts = PromptsClient(client_wrapper=self._client_wrapper)
317
+ return self._prompts
318
+
319
+ @property
320
+ def scim(self):
321
+ if self._scim is None:
322
+ from .scim.client import ScimClient # noqa: E402
323
+
324
+ self._scim = ScimClient(client_wrapper=self._client_wrapper)
325
+ return self._scim
326
+
327
+ @property
328
+ def score_configs(self):
329
+ if self._score_configs is None:
330
+ from .score_configs.client import ScoreConfigsClient # noqa: E402
331
+
332
+ self._score_configs = ScoreConfigsClient(
333
+ client_wrapper=self._client_wrapper
334
+ )
335
+ return self._score_configs
336
+
337
+ @property
338
+ def scores(self):
339
+ if self._scores is None:
340
+ from .scores.client import ScoresClient # noqa: E402
341
+
342
+ self._scores = ScoresClient(client_wrapper=self._client_wrapper)
343
+ return self._scores
344
+
345
+ @property
346
+ def sessions(self):
347
+ if self._sessions is None:
348
+ from .sessions.client import SessionsClient # noqa: E402
349
+
350
+ self._sessions = SessionsClient(client_wrapper=self._client_wrapper)
351
+ return self._sessions
352
+
353
+ @property
354
+ def trace(self):
355
+ if self._trace is None:
356
+ from .trace.client import TraceClient # noqa: E402
357
+
358
+ self._trace = TraceClient(client_wrapper=self._client_wrapper)
359
+ return self._trace
360
+
361
+
362
+ class AsyncAeriAPI:
363
+ """
364
+ Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions.
365
+
366
+ Parameters
367
+ ----------
368
+ base_url : str
369
+ The base url to use for requests from the client.
370
+
371
+ x_aeri_sdk_name : typing.Optional[str]
372
+ x_aeri_sdk_version : typing.Optional[str]
373
+ x_aeri_public_key : typing.Optional[str]
374
+ username : typing.Optional[typing.Union[str, typing.Callable[[], str]]]
375
+ password : typing.Optional[typing.Union[str, typing.Callable[[], str]]]
376
+ headers : typing.Optional[typing.Dict[str, str]]
377
+ Additional headers to send with every request.
378
+
379
+ timeout : typing.Optional[float]
380
+ The timeout to be used, in seconds, for requests. By default the timeout is 60 seconds, unless a custom httpx client is used, in which case this default is not enforced.
381
+
382
+ follow_redirects : typing.Optional[bool]
383
+ Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in.
384
+
385
+ httpx_client : typing.Optional[httpx.AsyncClient]
386
+ The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
387
+
388
+ Examples
389
+ --------
390
+ from aeri import AsyncAeriAPI
391
+
392
+ client = AsyncAeriAPI(
393
+ x_aeri_sdk_name="YOUR_X_AERI_SDK_NAME",
394
+ x_aeri_sdk_version="YOUR_X_AERI_SDK_VERSION",
395
+ x_aeri_public_key="YOUR_X_AERI_PUBLIC_KEY",
396
+ username="YOUR_USERNAME",
397
+ password="YOUR_PASSWORD",
398
+ base_url="https://yourhost.com/path/to/api",
399
+ )
400
+ """
401
+
402
+ def __init__(
403
+ self,
404
+ *,
405
+ base_url: str,
406
+ x_aeri_sdk_name: typing.Optional[str] = None,
407
+ x_aeri_sdk_version: typing.Optional[str] = None,
408
+ x_aeri_public_key: typing.Optional[str] = None,
409
+ username: typing.Optional[typing.Union[str, typing.Callable[[], str]]] = None,
410
+ password: typing.Optional[typing.Union[str, typing.Callable[[], str]]] = None,
411
+ headers: typing.Optional[typing.Dict[str, str]] = None,
412
+ timeout: typing.Optional[float] = None,
413
+ follow_redirects: typing.Optional[bool] = True,
414
+ httpx_client: typing.Optional[httpx.AsyncClient] = None,
415
+ ):
416
+ _defaulted_timeout = (
417
+ timeout
418
+ if timeout is not None
419
+ else 60
420
+ if httpx_client is None
421
+ else httpx_client.timeout.read
422
+ )
423
+ self._client_wrapper = AsyncClientWrapper(
424
+ base_url=base_url,
425
+ x_aeri_sdk_name=x_aeri_sdk_name,
426
+ x_aeri_sdk_version=x_aeri_sdk_version,
427
+ x_aeri_public_key=x_aeri_public_key,
428
+ username=username,
429
+ password=password,
430
+ headers=headers,
431
+ httpx_client=httpx_client
432
+ if httpx_client is not None
433
+ else httpx.AsyncClient(
434
+ timeout=_defaulted_timeout, follow_redirects=follow_redirects
435
+ )
436
+ if follow_redirects is not None
437
+ else httpx.AsyncClient(timeout=_defaulted_timeout),
438
+ timeout=_defaulted_timeout,
439
+ )
440
+ self._annotation_queues: typing.Optional[AsyncAnnotationQueuesClient] = None
441
+ self._blob_storage_integrations: typing.Optional[
442
+ AsyncBlobStorageIntegrationsClient
443
+ ] = None
444
+ self._comments: typing.Optional[AsyncCommentsClient] = None
445
+ self._dataset_items: typing.Optional[AsyncDatasetItemsClient] = None
446
+ self._dataset_run_items: typing.Optional[AsyncDatasetRunItemsClient] = None
447
+ self._datasets: typing.Optional[AsyncDatasetsClient] = None
448
+ self._health: typing.Optional[AsyncHealthClient] = None
449
+ self._ingestion: typing.Optional[AsyncIngestionClient] = None
450
+ self._legacy: typing.Optional[AsyncLegacyClient] = None
451
+ self._llm_connections: typing.Optional[AsyncLlmConnectionsClient] = None
452
+ self._media: typing.Optional[AsyncMediaClient] = None
453
+ self._metrics: typing.Optional[AsyncMetricsClient] = None
454
+ self._models: typing.Optional[AsyncModelsClient] = None
455
+ self._observations: typing.Optional[AsyncObservationsClient] = None
456
+ self._opentelemetry: typing.Optional[AsyncOpentelemetryClient] = None
457
+ self._organizations: typing.Optional[AsyncOrganizationsClient] = None
458
+ self._projects: typing.Optional[AsyncProjectsClient] = None
459
+ self._prompt_version: typing.Optional[AsyncPromptVersionClient] = None
460
+ self._prompts: typing.Optional[AsyncPromptsClient] = None
461
+ self._scim: typing.Optional[AsyncScimClient] = None
462
+ self._score_configs: typing.Optional[AsyncScoreConfigsClient] = None
463
+ self._scores: typing.Optional[AsyncScoresClient] = None
464
+ self._sessions: typing.Optional[AsyncSessionsClient] = None
465
+ self._trace: typing.Optional[AsyncTraceClient] = None
466
+
467
+ @property
468
+ def annotation_queues(self):
469
+ if self._annotation_queues is None:
470
+ from .annotation_queues.client import AsyncAnnotationQueuesClient # noqa: E402
471
+
472
+ self._annotation_queues = AsyncAnnotationQueuesClient(
473
+ client_wrapper=self._client_wrapper
474
+ )
475
+ return self._annotation_queues
476
+
477
+ @property
478
+ def blob_storage_integrations(self):
479
+ if self._blob_storage_integrations is None:
480
+ from .blob_storage_integrations.client import (
481
+ AsyncBlobStorageIntegrationsClient,
482
+ ) # noqa: E402
483
+
484
+ self._blob_storage_integrations = AsyncBlobStorageIntegrationsClient(
485
+ client_wrapper=self._client_wrapper
486
+ )
487
+ return self._blob_storage_integrations
488
+
489
+ @property
490
+ def comments(self):
491
+ if self._comments is None:
492
+ from .comments.client import AsyncCommentsClient # noqa: E402
493
+
494
+ self._comments = AsyncCommentsClient(client_wrapper=self._client_wrapper)
495
+ return self._comments
496
+
497
+ @property
498
+ def dataset_items(self):
499
+ if self._dataset_items is None:
500
+ from .dataset_items.client import AsyncDatasetItemsClient # noqa: E402
501
+
502
+ self._dataset_items = AsyncDatasetItemsClient(
503
+ client_wrapper=self._client_wrapper
504
+ )
505
+ return self._dataset_items
506
+
507
+ @property
508
+ def dataset_run_items(self):
509
+ if self._dataset_run_items is None:
510
+ from .dataset_run_items.client import AsyncDatasetRunItemsClient # noqa: E402
511
+
512
+ self._dataset_run_items = AsyncDatasetRunItemsClient(
513
+ client_wrapper=self._client_wrapper
514
+ )
515
+ return self._dataset_run_items
516
+
517
+ @property
518
+ def datasets(self):
519
+ if self._datasets is None:
520
+ from .datasets.client import AsyncDatasetsClient # noqa: E402
521
+
522
+ self._datasets = AsyncDatasetsClient(client_wrapper=self._client_wrapper)
523
+ return self._datasets
524
+
525
+ @property
526
+ def health(self):
527
+ if self._health is None:
528
+ from .health.client import AsyncHealthClient # noqa: E402
529
+
530
+ self._health = AsyncHealthClient(client_wrapper=self._client_wrapper)
531
+ return self._health
532
+
533
+ @property
534
+ def ingestion(self):
535
+ if self._ingestion is None:
536
+ from .ingestion.client import AsyncIngestionClient # noqa: E402
537
+
538
+ self._ingestion = AsyncIngestionClient(client_wrapper=self._client_wrapper)
539
+ return self._ingestion
540
+
541
+ @property
542
+ def legacy(self):
543
+ if self._legacy is None:
544
+ from .legacy.client import AsyncLegacyClient # noqa: E402
545
+
546
+ self._legacy = AsyncLegacyClient(client_wrapper=self._client_wrapper)
547
+ return self._legacy
548
+
549
+ @property
550
+ def llm_connections(self):
551
+ if self._llm_connections is None:
552
+ from .llm_connections.client import AsyncLlmConnectionsClient # noqa: E402
553
+
554
+ self._llm_connections = AsyncLlmConnectionsClient(
555
+ client_wrapper=self._client_wrapper
556
+ )
557
+ return self._llm_connections
558
+
559
+ @property
560
+ def media(self):
561
+ if self._media is None:
562
+ from .media.client import AsyncMediaClient # noqa: E402
563
+
564
+ self._media = AsyncMediaClient(client_wrapper=self._client_wrapper)
565
+ return self._media
566
+
567
+ @property
568
+ def metrics(self):
569
+ if self._metrics is None:
570
+ from .metrics.client import AsyncMetricsClient # noqa: E402
571
+
572
+ self._metrics = AsyncMetricsClient(client_wrapper=self._client_wrapper)
573
+ return self._metrics
574
+
575
+ @property
576
+ def models(self):
577
+ if self._models is None:
578
+ from .models.client import AsyncModelsClient # noqa: E402
579
+
580
+ self._models = AsyncModelsClient(client_wrapper=self._client_wrapper)
581
+ return self._models
582
+
583
+ @property
584
+ def observations(self):
585
+ if self._observations is None:
586
+ from .observations.client import AsyncObservationsClient # noqa: E402
587
+
588
+ self._observations = AsyncObservationsClient(
589
+ client_wrapper=self._client_wrapper
590
+ )
591
+ return self._observations
592
+
593
+ @property
594
+ def opentelemetry(self):
595
+ if self._opentelemetry is None:
596
+ from .opentelemetry.client import AsyncOpentelemetryClient # noqa: E402
597
+
598
+ self._opentelemetry = AsyncOpentelemetryClient(
599
+ client_wrapper=self._client_wrapper
600
+ )
601
+ return self._opentelemetry
602
+
603
+ @property
604
+ def organizations(self):
605
+ if self._organizations is None:
606
+ from .organizations.client import AsyncOrganizationsClient # noqa: E402
607
+
608
+ self._organizations = AsyncOrganizationsClient(
609
+ client_wrapper=self._client_wrapper
610
+ )
611
+ return self._organizations
612
+
613
+ @property
614
+ def projects(self):
615
+ if self._projects is None:
616
+ from .projects.client import AsyncProjectsClient # noqa: E402
617
+
618
+ self._projects = AsyncProjectsClient(client_wrapper=self._client_wrapper)
619
+ return self._projects
620
+
621
+ @property
622
+ def prompt_version(self):
623
+ if self._prompt_version is None:
624
+ from .prompt_version.client import AsyncPromptVersionClient # noqa: E402
625
+
626
+ self._prompt_version = AsyncPromptVersionClient(
627
+ client_wrapper=self._client_wrapper
628
+ )
629
+ return self._prompt_version
630
+
631
+ @property
632
+ def prompts(self):
633
+ if self._prompts is None:
634
+ from .prompts.client import AsyncPromptsClient # noqa: E402
635
+
636
+ self._prompts = AsyncPromptsClient(client_wrapper=self._client_wrapper)
637
+ return self._prompts
638
+
639
+ @property
640
+ def scim(self):
641
+ if self._scim is None:
642
+ from .scim.client import AsyncScimClient # noqa: E402
643
+
644
+ self._scim = AsyncScimClient(client_wrapper=self._client_wrapper)
645
+ return self._scim
646
+
647
+ @property
648
+ def score_configs(self):
649
+ if self._score_configs is None:
650
+ from .score_configs.client import AsyncScoreConfigsClient # noqa: E402
651
+
652
+ self._score_configs = AsyncScoreConfigsClient(
653
+ client_wrapper=self._client_wrapper
654
+ )
655
+ return self._score_configs
656
+
657
+ @property
658
+ def scores(self):
659
+ if self._scores is None:
660
+ from .scores.client import AsyncScoresClient # noqa: E402
661
+
662
+ self._scores = AsyncScoresClient(client_wrapper=self._client_wrapper)
663
+ return self._scores
664
+
665
+ @property
666
+ def sessions(self):
667
+ if self._sessions is None:
668
+ from .sessions.client import AsyncSessionsClient # noqa: E402
669
+
670
+ self._sessions = AsyncSessionsClient(client_wrapper=self._client_wrapper)
671
+ return self._sessions
672
+
673
+ @property
674
+ def trace(self):
675
+ if self._trace is None:
676
+ from .trace.client import AsyncTraceClient # noqa: E402
677
+
678
+ self._trace = AsyncTraceClient(client_wrapper=self._client_wrapper)
679
+ return self._trace