agenta 0.38.2__tar.gz → 0.39.0__tar.gz

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.

Potentially problematic release.


This version of agenta might be problematic. Click here for more details.

Files changed (256) hide show
  1. {agenta-0.38.2 → agenta-0.39.0}/PKG-INFO +4 -2
  2. {agenta-0.38.2 → agenta-0.39.0}/agenta/__init__.py +1 -1
  3. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/agenta_init.py +4 -1
  4. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/decorators/routing.py +2 -2
  5. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/decorators/tracing.py +9 -5
  6. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/litellm.py +3 -1
  7. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/apps.py +2 -4
  8. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/config.py +2 -2
  9. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/shared.py +2 -3
  10. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/auth.py +3 -1
  11. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/otel.py +10 -1
  12. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/exporters.py +4 -0
  13. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/processors.py +3 -1
  14. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/tracing.py +3 -1
  15. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/exceptions.py +3 -1
  16. agenta-0.39.0/agenta/sdk/utils/logging.py +276 -0
  17. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/timing.py +3 -1
  18. {agenta-0.38.2 → agenta-0.39.0}/pyproject.toml +5 -3
  19. agenta-0.38.2/agenta/sdk/utils/logging.py +0 -21
  20. {agenta-0.38.2 → agenta-0.39.0}/README.md +0 -0
  21. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/Readme.md +0 -0
  22. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/__init__.py +0 -0
  23. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/access_control/__init__.py +0 -0
  24. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/access_control/client.py +0 -0
  25. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/admin/__init__.py +0 -0
  26. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/admin/client.py +0 -0
  27. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/api_keys/__init__.py +0 -0
  28. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/api_keys/client.py +0 -0
  29. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/apps/__init__.py +0 -0
  30. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/apps/client.py +0 -0
  31. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/bases/__init__.py +0 -0
  32. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/bases/client.py +0 -0
  33. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/configs/__init__.py +0 -0
  34. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/configs/client.py +0 -0
  35. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/__init__.py +0 -0
  36. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/client.py +0 -0
  37. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/types/__init__.py +0 -0
  38. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/types/container_templates_response.py +0 -0
  39. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/__init__.py +0 -0
  40. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/api_error.py +0 -0
  41. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/client_wrapper.py +0 -0
  42. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/datetime_utils.py +0 -0
  43. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/file.py +0 -0
  44. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/http_client.py +0 -0
  45. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/jsonable_encoder.py +0 -0
  46. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/pydantic_utilities.py +0 -0
  47. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/query_encoder.py +0 -0
  48. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
  49. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/request_options.py +0 -0
  50. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/serialization.py +0 -0
  51. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/environments/__init__.py +0 -0
  52. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/environments/client.py +0 -0
  53. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/errors/__init__.py +0 -0
  54. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
  55. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluations/__init__.py +0 -0
  56. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluations/client.py +0 -0
  57. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluators/__init__.py +0 -0
  58. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluators/client.py +0 -0
  59. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/human_evaluations/__init__.py +0 -0
  60. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/human_evaluations/client.py +0 -0
  61. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/__init__.py +0 -0
  62. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/client.py +0 -0
  63. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/__init__.py +0 -0
  64. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/format.py +0 -0
  65. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/query_analytics_response.py +0 -0
  66. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/query_traces_response.py +0 -0
  67. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/organization/__init__.py +0 -0
  68. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/organization/client.py +0 -0
  69. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/scopes/__init__.py +0 -0
  70. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/scopes/client.py +0 -0
  71. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/testsets/__init__.py +0 -0
  72. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/testsets/client.py +0 -0
  73. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/__init__.py +0 -0
  74. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/account_response.py +0 -0
  75. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_node_dto.py +0 -0
  76. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_node_dto_nodes_value.py +0 -0
  77. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_nodes_response.py +0 -0
  78. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_root_dto.py +0 -0
  79. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_roots_response.py +0 -0
  80. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_tree_dto.py +0 -0
  81. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_trees_response.py +0 -0
  82. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/aggregated_result.py +0 -0
  83. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
  84. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/analytics_response.py +0 -0
  85. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/app.py +0 -0
  86. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/app_variant_response.py +0 -0
  87. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/app_variant_revision.py +0 -0
  88. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/base_output.py +0 -0
  89. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/body_import_testset.py +0 -0
  90. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/bucket_dto.py +0 -0
  91. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/collect_status_response.py +0 -0
  92. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/config_db.py +0 -0
  93. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/config_dto.py +0 -0
  94. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/config_response_model.py +0 -0
  95. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/correct_answer.py +0 -0
  96. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/create_app_output.py +0 -0
  97. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_model_settings_dto.py +0 -0
  98. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_provider_dto.py +0 -0
  99. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_provider_kind.py +0 -0
  100. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_provider_settings_dto.py +0 -0
  101. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/data.py +0 -0
  102. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/delete_evaluation.py +0 -0
  103. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/docker_env_vars.py +0 -0
  104. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/environment_output.py +0 -0
  105. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/environment_output_extended.py +0 -0
  106. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/environment_revision.py +0 -0
  107. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/error.py +0 -0
  108. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation.py +0 -0
  109. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario.py +0 -0
  110. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
  111. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
  112. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
  113. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
  114. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_type.py +0 -0
  115. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator.py +0 -0
  116. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator_config.py +0 -0
  117. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator_mapping_output_interface.py +0 -0
  118. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator_output_interface.py +0 -0
  119. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/exception_dto.py +0 -0
  120. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/get_config_response.py +0 -0
  121. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/header_dto.py +0 -0
  122. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/http_validation_error.py +0 -0
  123. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation.py +0 -0
  124. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
  125. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
  126. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
  127. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/image.py +0 -0
  128. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/invite_request.py +0 -0
  129. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_analytics_response.py +0 -0
  130. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_data_point.py +0 -0
  131. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_scope_request.py +0 -0
  132. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_scopes_response.py +0 -0
  133. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_user_request.py +0 -0
  134. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_user_response.py +0 -0
  135. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/lifecycle_dto.py +0 -0
  136. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/link_dto.py +0 -0
  137. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/list_api_keys_response.py +0 -0
  138. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
  139. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/metrics_dto.py +0 -0
  140. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/new_testset.py +0 -0
  141. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/node_dto.py +0 -0
  142. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/node_type.py +0 -0
  143. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_context_dto.py +0 -0
  144. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_event_dto.py +0 -0
  145. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_extra_dto.py +0 -0
  146. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_link_dto.py +0 -0
  147. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_span_dto.py +0 -0
  148. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_span_kind.py +0 -0
  149. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_spans_response.py +0 -0
  150. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_status_code.py +0 -0
  151. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization.py +0 -0
  152. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_details.py +0 -0
  153. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_membership_request.py +0 -0
  154. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_output.py +0 -0
  155. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_request.py +0 -0
  156. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/parent_dto.py +0 -0
  157. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/permission.py +0 -0
  158. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/project_membership_request.py +0 -0
  159. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/project_request.py +0 -0
  160. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/project_scope.py +0 -0
  161. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/projects_response.py +0 -0
  162. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/provider_key_dto.py +0 -0
  163. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/provider_kind.py +0 -0
  164. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/reference.py +0 -0
  165. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/reference_dto.py +0 -0
  166. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/reference_request_model.py +0 -0
  167. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/result.py +0 -0
  168. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/role.py +0 -0
  169. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/root_dto.py +0 -0
  170. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/scopes_response_model.py +0 -0
  171. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/score.py +0 -0
  172. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/secret_dto.py +0 -0
  173. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/secret_kind.py +0 -0
  174. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/secret_response_dto.py +0 -0
  175. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
  176. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/span_dto.py +0 -0
  177. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/span_dto_nodes_value.py +0 -0
  178. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/standard_provider_dto.py +0 -0
  179. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/standard_provider_kind.py +0 -0
  180. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/standard_provider_settings_dto.py +0 -0
  181. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/status_code.py +0 -0
  182. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/status_dto.py +0 -0
  183. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/template.py +0 -0
  184. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/template_image_info.py +0 -0
  185. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/test_set_output_response.py +0 -0
  186. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/test_set_simple_response.py +0 -0
  187. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/time_dto.py +0 -0
  188. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/tree_dto.py +0 -0
  189. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/tree_type.py +0 -0
  190. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/update_app_output.py +0 -0
  191. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/uri.py +0 -0
  192. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/user_request.py +0 -0
  193. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/validation_error.py +0 -0
  194. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
  195. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/variant_action.py +0 -0
  196. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/variant_action_enum.py +0 -0
  197. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace.py +0 -0
  198. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_member_response.py +0 -0
  199. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_membership_request.py +0 -0
  200. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_permission.py +0 -0
  201. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_request.py +0 -0
  202. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_response.py +0 -0
  203. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_role.py +0 -0
  204. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_role_response.py +0 -0
  205. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/__init__.py +0 -0
  206. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/client.py +0 -0
  207. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/types/__init__.py +0 -0
  208. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +0 -0
  209. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/vault/__init__.py +0 -0
  210. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/vault/client.py +0 -0
  211. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/workspace/__init__.py +0 -0
  212. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/workspace/client.py +0 -0
  213. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/client.py +0 -0
  214. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_key_dto.py~HEAD +0 -0
  215. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_key_dto.py~feat_model-registry +0 -0
  216. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_kind.py~HEAD +0 -0
  217. {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_kind.py~feat_model-registry +0 -0
  218. {agenta-0.38.2 → agenta-0.39.0}/agenta/config.py +0 -0
  219. {agenta-0.38.2 → agenta-0.39.0}/agenta/config.toml +0 -0
  220. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/__init__.py +0 -0
  221. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/assets.py +0 -0
  222. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/__init__.py +0 -0
  223. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/exporting.py +0 -0
  224. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/routing.py +0 -0
  225. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/tracing.py +0 -0
  226. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/decorators/__init__.py +0 -0
  227. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/__init__.py +0 -0
  228. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/mockllm.py +0 -0
  229. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/mocks/__init__.py +0 -0
  230. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/__init__.py +0 -0
  231. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/deployment.py +0 -0
  232. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/secrets.py +0 -0
  233. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/variant.py +0 -0
  234. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/vault.py +0 -0
  235. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/__init__.py +0 -0
  236. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/config.py +0 -0
  237. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/cors.py +0 -0
  238. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/inline.py +0 -0
  239. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/mock.py +0 -0
  240. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/vault.py +0 -0
  241. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/router.py +0 -0
  242. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/__init__.py +0 -0
  243. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/attributes.py +0 -0
  244. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/conventions.py +0 -0
  245. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/inline.py +0 -0
  246. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/propagation.py +0 -0
  247. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/spans.py +0 -0
  248. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/types.py +0 -0
  249. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/__init__.py +0 -0
  250. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/cache.py +0 -0
  251. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/constants.py +0 -0
  252. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/costs.py +0 -0
  253. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/globals.py +0 -0
  254. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/helpers.py +0 -0
  255. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/preinit.py +0 -0
  256. {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/singleton.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: agenta
3
- Version: 0.38.2
3
+ Version: 0.39.0
4
4
  Summary: The SDK for agenta is an open-source LLMOps platform.
5
5
  Keywords: LLMOps,LLM,evaluation,prompt engineering
6
6
  Author: Mahmoud Mabrouk
@@ -18,13 +18,15 @@ Classifier: Topic :: Software Development :: Libraries
18
18
  Requires-Dist: fastapi (>=0.100.0)
19
19
  Requires-Dist: httpx (>=0.24,<0.28)
20
20
  Requires-Dist: importlib-metadata (>=8.0.0,<9.0)
21
- Requires-Dist: litellm (>=1.48.0,<2.0.0)
21
+ Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
22
+ Requires-Dist: litellm (>=1.61.15,<2.0.0)
22
23
  Requires-Dist: opentelemetry-api (>=1.27.0,<2.0.0)
23
24
  Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.27.0,<2.0.0)
24
25
  Requires-Dist: opentelemetry-sdk (>=1.27.0,<2.0.0)
25
26
  Requires-Dist: pydantic (>=2)
26
27
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
27
28
  Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
29
+ Requires-Dist: structlog (>=25.2.0,<26.0.0)
28
30
  Requires-Dist: toml (>=0.10.2,<0.11.0)
29
31
  Project-URL: Documentation, https://docs.agenta.ai
30
32
  Project-URL: Homepage, https://agenta.ai
@@ -20,7 +20,7 @@ from .sdk.types import (
20
20
  PromptTemplate,
21
21
  )
22
22
 
23
- from .sdk.utils.logging import log as logging
23
+ from .sdk.utils.logging import get_module_logger
24
24
  from .sdk.tracing import Tracing, get_tracer
25
25
  from .sdk.decorators.tracing import instrument
26
26
  from .sdk.tracing.conventions import Reference
@@ -3,7 +3,7 @@ from os import getenv
3
3
  from typing import Optional, Callable, Any
4
4
  from importlib.metadata import version
5
5
 
6
- from agenta.sdk.utils.logging import log
6
+ from agenta.sdk.utils.logging import get_module_logger
7
7
  from agenta.sdk.utils.globals import set_global
8
8
  from agenta.client.client import AgentaApi, AsyncAgentaApi
9
9
 
@@ -11,6 +11,9 @@ from agenta.sdk.tracing import Tracing
11
11
  from agenta.sdk.context.routing import routing_context
12
12
 
13
13
 
14
+ log = get_module_logger(__file__)
15
+
16
+
14
17
  class AgentaSingleton:
15
18
  """Singleton class to save all the "global variables" for the sdk."""
16
19
 
@@ -28,7 +28,7 @@ from agenta.sdk.context.tracing import (
28
28
  )
29
29
  from agenta.sdk.router import router
30
30
  from agenta.sdk.utils.exceptions import suppress, display_exception
31
- from agenta.sdk.utils.logging import log
31
+ from agenta.sdk.utils.logging import get_module_logger
32
32
  from agenta.sdk.utils.helpers import get_current_version
33
33
  from agenta.sdk.types import (
34
34
  MultipleChoice,
@@ -38,7 +38,7 @@ from agenta.sdk.types import (
38
38
 
39
39
  import agenta as ag
40
40
 
41
- log.setLevel("DEBUG")
41
+ log = get_module_logger(__file__)
42
42
 
43
43
  AGENTA_RUNTIME_PREFIX = environ.get("AGENTA_RUNTIME_PREFIX", "")
44
44
 
@@ -5,6 +5,7 @@ from itertools import chain
5
5
  from inspect import iscoroutinefunction, getfullargspec
6
6
 
7
7
  from opentelemetry import baggage
8
+ from opentelemetry.trace import NonRecordingSpan
8
9
  from opentelemetry.context import attach, detach, get_current
9
10
  from opentelemetry.baggage import set_baggage, get_all
10
11
 
@@ -12,8 +13,13 @@ from agenta.sdk.utils.exceptions import suppress
12
13
  from agenta.sdk.context.tracing import tracing_context
13
14
  from agenta.sdk.tracing.conventions import parse_span_kind
14
15
 
16
+
17
+ from agenta.sdk.utils.logging import get_module_logger
18
+
15
19
  import agenta as ag
16
20
 
21
+ log = get_module_logger(__name__)
22
+
17
23
 
18
24
  class instrument: # pylint: disable=invalid-name
19
25
  DEFAULT_KEY = "__default__"
@@ -56,7 +62,7 @@ class instrument: # pylint: disable=invalid-name
56
62
  name=func.__name__,
57
63
  kind=self.kind,
58
64
  context=ctx,
59
- ):
65
+ ) as span:
60
66
  self._set_link()
61
67
 
62
68
  self._pre_instrument(func, *args, **kwargs)
@@ -84,7 +90,7 @@ class instrument: # pylint: disable=invalid-name
84
90
  name=func.__name__,
85
91
  kind=self.kind,
86
92
  context=ctx,
87
- ):
93
+ ) as span:
88
94
  self._set_link()
89
95
 
90
96
  self._pre_instrument(func, *args, **kwargs)
@@ -291,9 +297,7 @@ class instrument: # pylint: disable=invalid-name
291
297
  not in (
292
298
  ignore
293
299
  if isinstance(ignore, list)
294
- else io.keys()
295
- if ignore is True
296
- else []
300
+ else io.keys() if ignore is True else []
297
301
  )
298
302
  }
299
303
 
@@ -5,7 +5,9 @@ import agenta as ag
5
5
 
6
6
  from agenta.sdk.tracing.spans import CustomSpan
7
7
  from agenta.sdk.utils.exceptions import suppress # TODO: use it !
8
- from agenta.sdk.utils.logging import log
8
+ from agenta.sdk.utils.logging import get_module_logger
9
+
10
+ log = get_module_logger(__file__)
9
11
 
10
12
 
11
13
  def litellm_handler():
@@ -1,11 +1,9 @@
1
- import logging
2
-
1
+ from agenta.sdk.utils.logging import get_module_logger
3
2
  from agenta.sdk.utils.exceptions import handle_exceptions
4
3
 
5
4
  import agenta as ag
6
5
 
7
-
8
- logger = logging.getLogger(__name__)
6
+ log = get_module_logger(__file__)
9
7
 
10
8
 
11
9
  class AppManager:
@@ -1,17 +1,17 @@
1
1
  import json
2
- import logging
3
2
  from pathlib import Path
4
3
  from typing import Optional, Type, TypeVar, Dict, Any, Union
5
4
 
6
5
  import yaml
7
6
  from pydantic import BaseModel
8
7
 
8
+ from agenta.sdk.utils.logging import get_module_logger
9
9
  from agenta.sdk.managers.shared import SharedManager
10
10
  from agenta.sdk.context.routing import routing_context
11
11
 
12
12
  T = TypeVar("T", bound=BaseModel)
13
13
 
14
- logger = logging.getLogger(__name__)
14
+ log = get_module_logger(__file__)
15
15
 
16
16
  AVAILABLE_ENVIRONMENTS = ["development", "production", "staging"]
17
17
 
@@ -1,6 +1,6 @@
1
- import logging
2
1
  from typing import Optional, Dict, Any
3
2
 
3
+ from agenta.sdk.utils.logging import get_module_logger
4
4
  from agenta.sdk.utils.exceptions import handle_exceptions
5
5
 
6
6
  from agenta.sdk.types import (
@@ -13,8 +13,7 @@ from agenta.client.backend.types.reference_request_model import ReferenceRequest
13
13
 
14
14
  import agenta as ag
15
15
 
16
-
17
- logger = logging.getLogger(__name__)
16
+ log = get_module_logger(__file__)
18
17
 
19
18
 
20
19
  class SharedManager:
@@ -11,10 +11,12 @@ from fastapi.responses import JSONResponse
11
11
  from agenta.sdk.utils.cache import TTLLRUCache
12
12
  from agenta.sdk.utils.constants import TRUTHY
13
13
  from agenta.sdk.utils.exceptions import display_exception
14
- from agenta.sdk.utils.logging import log
14
+ from agenta.sdk.utils.logging import get_module_logger
15
15
 
16
16
  import agenta as ag
17
17
 
18
+ log = get_module_logger(__file__)
19
+
18
20
  AGENTA_RUNTIME_PREFIX = getenv("AGENTA_RUNTIME_PREFIX", "")
19
21
 
20
22
 
@@ -9,6 +9,10 @@ from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapProp
9
9
  from agenta.sdk.utils.exceptions import suppress
10
10
  from agenta.sdk.tracing.propagation import extract
11
11
 
12
+ from agenta.sdk.utils.logging import get_module_logger
13
+
14
+ log = get_module_logger(__name__)
15
+
12
16
 
13
17
  class OTelMiddleware(BaseHTTPMiddleware):
14
18
  def __init__(self, app: FastAPI):
@@ -17,8 +21,13 @@ class OTelMiddleware(BaseHTTPMiddleware):
17
21
  async def dispatch(self, request: Request, call_next: Callable):
18
22
  request.state.otel = {"baggage": {}, "traceparent": None}
19
23
 
24
+ headers = dict(request.headers)
25
+
26
+ if "newrelic" in headers:
27
+ headers["traceparent"] = None
28
+
20
29
  with suppress():
21
- _, traceparent, baggage = extract(request.headers)
30
+ _, traceparent, baggage = extract(headers)
22
31
 
23
32
  request.state.otel = {"baggage": baggage, "traceparent": traceparent}
24
33
 
@@ -16,6 +16,10 @@ from agenta.sdk.context.exporting import (
16
16
  )
17
17
  from agenta.sdk.utils.cache import TTLLRUCache
18
18
 
19
+ from agenta.sdk.utils.logging import get_module_logger
20
+
21
+ log = get_module_logger(__file__)
22
+
19
23
 
20
24
  class InlineTraceExporter(SpanExporter):
21
25
  def __init__(
@@ -13,9 +13,11 @@ from opentelemetry.sdk.trace.export import (
13
13
  _DEFAULT_EXPORT_TIMEOUT_MILLIS,
14
14
  )
15
15
 
16
- from agenta.sdk.utils.logging import log
16
+ from agenta.sdk.utils.logging import get_module_logger
17
17
  from agenta.sdk.tracing.conventions import Reference
18
18
 
19
+ log = get_module_logger(__file__)
20
+
19
21
 
20
22
  class TraceProcessor(BatchSpanProcessor):
21
23
  def __init__(
@@ -15,7 +15,7 @@ from opentelemetry.sdk.resources import Resource
15
15
 
16
16
  from agenta.sdk.utils.singleton import Singleton
17
17
  from agenta.sdk.utils.exceptions import suppress
18
- from agenta.sdk.utils.logging import log
18
+ from agenta.sdk.utils.logging import get_module_logger
19
19
  from agenta.sdk.tracing.processors import TraceProcessor
20
20
  from agenta.sdk.tracing.exporters import InlineExporter, OTLPExporter
21
21
  from agenta.sdk.tracing.spans import CustomSpan
@@ -24,6 +24,8 @@ from agenta.sdk.tracing.conventions import Reference, is_valid_attribute_key
24
24
  from agenta.sdk.tracing.propagation import extract, inject
25
25
  from agenta.sdk.utils.cache import TTLLRUCache
26
26
 
27
+ log = get_module_logger(__file__)
28
+
27
29
 
28
30
  class Tracing(metaclass=Singleton):
29
31
  VERSION = "0.1.0"
@@ -3,7 +3,9 @@ from traceback import format_exc
3
3
  from functools import wraps
4
4
  from inspect import iscoroutinefunction
5
5
 
6
- from agenta.sdk.utils.logging import log
6
+ from agenta.sdk.utils.logging import get_module_logger
7
+
8
+ log = get_module_logger(__file__)
7
9
 
8
10
 
9
11
  def display_exception(message: str):
@@ -0,0 +1,276 @@
1
+ from typing import Any, Optional
2
+
3
+ import os
4
+ import re
5
+ import sys
6
+ import logging
7
+
8
+ import structlog
9
+ from structlog.typing import EventDict, WrappedLogger, Processor
10
+
11
+ # from datetime import datetime
12
+ # from logging.handlers import RotatingFileHandler
13
+
14
+ # from opentelemetry.trace import get_current_span
15
+ # from opentelemetry._logs import set_logger_provider
16
+ # from opentelemetry.sdk._logs import LoggingHandler, LoggerProvider
17
+ # from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
18
+ # from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
19
+
20
+ TRACE_LEVEL = 1
21
+ logging.TRACE = TRACE_LEVEL
22
+ logging.addLevelName(TRACE_LEVEL, "TRACE")
23
+
24
+
25
+ def trace(self, message, *args, **kwargs):
26
+ if self.isEnabledFor(TRACE_LEVEL):
27
+ self._log(TRACE_LEVEL, message, args, **kwargs)
28
+
29
+
30
+ logging.Logger.trace = trace
31
+
32
+
33
+ def bound_logger_trace(self, *args, **kwargs):
34
+ return self._proxy_to_logger("trace", *args, **kwargs)
35
+
36
+
37
+ structlog.stdlib.BoundLogger.trace = bound_logger_trace
38
+
39
+ # ENV VARS
40
+ LOG_CONSOLE_ENABLED = os.getenv("LOG_CONSOLE_ENABLED", "true") == "true"
41
+ LOG_CONSOLE_LEVEL = os.getenv("LOG_CONSOLE_LEVEL", "TRACE").upper()
42
+
43
+ # LOG_OTLP_ENABLED = os.getenv("LOG_OTLP_ENABLED", "false") == "true"
44
+ # LOG_OTLP_LEVEL = os.getenv("LOG_OTLP_LEVEL", "INFO").upper()
45
+
46
+ # LOG_FILE_ENABLED = os.getenv("LOG_FILE_ENABLED", "true") == "true"
47
+ # LOG_FILE_LEVEL = os.getenv("LOG_FILE_LEVEL", "WARNING").upper()
48
+ # LOG_FILE_BASE = os.getenv("LOG_FILE_PATH", "error")
49
+ # LOG_FILE_DATE = datetime.utcnow().strftime("%Y-%m-%d")
50
+ # LOG_FILE_PATH = f"{LOG_FILE_BASE}-{LOG_FILE_DATE}.log"
51
+
52
+ # COLORS
53
+ LEVEL_COLORS = {
54
+ "TRACE": "\033[97m",
55
+ "DEBUG": "\033[38;5;39m",
56
+ "INFO": "\033[38;5;70m",
57
+ "INFO.": "\033[38;5;70m",
58
+ "WARNING": "\033[38;5;214m",
59
+ "WARN.": "\033[38;5;214m",
60
+ "ERROR": "\033[38;5;203m",
61
+ "CRITICAL": "\033[38;5;199m",
62
+ "FATAL": "\033[1;37;41m",
63
+ }
64
+ RESET = "\033[0m"
65
+
66
+ SEVERITY_NUMBERS = {
67
+ "TRACE": 1,
68
+ "DEBUG": 5,
69
+ "INFO": 9,
70
+ "INFO.": 9,
71
+ "WARNING": 13,
72
+ "WARN.": 13,
73
+ "ERROR": 17,
74
+ "CRITICAL": 21,
75
+ "FATAL": 21,
76
+ }
77
+
78
+ # PROCESSORS
79
+
80
+
81
+ def process_positional_args(_, __, event_dict: EventDict) -> EventDict:
82
+ args = event_dict.pop("positional_args", ())
83
+ if args and isinstance(event_dict.get("event"), str):
84
+ try:
85
+ event_dict["event"] = event_dict["event"] % args
86
+ except Exception:
87
+ event_dict["event"] = f"{event_dict['event']} {args}"
88
+ return event_dict
89
+
90
+
91
+ # def add_trace_context(_, __, event_dict: EventDict) -> EventDict:
92
+ # span = get_current_span()
93
+ # if span and span.get_span_context().is_valid:
94
+ # ctx = span.get_span_context()
95
+ # event_dict["TraceId"] = format(ctx.trace_id, "032x")
96
+ # event_dict["SpanId"] = format(ctx.span_id, "016x")
97
+ # return event_dict
98
+
99
+
100
+ def add_logger_info(
101
+ logger: WrappedLogger, method_name: str, event_dict: EventDict
102
+ ) -> EventDict:
103
+ level = method_name.upper()
104
+ if level == "CRITICAL":
105
+ level = "FATAL"
106
+ elif level == "WARNING":
107
+ level = "WARN."
108
+ elif level == "INFO":
109
+ level = "INFO."
110
+
111
+ event_dict["level"] = level
112
+ event_dict["SeverityText"] = level
113
+ event_dict["SeverityNumber"] = SEVERITY_NUMBERS.get(level, 9)
114
+ event_dict["LoggerName"] = logger.name
115
+ event_dict["MethodName"] = method_name
116
+ return event_dict
117
+
118
+
119
+ def colored_console_renderer() -> Processor:
120
+ hidden = {
121
+ "SeverityText",
122
+ "SeverityNumber",
123
+ "MethodName",
124
+ "logger_factory",
125
+ "LoggerName",
126
+ "level",
127
+ }
128
+
129
+ def render(_, __, event_dict: EventDict) -> str:
130
+ ts = event_dict.pop("Timestamp", "")[:23] + "Z"
131
+ level = event_dict.pop("level", "INFO")
132
+ msg = event_dict.pop("event", "")
133
+ color = LEVEL_COLORS.get(level, "")
134
+ padded = f"[{level:<5}]"
135
+ logger = f"\033[38;5;245m[{event_dict.pop('logger', '')}]\033[0m"
136
+ extras = " ".join(
137
+ f"\033[38;5;245m{k}={v}\033[0m"
138
+ for k, v in event_dict.items()
139
+ if k not in hidden
140
+ )
141
+ return f"{ts} {color}{padded}{RESET} {msg} {logger} {extras}"
142
+
143
+ return render
144
+
145
+
146
+ # def plain_renderer() -> Processor:
147
+ # hidden = {
148
+ # "SeverityText",
149
+ # "SeverityNumber",
150
+ # "MethodName",
151
+ # "logger_factory",
152
+ # "LoggerName",
153
+ # "level",
154
+ # }
155
+
156
+ # def render(_, __, event_dict: EventDict) -> str:
157
+ # ts = event_dict.pop("Timestamp", "")[:23] + "Z"
158
+ # level = event_dict.get("level", "")
159
+ # msg = event_dict.pop("event", "")
160
+ # padded = f"[{level:<5}]"
161
+ # logger = f"[{event_dict.pop('logger', '')}]"
162
+ # extras = " ".join(f"{k}={v}" for k, v in event_dict.items() if k not in hidden)
163
+ # return f"{ts} {padded} {msg} {logger} {extras}"
164
+
165
+ # return render
166
+
167
+
168
+ # def json_renderer() -> Processor:
169
+ # return structlog.processors.JSONRenderer()
170
+
171
+
172
+ SHARED_PROCESSORS: list[Processor] = [
173
+ structlog.processors.TimeStamper(fmt="iso", utc=True, key="Timestamp"),
174
+ process_positional_args,
175
+ # add_trace_context,
176
+ add_logger_info,
177
+ structlog.processors.format_exc_info,
178
+ structlog.processors.dict_tracebacks,
179
+ ]
180
+
181
+
182
+ def create_struct_logger(
183
+ processors: list[Processor], name: str
184
+ ) -> structlog.stdlib.BoundLogger:
185
+ logger = logging.getLogger(name)
186
+ logger.setLevel(TRACE_LEVEL)
187
+ return structlog.wrap_logger(
188
+ logger,
189
+ processors=SHARED_PROCESSORS + processors,
190
+ wrapper_class=structlog.stdlib.BoundLogger,
191
+ logger_factory=structlog.stdlib.LoggerFactory(),
192
+ cache_logger_on_first_use=True,
193
+ )
194
+
195
+
196
+ # CONFIGURE HANDLERS AND STRUCTLOG LOGGERS
197
+ handlers = []
198
+ loggers = []
199
+
200
+ if LOG_CONSOLE_ENABLED:
201
+ h = logging.StreamHandler(sys.stdout)
202
+ h.setLevel(getattr(logging, LOG_CONSOLE_LEVEL, TRACE_LEVEL))
203
+ h.setFormatter(logging.Formatter("%(message)s"))
204
+ logging.getLogger("console").addHandler(h)
205
+ loggers.append(create_struct_logger([colored_console_renderer()], "console"))
206
+
207
+ # if LOG_FILE_ENABLED:
208
+ # h = RotatingFileHandler(LOG_FILE_PATH, maxBytes=10 * 1024 * 1024, backupCount=5)
209
+ # h.setLevel(getattr(logging, LOG_FILE_LEVEL, logging.WARNING))
210
+ # h.setFormatter(logging.Formatter("%(message)s"))
211
+ # logging.getLogger("file").addHandler(h)
212
+ # loggers.append(create_struct_logger([plain_renderer()], "file"))
213
+
214
+ # if LOG_OTLP_ENABLED:
215
+ # provider = LoggerProvider()
216
+ # exporter = OTLPLogExporter()
217
+ # provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
218
+ # set_logger_provider(provider)
219
+ # h = LoggingHandler(
220
+ # level=getattr(logging, LOG_OTLP_LEVEL, logging.INFO), logger_provider=provider
221
+ # )
222
+ # h.setFormatter(logging.Formatter("%(message)s"))
223
+ # logging.getLogger("otel").addHandler(h)
224
+ # loggers.append(create_struct_logger([json_renderer()], "otel"))
225
+
226
+
227
+ class MultiLogger:
228
+ def __init__(self, *loggers: structlog.stdlib.BoundLogger):
229
+ self._loggers = loggers
230
+
231
+ def _log(self, level: str, *args: Any, **kwargs: Any):
232
+ for l in self._loggers:
233
+ getattr(l, level)(*args, **kwargs)
234
+
235
+ def debug(self, *a, **k):
236
+ self._log("debug", *a, **k)
237
+
238
+ def info(self, *a, **k):
239
+ self._log("info", *a, **k)
240
+
241
+ def warning(self, *a, **k):
242
+ self._log("warning", *a, **k)
243
+
244
+ def warn(self, *a, **k):
245
+ self._log("warn", *a, **k)
246
+
247
+ def error(self, *a, **k):
248
+ self._log("error", *a, **k)
249
+
250
+ def critical(self, *a, **k):
251
+ self._log("critical", *a, **k)
252
+
253
+ def fatal(self, *a, **k):
254
+ self._log("fatal", *a, **k)
255
+
256
+ def trace(self, *a, **k):
257
+ self._log("trace", *a, **k)
258
+
259
+ def bind(self, **kwargs):
260
+ return MultiLogger(*(l.bind(**kwargs) for l in self._loggers))
261
+
262
+
263
+ multi_logger = MultiLogger(*loggers)
264
+
265
+
266
+ def get_logger(name: Optional[str] = None) -> MultiLogger:
267
+ return multi_logger.bind(logger=name)
268
+
269
+
270
+ def get_module_logger(path: str) -> MultiLogger:
271
+ match = re.search(r"(?:/sdk|/api)(/.*)", path)
272
+ if match:
273
+ trimmed = match.group(0).lstrip("/")
274
+ dotted = trimmed.removesuffix(".py").replace("/", ".")
275
+ return get_logger(dotted)
276
+ return get_logger(os.path.basename(path).removesuffix(".py"))
@@ -1,7 +1,9 @@
1
1
  import time
2
2
  from functools import wraps
3
3
 
4
- from agenta.sdk.utils.logging import log
4
+ from agenta.sdk.utils.logging import get_module_logger
5
+
6
+ log = get_module_logger(__file__)
5
7
 
6
8
 
7
9
  def timeit(func):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "agenta"
3
- version = "0.38.2"
3
+ version = "0.39.0"
4
4
  description = "The SDK for agenta is an open-source LLMOps platform."
5
5
  readme = "README.md"
6
6
  authors = ["Mahmoud Mabrouk <mahmoud@agenta.ai>"]
@@ -28,10 +28,12 @@ importlib-metadata = ">=8.0.0,<9.0"
28
28
  httpx = ">=0.24, <0.28"
29
29
  pyyaml = "^6.0.2"
30
30
  toml = "^0.10.2"
31
- litellm ="^1.48.0"
31
+ litellm = "^1.61.15"
32
+ jinja2 = "^3.1.6"
32
33
  opentelemetry-api = ">=1.27.0,<2.0.0"
33
34
  opentelemetry-sdk = ">=1.27.0,<2.0.0"
34
- opentelemetry-exporter-otlp-proto-http = ">=1.27.0,<2.0.0"
35
+ opentelemetry-exporter-otlp-proto-http =">=1.27.0,<2.0.0"
36
+ structlog= "^25.2.0"
35
37
 
36
38
  [tool.poetry.group.dev.dependencies]
37
39
  posthog = "^3.1.0"
@@ -1,21 +0,0 @@
1
- import logging
2
- from os import getenv
3
-
4
-
5
- class Logger:
6
- def __init__(self, name="agenta.logger", level=logging.WARNING):
7
- if getenv("AGENTA_DEBUG"):
8
- level = logging.DEBUG
9
-
10
- self.logger = logging.getLogger(name)
11
- self.logger.setLevel(level)
12
-
13
- console_handler = logging.StreamHandler()
14
- self.logger.addHandler(console_handler)
15
-
16
- @property
17
- def log(self) -> logging.Logger:
18
- return self.logger
19
-
20
-
21
- log = Logger().log
File without changes
File without changes