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.
- {agenta-0.19.5 → agenta-0.19.6a0}/PKG-INFO +1 -1
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/__init__.py +1 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/agenta_init.py +6 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/decorators/llm_entrypoint.py +14 -3
- agenta-0.19.6a0/agenta/sdk/decorators/tracing.py +188 -0
- agenta-0.19.6a0/agenta/sdk/tracing/llm_tracing.py +460 -0
- agenta-0.19.6a0/agenta/sdk/tracing/tracing_context.py +28 -0
- agenta-0.19.6a0/agenta/sdk/utils/debug.py +68 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/pyproject.toml +1 -1
- agenta-0.19.5/agenta/sdk/decorators/tracing.py +0 -116
- agenta-0.19.5/agenta/sdk/tracing/llm_tracing.py +0 -335
- {agenta-0.19.5 → agenta-0.19.6a0}/README.md +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/evaluation_commands.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/helper.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/main.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/telemetry.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/variant_commands.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/cli/variant_configs.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/Readme.md +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/api.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/api_models.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/api_error.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/client_wrapper.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/datetime_utils.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/jsonable_encoder.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/errors/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/apps/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/apps/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/bases/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/bases/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/configs/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/configs/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/types/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/containers/types/container_templates_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/environments/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/environments/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluations/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluations/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluators/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/evaluators/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/observability/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/observability/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/testsets/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/testsets/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/types/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/resources/variants/types/add_variant_from_base_and_config_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/aggregated_result.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/app.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/app_variant_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/app_variant_revision.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/base_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/body_import_testset.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/config_db.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/create_app_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/create_span.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/create_trace_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/docker_env_vars.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/environment_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/environment_output_extended.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/environment_revision.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/error.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_scenario_score_update.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_type.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluation_webhook.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluator.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/evaluator_config.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/feedback.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/get_config_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/http_validation_error.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_scenario_update.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/human_evaluation_update.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/image.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/invite_request.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/list_api_keys_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/llm_tokens.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/new_human_evaluation.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/new_testset.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/organization.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/organization_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/permission.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/result.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/score.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_detail.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_kind.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_status_code.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/span_variant.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/template.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/template_image_info.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/test_set_output_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/test_set_simple_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/trace_detail.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/uri.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/validation_error.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/variant_action.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/variant_action_enum.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/with_pagination.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_member_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_permission.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_role.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/backend/types/workspace_role_response.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/client/exceptions.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/config.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/config.toml +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/Dockerfile.cloud.template +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/Dockerfile.template +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/README.md +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/entrypoint.sh +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/lambda_function.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker-assets/main.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/docker/docker_utils.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/client.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/context.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/decorators/base.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/router.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/__init__.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/callbacks.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/context_manager.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/logger.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/tracing/tasks_manager.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/types.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/utils/globals.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/utils/helper/openai_cost.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/sdk/utils/preinit.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/README.md +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/app.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/env.example +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/requirements.txt +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/compose_email/template.toml +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/README.md +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/app.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/env.example +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/requirements.txt +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/extract_data_to_json/template.toml +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/README.md +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/app.py +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/env.example +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/requirements.txt +0 -0
- {agenta-0.19.5 → agenta-0.19.6a0}/agenta/templates/simple_prompt/template.toml +0 -0
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|