agenta 0.27.3__tar.gz → 0.27.4a0__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 (198) hide show
  1. {agenta-0.27.3 → agenta-0.27.4a0}/PKG-INFO +1 -1
  2. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/decorators/routing.py +27 -3
  3. agenta-0.27.4a0/agenta/sdk/middleware/auth.py +136 -0
  4. agenta-0.27.4a0/agenta/sdk/middleware/cache.py +43 -0
  5. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/exporters.py +1 -1
  6. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/processors.py +1 -1
  7. agenta-0.27.4a0/agenta/sdk/utils/__init__.py +0 -0
  8. {agenta-0.27.3 → agenta-0.27.4a0}/pyproject.toml +1 -1
  9. {agenta-0.27.3 → agenta-0.27.4a0}/README.md +0 -0
  10. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/__init__.py +0 -0
  11. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/cli/evaluation_commands.py +0 -0
  12. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/cli/helper.py +0 -0
  13. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/cli/main.py +0 -0
  14. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/cli/telemetry.py +0 -0
  15. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/cli/variant_commands.py +0 -0
  16. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/cli/variant_configs.py +0 -0
  17. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/Readme.md +0 -0
  18. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/__init__.py +0 -0
  19. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/api.py +0 -0
  20. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/api_models.py +0 -0
  21. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/__init__.py +0 -0
  22. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/apps/__init__.py +0 -0
  23. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/apps/client.py +0 -0
  24. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/bases/__init__.py +0 -0
  25. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/bases/client.py +0 -0
  26. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/client.py +0 -0
  27. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/configs/__init__.py +0 -0
  28. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/configs/client.py +0 -0
  29. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/containers/__init__.py +0 -0
  30. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/containers/client.py +0 -0
  31. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/containers/types/__init__.py +0 -0
  32. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/containers/types/container_templates_response.py +0 -0
  33. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/__init__.py +0 -0
  34. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/api_error.py +0 -0
  35. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/client_wrapper.py +0 -0
  36. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/datetime_utils.py +0 -0
  37. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/file.py +0 -0
  38. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/http_client.py +0 -0
  39. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/jsonable_encoder.py +0 -0
  40. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/pydantic_utilities.py +0 -0
  41. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/query_encoder.py +0 -0
  42. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
  43. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/request_options.py +0 -0
  44. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/core/serialization.py +0 -0
  45. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/environments/__init__.py +0 -0
  46. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/environments/client.py +0 -0
  47. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/errors/__init__.py +0 -0
  48. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
  49. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/evaluations/__init__.py +0 -0
  50. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/evaluations/client.py +0 -0
  51. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/evaluators/__init__.py +0 -0
  52. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/evaluators/client.py +0 -0
  53. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/observability/__init__.py +0 -0
  54. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/observability/client.py +0 -0
  55. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/testsets/__init__.py +0 -0
  56. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/testsets/client.py +0 -0
  57. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/__init__.py +0 -0
  58. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/aggregated_result.py +0 -0
  59. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
  60. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/app.py +0 -0
  61. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/app_variant_response.py +0 -0
  62. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/app_variant_revision.py +0 -0
  63. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/base_output.py +0 -0
  64. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/body_import_testset.py +0 -0
  65. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/config_db.py +0 -0
  66. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/config_dto.py +0 -0
  67. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/config_response_model.py +0 -0
  68. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/correct_answer.py +0 -0
  69. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/create_app_output.py +0 -0
  70. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/create_span.py +0 -0
  71. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/create_trace_response.py +0 -0
  72. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/docker_env_vars.py +0 -0
  73. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/environment_output.py +0 -0
  74. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/environment_output_extended.py +0 -0
  75. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/environment_revision.py +0 -0
  76. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/error.py +0 -0
  77. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation.py +0 -0
  78. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_scenario.py +0 -0
  79. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
  80. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
  81. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
  82. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_scenario_score_update.py +0 -0
  83. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
  84. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluation_type.py +0 -0
  85. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluator.py +0 -0
  86. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluator_config.py +0 -0
  87. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluator_mapping_output_interface.py +0 -0
  88. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/evaluator_output_interface.py +0 -0
  89. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/get_config_response.py +0 -0
  90. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/http_validation_error.py +0 -0
  91. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/human_evaluation.py +0 -0
  92. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
  93. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
  94. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
  95. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/human_evaluation_scenario_update.py +0 -0
  96. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/human_evaluation_update.py +0 -0
  97. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/image.py +0 -0
  98. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/invite_request.py +0 -0
  99. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/lifecycle_dto.py +0 -0
  100. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/list_api_keys_response.py +0 -0
  101. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
  102. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/llm_tokens.py +0 -0
  103. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/lm_providers_enum.py +0 -0
  104. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/new_human_evaluation.py +0 -0
  105. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/new_testset.py +0 -0
  106. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/organization.py +0 -0
  107. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/organization_output.py +0 -0
  108. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/outputs.py +0 -0
  109. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/permission.py +0 -0
  110. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/reference_dto.py +0 -0
  111. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/reference_request_model.py +0 -0
  112. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/result.py +0 -0
  113. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/score.py +0 -0
  114. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
  115. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/span.py +0 -0
  116. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/span_detail.py +0 -0
  117. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/span_status_code.py +0 -0
  118. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/span_variant.py +0 -0
  119. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/template.py +0 -0
  120. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/template_image_info.py +0 -0
  121. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/test_set_output_response.py +0 -0
  122. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/test_set_simple_response.py +0 -0
  123. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/trace_detail.py +0 -0
  124. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/update_app_output.py +0 -0
  125. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/uri.py +0 -0
  126. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/validation_error.py +0 -0
  127. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
  128. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/variant_action.py +0 -0
  129. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/variant_action_enum.py +0 -0
  130. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/with_pagination.py +0 -0
  131. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/workspace_member_response.py +0 -0
  132. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/workspace_permission.py +0 -0
  133. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/workspace_response.py +0 -0
  134. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/workspace_role.py +0 -0
  135. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/types/workspace_role_response.py +0 -0
  136. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/variants/__init__.py +0 -0
  137. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/variants/client.py +0 -0
  138. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/variants/types/__init__.py +0 -0
  139. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +0 -0
  140. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/client.py +0 -0
  141. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/client/exceptions.py +0 -0
  142. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/config.py +0 -0
  143. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/config.toml +0 -0
  144. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker-assets/Dockerfile.cloud.template +0 -0
  145. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker-assets/Dockerfile.template +0 -0
  146. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker-assets/README.md +0 -0
  147. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker-assets/entrypoint.sh +0 -0
  148. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker-assets/lambda_function.py +0 -0
  149. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker-assets/main.py +0 -0
  150. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/docker/docker_utils.py +0 -0
  151. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/__init__.py +0 -0
  152. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/agenta_init.py +0 -0
  153. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/assets.py +0 -0
  154. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/client.py +0 -0
  155. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/context/__init__.py +0 -0
  156. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/context/routing.py +0 -0
  157. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/context/tracing.py +0 -0
  158. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/decorators/__init__.py +0 -0
  159. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/decorators/tracing.py +0 -0
  160. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/litellm/__init__.py +0 -0
  161. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/litellm/litellm.py +0 -0
  162. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/managers/__init__.py +0 -0
  163. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/managers/config.py +0 -0
  164. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/managers/deployment.py +0 -0
  165. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/managers/shared.py +0 -0
  166. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/managers/variant.py +0 -0
  167. {agenta-0.27.3/agenta/sdk/utils → agenta-0.27.4a0/agenta/sdk/middleware}/__init__.py +0 -0
  168. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/router.py +0 -0
  169. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/__init__.py +0 -0
  170. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/attributes.py +0 -0
  171. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/context.py +0 -0
  172. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/conventions.py +0 -0
  173. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/inline.py +0 -0
  174. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/spans.py +0 -0
  175. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/tracing/tracing.py +0 -0
  176. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/types.py +0 -0
  177. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/costs.py +0 -0
  178. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/debug.py +0 -0
  179. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/exceptions.py +0 -0
  180. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/globals.py +0 -0
  181. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/logging.py +0 -0
  182. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/preinit.py +0 -0
  183. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/sdk/utils/singleton.py +0 -0
  184. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/compose_email/README.md +0 -0
  185. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/compose_email/app.py +0 -0
  186. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/compose_email/env.example +0 -0
  187. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/compose_email/requirements.txt +0 -0
  188. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/compose_email/template.toml +0 -0
  189. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/extract_data_to_json/README.md +0 -0
  190. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/extract_data_to_json/app.py +0 -0
  191. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/extract_data_to_json/env.example +0 -0
  192. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/extract_data_to_json/requirements.txt +0 -0
  193. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/extract_data_to_json/template.toml +0 -0
  194. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/simple_prompt/README.md +0 -0
  195. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/simple_prompt/app.py +0 -0
  196. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/simple_prompt/env.example +0 -0
  197. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/simple_prompt/requirements.txt +0 -0
  198. {agenta-0.27.3 → agenta-0.27.4a0}/agenta/templates/simple_prompt/template.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agenta
3
- Version: 0.27.3
3
+ Version: 0.27.4a0
4
4
  Summary: The SDK for agenta is an open-source LLMOps platform.
5
5
  Home-page: https://agenta.ai
6
6
  Keywords: LLMOps,LLM,evaluation,prompt engineering
@@ -14,9 +14,10 @@ from os import environ
14
14
  from fastapi.middleware.cors import CORSMiddleware
15
15
  from fastapi import Body, FastAPI, UploadFile, HTTPException
16
16
 
17
+ from agenta.sdk.middleware.auth import AuthorizationMiddleware
17
18
  from agenta.sdk.context.routing import routing_context_manager, routing_context
18
19
  from agenta.sdk.context.tracing import tracing_context
19
- from agenta.sdk.router import router as router
20
+ from agenta.sdk.router import router
20
21
  from agenta.sdk.utils.exceptions import suppress
21
22
  from agenta.sdk.utils.logging import log
22
23
  from agenta.sdk.types import (
@@ -50,6 +51,9 @@ app.add_middleware(
50
51
  allow_headers=["*"],
51
52
  )
52
53
 
54
+ _MIDDLEWARES = True
55
+
56
+
53
57
  app.include_router(router, prefix="")
54
58
 
55
59
 
@@ -121,6 +125,26 @@ class entrypoint:
121
125
  route_path="",
122
126
  config_schema: Optional[BaseModel] = None,
123
127
  ):
128
+ ### --- Update Middleware --- #
129
+ try:
130
+ global _MIDDLEWARES # pylint: disable=global-statement
131
+
132
+ if _MIDDLEWARES:
133
+ app.add_middleware(
134
+ AuthorizationMiddleware,
135
+ host=ag.DEFAULT_AGENTA_SINGLETON_INSTANCE.host,
136
+ resource_id=ag.DEFAULT_AGENTA_SINGLETON_INSTANCE.app_id,
137
+ resource_type="application",
138
+ )
139
+
140
+ _MIDDLEWARES = False
141
+
142
+ except: # pylint: disable=bare-except
143
+ log.error("------------------------------------")
144
+ log.error("Agenta SDK - failed to secure route: %s", route_path)
145
+ log.error("------------------------------------")
146
+ ### --- Update Middleware --- #
147
+
124
148
  DEFAULT_PATH = "generate"
125
149
  PLAYGROUND_PATH = "/playground"
126
150
  RUN_PATH = "/run"
@@ -330,9 +354,9 @@ class entrypoint:
330
354
  *args,
331
355
  **func_params,
332
356
  ):
333
- log.info(f"---------------------------")
357
+ log.info("---------------------------")
334
358
  log.info(f"Agenta SDK - running route: {repr(self.route_path or '/')}")
335
- log.info(f"---------------------------")
359
+ log.info("---------------------------")
336
360
 
337
361
  tracing_context.set(routing_context.get())
338
362
 
@@ -0,0 +1,136 @@
1
+ from typing import Callable, Optional
2
+ from os import environ
3
+ from uuid import UUID
4
+ from json import dumps
5
+ from traceback import format_exc
6
+
7
+ import httpx
8
+ from starlette.middleware.base import BaseHTTPMiddleware
9
+ from fastapi import FastAPI, Request, Response
10
+
11
+ from agenta.sdk.utils.logging import log
12
+ from agenta.sdk.middleware.cache import TTLLRUCache
13
+
14
+ AGENTA_SDK_AUTH_CACHE_CAPACITY = environ.get(
15
+ "AGENTA_SDK_AUTH_CACHE_CAPACITY",
16
+ 512,
17
+ )
18
+
19
+ AGENTA_SDK_AUTH_CACHE_TTL = environ.get(
20
+ "AGENTA_SDK_AUTH_CACHE_TTL",
21
+ 15 * 60, # 15 minutes
22
+ )
23
+
24
+ AGENTA_UNAUTHORIZED_EXECUTION_ALLOWED = str(
25
+ environ.get("AGENTA_UNAUTHORIZED_EXECUTION_ALLOWED", False)
26
+ ).lower() in ("true", "1", "t")
27
+
28
+
29
+ class Deny(Response):
30
+ def __init__(self) -> None:
31
+ super().__init__(status_code=401, content="Unauthorized")
32
+
33
+
34
+ cache = TTLLRUCache(
35
+ capacity=AGENTA_SDK_AUTH_CACHE_CAPACITY,
36
+ ttl=AGENTA_SDK_AUTH_CACHE_TTL,
37
+ )
38
+
39
+
40
+ class AuthorizationMiddleware(BaseHTTPMiddleware):
41
+ def __init__(
42
+ self,
43
+ app: FastAPI,
44
+ host: str,
45
+ resource_id: UUID,
46
+ resource_type: str,
47
+ ):
48
+ super().__init__(app)
49
+
50
+ self.host = host
51
+ self.resource_id = resource_id
52
+ self.resource_type = resource_type
53
+
54
+ async def dispatch(
55
+ self,
56
+ request: Request,
57
+ call_next: Callable,
58
+ project_id: Optional[UUID] = None,
59
+ ):
60
+ if AGENTA_UNAUTHORIZED_EXECUTION_ALLOWED:
61
+ return await call_next(request)
62
+
63
+ try:
64
+ authorization = (
65
+ request.headers.get("Authorization")
66
+ or request.headers.get("authorization")
67
+ or None
68
+ )
69
+
70
+ headers = {"Authorization": authorization} if authorization else None
71
+
72
+ cookies = {"sAccessToken": request.cookies.get("sAccessToken")}
73
+
74
+ params = {
75
+ "action": "run_service",
76
+ "resource_type": self.resource_type,
77
+ "resource_id": self.resource_id,
78
+ }
79
+
80
+ if project_id:
81
+ params["project_id"] = project_id
82
+
83
+ _hash = dumps(
84
+ {
85
+ "headers": headers,
86
+ "cookies": cookies,
87
+ "params": params,
88
+ },
89
+ sort_keys=True,
90
+ )
91
+
92
+ cached_policy = cache.get(_hash)
93
+
94
+ if not cached_policy:
95
+ async with httpx.AsyncClient() as client:
96
+ response = await client.get(
97
+ f"{self.host}/api/permissions/verify",
98
+ headers=headers,
99
+ cookies=cookies,
100
+ params=params,
101
+ )
102
+
103
+ if response.status_code != 200:
104
+ cache.put(_hash, {"effect": "deny"})
105
+ return Deny()
106
+
107
+ auth = response.json()
108
+
109
+ if auth.get("effect") != "allow":
110
+ cache.put(_hash, {"effect": "deny"})
111
+ return Deny()
112
+
113
+ cached_policy = {
114
+ "effect": "allow",
115
+ "credentials": auth.get("credentials"),
116
+ }
117
+
118
+ cache.put(_hash, cached_policy)
119
+
120
+ if cached_policy.get("effect") == "deny":
121
+ return Deny()
122
+
123
+ request.state.credentials = cached_policy.get("credentials")
124
+
125
+ print(f"credentials: {request.state.credentials}")
126
+
127
+ return await call_next(request)
128
+
129
+ except: # pylint: disable=bare-except
130
+ log.error("------------------------------------------------------")
131
+ log.error("Agenta SDK - handling auth middleware exception below:")
132
+ log.error("------------------------------------------------------")
133
+ log.error(format_exc().strip("\n"))
134
+ log.error("------------------------------------------------------")
135
+
136
+ return Deny()
@@ -0,0 +1,43 @@
1
+ from time import time
2
+ from collections import OrderedDict
3
+
4
+
5
+ class TTLLRUCache:
6
+ def __init__(self, capacity: int, ttl: int):
7
+ self.cache = OrderedDict()
8
+ self.capacity = capacity
9
+ self.ttl = ttl
10
+
11
+ def get(self, key):
12
+ # CACHE
13
+ if key not in self.cache:
14
+ return None
15
+
16
+ value, expiry = self.cache[key]
17
+ # -----
18
+
19
+ # TTL
20
+ if time() > expiry:
21
+ del self.cache[key]
22
+
23
+ return None
24
+ # ---
25
+
26
+ # LRU
27
+ self.cache.move_to_end(key)
28
+ # ---
29
+
30
+ return value
31
+
32
+ def put(self, key, value):
33
+ # CACHE
34
+ if key in self.cache:
35
+ del self.cache[key]
36
+ # CACHE & LRU
37
+ elif len(self.cache) >= self.capacity:
38
+ self.cache.popitem(last=False)
39
+ # -----------
40
+
41
+ # TTL
42
+ self.cache[key] = (value, time() + self.ttl)
43
+ # ---
@@ -58,7 +58,7 @@ class InlineTraceExporter(SpanExporter):
58
58
  return trace
59
59
 
60
60
 
61
- OTLPSpanExporter._MAX_RETRY_TIMEOUT = 2
61
+ OTLPSpanExporter._MAX_RETRY_TIMEOUT = 2 # pylint: disable=protected-access
62
62
 
63
63
  ConsoleExporter = ConsoleSpanExporter
64
64
  InlineExporter = InlineTraceExporter
@@ -12,7 +12,7 @@ from opentelemetry.sdk.trace.export import (
12
12
 
13
13
  from agenta.sdk.utils.logging import log
14
14
 
15
- # LOAD CONTEXT, HERE
15
+ # LOAD CONTEXT, HERE !
16
16
 
17
17
 
18
18
  class TraceProcessor(BatchSpanProcessor):
File without changes
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "agenta"
3
- version = "0.27.3"
3
+ version = "0.27.4a0"
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>"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes