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