agenta 0.62.3__tar.gz → 0.64.1__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.
- {agenta-0.62.3 → agenta-0.64.1}/PKG-INFO +9 -10
- {agenta-0.62.3 → agenta-0.64.1}/README.md +7 -7
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/projects_response.py +1 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/agenta_init.py +9 -7
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/assets.py +1 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/decorators/routing.py +2 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/runs.py +5 -6
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/litellm/litellm.py +12 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/secrets.py +35 -19
- agenta-0.64.1/agenta/sdk/middleware/vault.py +333 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/exporters.py +4 -4
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/types.py +35 -2
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/helpers.py +13 -12
- {agenta-0.62.3 → agenta-0.64.1}/pyproject.toml +2 -3
- agenta-0.62.3/agenta/sdk/middleware/vault.py +0 -138
- {agenta-0.62.3 → agenta-0.64.1}/agenta/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/Readme.md +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/access_control/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/access_control/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/access_control/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/admin/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/admin/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/admin/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/api_keys/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/api_keys/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/api_keys/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/apps/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/apps/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/apps/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/bases/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/bases/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/bases/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/billing/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/billing/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/billing/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/configs/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/configs/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/configs/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/containers/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/containers/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/containers/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/api_error.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/client_wrapper.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/datetime_utils.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/file.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/force_multipart.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/http_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/http_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/jsonable_encoder.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/pydantic_utilities.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/query_encoder.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/request_options.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/core/serialization.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/environment.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/environments/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/environments/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/environments/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/errors/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/errors/unprocessable_entity_error.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evals/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evals/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evals/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evaluations/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evaluations/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evaluations/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evaluators/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evaluators/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/evaluators/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/human_evaluations/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/human_evaluations/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/human_evaluations/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/types/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/types/fetch_trace_by_id_request_trace_id.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/types/fetch_trace_by_id_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/types/query_analytics_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/observability/types/query_traces_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/organization/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/organization/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/organization/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/scopes/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/scopes/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/scopes/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/types/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/types/create_testset_from_file_request_file_type.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/types/fetch_testset_to_file_request_file_type.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/testsets/types/update_testset_from_file_request_file_type.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/tracing/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/tracing/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/tracing/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/tracing/types/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/tracing/types/fetch_trace_request_trace_id.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/tracing/types/remove_trace_request_trace_id.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/account_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/account_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_node_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_node_dto_nodes_value.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_nodes_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_root_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_roots_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_tree_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/agenta_trees_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/aggregated_result.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/aggregated_result_evaluator_config.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/analytics_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_create.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_edit.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_kind.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_link.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_link_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_query.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_query_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_reference.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_references.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotation_source.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/annotations_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/app.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/app_variant_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/app_variant_revision.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/artifact.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/base_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/body_fetch_workflow_revision.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/body_import_testset.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/bucket_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/collect_status_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/config_db.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/config_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/config_response_model.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/correct_answer.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/create_app_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/custom_model_settings_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/custom_provider_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/custom_provider_kind.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/custom_provider_settings_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/data.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/delete_evaluation.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/environment_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/environment_output_extended.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/environment_revision.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/error.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation_scenario.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation_scenario_input.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation_scenario_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation_scenario_result.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluation_type.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_config.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_flags.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_mapping_output_interface.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_output_interface.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_query.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_query_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluator_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/evaluators_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/exception_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/extended_o_tel_tracing_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/focus.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/format.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/full_json_input.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/full_json_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/get_config_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/header.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/http_validation_error.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/human_evaluation.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/human_evaluation_scenario.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/human_evaluation_scenario_input.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/human_evaluation_scenario_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/invite_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_analytics_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_data_point.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_evaluator.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_scope_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_scopes_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_subscription_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_user_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/legacy_user_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/lifecycle_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/link_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/list_api_keys_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/llm_run_rate_limit.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/meta_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/metrics_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/new_testset.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/node_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/node_type.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_context_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_event.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_event_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_extra_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_flat_span.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_flat_span_input_end_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_flat_span_input_start_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_flat_span_output_end_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_flat_span_output_start_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_link.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_link_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_links_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_input_end_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_input_spans_value.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_input_start_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_kind.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_output_end_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_output_spans_value.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_span_output_start_time.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_spans_tree.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_spans_tree_input_spans_value.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_spans_tree_output_spans_value.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_status_code.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_tracing_data_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_tracing_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/o_tel_tracing_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/organization.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/organization_details.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/organization_membership_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/organization_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/organization_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/parent_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/permission.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/plan.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/project_membership_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/project_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/project_scope.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/recursive_types.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/reference.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/reference_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/reference_request_model.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/result.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/role.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/root_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/scopes_response_model.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/score.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/secret_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/secret_kind.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/secret_response_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/simple_evaluation_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/span_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/span_dto_nodes_value.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/standard_provider_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/standard_provider_kind.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/standard_provider_settings_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/status_code.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/status_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/tags_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testcase_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testset.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testset_output_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testset_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testset_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testset_simple_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/testsets_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/time_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/timestamp.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/tree_dto.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/tree_type.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/update_app_output.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/user_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/validation_error.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_artifact.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_data.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_flags.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_revision.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_revision_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_revision_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_revisions_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_variant.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_variant_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_variant_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflow_variants_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workflows_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_member_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_membership_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_permission.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_request.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_role.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/types/workspace_role_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/variants/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/variants/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/variants/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/variants/types/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/vault/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/vault/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/vault/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/workflows/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/workflows/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/workflows/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/workspace/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/workspace/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/backend/workspace/raw_client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/types/provider_key_dto.py~HEAD +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/types/provider_key_dto.py~feat_model-registry +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/types/provider_kind.py~HEAD +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/types/provider_kind.py~feat_model-registry +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/client/types.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/config.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/config.toml +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/context/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/context/running.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/context/serving.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/context/tracing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/contexts/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/contexts/routing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/contexts/running.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/contexts/tracing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/decorators/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/decorators/running.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/decorators/serving.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/decorators/tracing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/running/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/running/registry.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/running/utils.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/attributes.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/conventions.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/exporters.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/inline.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/processors.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/propagation.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/spans.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/engines/tracing/tracing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/metrics.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/preview/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/preview/evaluate.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/preview/utils.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/results.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/evaluations/scenarios.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/litellm/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/litellm/mockllm.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/litellm/mocks/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/applications.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/apps.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/config.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/deployment.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/evaluations.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/evaluators.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/shared.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/testsets.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/variant.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/managers/vault.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/auth.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/config.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/cors.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/inline.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/mock.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middleware/otel.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/routing/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/routing/auth.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/routing/cors.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/routing/otel.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/running/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/running/normalizer.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/running/resolver.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/middlewares/running/vault.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/blobs.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/evaluations.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/git.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/shared.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/testsets.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/tracing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/models/workflows.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/router.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/attributes.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/conventions.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/inline.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/processors.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/propagation.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/spans.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/tracing/tracing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/cache.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/client.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/constants.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/costs.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/exceptions.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/globals.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/logging.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/otel.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/preinit.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/references.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/singleton.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/utils/timing.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/__init__.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/builtin.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/configurations.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/errors.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/handlers.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/interfaces.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/sandbox.py +0 -0
- {agenta-0.62.3 → agenta-0.64.1}/agenta/sdk/workflows/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenta
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.64.1
|
|
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
|
|
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.9
|
|
17
17
|
Classifier: Topic :: Software Development :: Libraries
|
|
18
18
|
Requires-Dist: decorator (>=5.2.1,<6.0.0)
|
|
19
|
-
Requires-Dist: fastapi (>=0.
|
|
19
|
+
Requires-Dist: fastapi (>=0.122.0,<0.123.0)
|
|
20
20
|
Requires-Dist: google-auth (>=2.23,<3)
|
|
21
21
|
Requires-Dist: h11 (>=0.16.0,<0.17.0)
|
|
22
22
|
Requires-Dist: httpx (>=0.28.0,<0.29.0)
|
|
@@ -34,7 +34,6 @@ Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
|
|
34
34
|
Requires-Dist: python-jsonpath (>=2.0.0,<3.0.0)
|
|
35
35
|
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
|
|
36
36
|
Requires-Dist: restrictedpython (>=8.0,<9.0) ; python_version >= "3.11" and python_version < "3.14"
|
|
37
|
-
Requires-Dist: starlette (>=0.47.0,<0.48.0)
|
|
38
37
|
Requires-Dist: structlog (>=25.2.0,<26.0.0)
|
|
39
38
|
Requires-Dist: tiktoken (==0.11.0)
|
|
40
39
|
Requires-Dist: toml (>=0.10.2,<0.11.0)
|
|
@@ -61,9 +60,9 @@ Description-Content-Type: text/markdown
|
|
|
61
60
|
<div align="center" >
|
|
62
61
|
<a href="https://cloud.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
|
|
63
62
|
<picture >
|
|
64
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
65
|
-
<source media="(prefers-color-scheme: light)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
66
|
-
<img alt="Shows the logo of agenta" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
63
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/6fa19a9d-9785-4acf-5d08-e81b1e38b100/large" >
|
|
64
|
+
<source media="(prefers-color-scheme: light)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/6fa19a9d-9785-4acf-5d08-e81b1e38b100/large" >
|
|
65
|
+
<img alt="Shows the logo of agenta" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/6fa19a9d-9785-4acf-5d08-e81b1e38b100/large" >
|
|
67
66
|
</picture>
|
|
68
67
|
</a>
|
|
69
68
|
</div>
|
|
@@ -155,10 +154,10 @@ Get visibility into your LLM applications in production.
|
|
|
155
154
|
|
|
156
155
|
## 📸 Screenshots
|
|
157
156
|
|
|
158
|
-
<img alt="Playground" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
159
|
-
<img alt="Prompt Management" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
160
|
-
<img alt="Evaluation" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
161
|
-
<img alt="Observability" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
157
|
+
<img alt="Playground" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/a4f67ac4-1acc-40c6-7a1a-5616eee7bb00/large" />
|
|
158
|
+
<img alt="Prompt Management" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/65f697d0-3221-4e3c-7232-f350b1976a00/large" />
|
|
159
|
+
<img alt="Evaluation" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/19b5b77e-6945-4419-15b9-cfea197e1300/large" />
|
|
160
|
+
<img alt="Observability" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/efc8a24c-2a2a-427c-f285-7d8b41200700/large" />
|
|
162
161
|
|
|
163
162
|
## 🚀 Getting Started
|
|
164
163
|
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
<div align="center" >
|
|
17
17
|
<a href="https://cloud.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
|
|
18
18
|
<picture >
|
|
19
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
20
|
-
<source media="(prefers-color-scheme: light)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
21
|
-
<img alt="Shows the logo of agenta" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
19
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/6fa19a9d-9785-4acf-5d08-e81b1e38b100/large" >
|
|
20
|
+
<source media="(prefers-color-scheme: light)" srcset="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/6fa19a9d-9785-4acf-5d08-e81b1e38b100/large" >
|
|
21
|
+
<img alt="Shows the logo of agenta" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/6fa19a9d-9785-4acf-5d08-e81b1e38b100/large" >
|
|
22
22
|
</picture>
|
|
23
23
|
</a>
|
|
24
24
|
</div>
|
|
@@ -110,10 +110,10 @@ Get visibility into your LLM applications in production.
|
|
|
110
110
|
|
|
111
111
|
## 📸 Screenshots
|
|
112
112
|
|
|
113
|
-
<img alt="Playground" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
114
|
-
<img alt="Prompt Management" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
115
|
-
<img alt="Evaluation" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
116
|
-
<img alt="Observability" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/
|
|
113
|
+
<img alt="Playground" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/a4f67ac4-1acc-40c6-7a1a-5616eee7bb00/large" />
|
|
114
|
+
<img alt="Prompt Management" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/65f697d0-3221-4e3c-7232-f350b1976a00/large" />
|
|
115
|
+
<img alt="Evaluation" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/19b5b77e-6945-4419-15b9-cfea197e1300/large" />
|
|
116
|
+
<img alt="Observability" src="https://imagedelivery.net/UNvjPBCIZFONpkVPQTxVuA/efc8a24c-2a2a-427c-f285-7d8b41200700/large" />
|
|
117
117
|
|
|
118
118
|
## 🚀 Getting Started
|
|
119
119
|
|
|
@@ -85,28 +85,30 @@ class AgentaSingleton:
|
|
|
85
85
|
|
|
86
86
|
_api_url = (
|
|
87
87
|
api_url
|
|
88
|
+
or getenv("AGENTA_API_INTERNAL_URL")
|
|
88
89
|
or getenv("AGENTA_API_URL")
|
|
89
90
|
or config.get("api_url")
|
|
90
91
|
or None # NO FALLBACK
|
|
91
92
|
)
|
|
92
93
|
|
|
93
94
|
if _api_url:
|
|
95
|
+
_api_url = parse_url(url=_api_url)
|
|
94
96
|
_host = _api_url.rsplit("/api", 1)[0]
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
elif _host:
|
|
98
|
+
_host = parse_url(url=_host)
|
|
97
99
|
_api_url = _host + "/api"
|
|
98
100
|
|
|
99
101
|
try:
|
|
100
|
-
assert
|
|
101
|
-
"
|
|
102
|
+
assert _api_url and isinstance(_api_url, str), (
|
|
103
|
+
"API URL is required. Please provide a valid API URL or set AGENTA_API_URL environment variable."
|
|
102
104
|
)
|
|
103
|
-
self.host =
|
|
104
|
-
self.api_url =
|
|
105
|
+
self.host = _host
|
|
106
|
+
self.api_url = _api_url
|
|
105
107
|
except AssertionError as e:
|
|
106
108
|
log.error(str(e))
|
|
107
109
|
raise
|
|
108
110
|
except Exception as e:
|
|
109
|
-
log.error(f"Failed to parse
|
|
111
|
+
log.error(f"Failed to parse API URL '{_api_url}': {e}")
|
|
110
112
|
raise
|
|
111
113
|
|
|
112
114
|
self.api_key = (
|
|
@@ -223,10 +223,12 @@ class route:
|
|
|
223
223
|
|
|
224
224
|
async def invoke_endpoint(req: Request, request: WorkflowServiceRequest):
|
|
225
225
|
credentials = req.state.auth.get("credentials")
|
|
226
|
+
secrets = req.state.auth.get("secrets")
|
|
226
227
|
|
|
227
228
|
try:
|
|
228
229
|
response = await workflow.invoke(
|
|
229
230
|
request=request,
|
|
231
|
+
secrets=secrets,
|
|
230
232
|
credentials=credentials,
|
|
231
233
|
)
|
|
232
234
|
|
|
@@ -124,11 +124,10 @@ async def aclose(
|
|
|
124
124
|
async def aurl(
|
|
125
125
|
*,
|
|
126
126
|
run_id: UUID,
|
|
127
|
-
) -> str:
|
|
127
|
+
) -> Optional[str]:
|
|
128
128
|
response = authed_api()(
|
|
129
129
|
method="GET",
|
|
130
|
-
endpoint=f"/projects",
|
|
131
|
-
params={"scope": "project"},
|
|
130
|
+
endpoint=f"/projects/current",
|
|
132
131
|
)
|
|
133
132
|
|
|
134
133
|
try:
|
|
@@ -137,10 +136,10 @@ async def aurl(
|
|
|
137
136
|
print(response.text)
|
|
138
137
|
raise
|
|
139
138
|
|
|
140
|
-
|
|
141
|
-
return None
|
|
139
|
+
project_info = response.json()
|
|
142
140
|
|
|
143
|
-
|
|
141
|
+
if not project_info:
|
|
142
|
+
return None
|
|
144
143
|
|
|
145
144
|
workspace_id = project_info.get("workspace_id")
|
|
146
145
|
project_id = project_info.get("project_id")
|
|
@@ -193,6 +193,9 @@ def litellm_handler():
|
|
|
193
193
|
|
|
194
194
|
span.end()
|
|
195
195
|
|
|
196
|
+
# Clean up span from dictionary to prevent memory leak
|
|
197
|
+
del self.span[litellm_call_id]
|
|
198
|
+
|
|
196
199
|
def log_failure_event(
|
|
197
200
|
self,
|
|
198
201
|
kwargs,
|
|
@@ -221,6 +224,9 @@ def litellm_handler():
|
|
|
221
224
|
|
|
222
225
|
span.end()
|
|
223
226
|
|
|
227
|
+
# Clean up span from dictionary to prevent memory leak
|
|
228
|
+
del self.span[litellm_call_id]
|
|
229
|
+
|
|
224
230
|
async def async_log_stream_event(
|
|
225
231
|
self,
|
|
226
232
|
kwargs,
|
|
@@ -321,6 +327,9 @@ def litellm_handler():
|
|
|
321
327
|
|
|
322
328
|
span.end()
|
|
323
329
|
|
|
330
|
+
# Clean up span from dictionary to prevent memory leak
|
|
331
|
+
del self.span[litellm_call_id]
|
|
332
|
+
|
|
324
333
|
async def async_log_failure_event(
|
|
325
334
|
self,
|
|
326
335
|
kwargs,
|
|
@@ -349,4 +358,7 @@ def litellm_handler():
|
|
|
349
358
|
|
|
350
359
|
span.end()
|
|
351
360
|
|
|
361
|
+
# Clean up span from dictionary to prevent memory leak
|
|
362
|
+
del self.span[litellm_call_id]
|
|
363
|
+
|
|
352
364
|
return LitellmHandler()
|
|
@@ -156,17 +156,17 @@ class SecretsManager:
|
|
|
156
156
|
# STEP 1: get vault secrets from route context and transform it
|
|
157
157
|
secrets = SecretsManager.get_from_route()
|
|
158
158
|
if not secrets:
|
|
159
|
-
return
|
|
159
|
+
return None
|
|
160
160
|
|
|
161
161
|
# STEP 1b: Parse secrets into usable format
|
|
162
162
|
secrets = SecretsManager._parse_secrets(secrets=secrets)
|
|
163
163
|
|
|
164
164
|
# STEP 2: check model exists in supported standard models
|
|
165
|
-
provider = _standard_providers.get(
|
|
165
|
+
provider = _standard_providers.get(request_provider_model)
|
|
166
166
|
if not provider:
|
|
167
167
|
# check and get provider kind if model exists in custom provider models
|
|
168
168
|
provider = SecretsManager._custom_providers_get(
|
|
169
|
-
model=
|
|
169
|
+
model=request_provider_model,
|
|
170
170
|
secrets=secrets,
|
|
171
171
|
)
|
|
172
172
|
|
|
@@ -175,16 +175,19 @@ class SecretsManager:
|
|
|
175
175
|
return None
|
|
176
176
|
|
|
177
177
|
# STEP 2c: get litellm compatible model
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
request_provider_slug = (
|
|
179
|
+
SecretsManager._custom_provider_slug_get(
|
|
180
|
+
model=request_provider_model, secrets=secrets
|
|
181
|
+
)
|
|
182
|
+
or ""
|
|
180
183
|
)
|
|
181
|
-
|
|
182
|
-
model=
|
|
184
|
+
compatible_provider_model = SecretsManager._get_compatible_model(
|
|
185
|
+
model=request_provider_model, provider_slug=request_provider_slug
|
|
183
186
|
)
|
|
184
187
|
|
|
185
188
|
# STEP 3: initialize provider settings and simplify provider name
|
|
186
|
-
provider_settings =
|
|
187
|
-
|
|
189
|
+
provider_settings = dict(model=compatible_provider_model)
|
|
190
|
+
request_provider_kind = re.sub(
|
|
188
191
|
r"[\s-]+", "", provider.lower()
|
|
189
192
|
) # normalizing other special characters too (azure-openai)
|
|
190
193
|
|
|
@@ -196,25 +199,35 @@ class SecretsManager:
|
|
|
196
199
|
# i). Extract API key if present
|
|
197
200
|
# (for standard models -- openai/anthropic/gemini, etc)
|
|
198
201
|
if secret.get("kind") == "provider_key":
|
|
199
|
-
|
|
202
|
+
secret_provider_kind = secret_data.get("kind", "")
|
|
200
203
|
|
|
201
|
-
if
|
|
204
|
+
if request_provider_kind == secret_provider_kind:
|
|
202
205
|
if "key" in provider_info:
|
|
203
206
|
provider_settings["api_key"] = provider_info["key"]
|
|
204
207
|
continue
|
|
205
208
|
|
|
206
209
|
# ii). Extract Credentials if present
|
|
207
|
-
# (for custom providers -- aws bedrock/sagemaker,
|
|
210
|
+
# (for custom providers -- aws bedrock/sagemaker, vertex_ai, etc)
|
|
208
211
|
elif secret.get("kind") == "custom_provider":
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
+
secret_provider_kind = (
|
|
213
|
+
provider_info.get("kind", "").lower().replace(" ", "")
|
|
214
|
+
)
|
|
215
|
+
secret_provider_slug = secret_data.get("provider_slug", "")
|
|
216
|
+
secret_provider_models = secret_data.get("models", "")
|
|
217
|
+
secret_provider_extras = provider_info.get("extras", {})
|
|
212
218
|
|
|
213
|
-
if
|
|
214
|
-
|
|
215
|
-
|
|
219
|
+
if (
|
|
220
|
+
request_provider_kind == secret_provider_kind
|
|
221
|
+
and request_provider_slug == secret_provider_slug
|
|
222
|
+
and request_provider_model in secret_provider_models
|
|
223
|
+
):
|
|
224
|
+
if secret_provider_extras:
|
|
225
|
+
provider_settings.update(secret_provider_extras)
|
|
216
226
|
continue
|
|
217
227
|
|
|
228
|
+
if len(provider_settings.keys()) <= 1:
|
|
229
|
+
return None
|
|
230
|
+
|
|
218
231
|
return provider_settings
|
|
219
232
|
|
|
220
233
|
@staticmethod
|
|
@@ -251,7 +264,7 @@ class SecretsManager:
|
|
|
251
264
|
# STEP 1: get vault secrets from route context and transform it
|
|
252
265
|
secrets = RunningContext.get().secrets
|
|
253
266
|
if not secrets:
|
|
254
|
-
return
|
|
267
|
+
return None
|
|
255
268
|
|
|
256
269
|
# STEP 1b: Parse secrets into usable format
|
|
257
270
|
secrets = SecretsManager._parse_secrets(secrets=secrets)
|
|
@@ -320,4 +333,7 @@ class SecretsManager:
|
|
|
320
333
|
provider_settings.update(secret_provider_extras)
|
|
321
334
|
continue
|
|
322
335
|
|
|
336
|
+
if len(provider_settings.keys()) <= 1:
|
|
337
|
+
return None
|
|
338
|
+
|
|
323
339
|
return provider_settings
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
from os import getenv
|
|
2
|
+
from json import dumps
|
|
3
|
+
from typing import Callable, Dict, Optional, List, Any
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
from fastapi import FastAPI, Request
|
|
7
|
+
from starlette.middleware.base import BaseHTTPMiddleware
|
|
8
|
+
|
|
9
|
+
from agenta.sdk.utils.logging import get_module_logger
|
|
10
|
+
from agenta.sdk.utils.constants import TRUTHY
|
|
11
|
+
from agenta.sdk.utils.cache import TTLLRUCache
|
|
12
|
+
from agenta.sdk.utils.exceptions import suppress, display_exception
|
|
13
|
+
from agenta.client.backend.types import SecretDto as SecretDTO
|
|
14
|
+
from agenta.client.backend.types import (
|
|
15
|
+
StandardProviderDto as StandardProviderDTO,
|
|
16
|
+
StandardProviderSettingsDto as StandardProviderSettingsDTO,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
import agenta as ag
|
|
20
|
+
|
|
21
|
+
log = get_module_logger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
AGENTA_RUNTIME_PREFIX = getenv("AGENTA_RUNTIME_PREFIX", "")
|
|
25
|
+
|
|
26
|
+
_ALWAYS_ALLOW_LIST = [
|
|
27
|
+
f"{AGENTA_RUNTIME_PREFIX}/health",
|
|
28
|
+
f"{AGENTA_RUNTIME_PREFIX}/openapi.json",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
_PROVIDER_KINDS = [
|
|
32
|
+
"openai",
|
|
33
|
+
"cohere",
|
|
34
|
+
"anyscale",
|
|
35
|
+
"deepinfra",
|
|
36
|
+
"alephalpha",
|
|
37
|
+
"groq",
|
|
38
|
+
"mistral",
|
|
39
|
+
"mistralai",
|
|
40
|
+
"anthropic",
|
|
41
|
+
"perplexityai",
|
|
42
|
+
"togetherai",
|
|
43
|
+
"openrouter",
|
|
44
|
+
"gemini",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
_AUTH_ENABLED = (
|
|
48
|
+
getenv("AGENTA_SERVICE_MIDDLEWARE_AUTH_ENABLED", "true").lower() in TRUTHY
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
_CACHE_ENABLED = (
|
|
52
|
+
getenv("AGENTA_SERVICE_MIDDLEWARE_CACHE_ENABLED", "true").lower() in TRUTHY
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
_cache = TTLLRUCache()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class DenyException(Exception):
|
|
59
|
+
def __init__(
|
|
60
|
+
self,
|
|
61
|
+
status_code: int = 403,
|
|
62
|
+
content: str = "Forbidden",
|
|
63
|
+
) -> None:
|
|
64
|
+
super().__init__()
|
|
65
|
+
|
|
66
|
+
self.status_code = status_code
|
|
67
|
+
self.content = content
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class VaultMiddleware(BaseHTTPMiddleware):
|
|
71
|
+
def __init__(self, app: FastAPI):
|
|
72
|
+
super().__init__(app)
|
|
73
|
+
|
|
74
|
+
self.host = ag.DEFAULT_AGENTA_SINGLETON_INSTANCE.host
|
|
75
|
+
|
|
76
|
+
self.scope_type = ag.DEFAULT_AGENTA_SINGLETON_INSTANCE.scope_type
|
|
77
|
+
self.scope_id = ag.DEFAULT_AGENTA_SINGLETON_INSTANCE.scope_id
|
|
78
|
+
|
|
79
|
+
async def dispatch(
|
|
80
|
+
self,
|
|
81
|
+
request: Request,
|
|
82
|
+
call_next: Callable,
|
|
83
|
+
):
|
|
84
|
+
request.state.vault = {}
|
|
85
|
+
|
|
86
|
+
with suppress():
|
|
87
|
+
secrets = await self._get_secrets(request)
|
|
88
|
+
|
|
89
|
+
request.state.vault = {"secrets": secrets}
|
|
90
|
+
|
|
91
|
+
return await call_next(request)
|
|
92
|
+
|
|
93
|
+
async def _get_secrets(self, request: Request) -> Optional[Dict]:
|
|
94
|
+
credentials = request.state.auth.get("credentials")
|
|
95
|
+
|
|
96
|
+
headers = None
|
|
97
|
+
if credentials:
|
|
98
|
+
headers = {"Authorization": credentials}
|
|
99
|
+
|
|
100
|
+
_hash = dumps(
|
|
101
|
+
{
|
|
102
|
+
"headers": headers,
|
|
103
|
+
},
|
|
104
|
+
sort_keys=True,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
if _CACHE_ENABLED:
|
|
108
|
+
secrets_cache = _cache.get(_hash)
|
|
109
|
+
|
|
110
|
+
if secrets_cache:
|
|
111
|
+
secrets = secrets_cache.get("secrets")
|
|
112
|
+
|
|
113
|
+
return secrets
|
|
114
|
+
|
|
115
|
+
local_secrets: List[Dict[str, Any]] = []
|
|
116
|
+
allow_secrets = True
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
if not request.url.path in _ALWAYS_ALLOW_LIST:
|
|
120
|
+
await self._allow_local_secrets(credentials)
|
|
121
|
+
|
|
122
|
+
for provider_kind in _PROVIDER_KINDS:
|
|
123
|
+
provider = provider_kind
|
|
124
|
+
key_name = f"{provider.upper()}_API_KEY"
|
|
125
|
+
key = getenv(key_name)
|
|
126
|
+
|
|
127
|
+
if not key:
|
|
128
|
+
continue
|
|
129
|
+
|
|
130
|
+
secret = SecretDTO(
|
|
131
|
+
kind="provider_key", # type: ignore
|
|
132
|
+
data=StandardProviderDTO(
|
|
133
|
+
kind=provider,
|
|
134
|
+
provider=StandardProviderSettingsDTO(key=key),
|
|
135
|
+
),
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
local_secrets.append(secret.model_dump())
|
|
139
|
+
except DenyException as e: # pylint: disable=bare-except
|
|
140
|
+
log.warning(f"Agenta [secrets] {e.status_code}: {e.content}")
|
|
141
|
+
allow_secrets = False
|
|
142
|
+
except: # pylint: disable=bare-except
|
|
143
|
+
display_exception("Vault: Local Secrets Exception")
|
|
144
|
+
|
|
145
|
+
vault_secrets: List[Dict[str, Any]] = []
|
|
146
|
+
|
|
147
|
+
try:
|
|
148
|
+
async with httpx.AsyncClient() as client:
|
|
149
|
+
response = await client.get(
|
|
150
|
+
f"{self.host}/api/vault/v1/secrets/",
|
|
151
|
+
headers=headers,
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
if response.status_code != 200:
|
|
155
|
+
vault_secrets = []
|
|
156
|
+
|
|
157
|
+
else:
|
|
158
|
+
vault_secrets = response.json()
|
|
159
|
+
except: # pylint: disable=bare-except
|
|
160
|
+
display_exception("Vault: Vault Secrets Exception")
|
|
161
|
+
|
|
162
|
+
secrets = local_secrets + vault_secrets
|
|
163
|
+
|
|
164
|
+
standard_secrets = {}
|
|
165
|
+
custom_secrets = []
|
|
166
|
+
|
|
167
|
+
if local_secrets:
|
|
168
|
+
for secret in local_secrets:
|
|
169
|
+
standard_secrets[secret["data"]["kind"]] = secret # type: ignore
|
|
170
|
+
|
|
171
|
+
if vault_secrets:
|
|
172
|
+
for secret in vault_secrets:
|
|
173
|
+
if secret["kind"] == "provider_key": # type: ignore
|
|
174
|
+
standard_secrets[secret["data"]["kind"]] = secret # type: ignore
|
|
175
|
+
elif secret["kind"] == "custom_provider": # type: ignore
|
|
176
|
+
custom_secrets.append(secret)
|
|
177
|
+
|
|
178
|
+
standard_secrets = list(standard_secrets.values())
|
|
179
|
+
|
|
180
|
+
secrets = standard_secrets + custom_secrets
|
|
181
|
+
|
|
182
|
+
if not allow_secrets:
|
|
183
|
+
_cache.put(_hash, {"secrets": secrets})
|
|
184
|
+
|
|
185
|
+
return secrets
|
|
186
|
+
|
|
187
|
+
async def _allow_local_secrets(self, credentials):
|
|
188
|
+
try:
|
|
189
|
+
if not _AUTH_ENABLED:
|
|
190
|
+
return
|
|
191
|
+
|
|
192
|
+
if not credentials:
|
|
193
|
+
raise DenyException(
|
|
194
|
+
status_code=401,
|
|
195
|
+
content="Invalid credentials. Please check your credentials or login again.",
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# HEADERS
|
|
199
|
+
headers = {"Authorization": credentials}
|
|
200
|
+
# PARAMS
|
|
201
|
+
params = {}
|
|
202
|
+
## SCOPE
|
|
203
|
+
if self.scope_type and self.scope_id:
|
|
204
|
+
params["scope_type"] = self.scope_type
|
|
205
|
+
params["scope_id"] = self.scope_id
|
|
206
|
+
## ACTION
|
|
207
|
+
params["action"] = "view_secret"
|
|
208
|
+
## RESOURCE
|
|
209
|
+
params["resource_type"] = "local_secrets"
|
|
210
|
+
|
|
211
|
+
_hash = dumps(
|
|
212
|
+
{
|
|
213
|
+
"headers": headers,
|
|
214
|
+
"params": params,
|
|
215
|
+
},
|
|
216
|
+
sort_keys=True,
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
access = None
|
|
220
|
+
|
|
221
|
+
if _CACHE_ENABLED:
|
|
222
|
+
access = _cache.get(_hash)
|
|
223
|
+
|
|
224
|
+
if isinstance(access, Exception):
|
|
225
|
+
raise access
|
|
226
|
+
|
|
227
|
+
try:
|
|
228
|
+
async with httpx.AsyncClient() as client:
|
|
229
|
+
try:
|
|
230
|
+
response = await client.get(
|
|
231
|
+
f"{self.host}/api/permissions/verify",
|
|
232
|
+
headers=headers,
|
|
233
|
+
params=params,
|
|
234
|
+
timeout=30.0,
|
|
235
|
+
)
|
|
236
|
+
except httpx.TimeoutException as exc:
|
|
237
|
+
# log.debug(f"Timeout error while verify secrets access: {exc}")
|
|
238
|
+
raise DenyException(
|
|
239
|
+
status_code=504,
|
|
240
|
+
content=f"Could not verify secrets access: connection to {self.host} timed out. Please check your network connection.",
|
|
241
|
+
) from exc
|
|
242
|
+
except httpx.ConnectError as exc:
|
|
243
|
+
# log.debug(f"Connection error while verify secrets access: {exc}")
|
|
244
|
+
raise DenyException(
|
|
245
|
+
status_code=503,
|
|
246
|
+
content=f"Could not verify secrets access: connection to {self.host} failed. Please check if agenta is available.",
|
|
247
|
+
) from exc
|
|
248
|
+
except httpx.NetworkError as exc:
|
|
249
|
+
# log.debug(f"Network error while verify secrets access: {exc}")
|
|
250
|
+
raise DenyException(
|
|
251
|
+
status_code=503,
|
|
252
|
+
content=f"Could not verify secrets access: connection to {self.host} failed. Please check your network connection.",
|
|
253
|
+
) from exc
|
|
254
|
+
except httpx.HTTPError as exc:
|
|
255
|
+
# log.debug(f"HTTP error while verify secrets access: {exc}")
|
|
256
|
+
raise DenyException(
|
|
257
|
+
status_code=502,
|
|
258
|
+
content=f"Could not verify secrets access: connection to {self.host} failed. Please check if agenta is available.",
|
|
259
|
+
) from exc
|
|
260
|
+
|
|
261
|
+
if response.status_code == 401:
|
|
262
|
+
# log.debug("Agenta returned 401 - Invalid credentials")
|
|
263
|
+
raise DenyException(
|
|
264
|
+
status_code=401,
|
|
265
|
+
content="Invalid credentials. Please check your credentials or login again.",
|
|
266
|
+
)
|
|
267
|
+
elif response.status_code == 403:
|
|
268
|
+
# log.debug("Agenta returned 403 - Permission denied")
|
|
269
|
+
raise DenyException(
|
|
270
|
+
status_code=403,
|
|
271
|
+
content="Out of credits. Please set your LLM provider API keys or contact support.",
|
|
272
|
+
)
|
|
273
|
+
elif response.status_code != 200:
|
|
274
|
+
# log.debug(
|
|
275
|
+
# f"Agenta returned {response.status_code} - Unexpected status code"
|
|
276
|
+
# )
|
|
277
|
+
raise DenyException(
|
|
278
|
+
status_code=500,
|
|
279
|
+
content=f"Could not verify secrets access: {self.host} returned unexpected status code {response.status_code}. Please try again later or contact support if the issue persists.",
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
try:
|
|
283
|
+
auth = response.json()
|
|
284
|
+
except ValueError as exc:
|
|
285
|
+
# log.debug(f"Agenta returned invalid JSON response: {exc}")
|
|
286
|
+
raise DenyException(
|
|
287
|
+
status_code=500,
|
|
288
|
+
content=f"Could not verify secrets access: {self.host} returned unexpected invalid JSON response. Please try again later or contact support if the issue persists.",
|
|
289
|
+
) from exc
|
|
290
|
+
|
|
291
|
+
if not isinstance(auth, dict):
|
|
292
|
+
# log.debug(
|
|
293
|
+
# f"Agenta returned invalid response format: {type(auth)}"
|
|
294
|
+
# )
|
|
295
|
+
raise DenyException(
|
|
296
|
+
status_code=500,
|
|
297
|
+
content=f"Could not verify secrets access: {self.host} returned unexpected invalid response format. Please try again later or contact support if the issue persists.",
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
effect = auth.get("effect")
|
|
301
|
+
|
|
302
|
+
access = effect == "allow"
|
|
303
|
+
|
|
304
|
+
if effect != "allow":
|
|
305
|
+
# log.debug("Access denied by Agenta - effect: {effect}")
|
|
306
|
+
raise DenyException(
|
|
307
|
+
status_code=403,
|
|
308
|
+
content="Out of credits. Please set your LLM provider API keys or contact support.",
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
return
|
|
312
|
+
|
|
313
|
+
except DenyException as deny:
|
|
314
|
+
_cache.put(_hash, deny)
|
|
315
|
+
|
|
316
|
+
raise deny
|
|
317
|
+
except Exception as exc: # pylint: disable=bare-except
|
|
318
|
+
# log.debug(
|
|
319
|
+
# f"Unexpected error while verifying credentials (remote): {exc}"
|
|
320
|
+
# )
|
|
321
|
+
raise DenyException(
|
|
322
|
+
status_code=500,
|
|
323
|
+
content=f"Could not verify credentials: unexpected error - {str(exc)}. Please try again later or contact support if the issue persists.",
|
|
324
|
+
) from exc
|
|
325
|
+
|
|
326
|
+
except DenyException as deny:
|
|
327
|
+
raise deny
|
|
328
|
+
except Exception as exc:
|
|
329
|
+
# log.debug(f"Unexpected error while verifying credentials (local): {exc}")
|
|
330
|
+
raise DenyException(
|
|
331
|
+
status_code=500,
|
|
332
|
+
content=f"Could not verify credentials: unexpected error - {str(exc)}. Please try again later or contact support if the issue persists.",
|
|
333
|
+
) from exc
|