agenta 0.19.5__tar.gz → 0.19.6a0__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 (168) hide show
  1. {agenta-0.19.5 → agenta-0.19.6a0}/PKG-INFO +1 -1
  2. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/__init__.py +1 -0
  3. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/agenta_init.py +6 -0
  4. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/decorators/llm_entrypoint.py +14 -3
  5. agenta-0.19.6a0/agenta/sdk/decorators/tracing.py +188 -0
  6. agenta-0.19.6a0/agenta/sdk/tracing/llm_tracing.py +460 -0
  7. agenta-0.19.6a0/agenta/sdk/tracing/tracing_context.py +28 -0
  8. agenta-0.19.6a0/agenta/sdk/utils/debug.py +68 -0
  9. {agenta-0.19.5 → agenta-0.19.6a0}/pyproject.toml +1 -1
  10. agenta-0.19.5/agenta/sdk/decorators/tracing.py +0 -116
  11. agenta-0.19.5/agenta/sdk/tracing/llm_tracing.py +0 -335
  12. {agenta-0.19.5 → agenta-0.19.6a0}/README.md +0 -0
  13. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/evaluation_commands.py +0 -0
  14. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/helper.py +0 -0
  15. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/main.py +0 -0
  16. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/telemetry.py +0 -0
  17. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/variant_commands.py +0 -0
  18. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/variant_configs.py +0 -0
  19. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/Readme.md +0 -0
  20. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/__init__.py +0 -0
  21. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/api.py +0 -0
  22. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/api_models.py +0 -0
  23. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/__init__.py +0 -0
  24. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/client.py +0 -0
  25. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/__init__.py +0 -0
  26. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/api_error.py +0 -0
  27. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/client_wrapper.py +0 -0
  28. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/datetime_utils.py +0 -0
  29. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/jsonable_encoder.py +0 -0
  30. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
  31. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/errors/__init__.py +0 -0
  32. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
  33. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/__init__.py +0 -0
  34. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/apps/__init__.py +0 -0
  35. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/apps/client.py +0 -0
  36. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/bases/__init__.py +0 -0
  37. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/bases/client.py +0 -0
  38. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/configs/__init__.py +0 -0
  39. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/configs/client.py +0 -0
  40. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/__init__.py +0 -0
  41. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/client.py +0 -0
  42. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/types/__init__.py +0 -0
  43. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/types/container_templates_response.py +0 -0
  44. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/environments/__init__.py +0 -0
  45. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/environments/client.py +0 -0
  46. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluations/__init__.py +0 -0
  47. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluations/client.py +0 -0
  48. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluators/__init__.py +0 -0
  49. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluators/client.py +0 -0
  50. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/observability/__init__.py +0 -0
  51. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/observability/client.py +0 -0
  52. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/testsets/__init__.py +0 -0
  53. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/testsets/client.py +0 -0
  54. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/__init__.py +0 -0
  55. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/client.py +0 -0
  56. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/types/__init__.py +0 -0
  57. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/types/add_variant_from_base_and_config_response.py +0 -0
  58. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/__init__.py +0 -0
  59. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/aggregated_result.py +0 -0
  60. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
  61. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/app.py +0 -0
  62. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/app_variant_response.py +0 -0
  63. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/app_variant_revision.py +0 -0
  64. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/base_output.py +0 -0
  65. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/body_import_testset.py +0 -0
  66. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/config_db.py +0 -0
  67. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/create_app_output.py +0 -0
  68. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/create_span.py +0 -0
  69. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/create_trace_response.py +0 -0
  70. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/docker_env_vars.py +0 -0
  71. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/environment_output.py +0 -0
  72. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/environment_output_extended.py +0 -0
  73. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/environment_revision.py +0 -0
  74. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/error.py +0 -0
  75. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation.py +0 -0
  76. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario.py +0 -0
  77. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
  78. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
  79. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
  80. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_score_update.py +0 -0
  81. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
  82. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_type.py +0 -0
  83. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_webhook.py +0 -0
  84. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluator.py +0 -0
  85. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluator_config.py +0 -0
  86. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/feedback.py +0 -0
  87. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/get_config_response.py +0 -0
  88. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/http_validation_error.py +0 -0
  89. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation.py +0 -0
  90. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
  91. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
  92. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
  93. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario_update.py +0 -0
  94. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_update.py +0 -0
  95. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/image.py +0 -0
  96. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/invite_request.py +0 -0
  97. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/list_api_keys_response.py +0 -0
  98. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
  99. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/llm_tokens.py +0 -0
  100. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/new_human_evaluation.py +0 -0
  101. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/new_testset.py +0 -0
  102. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/organization.py +0 -0
  103. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/organization_output.py +0 -0
  104. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/permission.py +0 -0
  105. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/result.py +0 -0
  106. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/score.py +0 -0
  107. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
  108. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span.py +0 -0
  109. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_detail.py +0 -0
  110. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_kind.py +0 -0
  111. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_status_code.py +0 -0
  112. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_variant.py +0 -0
  113. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/template.py +0 -0
  114. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/template_image_info.py +0 -0
  115. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/test_set_output_response.py +0 -0
  116. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/test_set_simple_response.py +0 -0
  117. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/trace_detail.py +0 -0
  118. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/uri.py +0 -0
  119. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/validation_error.py +0 -0
  120. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
  121. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/variant_action.py +0 -0
  122. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/variant_action_enum.py +0 -0
  123. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/with_pagination.py +0 -0
  124. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_member_response.py +0 -0
  125. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_permission.py +0 -0
  126. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_response.py +0 -0
  127. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_role.py +0 -0
  128. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_role_response.py +0 -0
  129. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/client.py +0 -0
  130. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/exceptions.py +0 -0
  131. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/config.py +0 -0
  132. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/config.toml +0 -0
  133. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/Dockerfile.cloud.template +0 -0
  134. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/Dockerfile.template +0 -0
  135. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/README.md +0 -0
  136. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/entrypoint.sh +0 -0
  137. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/lambda_function.py +0 -0
  138. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/main.py +0 -0
  139. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker_utils.py +0 -0
  140. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/__init__.py +0 -0
  141. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/client.py +0 -0
  142. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/context.py +0 -0
  143. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/decorators/base.py +0 -0
  144. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/router.py +0 -0
  145. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/__init__.py +0 -0
  146. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/callbacks.py +0 -0
  147. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/context_manager.py +0 -0
  148. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/logger.py +0 -0
  149. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/tasks_manager.py +0 -0
  150. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/types.py +0 -0
  151. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/utils/globals.py +0 -0
  152. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/utils/helper/openai_cost.py +0 -0
  153. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/utils/preinit.py +0 -0
  154. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/README.md +0 -0
  155. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/app.py +0 -0
  156. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/env.example +0 -0
  157. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/requirements.txt +0 -0
  158. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/template.toml +0 -0
  159. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/README.md +0 -0
  160. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/app.py +0 -0
  161. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/env.example +0 -0
  162. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/requirements.txt +0 -0
  163. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/template.toml +0 -0
  164. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/README.md +0 -0
  165. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/app.py +0 -0
  166. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/env.example +0 -0
  167. {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/requirements.txt +0 -0
  168. {agenta-0.19.5 → agenta-0.19.6a0}/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.19.5
3
+ Version: 0.19.6a0
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,6 +14,7 @@ from .sdk.types import (
14
14
  BinaryParam,
15
15
  )
16
16
 
17
+ from .sdk.tracing.logger import llm_logger as logging
17
18
  from .sdk.tracing.llm_tracing import Tracing
18
19
  from .sdk.decorators.tracing import instrument
19
20
  from .sdk.decorators.llm_entrypoint import entrypoint, app
@@ -239,6 +239,12 @@ def init(
239
239
  singleton = AgentaSingleton()
240
240
 
241
241
  singleton.init(app_id=app_id, host=host, api_key=api_key, config_fname=config_fname)
242
+
243
+ if os.environ.get("AGENTA_LOCAL", False):
244
+ singleton.host = singleton.host.replace(
245
+ "http://localhost", "http://host.docker.internal"
246
+ )
247
+
242
248
  tracing = Tracing(
243
249
  host=singleton.host, # type: ignore
244
250
  app_id=singleton.app_id, # type: ignore
@@ -18,6 +18,7 @@ from fastapi import Body, FastAPI, UploadFile, HTTPException
18
18
  import agenta
19
19
  from agenta.sdk.context import save_context
20
20
  from agenta.sdk.router import router as router
21
+ from agenta.sdk.tracing.logger import llm_logger as logging
21
22
  from agenta.sdk.tracing.llm_tracing import Tracing
22
23
  from agenta.sdk.decorators.base import BaseDecorator
23
24
  from agenta.sdk.types import (
@@ -52,6 +53,12 @@ app.add_middleware(
52
53
  app.include_router(router, prefix="")
53
54
 
54
55
 
56
+ from agenta.sdk.utils.debug import debug, DEBUG, SHIFT
57
+
58
+
59
+ logging.setLevel("DEBUG")
60
+
61
+
55
62
  class entrypoint(BaseDecorator):
56
63
  """Decorator class to wrap a function for HTTP POST, terminal exposure and enable tracing.
57
64
 
@@ -72,6 +79,7 @@ class entrypoint(BaseDecorator):
72
79
  config_params = agenta.config.all()
73
80
  ingestible_files = self.extract_ingestible_files(func_signature)
74
81
 
82
+ @debug()
75
83
  @functools.wraps(func)
76
84
  async def wrapper(*args, **kwargs) -> Any:
77
85
  func_params, api_config_params = self.split_kwargs(kwargs, config_params)
@@ -79,7 +87,7 @@ class entrypoint(BaseDecorator):
79
87
  agenta.config.set(**api_config_params)
80
88
 
81
89
  # Set the configuration and environment of the LLM app parent span at run-time
82
- agenta.tracing.set_span_attribute(
90
+ agenta.tracing.update_baggage(
83
91
  {"config": config_params, "environment": "playground"}
84
92
  )
85
93
 
@@ -90,6 +98,7 @@ class entrypoint(BaseDecorator):
90
98
 
91
99
  return llm_result
92
100
 
101
+ @debug()
93
102
  @functools.wraps(func)
94
103
  async def wrapper_deployed(*args, **kwargs) -> Any:
95
104
  func_params = {
@@ -104,13 +113,14 @@ class entrypoint(BaseDecorator):
104
113
  agenta.config.pull(config_name="default")
105
114
 
106
115
  # Set the configuration and environment of the LLM app parent span at run-time
107
- agenta.tracing.set_span_attribute(
116
+ agenta.tracing.update_baggage(
108
117
  {"config": config_params, "environment": kwargs["environment"]}
109
118
  )
110
119
 
111
120
  llm_result = await self.execute_function(
112
121
  func, *args, params=func_params, config_params=config_params
113
122
  )
123
+
114
124
  return llm_result
115
125
 
116
126
  self.update_function_signature(
@@ -190,6 +200,7 @@ class entrypoint(BaseDecorator):
190
200
  """
191
201
  is_coroutine_function = inspect.iscoroutinefunction(func)
192
202
  start_time = time.perf_counter()
203
+
193
204
  if is_coroutine_function:
194
205
  result = await func(*args, **func_params["params"])
195
206
  else:
@@ -410,7 +421,7 @@ class entrypoint(BaseDecorator):
410
421
  agenta.config.set(**args_config_params)
411
422
 
412
423
  # Set the configuration and environment of the LLM app parent span at run-time
413
- agenta.tracing.set_span_attribute(
424
+ agenta.tracing.update_baggage(
414
425
  {"config": agenta.config.all(), "environment": "bash"}
415
426
  )
416
427
 
@@ -0,0 +1,188 @@
1
+ # Stdlib Imports
2
+ import inspect
3
+ import traceback
4
+ from functools import wraps
5
+ from typing import Any, Callable, Optional
6
+
7
+ # Own Imports
8
+ import agenta as ag
9
+ from agenta.sdk.decorators.base import BaseDecorator
10
+ from agenta.sdk.tracing.logger import llm_logger as logging
11
+ from agenta.sdk.tracing.tracing_context import tracing_context, TracingContext
12
+ from agenta.sdk.utils.debug import debug, DEBUG, SHIFT
13
+
14
+
15
+ logging.setLevel("DEBUG")
16
+
17
+
18
+ class instrument(BaseDecorator):
19
+ """Decorator class for monitoring llm apps functions.
20
+
21
+ Args:
22
+ BaseDecorator (object): base decorator class
23
+
24
+ Example:
25
+ ```python
26
+ import agenta as ag
27
+
28
+ prompt_config = {"system_prompt": ..., "temperature": 0.5, "max_tokens": ...}
29
+
30
+ @ag.instrument(spankind="llm")
31
+ async def litellm_openai_call(prompt:str) -> str:
32
+ return "do something"
33
+
34
+ @ag.instrument(config=prompt_config) # spankind for parent span defaults to workflow
35
+ async def generate(prompt: str):
36
+ return ...
37
+ ```
38
+ """
39
+
40
+ def __init__(
41
+ self, config: Optional[dict] = None, spankind: str = "workflow"
42
+ ) -> None:
43
+ self.config = config
44
+ self.spankind = spankind
45
+ self.tracing = ag.tracing
46
+
47
+ def __call__(self, func: Callable[..., Any]):
48
+ is_coroutine_function = inspect.iscoroutinefunction(func)
49
+
50
+ @debug()
51
+ @wraps(func)
52
+ async def async_wrapper(*args, **kwargs):
53
+ result = None
54
+ func_args = inspect.getfullargspec(func).args
55
+ input_dict = {name: value for name, value in zip(func_args, args)}
56
+ input_dict.update(kwargs)
57
+
58
+ async def wrapped_func(*args, **kwargs):
59
+
60
+ # logging.debug(" ".join([">..", str(tracing_context.get())]))
61
+
62
+ token = None
63
+ if tracing_context.get() is None:
64
+ token = tracing_context.set(TracingContext())
65
+
66
+ # logging.debug(" ".join([">>.", str(tracing_context.get())]))
67
+
68
+ self.tracing.start_span(
69
+ name=func.__name__,
70
+ input=input_dict,
71
+ spankind=self.spankind,
72
+ config=self.config,
73
+ )
74
+
75
+ try:
76
+ result = await func(*args, **kwargs)
77
+
78
+ self.tracing.set_status(status="OK")
79
+ self.tracing.end_span(
80
+ outputs=(
81
+ {"message": result}
82
+ if not isinstance(result, dict)
83
+ else result
84
+ )
85
+ )
86
+
87
+ # logging.debug(" ".join(["<<.", str(tracing_context.get())]))
88
+
89
+ if token is not None:
90
+ tracing_context.reset(token)
91
+
92
+ # logging.debug(" ".join(["<..", str(tracing_context.get())]))
93
+
94
+ return result
95
+
96
+ except Exception as e:
97
+ result = {
98
+ "message": str(e),
99
+ "stacktrace": traceback.format_exc(),
100
+ }
101
+
102
+ self.tracing.set_attributes(
103
+ {"traceback_exception": traceback.format_exc()}
104
+ )
105
+ self.tracing.set_status(status="ERROR")
106
+ self.tracing.end_span(outputs=result)
107
+
108
+ # logging.debug(" ".join(["<<.", str(tracing_context.get())]))
109
+
110
+ if token is not None:
111
+ tracing_context.reset(token)
112
+
113
+ # logging.debug(" ".join(["<..", str(tracing_context.get())]))
114
+
115
+ raise e
116
+
117
+ return await wrapped_func(*args, **kwargs)
118
+
119
+ @wraps(func)
120
+ def sync_wrapper(*args, **kwargs):
121
+ result = None
122
+ func_args = inspect.getfullargspec(func).args
123
+ input_dict = {name: value for name, value in zip(func_args, args)}
124
+ input_dict.update(kwargs)
125
+
126
+ def wrapped_func(*args, **kwargs):
127
+
128
+ # logging.debug(" ".join([">..", str(tracing_context.get())]))
129
+
130
+ token = None
131
+ if tracing_context.get() is None:
132
+ token = tracing_context.set(TracingContext())
133
+
134
+ # logging.debug(" ".join([">>.", str(tracing_context.get())]))
135
+
136
+ span = self.tracing.start_span(
137
+ name=func.__name__,
138
+ input=input_dict,
139
+ spankind=self.spankind,
140
+ config=self.config,
141
+ )
142
+
143
+ try:
144
+ result = func(*args, **kwargs)
145
+
146
+ self.tracing.set_status(status="OK")
147
+ self.tracing.end_span(
148
+ outputs=(
149
+ {"message": result}
150
+ if not isinstance(result, dict)
151
+ else result
152
+ )
153
+ )
154
+
155
+ # logging.debug(" ".join(["<<.", str(tracing_context.get())]))
156
+
157
+ if token is not None:
158
+ tracing_context.reset(token)
159
+
160
+ # logging.debug(" ".join(["<..", str(tracing_context.get())]))
161
+
162
+ return result
163
+
164
+ except Exception as e:
165
+ result = {
166
+ "message": str(e),
167
+ "stacktrace": traceback.format_exc(),
168
+ }
169
+
170
+ self.tracing.set_attributes(
171
+ {"traceback_exception": traceback.format_exc()}
172
+ )
173
+
174
+ self.tracing.set_status(status="ERROR")
175
+ self.tracing.end_span(outputs=result)
176
+
177
+ # logging.debug(" ".join(["<<.", str(tracing_context.get())]))
178
+
179
+ if token is not None:
180
+ tracing_context.reset(token)
181
+
182
+ # logging.debug(" ".join(["<..", str(tracing_context.get())]))
183
+
184
+ raise e
185
+
186
+ return wrapped_func(*args, **kwargs)
187
+
188
+ return async_wrapper if is_coroutine_function else sync_wrapper