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
@@ -0,0 +1,523 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ from ...commons.types.observation_level import ObservationLevel
7
+ from ...commons.types.observations_view import ObservationsView
8
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from ...core.request_options import RequestOptions
10
+ from .raw_client import AsyncRawObservationsV1Client, RawObservationsV1Client
11
+ from .types.observations_views import ObservationsViews
12
+
13
+
14
+ class ObservationsV1Client:
15
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
16
+ self._raw_client = RawObservationsV1Client(client_wrapper=client_wrapper)
17
+
18
+ @property
19
+ def with_raw_response(self) -> RawObservationsV1Client:
20
+ """
21
+ Retrieves a raw implementation of this client that returns raw responses.
22
+
23
+ Returns
24
+ -------
25
+ RawObservationsV1Client
26
+ """
27
+ return self._raw_client
28
+
29
+ def get(
30
+ self,
31
+ observation_id: str,
32
+ *,
33
+ request_options: typing.Optional[RequestOptions] = None,
34
+ ) -> ObservationsView:
35
+ """
36
+ Get a observation
37
+
38
+ Parameters
39
+ ----------
40
+ observation_id : str
41
+ The unique aeri identifier of an observation, can be an event, span or generation
42
+
43
+ request_options : typing.Optional[RequestOptions]
44
+ Request-specific configuration.
45
+
46
+ Returns
47
+ -------
48
+ ObservationsView
49
+
50
+ Examples
51
+ --------
52
+ from aeri import AeriAPI
53
+
54
+ client = AeriAPI(
55
+ x_aeri_sdk_name="YOUR_X_AERI_SDK_NAME",
56
+ x_aeri_sdk_version="YOUR_X_AERI_SDK_VERSION",
57
+ x_aeri_public_key="YOUR_X_AERI_PUBLIC_KEY",
58
+ username="YOUR_USERNAME",
59
+ password="YOUR_PASSWORD",
60
+ base_url="https://yourhost.com/path/to/api",
61
+ )
62
+ client.legacy.observations_v1.get(
63
+ observation_id="observationId",
64
+ )
65
+ """
66
+ _response = self._raw_client.get(
67
+ observation_id, request_options=request_options
68
+ )
69
+ return _response.data
70
+
71
+ def get_many(
72
+ self,
73
+ *,
74
+ page: typing.Optional[int] = None,
75
+ limit: typing.Optional[int] = None,
76
+ name: typing.Optional[str] = None,
77
+ user_id: typing.Optional[str] = None,
78
+ type: typing.Optional[str] = None,
79
+ trace_id: typing.Optional[str] = None,
80
+ level: typing.Optional[ObservationLevel] = None,
81
+ parent_observation_id: typing.Optional[str] = None,
82
+ environment: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
83
+ from_start_time: typing.Optional[dt.datetime] = None,
84
+ to_start_time: typing.Optional[dt.datetime] = None,
85
+ version: typing.Optional[str] = None,
86
+ filter: typing.Optional[str] = None,
87
+ request_options: typing.Optional[RequestOptions] = None,
88
+ ) -> ObservationsViews:
89
+ """
90
+ Get a list of observations.
91
+
92
+ Consider using the [v2 observations endpoint](/api-reference#tag/observationsv2/GET/api/public/v2/observations) for cursor-based pagination and field selection.
93
+
94
+ Parameters
95
+ ----------
96
+ page : typing.Optional[int]
97
+ Page number, starts at 1.
98
+
99
+ limit : typing.Optional[int]
100
+ Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit.
101
+
102
+ name : typing.Optional[str]
103
+
104
+ user_id : typing.Optional[str]
105
+
106
+ type : typing.Optional[str]
107
+
108
+ trace_id : typing.Optional[str]
109
+
110
+ level : typing.Optional[ObservationLevel]
111
+ Optional filter for observations with a specific level (e.g. "DEBUG", "DEFAULT", "WARNING", "ERROR").
112
+
113
+ parent_observation_id : typing.Optional[str]
114
+
115
+ environment : typing.Optional[typing.Union[str, typing.Sequence[str]]]
116
+ Optional filter for observations where the environment is one of the provided values.
117
+
118
+ from_start_time : typing.Optional[dt.datetime]
119
+ Retrieve only observations with a start_time on or after this datetime (ISO 8601).
120
+
121
+ to_start_time : typing.Optional[dt.datetime]
122
+ Retrieve only observations with a start_time before this datetime (ISO 8601).
123
+
124
+ version : typing.Optional[str]
125
+ Optional filter to only include observations with a certain version.
126
+
127
+ filter : typing.Optional[str]
128
+ JSON string containing an array of filter conditions. When provided, this takes precedence over query parameter filters (userId, name, type, level, environment, fromStartTime, ...).
129
+
130
+ ## Filter Structure
131
+ Each filter condition has the following structure:
132
+ ```json
133
+ [
134
+ {
135
+ "type": string, // Required. One of: "datetime", "string", "number", "stringOptions", "categoryOptions", "arrayOptions", "stringObject", "numberObject", "boolean", "null"
136
+ "column": string, // Required. Column to filter on (see available columns below)
137
+ "operator": string, // Required. Operator based on type:
138
+ // - datetime: ">", "<", ">=", "<="
139
+ // - string: "=", "contains", "does not contain", "starts with", "ends with"
140
+ // - stringOptions: "any of", "none of"
141
+ // - categoryOptions: "any of", "none of"
142
+ // - arrayOptions: "any of", "none of", "all of"
143
+ // - number: "=", ">", "<", ">=", "<="
144
+ // - stringObject: "=", "contains", "does not contain", "starts with", "ends with"
145
+ // - numberObject: "=", ">", "<", ">=", "<="
146
+ // - boolean: "=", "<>"
147
+ // - null: "is null", "is not null"
148
+ "value": any, // Required (except for null type). Value to compare against. Type depends on filter type
149
+ "key": string // Required only for stringObject, numberObject, and categoryOptions types when filtering on nested fields like metadata
150
+ }
151
+ ]
152
+ ```
153
+
154
+ ## Available Columns
155
+
156
+ ### Core Observation Fields
157
+ - `id` (string) - Observation ID
158
+ - `type` (string) - Observation type (SPAN, GENERATION, EVENT)
159
+ - `name` (string) - Observation name
160
+ - `traceId` (string) - Associated trace ID
161
+ - `startTime` (datetime) - Observation start time
162
+ - `endTime` (datetime) - Observation end time
163
+ - `environment` (string) - Environment tag
164
+ - `level` (string) - Log level (DEBUG, DEFAULT, WARNING, ERROR)
165
+ - `statusMessage` (string) - Status message
166
+ - `version` (string) - Version tag
167
+
168
+ ### Performance Metrics
169
+ - `latency` (number) - Latency in seconds (calculated: end_time - start_time)
170
+ - `timeToFirstToken` (number) - Time to first token in seconds
171
+ - `tokensPerSecond` (number) - Output tokens per second
172
+
173
+ ### Token Usage
174
+ - `inputTokens` (number) - Number of input tokens
175
+ - `outputTokens` (number) - Number of output tokens
176
+ - `totalTokens` (number) - Total tokens (alias: `tokens`)
177
+
178
+ ### Cost Metrics
179
+ - `inputCost` (number) - Input cost in USD
180
+ - `outputCost` (number) - Output cost in USD
181
+ - `totalCost` (number) - Total cost in USD
182
+
183
+ ### Model Information
184
+ - `model` (string) - Provided model name
185
+ - `promptName` (string) - Associated prompt name
186
+ - `promptVersion` (number) - Associated prompt version
187
+
188
+ ### Structured Data
189
+ - `metadata` (stringObject/numberObject/categoryOptions) - Metadata key-value pairs. Use `key` parameter to filter on specific metadata keys.
190
+
191
+ ### Associated Trace Fields (requires join with traces table)
192
+ - `userId` (string) - User ID from associated trace
193
+ - `traceName` (string) - Name from associated trace
194
+ - `traceEnvironment` (string) - Environment from associated trace
195
+ - `traceTags` (arrayOptions) - Tags from associated trace
196
+
197
+ ## Filter Examples
198
+ ```json
199
+ [
200
+ {
201
+ "type": "string",
202
+ "column": "type",
203
+ "operator": "=",
204
+ "value": "GENERATION"
205
+ },
206
+ {
207
+ "type": "number",
208
+ "column": "latency",
209
+ "operator": ">=",
210
+ "value": 2.5
211
+ },
212
+ {
213
+ "type": "stringObject",
214
+ "column": "metadata",
215
+ "key": "environment",
216
+ "operator": "=",
217
+ "value": "production"
218
+ }
219
+ ]
220
+ ```
221
+
222
+ request_options : typing.Optional[RequestOptions]
223
+ Request-specific configuration.
224
+
225
+ Returns
226
+ -------
227
+ ObservationsViews
228
+
229
+ Examples
230
+ --------
231
+ from aeri import AeriAPI
232
+
233
+ client = AeriAPI(
234
+ x_aeri_sdk_name="YOUR_X_AERI_SDK_NAME",
235
+ x_aeri_sdk_version="YOUR_X_AERI_SDK_VERSION",
236
+ x_aeri_public_key="YOUR_X_AERI_PUBLIC_KEY",
237
+ username="YOUR_USERNAME",
238
+ password="YOUR_PASSWORD",
239
+ base_url="https://yourhost.com/path/to/api",
240
+ )
241
+ client.legacy.observations_v1.get_many()
242
+ """
243
+ _response = self._raw_client.get_many(
244
+ page=page,
245
+ limit=limit,
246
+ name=name,
247
+ user_id=user_id,
248
+ type=type,
249
+ trace_id=trace_id,
250
+ level=level,
251
+ parent_observation_id=parent_observation_id,
252
+ environment=environment,
253
+ from_start_time=from_start_time,
254
+ to_start_time=to_start_time,
255
+ version=version,
256
+ filter=filter,
257
+ request_options=request_options,
258
+ )
259
+ return _response.data
260
+
261
+
262
+ class AsyncObservationsV1Client:
263
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
264
+ self._raw_client = AsyncRawObservationsV1Client(client_wrapper=client_wrapper)
265
+
266
+ @property
267
+ def with_raw_response(self) -> AsyncRawObservationsV1Client:
268
+ """
269
+ Retrieves a raw implementation of this client that returns raw responses.
270
+
271
+ Returns
272
+ -------
273
+ AsyncRawObservationsV1Client
274
+ """
275
+ return self._raw_client
276
+
277
+ async def get(
278
+ self,
279
+ observation_id: str,
280
+ *,
281
+ request_options: typing.Optional[RequestOptions] = None,
282
+ ) -> ObservationsView:
283
+ """
284
+ Get a observation
285
+
286
+ Parameters
287
+ ----------
288
+ observation_id : str
289
+ The unique aeri identifier of an observation, can be an event, span or generation
290
+
291
+ request_options : typing.Optional[RequestOptions]
292
+ Request-specific configuration.
293
+
294
+ Returns
295
+ -------
296
+ ObservationsView
297
+
298
+ Examples
299
+ --------
300
+ import asyncio
301
+
302
+ from aeri import AsyncAeriAPI
303
+
304
+ client = AsyncAeriAPI(
305
+ x_aeri_sdk_name="YOUR_X_AERI_SDK_NAME",
306
+ x_aeri_sdk_version="YOUR_X_AERI_SDK_VERSION",
307
+ x_aeri_public_key="YOUR_X_AERI_PUBLIC_KEY",
308
+ username="YOUR_USERNAME",
309
+ password="YOUR_PASSWORD",
310
+ base_url="https://yourhost.com/path/to/api",
311
+ )
312
+
313
+
314
+ async def main() -> None:
315
+ await client.legacy.observations_v1.get(
316
+ observation_id="observationId",
317
+ )
318
+
319
+
320
+ asyncio.run(main())
321
+ """
322
+ _response = await self._raw_client.get(
323
+ observation_id, request_options=request_options
324
+ )
325
+ return _response.data
326
+
327
+ async def get_many(
328
+ self,
329
+ *,
330
+ page: typing.Optional[int] = None,
331
+ limit: typing.Optional[int] = None,
332
+ name: typing.Optional[str] = None,
333
+ user_id: typing.Optional[str] = None,
334
+ type: typing.Optional[str] = None,
335
+ trace_id: typing.Optional[str] = None,
336
+ level: typing.Optional[ObservationLevel] = None,
337
+ parent_observation_id: typing.Optional[str] = None,
338
+ environment: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
339
+ from_start_time: typing.Optional[dt.datetime] = None,
340
+ to_start_time: typing.Optional[dt.datetime] = None,
341
+ version: typing.Optional[str] = None,
342
+ filter: typing.Optional[str] = None,
343
+ request_options: typing.Optional[RequestOptions] = None,
344
+ ) -> ObservationsViews:
345
+ """
346
+ Get a list of observations.
347
+
348
+ Consider using the [v2 observations endpoint](/api-reference#tag/observationsv2/GET/api/public/v2/observations) for cursor-based pagination and field selection.
349
+
350
+ Parameters
351
+ ----------
352
+ page : typing.Optional[int]
353
+ Page number, starts at 1.
354
+
355
+ limit : typing.Optional[int]
356
+ Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit.
357
+
358
+ name : typing.Optional[str]
359
+
360
+ user_id : typing.Optional[str]
361
+
362
+ type : typing.Optional[str]
363
+
364
+ trace_id : typing.Optional[str]
365
+
366
+ level : typing.Optional[ObservationLevel]
367
+ Optional filter for observations with a specific level (e.g. "DEBUG", "DEFAULT", "WARNING", "ERROR").
368
+
369
+ parent_observation_id : typing.Optional[str]
370
+
371
+ environment : typing.Optional[typing.Union[str, typing.Sequence[str]]]
372
+ Optional filter for observations where the environment is one of the provided values.
373
+
374
+ from_start_time : typing.Optional[dt.datetime]
375
+ Retrieve only observations with a start_time on or after this datetime (ISO 8601).
376
+
377
+ to_start_time : typing.Optional[dt.datetime]
378
+ Retrieve only observations with a start_time before this datetime (ISO 8601).
379
+
380
+ version : typing.Optional[str]
381
+ Optional filter to only include observations with a certain version.
382
+
383
+ filter : typing.Optional[str]
384
+ JSON string containing an array of filter conditions. When provided, this takes precedence over query parameter filters (userId, name, type, level, environment, fromStartTime, ...).
385
+
386
+ ## Filter Structure
387
+ Each filter condition has the following structure:
388
+ ```json
389
+ [
390
+ {
391
+ "type": string, // Required. One of: "datetime", "string", "number", "stringOptions", "categoryOptions", "arrayOptions", "stringObject", "numberObject", "boolean", "null"
392
+ "column": string, // Required. Column to filter on (see available columns below)
393
+ "operator": string, // Required. Operator based on type:
394
+ // - datetime: ">", "<", ">=", "<="
395
+ // - string: "=", "contains", "does not contain", "starts with", "ends with"
396
+ // - stringOptions: "any of", "none of"
397
+ // - categoryOptions: "any of", "none of"
398
+ // - arrayOptions: "any of", "none of", "all of"
399
+ // - number: "=", ">", "<", ">=", "<="
400
+ // - stringObject: "=", "contains", "does not contain", "starts with", "ends with"
401
+ // - numberObject: "=", ">", "<", ">=", "<="
402
+ // - boolean: "=", "<>"
403
+ // - null: "is null", "is not null"
404
+ "value": any, // Required (except for null type). Value to compare against. Type depends on filter type
405
+ "key": string // Required only for stringObject, numberObject, and categoryOptions types when filtering on nested fields like metadata
406
+ }
407
+ ]
408
+ ```
409
+
410
+ ## Available Columns
411
+
412
+ ### Core Observation Fields
413
+ - `id` (string) - Observation ID
414
+ - `type` (string) - Observation type (SPAN, GENERATION, EVENT)
415
+ - `name` (string) - Observation name
416
+ - `traceId` (string) - Associated trace ID
417
+ - `startTime` (datetime) - Observation start time
418
+ - `endTime` (datetime) - Observation end time
419
+ - `environment` (string) - Environment tag
420
+ - `level` (string) - Log level (DEBUG, DEFAULT, WARNING, ERROR)
421
+ - `statusMessage` (string) - Status message
422
+ - `version` (string) - Version tag
423
+
424
+ ### Performance Metrics
425
+ - `latency` (number) - Latency in seconds (calculated: end_time - start_time)
426
+ - `timeToFirstToken` (number) - Time to first token in seconds
427
+ - `tokensPerSecond` (number) - Output tokens per second
428
+
429
+ ### Token Usage
430
+ - `inputTokens` (number) - Number of input tokens
431
+ - `outputTokens` (number) - Number of output tokens
432
+ - `totalTokens` (number) - Total tokens (alias: `tokens`)
433
+
434
+ ### Cost Metrics
435
+ - `inputCost` (number) - Input cost in USD
436
+ - `outputCost` (number) - Output cost in USD
437
+ - `totalCost` (number) - Total cost in USD
438
+
439
+ ### Model Information
440
+ - `model` (string) - Provided model name
441
+ - `promptName` (string) - Associated prompt name
442
+ - `promptVersion` (number) - Associated prompt version
443
+
444
+ ### Structured Data
445
+ - `metadata` (stringObject/numberObject/categoryOptions) - Metadata key-value pairs. Use `key` parameter to filter on specific metadata keys.
446
+
447
+ ### Associated Trace Fields (requires join with traces table)
448
+ - `userId` (string) - User ID from associated trace
449
+ - `traceName` (string) - Name from associated trace
450
+ - `traceEnvironment` (string) - Environment from associated trace
451
+ - `traceTags` (arrayOptions) - Tags from associated trace
452
+
453
+ ## Filter Examples
454
+ ```json
455
+ [
456
+ {
457
+ "type": "string",
458
+ "column": "type",
459
+ "operator": "=",
460
+ "value": "GENERATION"
461
+ },
462
+ {
463
+ "type": "number",
464
+ "column": "latency",
465
+ "operator": ">=",
466
+ "value": 2.5
467
+ },
468
+ {
469
+ "type": "stringObject",
470
+ "column": "metadata",
471
+ "key": "environment",
472
+ "operator": "=",
473
+ "value": "production"
474
+ }
475
+ ]
476
+ ```
477
+
478
+ request_options : typing.Optional[RequestOptions]
479
+ Request-specific configuration.
480
+
481
+ Returns
482
+ -------
483
+ ObservationsViews
484
+
485
+ Examples
486
+ --------
487
+ import asyncio
488
+
489
+ from aeri import AsyncAeriAPI
490
+
491
+ client = AsyncAeriAPI(
492
+ x_aeri_sdk_name="YOUR_X_AERI_SDK_NAME",
493
+ x_aeri_sdk_version="YOUR_X_AERI_SDK_VERSION",
494
+ x_aeri_public_key="YOUR_X_AERI_PUBLIC_KEY",
495
+ username="YOUR_USERNAME",
496
+ password="YOUR_PASSWORD",
497
+ base_url="https://yourhost.com/path/to/api",
498
+ )
499
+
500
+
501
+ async def main() -> None:
502
+ await client.legacy.observations_v1.get_many()
503
+
504
+
505
+ asyncio.run(main())
506
+ """
507
+ _response = await self._raw_client.get_many(
508
+ page=page,
509
+ limit=limit,
510
+ name=name,
511
+ user_id=user_id,
512
+ type=type,
513
+ trace_id=trace_id,
514
+ level=level,
515
+ parent_observation_id=parent_observation_id,
516
+ environment=environment,
517
+ from_start_time=from_start_time,
518
+ to_start_time=to_start_time,
519
+ version=version,
520
+ filter=filter,
521
+ request_options=request_options,
522
+ )
523
+ return _response.data