agenta 0.20.0a0__tar.gz → 0.20.0a3__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 (166) hide show
  1. {agenta-0.20.0a0 → agenta-0.20.0a3}/PKG-INFO +1 -1
  2. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/observability/client.py +11 -0
  3. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/span.py +1 -1
  4. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/span_detail.py +1 -1
  5. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/trace_detail.py +1 -1
  6. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/agenta_init.py +6 -0
  7. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/decorators/llm_entrypoint.py +49 -7
  8. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/decorators/tracing.py +32 -2
  9. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/callbacks.py +43 -14
  10. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/llm_tracing.py +83 -65
  11. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/tracing_context.py +0 -4
  12. {agenta-0.20.0a0 → agenta-0.20.0a3}/pyproject.toml +1 -1
  13. {agenta-0.20.0a0 → agenta-0.20.0a3}/README.md +0 -0
  14. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/__init__.py +0 -0
  15. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/cli/evaluation_commands.py +0 -0
  16. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/cli/helper.py +0 -0
  17. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/cli/main.py +0 -0
  18. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/cli/telemetry.py +0 -0
  19. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/cli/variant_commands.py +0 -0
  20. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/cli/variant_configs.py +0 -0
  21. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/Readme.md +0 -0
  22. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/__init__.py +0 -0
  23. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/api.py +0 -0
  24. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/api_models.py +0 -0
  25. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/__init__.py +0 -0
  26. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/client.py +0 -0
  27. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/core/__init__.py +0 -0
  28. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/core/api_error.py +0 -0
  29. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/core/client_wrapper.py +0 -0
  30. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/core/datetime_utils.py +0 -0
  31. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/core/jsonable_encoder.py +0 -0
  32. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
  33. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/errors/__init__.py +0 -0
  34. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
  35. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/__init__.py +0 -0
  36. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/apps/__init__.py +0 -0
  37. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/apps/client.py +0 -0
  38. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/bases/__init__.py +0 -0
  39. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/bases/client.py +0 -0
  40. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/configs/__init__.py +0 -0
  41. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/configs/client.py +0 -0
  42. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/containers/__init__.py +0 -0
  43. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/containers/client.py +0 -0
  44. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/containers/types/__init__.py +0 -0
  45. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/containers/types/container_templates_response.py +0 -0
  46. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/environments/__init__.py +0 -0
  47. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/environments/client.py +0 -0
  48. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/evaluations/__init__.py +0 -0
  49. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/evaluations/client.py +0 -0
  50. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/evaluators/__init__.py +0 -0
  51. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/evaluators/client.py +0 -0
  52. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/observability/__init__.py +0 -0
  53. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/testsets/__init__.py +0 -0
  54. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/testsets/client.py +0 -0
  55. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/variants/__init__.py +0 -0
  56. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/variants/client.py +0 -0
  57. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/variants/types/__init__.py +0 -0
  58. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/resources/variants/types/add_variant_from_base_and_config_response.py +0 -0
  59. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/__init__.py +0 -0
  60. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/aggregated_result.py +0 -0
  61. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
  62. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/app.py +0 -0
  63. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/app_variant_response.py +0 -0
  64. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/app_variant_revision.py +0 -0
  65. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/base_output.py +0 -0
  66. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/body_import_testset.py +0 -0
  67. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/config_db.py +0 -0
  68. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/create_app_output.py +0 -0
  69. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/create_span.py +0 -0
  70. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/create_trace_response.py +0 -0
  71. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/docker_env_vars.py +0 -0
  72. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/environment_output.py +0 -0
  73. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/environment_output_extended.py +0 -0
  74. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/environment_revision.py +0 -0
  75. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/error.py +0 -0
  76. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation.py +0 -0
  77. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_scenario.py +0 -0
  78. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
  79. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
  80. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
  81. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_scenario_score_update.py +0 -0
  82. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
  83. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_type.py +0 -0
  84. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluation_webhook.py +0 -0
  85. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluator.py +0 -0
  86. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/evaluator_config.py +0 -0
  87. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/feedback.py +0 -0
  88. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/get_config_response.py +0 -0
  89. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/http_validation_error.py +0 -0
  90. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/human_evaluation.py +0 -0
  91. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
  92. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
  93. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
  94. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/human_evaluation_scenario_update.py +0 -0
  95. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/human_evaluation_update.py +0 -0
  96. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/image.py +0 -0
  97. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/invite_request.py +0 -0
  98. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/list_api_keys_response.py +0 -0
  99. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
  100. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/llm_tokens.py +0 -0
  101. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/new_human_evaluation.py +0 -0
  102. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/new_testset.py +0 -0
  103. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/organization.py +0 -0
  104. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/organization_output.py +0 -0
  105. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/permission.py +0 -0
  106. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/result.py +0 -0
  107. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/score.py +0 -0
  108. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
  109. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/span_kind.py +0 -0
  110. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/span_status_code.py +0 -0
  111. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/span_variant.py +0 -0
  112. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/template.py +0 -0
  113. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/template_image_info.py +0 -0
  114. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/test_set_output_response.py +0 -0
  115. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/test_set_simple_response.py +0 -0
  116. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/uri.py +0 -0
  117. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/validation_error.py +0 -0
  118. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
  119. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/variant_action.py +0 -0
  120. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/variant_action_enum.py +0 -0
  121. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/with_pagination.py +0 -0
  122. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/workspace_member_response.py +0 -0
  123. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/workspace_permission.py +0 -0
  124. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/workspace_response.py +0 -0
  125. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/workspace_role.py +0 -0
  126. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/backend/types/workspace_role_response.py +0 -0
  127. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/client.py +0 -0
  128. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/client/exceptions.py +0 -0
  129. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/config.py +0 -0
  130. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/config.toml +0 -0
  131. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker-assets/Dockerfile.cloud.template +0 -0
  132. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker-assets/Dockerfile.template +0 -0
  133. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker-assets/README.md +0 -0
  134. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker-assets/entrypoint.sh +0 -0
  135. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker-assets/lambda_function.py +0 -0
  136. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker-assets/main.py +0 -0
  137. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/docker/docker_utils.py +0 -0
  138. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/__init__.py +0 -0
  139. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/client.py +0 -0
  140. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/context.py +0 -0
  141. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/decorators/base.py +0 -0
  142. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/router.py +0 -0
  143. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/__init__.py +0 -0
  144. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/context_manager.py +0 -0
  145. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/logger.py +0 -0
  146. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/tracing/tasks_manager.py +0 -0
  147. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/types.py +0 -0
  148. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/utils/debug.py +0 -0
  149. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/utils/globals.py +0 -0
  150. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/utils/helper/openai_cost.py +0 -0
  151. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/sdk/utils/preinit.py +0 -0
  152. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/compose_email/README.md +0 -0
  153. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/compose_email/app.py +0 -0
  154. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/compose_email/env.example +0 -0
  155. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/compose_email/requirements.txt +0 -0
  156. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/compose_email/template.toml +0 -0
  157. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/extract_data_to_json/README.md +0 -0
  158. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/extract_data_to_json/app.py +0 -0
  159. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/extract_data_to_json/env.example +0 -0
  160. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/extract_data_to_json/requirements.txt +0 -0
  161. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/extract_data_to_json/template.toml +0 -0
  162. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/simple_prompt/README.md +0 -0
  163. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/simple_prompt/app.py +0 -0
  164. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/simple_prompt/env.example +0 -0
  165. {agenta-0.20.0a0 → agenta-0.20.0a3}/agenta/templates/simple_prompt/requirements.txt +0 -0
  166. {agenta-0.20.0a0 → agenta-0.20.0a3}/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.20.0a0
3
+ Version: 0.20.0a3
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
@@ -17,6 +17,9 @@ from ...types.span_detail import SpanDetail
17
17
  from ...types.trace_detail import TraceDetail
18
18
  from ...types.with_pagination import WithPagination
19
19
 
20
+ from agenta.sdk.tracing.logger import llm_logger as logging
21
+
22
+
20
23
  try:
21
24
  import pydantic.v1 as pydantic # type: ignore
22
25
  except ImportError:
@@ -769,6 +772,14 @@ class AsyncObservabilityClient:
769
772
  ],
770
773
  )
771
774
  """
775
+
776
+ logging.debug("----")
777
+ logging.debug(
778
+ urllib.parse.urljoin(
779
+ f"{self._client_wrapper.get_base_url()}/", "observability/trace/"
780
+ ),
781
+ )
782
+ logging.debug(self._client_wrapper.get_headers())
772
783
  _response = await self._client_wrapper.httpx_client.request(
773
784
  "POST",
774
785
  urllib.parse.urljoin(
@@ -23,7 +23,7 @@ class Span(pydantic.BaseModel):
23
23
  created_at: dt.datetime
24
24
  variant: SpanVariant
25
25
  environment: typing.Optional[str]
26
- spankind: SpanKind
26
+ spankind: str
27
27
  status: SpanStatusCode
28
28
  metadata: typing.Dict[str, typing.Any]
29
29
  user_id: typing.Optional[str]
@@ -22,7 +22,7 @@ class SpanDetail(pydantic.BaseModel):
22
22
  created_at: dt.datetime
23
23
  variant: SpanVariant
24
24
  environment: typing.Optional[str]
25
- spankind: SpanKind
25
+ spankind: str
26
26
  status: SpanStatusCode
27
27
  metadata: typing.Dict[str, typing.Any]
28
28
  user_id: typing.Optional[str]
@@ -22,7 +22,7 @@ class TraceDetail(pydantic.BaseModel):
22
22
  created_at: dt.datetime
23
23
  variant: SpanVariant
24
24
  environment: typing.Optional[str]
25
- spankind: SpanKind
25
+ spankind: str
26
26
  status: SpanStatusCode
27
27
  metadata: typing.Dict[str, typing.Any]
28
28
  user_id: typing.Optional[str]
@@ -68,6 +68,12 @@ class AgentaSingleton:
68
68
  api_key or config.get("api_key") or os.environ.get("AGENTA_API_KEY")
69
69
  )
70
70
 
71
+ print(api_key)
72
+ print(config.get("api_key"))
73
+ print(os.environ.get("AGENTA_API_KEY"))
74
+ print(self.api_key)
75
+ print(os.environ)
76
+
71
77
  if not self.app_id:
72
78
  raise ValueError(
73
79
  "App ID must be specified. You can provide it in one of the following ways:\n"
@@ -141,7 +141,11 @@ class entrypoint(BaseDecorator):
141
141
  )
142
142
 
143
143
  entrypoint_result = await self.execute_function(
144
- func, *args, params=func_params, config_params=config_params
144
+ func,
145
+ True, # inline trace: True
146
+ *args,
147
+ params=func_params,
148
+ config_params=config_params,
145
149
  )
146
150
 
147
151
  return entrypoint_result
@@ -194,7 +198,11 @@ class entrypoint(BaseDecorator):
194
198
  )
195
199
 
196
200
  entrypoint_result = await self.execute_function(
197
- func, *args, params=func_params, config_params=config_params
201
+ func,
202
+ False, # inline trace: False
203
+ *args,
204
+ params=func_params,
205
+ config_params=config_params,
198
206
  )
199
207
 
200
208
  return entrypoint_result
@@ -205,7 +213,7 @@ class entrypoint(BaseDecorator):
205
213
  ingestible_files,
206
214
  )
207
215
 
208
- if route_path == "/":
216
+ if route_path == "":
209
217
  route_deployed = f"/{DEFAULT_PATH}_deployed"
210
218
  app.post(route_deployed, response_model=BaseResponse)(wrapper_deployed)
211
219
 
@@ -226,6 +234,8 @@ class entrypoint(BaseDecorator):
226
234
  )
227
235
  ### ---------------------- #
228
236
 
237
+ print(entrypoint.routes)
238
+
229
239
  if self.is_main_script(func) and route_path == "":
230
240
  self.handle_terminal_run(
231
241
  func,
@@ -272,7 +282,9 @@ class entrypoint(BaseDecorator):
272
282
  if name in func_params and func_params[name] is not None:
273
283
  func_params[name] = self.ingest_file(func_params[name])
274
284
 
275
- async def execute_function(self, func: Callable[..., Any], *args, **func_params):
285
+ async def execute_function(
286
+ self, func: Callable[..., Any], inline_trace, *args, **func_params
287
+ ):
276
288
  """Execute the function and handle any exceptions."""
277
289
 
278
290
  try:
@@ -281,6 +293,11 @@ class entrypoint(BaseDecorator):
281
293
  For synchronous functions, it calls them directly, while for asynchronous functions,
282
294
  it awaits their execution.
283
295
  """
296
+ WAIT_FOR_SPANS = True
297
+ TIMEOUT = 10
298
+ TIMESTEP = 0.01
299
+ NOFSTEPS = TIMEOUT / TIMESTEP
300
+
284
301
  data = None
285
302
  trace = None
286
303
 
@@ -296,18 +313,41 @@ class entrypoint(BaseDecorator):
296
313
  result = func(*args, **func_params["params"])
297
314
 
298
315
  if token is not None:
316
+ if WAIT_FOR_SPANS:
317
+ remaining_steps = NOFSTEPS
318
+
319
+ while not ag.tracing.is_trace_ready() and remaining_steps > 0:
320
+ await asyncio.sleep(0.01)
321
+ remaining_steps -= 1
322
+
299
323
  trace = ag.tracing.dump_trace()
324
+
325
+ if not inline_trace:
326
+ trace = {"trace_id": trace["trace_id"]}
327
+
328
+ ag.tracing.flush_spans()
300
329
  tracing_context.reset(token)
301
330
 
302
331
  if isinstance(result, Context):
303
332
  save_context(result)
304
333
 
334
+ DEFAULT_KEY = "message"
335
+
305
336
  if isinstance(result, Dict):
306
337
  data = result
338
+
339
+ # EVENTUALLY THIS PATCH SHOULD BE REMOVED
340
+ # PATCH: if message in result then only keep message key/value
341
+ # DEFAULT_KEY = "message"
342
+
343
+ if "message" in result.keys():
344
+ data = {DEFAULT_KEY: result["message"]}
345
+ # END OF PATCH
346
+
307
347
  elif isinstance(result, str):
308
- data = {"message": result}
348
+ data = {DEFAULT_KEY: result}
309
349
  elif isinstance(result, int) or isinstance(result, float):
310
- data = {"message": str(result)}
350
+ data = {DEFAULT_KEY: str(result)}
311
351
 
312
352
  if data is None:
313
353
  warning = (
@@ -515,6 +555,7 @@ class entrypoint(BaseDecorator):
515
555
  result = loop.run_until_complete(
516
556
  self.execute_function(
517
557
  func,
558
+ True, # inline trace: True
518
559
  **{"params": args_func_params, "config_params": args_config_params},
519
560
  )
520
561
  )
@@ -524,7 +565,7 @@ class entrypoint(BaseDecorator):
524
565
  print("-> data")
525
566
  print(json.dumps(result.data, indent=2))
526
567
  print("-> trace")
527
- print(json.dumps(result.trace, indent=2))
568
+ # print(json.dumps(result.trace, indent=2))
528
569
 
529
570
  def override_schema(
530
571
  self, openapi_schema: dict, func: str, endpoint: str, params: dict
@@ -598,6 +639,7 @@ class entrypoint(BaseDecorator):
598
639
  schema_to_override = openapi_schema["components"]["schemas"][
599
640
  f"Body_{func}_{endpoint}_post"
600
641
  ]["properties"]
642
+
601
643
  for param_name, param_val in params.items():
602
644
  if isinstance(param_val, GroupedMultipleChoiceParam):
603
645
  subschema = find_in_schema(
@@ -65,7 +65,22 @@ class instrument(BaseDecorator):
65
65
  ):
66
66
  result = await func(*args, **kwargs)
67
67
 
68
- ag.tracing.store_outputs(result)
68
+ outputs = result
69
+
70
+ # EVENTUALLY THIS PATCH SHOULD BE REMOVED
71
+ # PATCH : if result is not a dict, make it a dict, in span
72
+ DEFAULT_KEY = "default"
73
+
74
+ if not isinstance(result, dict):
75
+ value = result
76
+
77
+ if result.__class__.__module__ != "__builtin__":
78
+ value = repr(value)
79
+
80
+ outputs = {DEFAULT_KEY: result}
81
+ # END OF PATH
82
+
83
+ ag.tracing.store_outputs(outputs)
69
84
 
70
85
  return result
71
86
 
@@ -82,7 +97,22 @@ class instrument(BaseDecorator):
82
97
  ):
83
98
  result = func(*args, **kwargs)
84
99
 
85
- ag.tracing.store_outputs(result)
100
+ outputs = result
101
+
102
+ # EVENTUALLY THIS PATCH SHOULD BE REMOVED
103
+ # PATCH : if result is not a dict, make it a dict, in span
104
+ DEFAULT_KEY = "default"
105
+
106
+ if not isinstance(result, dict):
107
+ value = result
108
+
109
+ if result.__class__.__module__ != "__builtin__":
110
+ value = repr(value)
111
+
112
+ outputs = {DEFAULT_KEY: result}
113
+ # END OF PATH
114
+
115
+ ag.tracing.store_outputs(outputs)
86
116
 
87
117
  return result
88
118
 
@@ -1,5 +1,9 @@
1
1
  import agenta as ag
2
2
 
3
+ from agenta.sdk.tracing.tracing_context import tracing_context, TracingContext
4
+
5
+ from agenta.sdk.utils.debug import debug
6
+
3
7
 
4
8
  def litellm_handler():
5
9
  try:
@@ -23,20 +27,25 @@ def litellm_handler():
23
27
  LitellmCustomLogger (object): custom logger that allows us to override the events to capture.
24
28
  """
25
29
 
30
+ def __init__(self):
31
+ self.span = None
32
+
26
33
  @property
27
34
  def _trace(self):
28
35
  return ag.tracing
29
36
 
37
+ @debug()
30
38
  def log_pre_api_call(self, model, messages, kwargs):
31
39
  call_type = kwargs.get("call_type")
32
40
  span_kind = (
33
41
  "llm" if call_type in ["completion", "acompletion"] else "embedding"
34
42
  )
35
43
 
36
- ag.tracing.start_span(
44
+ self.span = ag.tracing.open_span(
37
45
  name=f"{span_kind}_call",
38
46
  input={"messages": kwargs["messages"]},
39
47
  spankind=span_kind,
48
+ active=False,
40
49
  )
41
50
  ag.tracing.set_attributes(
42
51
  {
@@ -49,9 +58,10 @@ def litellm_handler():
49
58
  }
50
59
  )
51
60
 
61
+ @debug()
52
62
  def log_stream_event(self, kwargs, response_obj, start_time, end_time):
53
- ag.tracing.set_status(status="OK")
54
- ag.tracing.end_span(
63
+ ag.tracing.set_status(status="OK", span_id=self.span.id)
64
+ ag.tracing.store_outputs(
55
65
  outputs={
56
66
  "message": kwargs.get(
57
67
  "complete_streaming_response"
@@ -65,13 +75,16 @@ def litellm_handler():
65
75
  "response_cost"
66
76
  ), # litellm calculates response cost
67
77
  },
78
+ span_id=self.span.id,
68
79
  )
80
+ ag.tracing.close_span(span_id=self.span.id)
69
81
 
82
+ @debug()
70
83
  def log_success_event(
71
84
  self, kwargs, response_obj: ModelResponse, start_time, end_time
72
85
  ):
73
- ag.tracing.set_status(status="OK")
74
- ag.tracing.end_span(
86
+ ag.tracing.set_status(status="OK", span_id=self.span.id)
87
+ ag.tracing.store_outputs(
75
88
  outputs={
76
89
  "message": response_obj.choices[0].message.content,
77
90
  "usage": (
@@ -83,12 +96,15 @@ def litellm_handler():
83
96
  "response_cost"
84
97
  ), # litellm calculates response cost
85
98
  },
99
+ span_id=self.span.id,
86
100
  )
101
+ ag.tracing.close_span(span_id=self.span.id)
87
102
 
103
+ @debug()
88
104
  def log_failure_event(
89
105
  self, kwargs, response_obj: ModelResponse, start_time, end_time
90
106
  ):
91
- ag.tracing.set_status(status="ERROR")
107
+ ag.tracing.set_status(status="ERROR", span_id=self.span.id)
92
108
  ag.tracing.set_attributes(
93
109
  {
94
110
  "traceback_exception": repr(
@@ -98,10 +114,11 @@ def litellm_handler():
98
114
  "end_time"
99
115
  ], # datetime object of when call was completed
100
116
  },
117
+ span_id=self.span.id,
101
118
  )
102
- ag.tracing.end_span(
119
+ ag.tracing.store_outputs(
103
120
  outputs={
104
- "message": kwargs["exception"], # the Exception raised
121
+ "message": repr(kwargs["exception"]), # the Exception raised
105
122
  "usage": (
106
123
  response_obj.usage.dict()
107
124
  if hasattr(response_obj, "usage")
@@ -111,13 +128,16 @@ def litellm_handler():
111
128
  "response_cost"
112
129
  ), # litellm calculates response cost
113
130
  },
131
+ span_id=self.span.id,
114
132
  )
133
+ ag.tracing.close_span(span_id=self.span.id)
115
134
 
135
+ @debug()
116
136
  async def async_log_stream_event(
117
137
  self, kwargs, response_obj, start_time, end_time
118
138
  ):
119
- ag.tracing.set_status(status="OK")
120
- ag.tracing.end_span(
139
+ ag.tracing.set_status(status="OK", span_id=self.span.id)
140
+ ag.tracing.store_outputs(
121
141
  outputs={
122
142
  "message": kwargs.get(
123
143
  "complete_streaming_response"
@@ -131,13 +151,16 @@ def litellm_handler():
131
151
  "response_cost"
132
152
  ), # litellm calculates response cost
133
153
  },
154
+ span_id=self.span.id,
134
155
  )
156
+ ag.tracing.close_span(span_id=self.span.id)
135
157
 
158
+ @debug()
136
159
  async def async_log_success_event(
137
160
  self, kwargs, response_obj, start_time, end_time
138
161
  ):
139
- ag.tracing.set_status(status="OK")
140
- ag.tracing.end_span(
162
+ ag.tracing.set_status(status="OK", span_id=self.span.id)
163
+ ag.tracing.store_outputs(
141
164
  outputs={
142
165
  "message": response_obj.choices[0].message.content,
143
166
  "usage": (
@@ -149,12 +172,15 @@ def litellm_handler():
149
172
  "response_cost"
150
173
  ), # litellm calculates response cost
151
174
  },
175
+ span_id=self.span.id,
152
176
  )
177
+ ag.tracing.close_span(span_id=self.span.id)
153
178
 
179
+ @debug()
154
180
  async def async_log_failure_event(
155
181
  self, kwargs, response_obj, start_time, end_time
156
182
  ):
157
- ag.tracing.set_status(status="ERROR")
183
+ ag.tracing.set_status(status="ERROR", span_id=self.span.id)
158
184
  ag.tracing.set_attributes(
159
185
  {
160
186
  "traceback_exception": kwargs[
@@ -164,8 +190,9 @@ def litellm_handler():
164
190
  "end_time"
165
191
  ], # datetime object of when call was completed
166
192
  },
193
+ span_id=self.span.id,
167
194
  )
168
- ag.tracing.end_span(
195
+ ag.tracing.store_outputs(
169
196
  outputs={
170
197
  "message": repr(kwargs["exception"]), # the Exception raised
171
198
  "usage": (
@@ -177,6 +204,8 @@ def litellm_handler():
177
204
  "response_cost"
178
205
  ), # litellm calculates response cost
179
206
  },
207
+ span_id=self.span.id,
180
208
  )
209
+ ag.tracing.close_span(span_id=self.span.id)
181
210
 
182
211
  return LitellmHandler()