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,26 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core import enum
6
+
7
+ T_Result = typing.TypeVar("T_Result")
8
+
9
+
10
+ class ScoreSource(enum.StrEnum):
11
+ ANNOTATION = "ANNOTATION"
12
+ API = "API"
13
+ EVAL = "EVAL"
14
+
15
+ def visit(
16
+ self,
17
+ annotation: typing.Callable[[], T_Result],
18
+ api: typing.Callable[[], T_Result],
19
+ eval: typing.Callable[[], T_Result],
20
+ ) -> T_Result:
21
+ if self is ScoreSource.ANNOTATION:
22
+ return annotation()
23
+ if self is ScoreSource.API:
24
+ return api()
25
+ if self is ScoreSource.EVAL:
26
+ return eval()
@@ -0,0 +1,131 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import datetime as dt
6
+ import typing
7
+
8
+ import pydantic
9
+ import typing_extensions
10
+ from ...core.pydantic_utilities import UniversalBaseModel
11
+ from ...core.serialization import FieldMetadata
12
+ from .score_source import ScoreSource
13
+
14
+
15
+ class ScoreV1_Numeric(UniversalBaseModel):
16
+ data_type: typing_extensions.Annotated[
17
+ typing.Literal["NUMERIC"], FieldMetadata(alias="dataType")
18
+ ] = "NUMERIC"
19
+ value: float
20
+ id: str
21
+ trace_id: typing_extensions.Annotated[str, FieldMetadata(alias="traceId")]
22
+ name: str
23
+ source: ScoreSource
24
+ observation_id: typing_extensions.Annotated[
25
+ typing.Optional[str], FieldMetadata(alias="observationId")
26
+ ] = None
27
+ timestamp: dt.datetime
28
+ created_at: typing_extensions.Annotated[
29
+ dt.datetime, FieldMetadata(alias="createdAt")
30
+ ]
31
+ updated_at: typing_extensions.Annotated[
32
+ dt.datetime, FieldMetadata(alias="updatedAt")
33
+ ]
34
+ author_user_id: typing_extensions.Annotated[
35
+ typing.Optional[str], FieldMetadata(alias="authorUserId")
36
+ ] = None
37
+ comment: typing.Optional[str] = None
38
+ metadata: typing.Any
39
+ config_id: typing_extensions.Annotated[
40
+ typing.Optional[str], FieldMetadata(alias="configId")
41
+ ] = None
42
+ queue_id: typing_extensions.Annotated[
43
+ typing.Optional[str], FieldMetadata(alias="queueId")
44
+ ] = None
45
+ environment: str
46
+
47
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
48
+ extra="allow", frozen=True
49
+ )
50
+
51
+
52
+ class ScoreV1_Categorical(UniversalBaseModel):
53
+ data_type: typing_extensions.Annotated[
54
+ typing.Literal["CATEGORICAL"], FieldMetadata(alias="dataType")
55
+ ] = "CATEGORICAL"
56
+ value: float
57
+ string_value: typing_extensions.Annotated[str, FieldMetadata(alias="stringValue")]
58
+ id: str
59
+ trace_id: typing_extensions.Annotated[str, FieldMetadata(alias="traceId")]
60
+ name: str
61
+ source: ScoreSource
62
+ observation_id: typing_extensions.Annotated[
63
+ typing.Optional[str], FieldMetadata(alias="observationId")
64
+ ] = None
65
+ timestamp: dt.datetime
66
+ created_at: typing_extensions.Annotated[
67
+ dt.datetime, FieldMetadata(alias="createdAt")
68
+ ]
69
+ updated_at: typing_extensions.Annotated[
70
+ dt.datetime, FieldMetadata(alias="updatedAt")
71
+ ]
72
+ author_user_id: typing_extensions.Annotated[
73
+ typing.Optional[str], FieldMetadata(alias="authorUserId")
74
+ ] = None
75
+ comment: typing.Optional[str] = None
76
+ metadata: typing.Any
77
+ config_id: typing_extensions.Annotated[
78
+ typing.Optional[str], FieldMetadata(alias="configId")
79
+ ] = None
80
+ queue_id: typing_extensions.Annotated[
81
+ typing.Optional[str], FieldMetadata(alias="queueId")
82
+ ] = None
83
+ environment: str
84
+
85
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
86
+ extra="allow", frozen=True
87
+ )
88
+
89
+
90
+ class ScoreV1_Boolean(UniversalBaseModel):
91
+ data_type: typing_extensions.Annotated[
92
+ typing.Literal["BOOLEAN"], FieldMetadata(alias="dataType")
93
+ ] = "BOOLEAN"
94
+ value: float
95
+ string_value: typing_extensions.Annotated[str, FieldMetadata(alias="stringValue")]
96
+ id: str
97
+ trace_id: typing_extensions.Annotated[str, FieldMetadata(alias="traceId")]
98
+ name: str
99
+ source: ScoreSource
100
+ observation_id: typing_extensions.Annotated[
101
+ typing.Optional[str], FieldMetadata(alias="observationId")
102
+ ] = None
103
+ timestamp: dt.datetime
104
+ created_at: typing_extensions.Annotated[
105
+ dt.datetime, FieldMetadata(alias="createdAt")
106
+ ]
107
+ updated_at: typing_extensions.Annotated[
108
+ dt.datetime, FieldMetadata(alias="updatedAt")
109
+ ]
110
+ author_user_id: typing_extensions.Annotated[
111
+ typing.Optional[str], FieldMetadata(alias="authorUserId")
112
+ ] = None
113
+ comment: typing.Optional[str] = None
114
+ metadata: typing.Any
115
+ config_id: typing_extensions.Annotated[
116
+ typing.Optional[str], FieldMetadata(alias="configId")
117
+ ] = None
118
+ queue_id: typing_extensions.Annotated[
119
+ typing.Optional[str], FieldMetadata(alias="queueId")
120
+ ] = None
121
+ environment: str
122
+
123
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
124
+ extra="allow", frozen=True
125
+ )
126
+
127
+
128
+ ScoreV1 = typing_extensions.Annotated[
129
+ typing.Union[ScoreV1_Numeric, ScoreV1_Categorical, ScoreV1_Boolean],
130
+ pydantic.Field(discriminator="data_type"),
131
+ ]
@@ -0,0 +1,25 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ import typing_extensions
8
+ from ...core.pydantic_utilities import UniversalBaseModel
9
+ from ...core.serialization import FieldMetadata
10
+
11
+
12
+ class Session(UniversalBaseModel):
13
+ id: str
14
+ created_at: typing_extensions.Annotated[
15
+ dt.datetime, FieldMetadata(alias="createdAt")
16
+ ]
17
+ project_id: typing_extensions.Annotated[str, FieldMetadata(alias="projectId")]
18
+ environment: str = pydantic.Field()
19
+ """
20
+ The environment from which this session originated.
21
+ """
22
+
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
24
+ extra="allow", frozen=True
25
+ )
@@ -0,0 +1,15 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from .session import Session
7
+ from .trace import Trace
8
+
9
+
10
+ class SessionWithTraces(Session):
11
+ traces: typing.List[Trace]
12
+
13
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
14
+ extra="allow", frozen=True
15
+ )
@@ -0,0 +1,84 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ import typing_extensions
8
+ from ...core.pydantic_utilities import UniversalBaseModel
9
+ from ...core.serialization import FieldMetadata
10
+
11
+
12
+ class Trace(UniversalBaseModel):
13
+ id: str = pydantic.Field()
14
+ """
15
+ The unique identifier of a trace
16
+ """
17
+
18
+ timestamp: dt.datetime = pydantic.Field()
19
+ """
20
+ The timestamp when the trace was created
21
+ """
22
+
23
+ name: typing.Optional[str] = pydantic.Field(default=None)
24
+ """
25
+ The name of the trace
26
+ """
27
+
28
+ input: typing.Optional[typing.Any] = pydantic.Field(default=None)
29
+ """
30
+ The input data of the trace. Can be any JSON.
31
+ """
32
+
33
+ output: typing.Optional[typing.Any] = pydantic.Field(default=None)
34
+ """
35
+ The output data of the trace. Can be any JSON.
36
+ """
37
+
38
+ session_id: typing_extensions.Annotated[
39
+ typing.Optional[str], FieldMetadata(alias="sessionId")
40
+ ] = pydantic.Field(default=None)
41
+ """
42
+ The session identifier associated with the trace
43
+ """
44
+
45
+ release: typing.Optional[str] = pydantic.Field(default=None)
46
+ """
47
+ The release version of the application when the trace was created
48
+ """
49
+
50
+ version: typing.Optional[str] = pydantic.Field(default=None)
51
+ """
52
+ The version of the trace
53
+ """
54
+
55
+ user_id: typing_extensions.Annotated[
56
+ typing.Optional[str], FieldMetadata(alias="userId")
57
+ ] = pydantic.Field(default=None)
58
+ """
59
+ The user identifier associated with the trace
60
+ """
61
+
62
+ metadata: typing.Optional[typing.Any] = pydantic.Field(default=None)
63
+ """
64
+ The metadata associated with the trace. Can be any JSON.
65
+ """
66
+
67
+ tags: typing.List[str] = pydantic.Field()
68
+ """
69
+ The tags associated with the trace.
70
+ """
71
+
72
+ public: bool = pydantic.Field()
73
+ """
74
+ Public traces are accessible via url without login
75
+ """
76
+
77
+ environment: str = pydantic.Field()
78
+ """
79
+ The environment from which this trace originated. Can be any lowercase alphanumeric string with hyphens and underscores that does not start with 'aeri'.
80
+ """
81
+
82
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
83
+ extra="allow", frozen=True
84
+ )
@@ -0,0 +1,43 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ...core.serialization import FieldMetadata
8
+ from .trace import Trace
9
+
10
+
11
+ class TraceWithDetails(Trace):
12
+ html_path: typing_extensions.Annotated[str, FieldMetadata(alias="htmlPath")] = (
13
+ pydantic.Field()
14
+ )
15
+ """
16
+ Path of trace in Aeri UI
17
+ """
18
+
19
+ latency: typing.Optional[float] = pydantic.Field(default=None)
20
+ """
21
+ Latency of trace in seconds
22
+ """
23
+
24
+ total_cost: typing_extensions.Annotated[
25
+ typing.Optional[float], FieldMetadata(alias="totalCost")
26
+ ] = pydantic.Field(default=None)
27
+ """
28
+ Cost of trace in USD
29
+ """
30
+
31
+ observations: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
32
+ """
33
+ List of observation ids
34
+ """
35
+
36
+ scores: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
37
+ """
38
+ List of score ids
39
+ """
40
+
41
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
42
+ extra="allow", frozen=True
43
+ )
@@ -0,0 +1,45 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ...core.serialization import FieldMetadata
8
+ from .observations_view import ObservationsView
9
+ from .score_v1 import ScoreV1
10
+ from .trace import Trace
11
+
12
+
13
+ class TraceWithFullDetails(Trace):
14
+ html_path: typing_extensions.Annotated[str, FieldMetadata(alias="htmlPath")] = (
15
+ pydantic.Field()
16
+ )
17
+ """
18
+ Path of trace in Aeri UI
19
+ """
20
+
21
+ latency: typing.Optional[float] = pydantic.Field(default=None)
22
+ """
23
+ Latency of trace in seconds
24
+ """
25
+
26
+ total_cost: typing_extensions.Annotated[
27
+ typing.Optional[float], FieldMetadata(alias="totalCost")
28
+ ] = pydantic.Field(default=None)
29
+ """
30
+ Cost of trace in USD
31
+ """
32
+
33
+ observations: typing.List[ObservationsView] = pydantic.Field()
34
+ """
35
+ List of observations
36
+ """
37
+
38
+ scores: typing.List[ScoreV1] = pydantic.Field()
39
+ """
40
+ List of scores
41
+ """
42
+
43
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
44
+ extra="allow", frozen=True
45
+ )
@@ -0,0 +1,59 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ...core.pydantic_utilities import UniversalBaseModel
8
+ from ...core.serialization import FieldMetadata
9
+
10
+
11
+ class Usage(UniversalBaseModel):
12
+ """
13
+ (Deprecated. Use usageDetails and costDetails instead.) Standard interface for usage and cost
14
+ """
15
+
16
+ input: int = pydantic.Field()
17
+ """
18
+ Number of input units (e.g. tokens)
19
+ """
20
+
21
+ output: int = pydantic.Field()
22
+ """
23
+ Number of output units (e.g. tokens)
24
+ """
25
+
26
+ total: int = pydantic.Field()
27
+ """
28
+ Defaults to input+output if not set
29
+ """
30
+
31
+ unit: typing.Optional[str] = pydantic.Field(default=None)
32
+ """
33
+ Unit of measurement
34
+ """
35
+
36
+ input_cost: typing_extensions.Annotated[
37
+ typing.Optional[float], FieldMetadata(alias="inputCost")
38
+ ] = pydantic.Field(default=None)
39
+ """
40
+ USD input cost
41
+ """
42
+
43
+ output_cost: typing_extensions.Annotated[
44
+ typing.Optional[float], FieldMetadata(alias="outputCost")
45
+ ] = pydantic.Field(default=None)
46
+ """
47
+ USD output cost
48
+ """
49
+
50
+ total_cost: typing_extensions.Annotated[
51
+ typing.Optional[float], FieldMetadata(alias="totalCost")
52
+ ] = pydantic.Field(default=None)
53
+ """
54
+ USD total cost, defaults to input+output
55
+ """
56
+
57
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
58
+ extra="allow", frozen=True
59
+ )
@@ -0,0 +1,111 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .api_error import ApiError
10
+ from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
11
+ from .datetime_utils import serialize_datetime
12
+ from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
13
+ from .http_client import AsyncHttpClient, HttpClient
14
+ from .http_response import AsyncHttpResponse, HttpResponse
15
+ from .jsonable_encoder import jsonable_encoder
16
+ from .pydantic_utilities import (
17
+ IS_PYDANTIC_V2,
18
+ UniversalBaseModel,
19
+ UniversalRootModel,
20
+ parse_obj_as,
21
+ universal_field_validator,
22
+ universal_root_validator,
23
+ update_forward_refs,
24
+ )
25
+ from .query_encoder import encode_query
26
+ from .remove_none_from_dict import remove_none_from_dict
27
+ from .request_options import RequestOptions
28
+ from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
29
+ _dynamic_imports: typing.Dict[str, str] = {
30
+ "ApiError": ".api_error",
31
+ "AsyncClientWrapper": ".client_wrapper",
32
+ "AsyncHttpClient": ".http_client",
33
+ "AsyncHttpResponse": ".http_response",
34
+ "BaseClientWrapper": ".client_wrapper",
35
+ "FieldMetadata": ".serialization",
36
+ "File": ".file",
37
+ "HttpClient": ".http_client",
38
+ "HttpResponse": ".http_response",
39
+ "IS_PYDANTIC_V2": ".pydantic_utilities",
40
+ "RequestOptions": ".request_options",
41
+ "SyncClientWrapper": ".client_wrapper",
42
+ "UniversalBaseModel": ".pydantic_utilities",
43
+ "UniversalRootModel": ".pydantic_utilities",
44
+ "convert_and_respect_annotation_metadata": ".serialization",
45
+ "convert_file_dict_to_httpx_tuples": ".file",
46
+ "encode_query": ".query_encoder",
47
+ "jsonable_encoder": ".jsonable_encoder",
48
+ "parse_obj_as": ".pydantic_utilities",
49
+ "remove_none_from_dict": ".remove_none_from_dict",
50
+ "serialize_datetime": ".datetime_utils",
51
+ "universal_field_validator": ".pydantic_utilities",
52
+ "universal_root_validator": ".pydantic_utilities",
53
+ "update_forward_refs": ".pydantic_utilities",
54
+ "with_content_type": ".file",
55
+ }
56
+
57
+
58
+ def __getattr__(attr_name: str) -> typing.Any:
59
+ module_name = _dynamic_imports.get(attr_name)
60
+ if module_name is None:
61
+ raise AttributeError(
62
+ f"No {attr_name} found in _dynamic_imports for module name -> {__name__}"
63
+ )
64
+ try:
65
+ module = import_module(module_name, __package__)
66
+ if module_name == f".{attr_name}":
67
+ return module
68
+ else:
69
+ return getattr(module, attr_name)
70
+ except ImportError as e:
71
+ raise ImportError(
72
+ f"Failed to import {attr_name} from {module_name}: {e}"
73
+ ) from e
74
+ except AttributeError as e:
75
+ raise AttributeError(
76
+ f"Failed to get {attr_name} from {module_name}: {e}"
77
+ ) from e
78
+
79
+
80
+ def __dir__():
81
+ lazy_attrs = list(_dynamic_imports.keys())
82
+ return sorted(lazy_attrs)
83
+
84
+
85
+ __all__ = [
86
+ "ApiError",
87
+ "AsyncClientWrapper",
88
+ "AsyncHttpClient",
89
+ "AsyncHttpResponse",
90
+ "BaseClientWrapper",
91
+ "FieldMetadata",
92
+ "File",
93
+ "HttpClient",
94
+ "HttpResponse",
95
+ "IS_PYDANTIC_V2",
96
+ "RequestOptions",
97
+ "SyncClientWrapper",
98
+ "UniversalBaseModel",
99
+ "UniversalRootModel",
100
+ "convert_and_respect_annotation_metadata",
101
+ "convert_file_dict_to_httpx_tuples",
102
+ "encode_query",
103
+ "jsonable_encoder",
104
+ "parse_obj_as",
105
+ "remove_none_from_dict",
106
+ "serialize_datetime",
107
+ "universal_field_validator",
108
+ "universal_root_validator",
109
+ "update_forward_refs",
110
+ "with_content_type",
111
+ ]
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from typing import Any, Dict, Optional
4
+
5
+
6
+ class ApiError(Exception):
7
+ headers: Optional[Dict[str, str]]
8
+ status_code: Optional[int]
9
+ body: Any
10
+
11
+ def __init__(
12
+ self,
13
+ *,
14
+ headers: Optional[Dict[str, str]] = None,
15
+ status_code: Optional[int] = None,
16
+ body: Any = None,
17
+ ) -> None:
18
+ self.headers = headers
19
+ self.status_code = status_code
20
+ self.body = body
21
+
22
+ def __str__(self) -> str:
23
+ return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}"