agenta 0.38.2__tar.gz → 0.39.0__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.38.2 → agenta-0.39.0}/PKG-INFO +4 -2
- {agenta-0.38.2 → agenta-0.39.0}/agenta/__init__.py +1 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/agenta_init.py +4 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/decorators/routing.py +2 -2
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/decorators/tracing.py +9 -5
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/litellm.py +3 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/apps.py +2 -4
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/config.py +2 -2
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/shared.py +2 -3
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/auth.py +3 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/otel.py +10 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/exporters.py +4 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/processors.py +3 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/tracing.py +3 -1
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/exceptions.py +3 -1
- agenta-0.39.0/agenta/sdk/utils/logging.py +276 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/timing.py +3 -1
- {agenta-0.38.2 → agenta-0.39.0}/pyproject.toml +5 -3
- agenta-0.38.2/agenta/sdk/utils/logging.py +0 -21
- {agenta-0.38.2 → agenta-0.39.0}/README.md +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/Readme.md +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/access_control/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/access_control/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/admin/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/admin/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/api_keys/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/api_keys/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/apps/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/apps/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/bases/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/bases/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/configs/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/configs/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/types/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/containers/types/container_templates_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/api_error.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/client_wrapper.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/datetime_utils.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/file.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/http_client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/jsonable_encoder.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/pydantic_utilities.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/query_encoder.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/request_options.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/core/serialization.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/environments/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/environments/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/errors/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluations/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluations/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluators/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/evaluators/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/human_evaluations/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/human_evaluations/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/format.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/query_analytics_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/observability/types/query_traces_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/organization/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/organization/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/scopes/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/scopes/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/testsets/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/testsets/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/account_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_node_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_node_dto_nodes_value.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_nodes_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_root_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_roots_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_tree_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/agenta_trees_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/aggregated_result.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/analytics_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/app.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/app_variant_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/app_variant_revision.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/base_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/body_import_testset.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/bucket_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/collect_status_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/config_db.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/config_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/config_response_model.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/correct_answer.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/create_app_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_model_settings_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_provider_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_provider_kind.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/custom_provider_settings_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/data.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/delete_evaluation.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/docker_env_vars.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/environment_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/environment_output_extended.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/environment_revision.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/error.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluation_type.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator_config.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator_mapping_output_interface.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/evaluator_output_interface.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/exception_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/get_config_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/header_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/http_validation_error.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/image.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/invite_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_analytics_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_data_point.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_scope_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_scopes_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_user_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/legacy_user_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/lifecycle_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/link_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/list_api_keys_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/metrics_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/new_testset.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/node_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/node_type.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_context_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_event_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_extra_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_link_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_span_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_span_kind.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_spans_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/o_tel_status_code.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_details.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_membership_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/organization_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/parent_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/permission.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/project_membership_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/project_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/project_scope.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/projects_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/provider_key_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/provider_kind.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/reference.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/reference_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/reference_request_model.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/result.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/role.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/root_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/scopes_response_model.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/score.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/secret_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/secret_kind.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/secret_response_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/span_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/span_dto_nodes_value.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/standard_provider_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/standard_provider_kind.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/standard_provider_settings_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/status_code.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/status_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/template.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/template_image_info.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/test_set_output_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/test_set_simple_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/time_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/tree_dto.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/tree_type.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/update_app_output.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/uri.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/user_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/validation_error.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/variant_action.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/variant_action_enum.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_member_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_membership_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_permission.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_request.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_role.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/types/workspace_role_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/types/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/vault/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/vault/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/workspace/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/backend/workspace/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/client.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_key_dto.py~HEAD +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_key_dto.py~feat_model-registry +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_kind.py~HEAD +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/client/types/provider_kind.py~feat_model-registry +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/config.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/config.toml +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/assets.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/exporting.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/routing.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/context/tracing.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/decorators/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/mockllm.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/litellm/mocks/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/deployment.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/secrets.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/variant.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/managers/vault.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/config.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/cors.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/inline.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/mock.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/middleware/vault.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/router.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/attributes.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/conventions.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/inline.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/propagation.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/tracing/spans.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/types.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/__init__.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/cache.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/constants.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/costs.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/globals.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/helpers.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/preinit.py +0 -0
- {agenta-0.38.2 → agenta-0.39.0}/agenta/sdk/utils/singleton.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: agenta
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.39.0
|
|
4
4
|
Summary: The SDK for agenta is an open-source LLMOps platform.
|
|
5
5
|
Keywords: LLMOps,LLM,evaluation,prompt engineering
|
|
6
6
|
Author: Mahmoud Mabrouk
|
|
@@ -18,13 +18,15 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
18
18
|
Requires-Dist: fastapi (>=0.100.0)
|
|
19
19
|
Requires-Dist: httpx (>=0.24,<0.28)
|
|
20
20
|
Requires-Dist: importlib-metadata (>=8.0.0,<9.0)
|
|
21
|
-
Requires-Dist:
|
|
21
|
+
Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
|
|
22
|
+
Requires-Dist: litellm (>=1.61.15,<2.0.0)
|
|
22
23
|
Requires-Dist: opentelemetry-api (>=1.27.0,<2.0.0)
|
|
23
24
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.27.0,<2.0.0)
|
|
24
25
|
Requires-Dist: opentelemetry-sdk (>=1.27.0,<2.0.0)
|
|
25
26
|
Requires-Dist: pydantic (>=2)
|
|
26
27
|
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
|
27
28
|
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
|
|
29
|
+
Requires-Dist: structlog (>=25.2.0,<26.0.0)
|
|
28
30
|
Requires-Dist: toml (>=0.10.2,<0.11.0)
|
|
29
31
|
Project-URL: Documentation, https://docs.agenta.ai
|
|
30
32
|
Project-URL: Homepage, https://agenta.ai
|
|
@@ -20,7 +20,7 @@ from .sdk.types import (
|
|
|
20
20
|
PromptTemplate,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
from .sdk.utils.logging import
|
|
23
|
+
from .sdk.utils.logging import get_module_logger
|
|
24
24
|
from .sdk.tracing import Tracing, get_tracer
|
|
25
25
|
from .sdk.decorators.tracing import instrument
|
|
26
26
|
from .sdk.tracing.conventions import Reference
|
|
@@ -3,7 +3,7 @@ from os import getenv
|
|
|
3
3
|
from typing import Optional, Callable, Any
|
|
4
4
|
from importlib.metadata import version
|
|
5
5
|
|
|
6
|
-
from agenta.sdk.utils.logging import
|
|
6
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
7
7
|
from agenta.sdk.utils.globals import set_global
|
|
8
8
|
from agenta.client.client import AgentaApi, AsyncAgentaApi
|
|
9
9
|
|
|
@@ -11,6 +11,9 @@ from agenta.sdk.tracing import Tracing
|
|
|
11
11
|
from agenta.sdk.context.routing import routing_context
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
log = get_module_logger(__file__)
|
|
15
|
+
|
|
16
|
+
|
|
14
17
|
class AgentaSingleton:
|
|
15
18
|
"""Singleton class to save all the "global variables" for the sdk."""
|
|
16
19
|
|
|
@@ -28,7 +28,7 @@ from agenta.sdk.context.tracing import (
|
|
|
28
28
|
)
|
|
29
29
|
from agenta.sdk.router import router
|
|
30
30
|
from agenta.sdk.utils.exceptions import suppress, display_exception
|
|
31
|
-
from agenta.sdk.utils.logging import
|
|
31
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
32
32
|
from agenta.sdk.utils.helpers import get_current_version
|
|
33
33
|
from agenta.sdk.types import (
|
|
34
34
|
MultipleChoice,
|
|
@@ -38,7 +38,7 @@ from agenta.sdk.types import (
|
|
|
38
38
|
|
|
39
39
|
import agenta as ag
|
|
40
40
|
|
|
41
|
-
log
|
|
41
|
+
log = get_module_logger(__file__)
|
|
42
42
|
|
|
43
43
|
AGENTA_RUNTIME_PREFIX = environ.get("AGENTA_RUNTIME_PREFIX", "")
|
|
44
44
|
|
|
@@ -5,6 +5,7 @@ from itertools import chain
|
|
|
5
5
|
from inspect import iscoroutinefunction, getfullargspec
|
|
6
6
|
|
|
7
7
|
from opentelemetry import baggage
|
|
8
|
+
from opentelemetry.trace import NonRecordingSpan
|
|
8
9
|
from opentelemetry.context import attach, detach, get_current
|
|
9
10
|
from opentelemetry.baggage import set_baggage, get_all
|
|
10
11
|
|
|
@@ -12,8 +13,13 @@ from agenta.sdk.utils.exceptions import suppress
|
|
|
12
13
|
from agenta.sdk.context.tracing import tracing_context
|
|
13
14
|
from agenta.sdk.tracing.conventions import parse_span_kind
|
|
14
15
|
|
|
16
|
+
|
|
17
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
18
|
+
|
|
15
19
|
import agenta as ag
|
|
16
20
|
|
|
21
|
+
log = get_module_logger(__name__)
|
|
22
|
+
|
|
17
23
|
|
|
18
24
|
class instrument: # pylint: disable=invalid-name
|
|
19
25
|
DEFAULT_KEY = "__default__"
|
|
@@ -56,7 +62,7 @@ class instrument: # pylint: disable=invalid-name
|
|
|
56
62
|
name=func.__name__,
|
|
57
63
|
kind=self.kind,
|
|
58
64
|
context=ctx,
|
|
59
|
-
):
|
|
65
|
+
) as span:
|
|
60
66
|
self._set_link()
|
|
61
67
|
|
|
62
68
|
self._pre_instrument(func, *args, **kwargs)
|
|
@@ -84,7 +90,7 @@ class instrument: # pylint: disable=invalid-name
|
|
|
84
90
|
name=func.__name__,
|
|
85
91
|
kind=self.kind,
|
|
86
92
|
context=ctx,
|
|
87
|
-
):
|
|
93
|
+
) as span:
|
|
88
94
|
self._set_link()
|
|
89
95
|
|
|
90
96
|
self._pre_instrument(func, *args, **kwargs)
|
|
@@ -291,9 +297,7 @@ class instrument: # pylint: disable=invalid-name
|
|
|
291
297
|
not in (
|
|
292
298
|
ignore
|
|
293
299
|
if isinstance(ignore, list)
|
|
294
|
-
else io.keys()
|
|
295
|
-
if ignore is True
|
|
296
|
-
else []
|
|
300
|
+
else io.keys() if ignore is True else []
|
|
297
301
|
)
|
|
298
302
|
}
|
|
299
303
|
|
|
@@ -5,7 +5,9 @@ import agenta as ag
|
|
|
5
5
|
|
|
6
6
|
from agenta.sdk.tracing.spans import CustomSpan
|
|
7
7
|
from agenta.sdk.utils.exceptions import suppress # TODO: use it !
|
|
8
|
-
from agenta.sdk.utils.logging import
|
|
8
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
9
|
+
|
|
10
|
+
log = get_module_logger(__file__)
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
def litellm_handler():
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
3
2
|
from agenta.sdk.utils.exceptions import handle_exceptions
|
|
4
3
|
|
|
5
4
|
import agenta as ag
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
logger = logging.getLogger(__name__)
|
|
6
|
+
log = get_module_logger(__file__)
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
class AppManager:
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import logging
|
|
3
2
|
from pathlib import Path
|
|
4
3
|
from typing import Optional, Type, TypeVar, Dict, Any, Union
|
|
5
4
|
|
|
6
5
|
import yaml
|
|
7
6
|
from pydantic import BaseModel
|
|
8
7
|
|
|
8
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
9
9
|
from agenta.sdk.managers.shared import SharedManager
|
|
10
10
|
from agenta.sdk.context.routing import routing_context
|
|
11
11
|
|
|
12
12
|
T = TypeVar("T", bound=BaseModel)
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
log = get_module_logger(__file__)
|
|
15
15
|
|
|
16
16
|
AVAILABLE_ENVIRONMENTS = ["development", "production", "staging"]
|
|
17
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
from typing import Optional, Dict, Any
|
|
3
2
|
|
|
3
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
4
4
|
from agenta.sdk.utils.exceptions import handle_exceptions
|
|
5
5
|
|
|
6
6
|
from agenta.sdk.types import (
|
|
@@ -13,8 +13,7 @@ from agenta.client.backend.types.reference_request_model import ReferenceRequest
|
|
|
13
13
|
|
|
14
14
|
import agenta as ag
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
16
|
+
log = get_module_logger(__file__)
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
class SharedManager:
|
|
@@ -11,10 +11,12 @@ from fastapi.responses import JSONResponse
|
|
|
11
11
|
from agenta.sdk.utils.cache import TTLLRUCache
|
|
12
12
|
from agenta.sdk.utils.constants import TRUTHY
|
|
13
13
|
from agenta.sdk.utils.exceptions import display_exception
|
|
14
|
-
from agenta.sdk.utils.logging import
|
|
14
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
15
15
|
|
|
16
16
|
import agenta as ag
|
|
17
17
|
|
|
18
|
+
log = get_module_logger(__file__)
|
|
19
|
+
|
|
18
20
|
AGENTA_RUNTIME_PREFIX = getenv("AGENTA_RUNTIME_PREFIX", "")
|
|
19
21
|
|
|
20
22
|
|
|
@@ -9,6 +9,10 @@ from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapProp
|
|
|
9
9
|
from agenta.sdk.utils.exceptions import suppress
|
|
10
10
|
from agenta.sdk.tracing.propagation import extract
|
|
11
11
|
|
|
12
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
13
|
+
|
|
14
|
+
log = get_module_logger(__name__)
|
|
15
|
+
|
|
12
16
|
|
|
13
17
|
class OTelMiddleware(BaseHTTPMiddleware):
|
|
14
18
|
def __init__(self, app: FastAPI):
|
|
@@ -17,8 +21,13 @@ class OTelMiddleware(BaseHTTPMiddleware):
|
|
|
17
21
|
async def dispatch(self, request: Request, call_next: Callable):
|
|
18
22
|
request.state.otel = {"baggage": {}, "traceparent": None}
|
|
19
23
|
|
|
24
|
+
headers = dict(request.headers)
|
|
25
|
+
|
|
26
|
+
if "newrelic" in headers:
|
|
27
|
+
headers["traceparent"] = None
|
|
28
|
+
|
|
20
29
|
with suppress():
|
|
21
|
-
_, traceparent, baggage = extract(
|
|
30
|
+
_, traceparent, baggage = extract(headers)
|
|
22
31
|
|
|
23
32
|
request.state.otel = {"baggage": baggage, "traceparent": traceparent}
|
|
24
33
|
|
|
@@ -16,6 +16,10 @@ from agenta.sdk.context.exporting import (
|
|
|
16
16
|
)
|
|
17
17
|
from agenta.sdk.utils.cache import TTLLRUCache
|
|
18
18
|
|
|
19
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
20
|
+
|
|
21
|
+
log = get_module_logger(__file__)
|
|
22
|
+
|
|
19
23
|
|
|
20
24
|
class InlineTraceExporter(SpanExporter):
|
|
21
25
|
def __init__(
|
|
@@ -13,9 +13,11 @@ from opentelemetry.sdk.trace.export import (
|
|
|
13
13
|
_DEFAULT_EXPORT_TIMEOUT_MILLIS,
|
|
14
14
|
)
|
|
15
15
|
|
|
16
|
-
from agenta.sdk.utils.logging import
|
|
16
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
17
17
|
from agenta.sdk.tracing.conventions import Reference
|
|
18
18
|
|
|
19
|
+
log = get_module_logger(__file__)
|
|
20
|
+
|
|
19
21
|
|
|
20
22
|
class TraceProcessor(BatchSpanProcessor):
|
|
21
23
|
def __init__(
|
|
@@ -15,7 +15,7 @@ from opentelemetry.sdk.resources import Resource
|
|
|
15
15
|
|
|
16
16
|
from agenta.sdk.utils.singleton import Singleton
|
|
17
17
|
from agenta.sdk.utils.exceptions import suppress
|
|
18
|
-
from agenta.sdk.utils.logging import
|
|
18
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
19
19
|
from agenta.sdk.tracing.processors import TraceProcessor
|
|
20
20
|
from agenta.sdk.tracing.exporters import InlineExporter, OTLPExporter
|
|
21
21
|
from agenta.sdk.tracing.spans import CustomSpan
|
|
@@ -24,6 +24,8 @@ from agenta.sdk.tracing.conventions import Reference, is_valid_attribute_key
|
|
|
24
24
|
from agenta.sdk.tracing.propagation import extract, inject
|
|
25
25
|
from agenta.sdk.utils.cache import TTLLRUCache
|
|
26
26
|
|
|
27
|
+
log = get_module_logger(__file__)
|
|
28
|
+
|
|
27
29
|
|
|
28
30
|
class Tracing(metaclass=Singleton):
|
|
29
31
|
VERSION = "0.1.0"
|
|
@@ -3,7 +3,9 @@ from traceback import format_exc
|
|
|
3
3
|
from functools import wraps
|
|
4
4
|
from inspect import iscoroutinefunction
|
|
5
5
|
|
|
6
|
-
from agenta.sdk.utils.logging import
|
|
6
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
7
|
+
|
|
8
|
+
log = get_module_logger(__file__)
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
def display_exception(message: str):
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import re
|
|
5
|
+
import sys
|
|
6
|
+
import logging
|
|
7
|
+
|
|
8
|
+
import structlog
|
|
9
|
+
from structlog.typing import EventDict, WrappedLogger, Processor
|
|
10
|
+
|
|
11
|
+
# from datetime import datetime
|
|
12
|
+
# from logging.handlers import RotatingFileHandler
|
|
13
|
+
|
|
14
|
+
# from opentelemetry.trace import get_current_span
|
|
15
|
+
# from opentelemetry._logs import set_logger_provider
|
|
16
|
+
# from opentelemetry.sdk._logs import LoggingHandler, LoggerProvider
|
|
17
|
+
# from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
|
|
18
|
+
# from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
|
|
19
|
+
|
|
20
|
+
TRACE_LEVEL = 1
|
|
21
|
+
logging.TRACE = TRACE_LEVEL
|
|
22
|
+
logging.addLevelName(TRACE_LEVEL, "TRACE")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def trace(self, message, *args, **kwargs):
|
|
26
|
+
if self.isEnabledFor(TRACE_LEVEL):
|
|
27
|
+
self._log(TRACE_LEVEL, message, args, **kwargs)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
logging.Logger.trace = trace
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def bound_logger_trace(self, *args, **kwargs):
|
|
34
|
+
return self._proxy_to_logger("trace", *args, **kwargs)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
structlog.stdlib.BoundLogger.trace = bound_logger_trace
|
|
38
|
+
|
|
39
|
+
# ENV VARS
|
|
40
|
+
LOG_CONSOLE_ENABLED = os.getenv("LOG_CONSOLE_ENABLED", "true") == "true"
|
|
41
|
+
LOG_CONSOLE_LEVEL = os.getenv("LOG_CONSOLE_LEVEL", "TRACE").upper()
|
|
42
|
+
|
|
43
|
+
# LOG_OTLP_ENABLED = os.getenv("LOG_OTLP_ENABLED", "false") == "true"
|
|
44
|
+
# LOG_OTLP_LEVEL = os.getenv("LOG_OTLP_LEVEL", "INFO").upper()
|
|
45
|
+
|
|
46
|
+
# LOG_FILE_ENABLED = os.getenv("LOG_FILE_ENABLED", "true") == "true"
|
|
47
|
+
# LOG_FILE_LEVEL = os.getenv("LOG_FILE_LEVEL", "WARNING").upper()
|
|
48
|
+
# LOG_FILE_BASE = os.getenv("LOG_FILE_PATH", "error")
|
|
49
|
+
# LOG_FILE_DATE = datetime.utcnow().strftime("%Y-%m-%d")
|
|
50
|
+
# LOG_FILE_PATH = f"{LOG_FILE_BASE}-{LOG_FILE_DATE}.log"
|
|
51
|
+
|
|
52
|
+
# COLORS
|
|
53
|
+
LEVEL_COLORS = {
|
|
54
|
+
"TRACE": "\033[97m",
|
|
55
|
+
"DEBUG": "\033[38;5;39m",
|
|
56
|
+
"INFO": "\033[38;5;70m",
|
|
57
|
+
"INFO.": "\033[38;5;70m",
|
|
58
|
+
"WARNING": "\033[38;5;214m",
|
|
59
|
+
"WARN.": "\033[38;5;214m",
|
|
60
|
+
"ERROR": "\033[38;5;203m",
|
|
61
|
+
"CRITICAL": "\033[38;5;199m",
|
|
62
|
+
"FATAL": "\033[1;37;41m",
|
|
63
|
+
}
|
|
64
|
+
RESET = "\033[0m"
|
|
65
|
+
|
|
66
|
+
SEVERITY_NUMBERS = {
|
|
67
|
+
"TRACE": 1,
|
|
68
|
+
"DEBUG": 5,
|
|
69
|
+
"INFO": 9,
|
|
70
|
+
"INFO.": 9,
|
|
71
|
+
"WARNING": 13,
|
|
72
|
+
"WARN.": 13,
|
|
73
|
+
"ERROR": 17,
|
|
74
|
+
"CRITICAL": 21,
|
|
75
|
+
"FATAL": 21,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# PROCESSORS
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def process_positional_args(_, __, event_dict: EventDict) -> EventDict:
|
|
82
|
+
args = event_dict.pop("positional_args", ())
|
|
83
|
+
if args and isinstance(event_dict.get("event"), str):
|
|
84
|
+
try:
|
|
85
|
+
event_dict["event"] = event_dict["event"] % args
|
|
86
|
+
except Exception:
|
|
87
|
+
event_dict["event"] = f"{event_dict['event']} {args}"
|
|
88
|
+
return event_dict
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# def add_trace_context(_, __, event_dict: EventDict) -> EventDict:
|
|
92
|
+
# span = get_current_span()
|
|
93
|
+
# if span and span.get_span_context().is_valid:
|
|
94
|
+
# ctx = span.get_span_context()
|
|
95
|
+
# event_dict["TraceId"] = format(ctx.trace_id, "032x")
|
|
96
|
+
# event_dict["SpanId"] = format(ctx.span_id, "016x")
|
|
97
|
+
# return event_dict
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def add_logger_info(
|
|
101
|
+
logger: WrappedLogger, method_name: str, event_dict: EventDict
|
|
102
|
+
) -> EventDict:
|
|
103
|
+
level = method_name.upper()
|
|
104
|
+
if level == "CRITICAL":
|
|
105
|
+
level = "FATAL"
|
|
106
|
+
elif level == "WARNING":
|
|
107
|
+
level = "WARN."
|
|
108
|
+
elif level == "INFO":
|
|
109
|
+
level = "INFO."
|
|
110
|
+
|
|
111
|
+
event_dict["level"] = level
|
|
112
|
+
event_dict["SeverityText"] = level
|
|
113
|
+
event_dict["SeverityNumber"] = SEVERITY_NUMBERS.get(level, 9)
|
|
114
|
+
event_dict["LoggerName"] = logger.name
|
|
115
|
+
event_dict["MethodName"] = method_name
|
|
116
|
+
return event_dict
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def colored_console_renderer() -> Processor:
|
|
120
|
+
hidden = {
|
|
121
|
+
"SeverityText",
|
|
122
|
+
"SeverityNumber",
|
|
123
|
+
"MethodName",
|
|
124
|
+
"logger_factory",
|
|
125
|
+
"LoggerName",
|
|
126
|
+
"level",
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
def render(_, __, event_dict: EventDict) -> str:
|
|
130
|
+
ts = event_dict.pop("Timestamp", "")[:23] + "Z"
|
|
131
|
+
level = event_dict.pop("level", "INFO")
|
|
132
|
+
msg = event_dict.pop("event", "")
|
|
133
|
+
color = LEVEL_COLORS.get(level, "")
|
|
134
|
+
padded = f"[{level:<5}]"
|
|
135
|
+
logger = f"\033[38;5;245m[{event_dict.pop('logger', '')}]\033[0m"
|
|
136
|
+
extras = " ".join(
|
|
137
|
+
f"\033[38;5;245m{k}={v}\033[0m"
|
|
138
|
+
for k, v in event_dict.items()
|
|
139
|
+
if k not in hidden
|
|
140
|
+
)
|
|
141
|
+
return f"{ts} {color}{padded}{RESET} {msg} {logger} {extras}"
|
|
142
|
+
|
|
143
|
+
return render
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# def plain_renderer() -> Processor:
|
|
147
|
+
# hidden = {
|
|
148
|
+
# "SeverityText",
|
|
149
|
+
# "SeverityNumber",
|
|
150
|
+
# "MethodName",
|
|
151
|
+
# "logger_factory",
|
|
152
|
+
# "LoggerName",
|
|
153
|
+
# "level",
|
|
154
|
+
# }
|
|
155
|
+
|
|
156
|
+
# def render(_, __, event_dict: EventDict) -> str:
|
|
157
|
+
# ts = event_dict.pop("Timestamp", "")[:23] + "Z"
|
|
158
|
+
# level = event_dict.get("level", "")
|
|
159
|
+
# msg = event_dict.pop("event", "")
|
|
160
|
+
# padded = f"[{level:<5}]"
|
|
161
|
+
# logger = f"[{event_dict.pop('logger', '')}]"
|
|
162
|
+
# extras = " ".join(f"{k}={v}" for k, v in event_dict.items() if k not in hidden)
|
|
163
|
+
# return f"{ts} {padded} {msg} {logger} {extras}"
|
|
164
|
+
|
|
165
|
+
# return render
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
# def json_renderer() -> Processor:
|
|
169
|
+
# return structlog.processors.JSONRenderer()
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
SHARED_PROCESSORS: list[Processor] = [
|
|
173
|
+
structlog.processors.TimeStamper(fmt="iso", utc=True, key="Timestamp"),
|
|
174
|
+
process_positional_args,
|
|
175
|
+
# add_trace_context,
|
|
176
|
+
add_logger_info,
|
|
177
|
+
structlog.processors.format_exc_info,
|
|
178
|
+
structlog.processors.dict_tracebacks,
|
|
179
|
+
]
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def create_struct_logger(
|
|
183
|
+
processors: list[Processor], name: str
|
|
184
|
+
) -> structlog.stdlib.BoundLogger:
|
|
185
|
+
logger = logging.getLogger(name)
|
|
186
|
+
logger.setLevel(TRACE_LEVEL)
|
|
187
|
+
return structlog.wrap_logger(
|
|
188
|
+
logger,
|
|
189
|
+
processors=SHARED_PROCESSORS + processors,
|
|
190
|
+
wrapper_class=structlog.stdlib.BoundLogger,
|
|
191
|
+
logger_factory=structlog.stdlib.LoggerFactory(),
|
|
192
|
+
cache_logger_on_first_use=True,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# CONFIGURE HANDLERS AND STRUCTLOG LOGGERS
|
|
197
|
+
handlers = []
|
|
198
|
+
loggers = []
|
|
199
|
+
|
|
200
|
+
if LOG_CONSOLE_ENABLED:
|
|
201
|
+
h = logging.StreamHandler(sys.stdout)
|
|
202
|
+
h.setLevel(getattr(logging, LOG_CONSOLE_LEVEL, TRACE_LEVEL))
|
|
203
|
+
h.setFormatter(logging.Formatter("%(message)s"))
|
|
204
|
+
logging.getLogger("console").addHandler(h)
|
|
205
|
+
loggers.append(create_struct_logger([colored_console_renderer()], "console"))
|
|
206
|
+
|
|
207
|
+
# if LOG_FILE_ENABLED:
|
|
208
|
+
# h = RotatingFileHandler(LOG_FILE_PATH, maxBytes=10 * 1024 * 1024, backupCount=5)
|
|
209
|
+
# h.setLevel(getattr(logging, LOG_FILE_LEVEL, logging.WARNING))
|
|
210
|
+
# h.setFormatter(logging.Formatter("%(message)s"))
|
|
211
|
+
# logging.getLogger("file").addHandler(h)
|
|
212
|
+
# loggers.append(create_struct_logger([plain_renderer()], "file"))
|
|
213
|
+
|
|
214
|
+
# if LOG_OTLP_ENABLED:
|
|
215
|
+
# provider = LoggerProvider()
|
|
216
|
+
# exporter = OTLPLogExporter()
|
|
217
|
+
# provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
|
|
218
|
+
# set_logger_provider(provider)
|
|
219
|
+
# h = LoggingHandler(
|
|
220
|
+
# level=getattr(logging, LOG_OTLP_LEVEL, logging.INFO), logger_provider=provider
|
|
221
|
+
# )
|
|
222
|
+
# h.setFormatter(logging.Formatter("%(message)s"))
|
|
223
|
+
# logging.getLogger("otel").addHandler(h)
|
|
224
|
+
# loggers.append(create_struct_logger([json_renderer()], "otel"))
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
class MultiLogger:
|
|
228
|
+
def __init__(self, *loggers: structlog.stdlib.BoundLogger):
|
|
229
|
+
self._loggers = loggers
|
|
230
|
+
|
|
231
|
+
def _log(self, level: str, *args: Any, **kwargs: Any):
|
|
232
|
+
for l in self._loggers:
|
|
233
|
+
getattr(l, level)(*args, **kwargs)
|
|
234
|
+
|
|
235
|
+
def debug(self, *a, **k):
|
|
236
|
+
self._log("debug", *a, **k)
|
|
237
|
+
|
|
238
|
+
def info(self, *a, **k):
|
|
239
|
+
self._log("info", *a, **k)
|
|
240
|
+
|
|
241
|
+
def warning(self, *a, **k):
|
|
242
|
+
self._log("warning", *a, **k)
|
|
243
|
+
|
|
244
|
+
def warn(self, *a, **k):
|
|
245
|
+
self._log("warn", *a, **k)
|
|
246
|
+
|
|
247
|
+
def error(self, *a, **k):
|
|
248
|
+
self._log("error", *a, **k)
|
|
249
|
+
|
|
250
|
+
def critical(self, *a, **k):
|
|
251
|
+
self._log("critical", *a, **k)
|
|
252
|
+
|
|
253
|
+
def fatal(self, *a, **k):
|
|
254
|
+
self._log("fatal", *a, **k)
|
|
255
|
+
|
|
256
|
+
def trace(self, *a, **k):
|
|
257
|
+
self._log("trace", *a, **k)
|
|
258
|
+
|
|
259
|
+
def bind(self, **kwargs):
|
|
260
|
+
return MultiLogger(*(l.bind(**kwargs) for l in self._loggers))
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
multi_logger = MultiLogger(*loggers)
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def get_logger(name: Optional[str] = None) -> MultiLogger:
|
|
267
|
+
return multi_logger.bind(logger=name)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def get_module_logger(path: str) -> MultiLogger:
|
|
271
|
+
match = re.search(r"(?:/sdk|/api)(/.*)", path)
|
|
272
|
+
if match:
|
|
273
|
+
trimmed = match.group(0).lstrip("/")
|
|
274
|
+
dotted = trimmed.removesuffix(".py").replace("/", ".")
|
|
275
|
+
return get_logger(dotted)
|
|
276
|
+
return get_logger(os.path.basename(path).removesuffix(".py"))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "agenta"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.39.0"
|
|
4
4
|
description = "The SDK for agenta is an open-source LLMOps platform."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = ["Mahmoud Mabrouk <mahmoud@agenta.ai>"]
|
|
@@ -28,10 +28,12 @@ importlib-metadata = ">=8.0.0,<9.0"
|
|
|
28
28
|
httpx = ">=0.24, <0.28"
|
|
29
29
|
pyyaml = "^6.0.2"
|
|
30
30
|
toml = "^0.10.2"
|
|
31
|
-
litellm ="^1.
|
|
31
|
+
litellm = "^1.61.15"
|
|
32
|
+
jinja2 = "^3.1.6"
|
|
32
33
|
opentelemetry-api = ">=1.27.0,<2.0.0"
|
|
33
34
|
opentelemetry-sdk = ">=1.27.0,<2.0.0"
|
|
34
|
-
opentelemetry-exporter-otlp-proto-http =
|
|
35
|
+
opentelemetry-exporter-otlp-proto-http =">=1.27.0,<2.0.0"
|
|
36
|
+
structlog= "^25.2.0"
|
|
35
37
|
|
|
36
38
|
[tool.poetry.group.dev.dependencies]
|
|
37
39
|
posthog = "^3.1.0"
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from os import getenv
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Logger:
|
|
6
|
-
def __init__(self, name="agenta.logger", level=logging.WARNING):
|
|
7
|
-
if getenv("AGENTA_DEBUG"):
|
|
8
|
-
level = logging.DEBUG
|
|
9
|
-
|
|
10
|
-
self.logger = logging.getLogger(name)
|
|
11
|
-
self.logger.setLevel(level)
|
|
12
|
-
|
|
13
|
-
console_handler = logging.StreamHandler()
|
|
14
|
-
self.logger.addHandler(console_handler)
|
|
15
|
-
|
|
16
|
-
@property
|
|
17
|
-
def log(self) -> logging.Logger:
|
|
18
|
-
return self.logger
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
log = Logger().log
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|