eval-studio-client 1.0.0a1__py3-none-any.whl → 1.1.0a5__py3-none-any.whl
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.
- eval_studio_client/api/__init__.py +79 -1
- eval_studio_client/api/api/__init__.py +9 -0
- eval_studio_client/api/api/adversarial_inputs_service_api.py +321 -0
- eval_studio_client/api/api/dashboard_service_api.py +1 -1
- eval_studio_client/api/api/document_service_api.py +1 -1
- eval_studio_client/api/api/evaluation_service_api.py +1 -1
- eval_studio_client/api/api/evaluator_service_api.py +1 -1
- eval_studio_client/api/api/generated_questions_validation_service_api.py +321 -0
- eval_studio_client/api/api/human_calibration_service_api.py +304 -0
- eval_studio_client/api/api/info_service_api.py +1 -1
- eval_studio_client/api/api/leaderboard_report_service_api.py +292 -0
- eval_studio_client/api/api/leaderboard_service_api.py +17 -17
- eval_studio_client/api/api/model_service_api.py +17 -17
- eval_studio_client/api/api/operation_progress_service_api.py +1 -1
- eval_studio_client/api/api/operation_service_api.py +272 -17
- eval_studio_client/api/api/perturbation_service_api.py +1 -1
- eval_studio_client/api/api/perturbator_service_api.py +285 -18
- eval_studio_client/api/api/prompt_generation_service_api.py +1 -1
- eval_studio_client/api/api/prompt_library_service_api.py +669 -0
- eval_studio_client/api/api/test_case_relationship_service_api.py +292 -0
- eval_studio_client/api/api/test_case_service_api.py +17 -17
- eval_studio_client/api/api/test_class_service_api.py +17 -17
- eval_studio_client/api/api/test_lab_service_api.py +1 -1
- eval_studio_client/api/api/test_service_api.py +1238 -102
- eval_studio_client/api/api/who_am_i_service_api.py +1 -1
- eval_studio_client/api/api/workflow_edge_service_api.py +835 -0
- eval_studio_client/api/api/workflow_node_service_api.py +2431 -0
- eval_studio_client/api/api/workflow_service_api.py +1893 -0
- eval_studio_client/api/api_client.py +1 -1
- eval_studio_client/api/configuration.py +1 -1
- eval_studio_client/api/docs/AdversarialInputsServiceApi.md +78 -0
- eval_studio_client/api/docs/AdversarialInputsServiceTestAdversarialInputsRobustnessRequest.md +45 -0
- eval_studio_client/api/docs/GeneratedQuestionsValidationServiceApi.md +78 -0
- eval_studio_client/api/docs/GeneratedQuestionsValidationServiceValidateGeneratedQuestionsRequest.md +30 -0
- eval_studio_client/api/docs/HumanCalibrationServiceApi.md +77 -0
- eval_studio_client/api/docs/LeaderboardReportServiceApi.md +75 -0
- eval_studio_client/api/docs/LeaderboardServiceApi.md +5 -5
- eval_studio_client/api/docs/ModelServiceApi.md +5 -5
- eval_studio_client/api/docs/OperationServiceApi.md +72 -5
- eval_studio_client/api/docs/PerturbationServiceCreatePerturbationRequest.md +1 -0
- eval_studio_client/api/docs/PerturbatorServiceApi.md +38 -8
- eval_studio_client/api/docs/PromptGenerationServiceAutoGeneratePromptsRequest.md +4 -2
- eval_studio_client/api/docs/PromptLibraryServiceApi.md +155 -0
- eval_studio_client/api/docs/ProtobufNullValue.md +12 -0
- eval_studio_client/api/docs/RequiredTheTestCaseToUpdate.md +3 -0
- eval_studio_client/api/docs/RequiredTheUpdatedWorkflow.md +47 -0
- eval_studio_client/api/docs/RequiredTheUpdatedWorkflowNode.md +44 -0
- eval_studio_client/api/docs/TestCaseRelationshipServiceApi.md +75 -0
- eval_studio_client/api/docs/TestCaseServiceApi.md +5 -5
- eval_studio_client/api/docs/TestClassServiceApi.md +5 -5
- eval_studio_client/api/docs/TestServiceApi.md +285 -5
- eval_studio_client/api/docs/TestServiceCloneTestRequest.md +30 -0
- eval_studio_client/api/docs/TestServiceGenerateTestCasesRequest.md +3 -1
- eval_studio_client/api/docs/TestServiceImportTestCasesFromLibraryRequest.md +32 -0
- eval_studio_client/api/docs/TestServiceListTestCaseLibraryItemsRequest.md +35 -0
- eval_studio_client/api/docs/TestServicePerturbTestInPlaceRequest.md +30 -0
- eval_studio_client/api/docs/TestServicePerturbTestRequest.md +1 -0
- eval_studio_client/api/docs/V1AbortOperationResponse.md +29 -0
- eval_studio_client/api/docs/V1BatchDeleteWorkflowsRequest.md +29 -0
- eval_studio_client/api/docs/V1BatchDeleteWorkflowsResponse.md +29 -0
- eval_studio_client/api/docs/V1BatchGetWorkflowEdgesResponse.md +29 -0
- eval_studio_client/api/docs/V1BatchGetWorkflowNodesResponse.md +29 -0
- eval_studio_client/api/docs/V1CloneTestResponse.md +29 -0
- eval_studio_client/api/docs/V1CloneWorkflowResponse.md +29 -0
- eval_studio_client/api/docs/V1Context.md +32 -0
- eval_studio_client/api/docs/V1CreateEvaluationRequest.md +1 -0
- eval_studio_client/api/docs/V1CreateWorkflowEdgeResponse.md +29 -0
- eval_studio_client/api/docs/V1CreateWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1CreateWorkflowResponse.md +29 -0
- eval_studio_client/api/docs/V1DeleteWorkflowEdgeResponse.md +29 -0
- eval_studio_client/api/docs/V1DeleteWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1DeleteWorkflowResponse.md +29 -0
- eval_studio_client/api/docs/V1EstimateThresholdRequest.md +33 -0
- eval_studio_client/api/docs/V1GeneratedTestCase.md +30 -0
- eval_studio_client/api/docs/V1GetLeaderboardReportResponse.md +29 -0
- eval_studio_client/api/docs/V1GetWorkflowNodePrerequisitesResponse.md +30 -0
- eval_studio_client/api/docs/V1GetWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1GetWorkflowResponse.md +29 -0
- eval_studio_client/api/docs/V1ImportEvaluationRequest.md +1 -0
- eval_studio_client/api/docs/V1ImportTestCasesFromLibraryResponse.md +29 -0
- eval_studio_client/api/docs/V1ImportTestCasesRequest.md +33 -0
- eval_studio_client/api/docs/V1Info.md +3 -0
- eval_studio_client/api/docs/V1InitWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1LabeledTestCase.md +31 -0
- eval_studio_client/api/docs/V1LeaderboardReport.md +32 -0
- eval_studio_client/api/docs/V1LeaderboardReportActualOutputData.md +31 -0
- eval_studio_client/api/docs/V1LeaderboardReportActualOutputMeta.md +31 -0
- eval_studio_client/api/docs/V1LeaderboardReportEvaluator.md +42 -0
- eval_studio_client/api/docs/V1LeaderboardReportEvaluatorParameter.md +38 -0
- eval_studio_client/api/docs/V1LeaderboardReportExplanation.md +34 -0
- eval_studio_client/api/docs/V1LeaderboardReportMetricsMetaEntry.md +41 -0
- eval_studio_client/api/docs/V1LeaderboardReportModel.md +39 -0
- eval_studio_client/api/docs/V1LeaderboardReportResult.md +45 -0
- eval_studio_client/api/docs/V1LeaderboardReportResultRelationship.md +32 -0
- eval_studio_client/api/docs/V1ListPromptLibraryItemsResponse.md +29 -0
- eval_studio_client/api/docs/V1ListTestCaseLibraryItemsResponse.md +29 -0
- eval_studio_client/api/docs/V1ListTestCaseRelationshipsResponse.md +29 -0
- eval_studio_client/api/docs/V1ListWorkflowsResponse.md +29 -0
- eval_studio_client/api/docs/V1MetricScore.md +31 -0
- eval_studio_client/api/docs/V1MetricScores.md +29 -0
- eval_studio_client/api/docs/V1PerturbTestInPlaceResponse.md +29 -0
- eval_studio_client/api/docs/V1ProcessWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1PromptLibraryItem.md +42 -0
- eval_studio_client/api/docs/V1RepeatedString.md +29 -0
- eval_studio_client/api/docs/V1ResetWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1TestCase.md +3 -0
- eval_studio_client/api/docs/V1TestSuiteEvaluates.md +11 -0
- eval_studio_client/api/docs/V1UpdateWorkflowNodeResponse.md +29 -0
- eval_studio_client/api/docs/V1UpdateWorkflowResponse.md +29 -0
- eval_studio_client/api/docs/V1Workflow.md +49 -0
- eval_studio_client/api/docs/V1WorkflowEdge.md +40 -0
- eval_studio_client/api/docs/V1WorkflowEdgeType.md +12 -0
- eval_studio_client/api/docs/V1WorkflowNode.md +46 -0
- eval_studio_client/api/docs/V1WorkflowNodeArtifact.md +40 -0
- eval_studio_client/api/docs/V1WorkflowNodeArtifacts.md +29 -0
- eval_studio_client/api/docs/V1WorkflowNodeAttributes.md +30 -0
- eval_studio_client/api/docs/V1WorkflowNodeStatus.md +12 -0
- eval_studio_client/api/docs/V1WorkflowNodeType.md +12 -0
- eval_studio_client/api/docs/V1WorkflowNodeView.md +12 -0
- eval_studio_client/api/docs/V1WorkflowType.md +12 -0
- eval_studio_client/api/docs/WorkflowEdgeServiceApi.md +215 -0
- eval_studio_client/api/docs/WorkflowNodeServiceApi.md +632 -0
- eval_studio_client/api/docs/WorkflowServiceApi.md +488 -0
- eval_studio_client/api/docs/WorkflowServiceCloneWorkflowRequest.md +33 -0
- eval_studio_client/api/exceptions.py +1 -1
- eval_studio_client/api/models/__init__.py +70 -1
- eval_studio_client/api/models/adversarial_inputs_service_test_adversarial_inputs_robustness_request.py +143 -0
- eval_studio_client/api/models/generated_questions_validation_service_validate_generated_questions_request.py +97 -0
- eval_studio_client/api/models/perturbation_service_create_perturbation_request.py +9 -3
- eval_studio_client/api/models/prompt_generation_service_auto_generate_prompts_request.py +17 -6
- eval_studio_client/api/models/protobuf_any.py +1 -1
- eval_studio_client/api/models/protobuf_null_value.py +36 -0
- eval_studio_client/api/models/required_the_dashboard_to_update.py +1 -1
- eval_studio_client/api/models/required_the_document_to_update.py +1 -1
- eval_studio_client/api/models/required_the_leaderboard_to_update.py +1 -1
- eval_studio_client/api/models/required_the_model_to_update.py +1 -1
- eval_studio_client/api/models/required_the_operation_to_finalize.py +1 -1
- eval_studio_client/api/models/required_the_operation_to_update.py +1 -1
- eval_studio_client/api/models/required_the_test_case_to_update.py +14 -3
- eval_studio_client/api/models/required_the_test_to_update.py +1 -1
- eval_studio_client/api/models/required_the_updated_workflow.py +160 -0
- eval_studio_client/api/models/required_the_updated_workflow_node.py +152 -0
- eval_studio_client/api/models/rpc_status.py +1 -1
- eval_studio_client/api/models/test_case_service_batch_delete_test_cases_request.py +1 -1
- eval_studio_client/api/models/test_service_clone_test_request.py +89 -0
- eval_studio_client/api/models/test_service_generate_test_cases_request.py +8 -4
- eval_studio_client/api/models/test_service_import_test_cases_from_library_request.py +93 -0
- eval_studio_client/api/models/test_service_list_test_case_library_items_request.py +99 -0
- eval_studio_client/api/models/test_service_perturb_test_in_place_request.py +97 -0
- eval_studio_client/api/models/test_service_perturb_test_request.py +5 -3
- eval_studio_client/api/models/v1_abort_operation_response.py +91 -0
- eval_studio_client/api/models/v1_batch_create_leaderboards_request.py +1 -1
- eval_studio_client/api/models/v1_batch_create_leaderboards_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_dashboards_request.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_dashboards_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_documents_request.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_documents_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_evaluators_request.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_evaluators_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_leaderboards_request.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_leaderboards_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_models_request.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_models_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_test_cases_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_tests_request.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_tests_response.py +1 -1
- eval_studio_client/api/models/v1_batch_delete_workflows_request.py +87 -0
- eval_studio_client/api/models/v1_batch_delete_workflows_response.py +95 -0
- eval_studio_client/api/models/v1_batch_get_dashboards_response.py +1 -1
- eval_studio_client/api/models/v1_batch_get_documents_response.py +1 -1
- eval_studio_client/api/models/v1_batch_get_leaderboards_response.py +1 -1
- eval_studio_client/api/models/v1_batch_get_models_response.py +1 -1
- eval_studio_client/api/models/v1_batch_get_operations_response.py +1 -1
- eval_studio_client/api/models/v1_batch_get_tests_response.py +1 -1
- eval_studio_client/api/models/v1_batch_get_workflow_edges_response.py +95 -0
- eval_studio_client/api/models/v1_batch_get_workflow_nodes_response.py +95 -0
- eval_studio_client/api/models/v1_batch_import_leaderboard_request.py +1 -1
- eval_studio_client/api/models/v1_batch_import_leaderboard_response.py +1 -1
- eval_studio_client/api/models/v1_batch_import_tests_request.py +1 -1
- eval_studio_client/api/models/v1_batch_import_tests_response.py +1 -1
- eval_studio_client/api/models/v1_check_base_models_response.py +1 -1
- eval_studio_client/api/models/v1_clone_test_response.py +91 -0
- eval_studio_client/api/models/v1_clone_workflow_response.py +91 -0
- eval_studio_client/api/models/v1_collection_info.py +1 -1
- eval_studio_client/api/models/v1_context.py +93 -0
- eval_studio_client/api/models/v1_create_dashboard_response.py +1 -1
- eval_studio_client/api/models/v1_create_document_response.py +1 -1
- eval_studio_client/api/models/v1_create_evaluation_request.py +8 -3
- eval_studio_client/api/models/v1_create_evaluator_response.py +1 -1
- eval_studio_client/api/models/v1_create_leaderboard_request.py +1 -1
- eval_studio_client/api/models/v1_create_leaderboard_response.py +1 -1
- eval_studio_client/api/models/v1_create_leaderboard_without_cache_response.py +1 -1
- eval_studio_client/api/models/v1_create_model_response.py +1 -1
- eval_studio_client/api/models/v1_create_perturbation_response.py +1 -1
- eval_studio_client/api/models/v1_create_test_case_response.py +1 -1
- eval_studio_client/api/models/v1_create_test_lab_response.py +1 -1
- eval_studio_client/api/models/v1_create_test_response.py +1 -1
- eval_studio_client/api/models/v1_create_workflow_edge_response.py +91 -0
- eval_studio_client/api/models/v1_create_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_create_workflow_response.py +91 -0
- eval_studio_client/api/models/v1_dashboard.py +1 -1
- eval_studio_client/api/models/v1_dashboard_status.py +1 -1
- eval_studio_client/api/models/v1_delete_dashboard_response.py +1 -1
- eval_studio_client/api/models/v1_delete_document_response.py +1 -1
- eval_studio_client/api/models/v1_delete_evaluator_response.py +1 -1
- eval_studio_client/api/models/v1_delete_leaderboard_response.py +1 -1
- eval_studio_client/api/models/v1_delete_model_response.py +1 -1
- eval_studio_client/api/models/v1_delete_test_case_response.py +1 -1
- eval_studio_client/api/models/v1_delete_test_response.py +1 -1
- eval_studio_client/api/models/v1_delete_workflow_edge_response.py +91 -0
- eval_studio_client/api/models/v1_delete_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_delete_workflow_response.py +91 -0
- eval_studio_client/api/models/v1_document.py +1 -1
- eval_studio_client/api/models/v1_estimate_threshold_request.py +103 -0
- eval_studio_client/api/models/v1_evaluation_test.py +1 -1
- eval_studio_client/api/models/v1_evaluator.py +1 -1
- eval_studio_client/api/models/v1_evaluator_param_type.py +1 -1
- eval_studio_client/api/models/v1_evaluator_parameter.py +1 -1
- eval_studio_client/api/models/v1_evaluator_view.py +1 -1
- eval_studio_client/api/models/v1_finalize_operation_response.py +1 -1
- eval_studio_client/api/models/v1_find_all_test_cases_by_id_response.py +1 -1
- eval_studio_client/api/models/v1_find_test_lab_response.py +1 -1
- eval_studio_client/api/models/v1_generate_test_cases_response.py +1 -1
- eval_studio_client/api/models/v1_generated_test_case.py +101 -0
- eval_studio_client/api/models/v1_get_dashboard_response.py +1 -1
- eval_studio_client/api/models/v1_get_document_response.py +1 -1
- eval_studio_client/api/models/v1_get_evaluator_response.py +1 -1
- eval_studio_client/api/models/v1_get_info_response.py +1 -1
- eval_studio_client/api/models/v1_get_leaderboard_report_response.py +91 -0
- eval_studio_client/api/models/v1_get_leaderboard_response.py +1 -1
- eval_studio_client/api/models/v1_get_model_response.py +1 -1
- eval_studio_client/api/models/v1_get_operation_progress_by_parent_response.py +1 -1
- eval_studio_client/api/models/v1_get_operation_response.py +1 -1
- eval_studio_client/api/models/v1_get_perturbator_response.py +1 -1
- eval_studio_client/api/models/v1_get_test_case_response.py +1 -1
- eval_studio_client/api/models/v1_get_test_class_response.py +1 -1
- eval_studio_client/api/models/v1_get_test_response.py +1 -1
- eval_studio_client/api/models/v1_get_workflow_node_prerequisites_response.py +89 -0
- eval_studio_client/api/models/v1_get_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_get_workflow_response.py +91 -0
- eval_studio_client/api/models/v1_import_evaluation_request.py +8 -3
- eval_studio_client/api/models/v1_import_leaderboard_request.py +1 -1
- eval_studio_client/api/models/v1_import_leaderboard_response.py +1 -1
- eval_studio_client/api/models/v1_import_test_cases_from_library_response.py +91 -0
- eval_studio_client/api/models/v1_import_test_cases_request.py +95 -0
- eval_studio_client/api/models/v1_info.py +10 -4
- eval_studio_client/api/models/v1_init_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_insight.py +1 -1
- eval_studio_client/api/models/v1_labeled_test_case.py +91 -0
- eval_studio_client/api/models/v1_leaderboard.py +1 -1
- eval_studio_client/api/models/v1_leaderboard_report.py +115 -0
- eval_studio_client/api/models/v1_leaderboard_report_actual_output_data.py +93 -0
- eval_studio_client/api/models/v1_leaderboard_report_actual_output_meta.py +101 -0
- eval_studio_client/api/models/v1_leaderboard_report_evaluator.py +155 -0
- eval_studio_client/api/models/v1_leaderboard_report_evaluator_parameter.py +109 -0
- eval_studio_client/api/models/v1_leaderboard_report_explanation.py +103 -0
- eval_studio_client/api/models/v1_leaderboard_report_metrics_meta_entry.py +129 -0
- eval_studio_client/api/models/v1_leaderboard_report_model.py +121 -0
- eval_studio_client/api/models/v1_leaderboard_report_result.py +175 -0
- eval_studio_client/api/models/v1_leaderboard_report_result_relationship.py +97 -0
- eval_studio_client/api/models/v1_leaderboard_status.py +1 -1
- eval_studio_client/api/models/v1_leaderboard_type.py +1 -1
- eval_studio_client/api/models/v1_leaderboard_view.py +1 -1
- eval_studio_client/api/models/v1_list_base_models_response.py +1 -1
- eval_studio_client/api/models/v1_list_dashboards_response.py +1 -1
- eval_studio_client/api/models/v1_list_documents_response.py +1 -1
- eval_studio_client/api/models/v1_list_evaluators_response.py +1 -1
- eval_studio_client/api/models/v1_list_leaderboards_response.py +1 -1
- eval_studio_client/api/models/v1_list_llm_models_response.py +1 -1
- eval_studio_client/api/models/v1_list_model_collections_response.py +1 -1
- eval_studio_client/api/models/v1_list_models_response.py +1 -1
- eval_studio_client/api/models/v1_list_most_recent_dashboards_response.py +1 -1
- eval_studio_client/api/models/v1_list_most_recent_leaderboards_response.py +1 -1
- eval_studio_client/api/models/v1_list_most_recent_models_response.py +1 -1
- eval_studio_client/api/models/v1_list_most_recent_tests_response.py +1 -1
- eval_studio_client/api/models/v1_list_operations_response.py +1 -1
- eval_studio_client/api/models/v1_list_perturbators_response.py +1 -1
- eval_studio_client/api/models/v1_list_prompt_library_items_response.py +95 -0
- eval_studio_client/api/models/v1_list_rag_collections_response.py +1 -1
- eval_studio_client/api/models/v1_list_test_case_library_items_response.py +95 -0
- eval_studio_client/api/models/v1_list_test_case_relationships_response.py +95 -0
- eval_studio_client/api/models/v1_list_test_cases_response.py +1 -1
- eval_studio_client/api/models/v1_list_test_classes_response.py +1 -1
- eval_studio_client/api/models/v1_list_tests_response.py +1 -1
- eval_studio_client/api/models/v1_list_workflows_response.py +95 -0
- eval_studio_client/api/models/v1_metric_score.py +89 -0
- eval_studio_client/api/models/v1_metric_scores.py +95 -0
- eval_studio_client/api/models/v1_model.py +1 -1
- eval_studio_client/api/models/v1_model_type.py +1 -1
- eval_studio_client/api/models/v1_operation.py +1 -1
- eval_studio_client/api/models/v1_operation_progress.py +1 -1
- eval_studio_client/api/models/v1_perturb_test_in_place_response.py +91 -0
- eval_studio_client/api/models/v1_perturb_test_response.py +1 -1
- eval_studio_client/api/models/v1_perturbator.py +1 -1
- eval_studio_client/api/models/v1_perturbator_configuration.py +1 -1
- eval_studio_client/api/models/v1_perturbator_intensity.py +1 -1
- eval_studio_client/api/models/v1_problem_and_action.py +1 -1
- eval_studio_client/api/models/v1_process_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_prompt_library_item.py +129 -0
- eval_studio_client/api/models/v1_repeated_string.py +87 -0
- eval_studio_client/api/models/v1_reset_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_test.py +1 -1
- eval_studio_client/api/models/v1_test_case.py +14 -3
- eval_studio_client/api/models/v1_test_case_relationship.py +1 -1
- eval_studio_client/api/models/v1_test_cases_generator.py +1 -1
- eval_studio_client/api/models/v1_test_class.py +1 -1
- eval_studio_client/api/models/v1_test_class_type.py +1 -1
- eval_studio_client/api/models/v1_test_lab.py +1 -1
- eval_studio_client/api/models/v1_test_suite_evaluates.py +39 -0
- eval_studio_client/api/models/v1_update_dashboard_response.py +1 -1
- eval_studio_client/api/models/v1_update_document_response.py +1 -1
- eval_studio_client/api/models/v1_update_leaderboard_response.py +1 -1
- eval_studio_client/api/models/v1_update_model_response.py +1 -1
- eval_studio_client/api/models/v1_update_operation_response.py +1 -1
- eval_studio_client/api/models/v1_update_test_case_response.py +1 -1
- eval_studio_client/api/models/v1_update_test_response.py +1 -1
- eval_studio_client/api/models/v1_update_workflow_node_response.py +91 -0
- eval_studio_client/api/models/v1_update_workflow_response.py +91 -0
- eval_studio_client/api/models/v1_who_am_i_response.py +1 -1
- eval_studio_client/api/models/v1_workflow.py +164 -0
- eval_studio_client/api/models/v1_workflow_edge.py +123 -0
- eval_studio_client/api/models/v1_workflow_edge_type.py +37 -0
- eval_studio_client/api/models/v1_workflow_node.py +156 -0
- eval_studio_client/api/models/v1_workflow_node_artifact.py +122 -0
- eval_studio_client/api/models/v1_workflow_node_artifacts.py +97 -0
- eval_studio_client/api/models/v1_workflow_node_attributes.py +87 -0
- eval_studio_client/api/models/v1_workflow_node_status.py +40 -0
- eval_studio_client/api/models/v1_workflow_node_type.py +44 -0
- eval_studio_client/api/models/v1_workflow_node_view.py +38 -0
- eval_studio_client/api/models/v1_workflow_type.py +37 -0
- eval_studio_client/api/models/workflow_service_clone_workflow_request.py +95 -0
- eval_studio_client/api/rest.py +1 -1
- eval_studio_client/api/test/test_adversarial_inputs_service_api.py +37 -0
- eval_studio_client/api/test/test_adversarial_inputs_service_test_adversarial_inputs_robustness_request.py +128 -0
- eval_studio_client/api/test/test_dashboard_service_api.py +1 -1
- eval_studio_client/api/test/test_document_service_api.py +1 -1
- eval_studio_client/api/test/test_evaluation_service_api.py +1 -1
- eval_studio_client/api/test/test_evaluator_service_api.py +1 -1
- eval_studio_client/api/test/test_generated_questions_validation_service_api.py +37 -0
- eval_studio_client/api/test/test_generated_questions_validation_service_validate_generated_questions_request.py +83 -0
- eval_studio_client/api/test/test_human_calibration_service_api.py +38 -0
- eval_studio_client/api/test/test_info_service_api.py +1 -1
- eval_studio_client/api/test/test_leaderboard_report_service_api.py +37 -0
- eval_studio_client/api/test/test_leaderboard_service_api.py +1 -1
- eval_studio_client/api/test/test_model_service_api.py +1 -1
- eval_studio_client/api/test/test_operation_progress_service_api.py +1 -1
- eval_studio_client/api/test/test_operation_service_api.py +7 -1
- eval_studio_client/api/test/test_perturbation_service_api.py +1 -1
- eval_studio_client/api/test/test_perturbation_service_create_perturbation_request.py +25 -3
- eval_studio_client/api/test/test_perturbator_service_api.py +1 -1
- eval_studio_client/api/test/test_prompt_generation_service_api.py +1 -1
- eval_studio_client/api/test/test_prompt_generation_service_auto_generate_prompts_request.py +13 -5
- eval_studio_client/api/test/test_prompt_library_service_api.py +43 -0
- eval_studio_client/api/test/test_protobuf_any.py +1 -1
- eval_studio_client/api/test/test_protobuf_null_value.py +33 -0
- eval_studio_client/api/test/test_required_the_dashboard_to_update.py +1 -1
- eval_studio_client/api/test/test_required_the_document_to_update.py +1 -1
- eval_studio_client/api/test/test_required_the_leaderboard_to_update.py +1 -1
- eval_studio_client/api/test/test_required_the_model_to_update.py +1 -1
- eval_studio_client/api/test/test_required_the_operation_to_finalize.py +1 -1
- eval_studio_client/api/test/test_required_the_operation_to_update.py +1 -1
- eval_studio_client/api/test/test_required_the_test_case_to_update.py +9 -2
- eval_studio_client/api/test/test_required_the_test_to_update.py +1 -1
- eval_studio_client/api/test/test_required_the_updated_workflow.py +91 -0
- eval_studio_client/api/test/test_required_the_updated_workflow_node.py +80 -0
- eval_studio_client/api/test/test_rpc_status.py +1 -1
- eval_studio_client/api/test/test_test_case_relationship_service_api.py +37 -0
- eval_studio_client/api/test/test_test_case_service_api.py +1 -1
- eval_studio_client/api/test/test_test_case_service_batch_delete_test_cases_request.py +1 -1
- eval_studio_client/api/test/test_test_class_service_api.py +1 -1
- eval_studio_client/api/test/test_test_lab_service_api.py +1 -1
- eval_studio_client/api/test/test_test_service_api.py +25 -1
- eval_studio_client/api/test/test_test_service_clone_test_request.py +52 -0
- eval_studio_client/api/test/test_test_service_generate_test_cases_request.py +8 -2
- eval_studio_client/api/test/test_test_service_import_test_cases_from_library_request.py +56 -0
- eval_studio_client/api/test/test_test_service_list_test_case_library_items_request.py +63 -0
- eval_studio_client/api/test/test_test_service_perturb_test_in_place_request.py +59 -0
- eval_studio_client/api/test/test_test_service_perturb_test_request.py +5 -2
- eval_studio_client/api/test/test_v1_abort_operation_response.py +71 -0
- eval_studio_client/api/test/test_v1_batch_create_leaderboards_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_create_leaderboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_dashboards_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_dashboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_documents_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_documents_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_evaluators_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_evaluators_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_leaderboards_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_leaderboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_models_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_test_cases_response.py +9 -2
- eval_studio_client/api/test/test_v1_batch_delete_tests_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_tests_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_delete_workflows_request.py +53 -0
- eval_studio_client/api/test/test_v1_batch_delete_workflows_response.py +95 -0
- eval_studio_client/api/test/test_v1_batch_get_dashboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_get_documents_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_get_leaderboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_get_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_get_operations_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_get_tests_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_get_workflow_edges_response.py +64 -0
- eval_studio_client/api/test/test_v1_batch_get_workflow_nodes_response.py +84 -0
- eval_studio_client/api/test/test_v1_batch_import_leaderboard_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_import_leaderboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_batch_import_tests_request.py +1 -1
- eval_studio_client/api/test/test_v1_batch_import_tests_response.py +1 -1
- eval_studio_client/api/test/test_v1_check_base_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_clone_test_response.py +67 -0
- eval_studio_client/api/test/test_v1_clone_workflow_response.py +93 -0
- eval_studio_client/api/test/test_v1_collection_info.py +1 -1
- eval_studio_client/api/test/test_v1_context.py +54 -0
- eval_studio_client/api/test/test_v1_create_dashboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_document_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_evaluation_request.py +25 -3
- eval_studio_client/api/test/test_v1_create_evaluator_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_leaderboard_request.py +1 -1
- eval_studio_client/api/test/test_v1_create_leaderboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_leaderboard_without_cache_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_model_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_perturbation_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_test_case_response.py +9 -2
- eval_studio_client/api/test/test_v1_create_test_lab_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_test_response.py +1 -1
- eval_studio_client/api/test/test_v1_create_workflow_edge_response.py +62 -0
- eval_studio_client/api/test/test_v1_create_workflow_node_response.py +82 -0
- eval_studio_client/api/test/test_v1_create_workflow_response.py +93 -0
- eval_studio_client/api/test/test_v1_dashboard.py +1 -1
- eval_studio_client/api/test/test_v1_dashboard_status.py +1 -1
- eval_studio_client/api/test/test_v1_delete_dashboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_delete_document_response.py +1 -1
- eval_studio_client/api/test/test_v1_delete_evaluator_response.py +1 -1
- eval_studio_client/api/test/test_v1_delete_leaderboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_delete_model_response.py +1 -1
- eval_studio_client/api/test/test_v1_delete_test_case_response.py +9 -2
- eval_studio_client/api/test/test_v1_delete_test_response.py +1 -1
- eval_studio_client/api/test/test_v1_delete_workflow_edge_response.py +62 -0
- eval_studio_client/api/test/test_v1_delete_workflow_node_response.py +82 -0
- eval_studio_client/api/test/test_v1_delete_workflow_response.py +93 -0
- eval_studio_client/api/test/test_v1_document.py +1 -1
- eval_studio_client/api/test/test_v1_estimate_threshold_request.py +60 -0
- eval_studio_client/api/test/test_v1_evaluation_test.py +9 -2
- eval_studio_client/api/test/test_v1_evaluator.py +1 -1
- eval_studio_client/api/test/test_v1_evaluator_param_type.py +1 -1
- eval_studio_client/api/test/test_v1_evaluator_parameter.py +1 -1
- eval_studio_client/api/test/test_v1_evaluator_view.py +1 -1
- eval_studio_client/api/test/test_v1_finalize_operation_response.py +1 -1
- eval_studio_client/api/test/test_v1_find_all_test_cases_by_id_response.py +9 -2
- eval_studio_client/api/test/test_v1_find_test_lab_response.py +1 -1
- eval_studio_client/api/test/test_v1_generate_test_cases_response.py +1 -1
- eval_studio_client/api/test/test_v1_generated_test_case.py +79 -0
- eval_studio_client/api/test/test_v1_get_dashboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_document_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_evaluator_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_info_response.py +7 -2
- eval_studio_client/api/test/test_v1_get_leaderboard_report_response.py +175 -0
- eval_studio_client/api/test/test_v1_get_leaderboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_model_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_operation_progress_by_parent_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_operation_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_perturbator_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_test_case_response.py +9 -2
- eval_studio_client/api/test/test_v1_get_test_class_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_test_response.py +1 -1
- eval_studio_client/api/test/test_v1_get_workflow_node_prerequisites_response.py +56 -0
- eval_studio_client/api/test/test_v1_get_workflow_node_response.py +82 -0
- eval_studio_client/api/test/test_v1_get_workflow_response.py +93 -0
- eval_studio_client/api/test/test_v1_import_evaluation_request.py +17 -2
- eval_studio_client/api/test/test_v1_import_leaderboard_request.py +1 -1
- eval_studio_client/api/test/test_v1_import_leaderboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_import_test_cases_from_library_response.py +71 -0
- eval_studio_client/api/test/test_v1_import_test_cases_request.py +57 -0
- eval_studio_client/api/test/test_v1_info.py +7 -2
- eval_studio_client/api/test/test_v1_init_workflow_node_response.py +82 -0
- eval_studio_client/api/test/test_v1_insight.py +1 -1
- eval_studio_client/api/test/test_v1_labeled_test_case.py +53 -0
- eval_studio_client/api/test/test_v1_leaderboard.py +1 -1
- eval_studio_client/api/test/test_v1_leaderboard_report.py +174 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_actual_output_data.py +52 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_actual_output_meta.py +56 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_evaluator.py +114 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_evaluator_parameter.py +63 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_explanation.py +58 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_metrics_meta_entry.py +66 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_model.py +62 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_result.py +92 -0
- eval_studio_client/api/test/test_v1_leaderboard_report_result_relationship.py +53 -0
- eval_studio_client/api/test/test_v1_leaderboard_status.py +1 -1
- eval_studio_client/api/test/test_v1_leaderboard_type.py +1 -1
- eval_studio_client/api/test/test_v1_leaderboard_view.py +1 -1
- eval_studio_client/api/test/test_v1_list_base_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_dashboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_documents_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_evaluators_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_leaderboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_llm_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_model_collections_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_most_recent_dashboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_most_recent_leaderboards_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_most_recent_models_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_most_recent_tests_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_operations_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_perturbators_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_prompt_library_items_response.py +71 -0
- eval_studio_client/api/test/test_v1_list_rag_collections_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_test_case_library_items_response.py +71 -0
- eval_studio_client/api/test/test_v1_list_test_case_relationships_response.py +56 -0
- eval_studio_client/api/test/test_v1_list_test_cases_response.py +9 -2
- eval_studio_client/api/test/test_v1_list_test_classes_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_tests_response.py +1 -1
- eval_studio_client/api/test/test_v1_list_workflows_response.py +95 -0
- eval_studio_client/api/test/test_v1_metric_score.py +52 -0
- eval_studio_client/api/test/test_v1_metric_scores.py +55 -0
- eval_studio_client/api/test/test_v1_model.py +1 -1
- eval_studio_client/api/test/test_v1_model_type.py +1 -1
- eval_studio_client/api/test/test_v1_operation.py +1 -1
- eval_studio_client/api/test/test_v1_operation_progress.py +1 -1
- eval_studio_client/api/test/test_v1_perturb_test_in_place_response.py +67 -0
- eval_studio_client/api/test/test_v1_perturb_test_response.py +1 -1
- eval_studio_client/api/test/test_v1_perturbator.py +1 -1
- eval_studio_client/api/test/test_v1_perturbator_configuration.py +1 -1
- eval_studio_client/api/test/test_v1_perturbator_intensity.py +1 -1
- eval_studio_client/api/test/test_v1_problem_and_action.py +1 -1
- eval_studio_client/api/test/test_v1_process_workflow_node_response.py +71 -0
- eval_studio_client/api/test/test_v1_prompt_library_item.py +68 -0
- eval_studio_client/api/test/test_v1_repeated_string.py +53 -0
- eval_studio_client/api/test/test_v1_reset_workflow_node_response.py +82 -0
- eval_studio_client/api/test/test_v1_test.py +1 -1
- eval_studio_client/api/test/test_v1_test_case.py +9 -2
- eval_studio_client/api/test/test_v1_test_case_relationship.py +1 -1
- eval_studio_client/api/test/test_v1_test_cases_generator.py +1 -1
- eval_studio_client/api/test/test_v1_test_class.py +1 -1
- eval_studio_client/api/test/test_v1_test_class_type.py +1 -1
- eval_studio_client/api/test/test_v1_test_lab.py +1 -1
- eval_studio_client/api/test/test_v1_test_suite_evaluates.py +33 -0
- eval_studio_client/api/test/test_v1_update_dashboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_update_document_response.py +1 -1
- eval_studio_client/api/test/test_v1_update_leaderboard_response.py +1 -1
- eval_studio_client/api/test/test_v1_update_model_response.py +1 -1
- eval_studio_client/api/test/test_v1_update_operation_response.py +1 -1
- eval_studio_client/api/test/test_v1_update_test_case_response.py +9 -2
- eval_studio_client/api/test/test_v1_update_test_response.py +1 -1
- eval_studio_client/api/test/test_v1_update_workflow_node_response.py +82 -0
- eval_studio_client/api/test/test_v1_update_workflow_response.py +93 -0
- eval_studio_client/api/test/test_v1_who_am_i_response.py +1 -1
- eval_studio_client/api/test/test_v1_workflow.py +92 -0
- eval_studio_client/api/test/test_v1_workflow_edge.py +61 -0
- eval_studio_client/api/test/test_v1_workflow_edge_type.py +33 -0
- eval_studio_client/api/test/test_v1_workflow_node.py +81 -0
- eval_studio_client/api/test/test_v1_workflow_node_artifact.py +61 -0
- eval_studio_client/api/test/test_v1_workflow_node_artifacts.py +64 -0
- eval_studio_client/api/test/test_v1_workflow_node_attributes.py +51 -0
- eval_studio_client/api/test/test_v1_workflow_node_status.py +33 -0
- eval_studio_client/api/test/test_v1_workflow_node_type.py +33 -0
- eval_studio_client/api/test/test_v1_workflow_node_view.py +33 -0
- eval_studio_client/api/test/test_v1_workflow_type.py +33 -0
- eval_studio_client/api/test/test_who_am_i_service_api.py +1 -1
- eval_studio_client/api/test/test_workflow_edge_service_api.py +52 -0
- eval_studio_client/api/test/test_workflow_node_service_api.py +94 -0
- eval_studio_client/api/test/test_workflow_service_api.py +80 -0
- eval_studio_client/api/test/test_workflow_service_clone_workflow_request.py +55 -0
- eval_studio_client/client.py +7 -0
- eval_studio_client/dashboards.py +66 -18
- eval_studio_client/gen/openapiv2/eval_studio.swagger.json +5132 -1847
- eval_studio_client/leaderboards.py +125 -0
- eval_studio_client/models.py +3 -42
- eval_studio_client/test_labs.py +49 -21
- eval_studio_client/tests.py +323 -58
- eval_studio_client/utils.py +26 -0
- {eval_studio_client-1.0.0a1.dist-info → eval_studio_client-1.1.0a5.dist-info}/METADATA +2 -3
- eval_studio_client-1.1.0a5.dist-info/RECORD +720 -0
- {eval_studio_client-1.0.0a1.dist-info → eval_studio_client-1.1.0a5.dist-info}/WHEEL +1 -1
- eval_studio_client-1.0.0a1.dist-info/RECORD +0 -485
eval_studio_client/tests.py
CHANGED
|
@@ -11,7 +11,11 @@ from typing import Union
|
|
|
11
11
|
from eval_studio_client import api
|
|
12
12
|
from eval_studio_client import documents as d7s
|
|
13
13
|
from eval_studio_client import perturbators as p10s
|
|
14
|
+
from eval_studio_client import utils
|
|
14
15
|
from eval_studio_client.api import models
|
|
16
|
+
from eval_studio_client.api.models import (
|
|
17
|
+
test_service_clone_test_request as clone_test_request,
|
|
18
|
+
)
|
|
15
19
|
|
|
16
20
|
|
|
17
21
|
class TestCaseGenerator(enum.Enum):
|
|
@@ -85,15 +89,8 @@ class TestCaseGenerator(enum.Enum):
|
|
|
85
89
|
|
|
86
90
|
|
|
87
91
|
@dataclasses.dataclass
|
|
88
|
-
class
|
|
89
|
-
|
|
92
|
+
class _TestCaseGenerationHandle:
|
|
90
93
|
name: Any | None
|
|
91
|
-
create_time: Optional[datetime.datetime] = None
|
|
92
|
-
creator: Optional[str] = None
|
|
93
|
-
update_time: Optional[datetime.datetime] = None
|
|
94
|
-
updater: Optional[str] = None
|
|
95
|
-
delete_time: Optional[datetime.datetime] = None
|
|
96
|
-
deleter: Optional[str] = None
|
|
97
94
|
progress: Optional[float] = None
|
|
98
95
|
progress_message: Optional[str] = None
|
|
99
96
|
error: Optional[models.RpcStatus] = None
|
|
@@ -102,11 +99,39 @@ class TestCaseGenerationHandle:
|
|
|
102
99
|
@staticmethod
|
|
103
100
|
def _from_operation(
|
|
104
101
|
res: models.V1GenerateTestCasesResponse | models.V1GetOperationResponse,
|
|
105
|
-
) -> "
|
|
102
|
+
) -> "_TestCaseGenerationHandle":
|
|
106
103
|
"""Converts an API operation to prompt generation handle."""
|
|
107
104
|
op: models.V1Operation | None = res.operation
|
|
108
105
|
if not op:
|
|
109
|
-
return
|
|
106
|
+
return _TestCaseGenerationHandle(name=None)
|
|
107
|
+
|
|
108
|
+
# progress
|
|
109
|
+
if hasattr(op, "metadata") and op.metadata:
|
|
110
|
+
meta_dict = op.metadata.to_dict() or {}
|
|
111
|
+
else:
|
|
112
|
+
meta_dict = {}
|
|
113
|
+
|
|
114
|
+
return _TestCaseGenerationHandle(
|
|
115
|
+
name=op.name,
|
|
116
|
+
progress=meta_dict.get("progress"),
|
|
117
|
+
progress_message=meta_dict.get("progressMessage"),
|
|
118
|
+
error=op.error,
|
|
119
|
+
done=op.done,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@dataclasses.dataclass
|
|
124
|
+
class _TestCaseLibraryGetHandle(_TestCaseGenerationHandle):
|
|
125
|
+
@staticmethod
|
|
126
|
+
def _from_operation(
|
|
127
|
+
res: (
|
|
128
|
+
models.V1ImportTestCasesFromLibraryResponse | models.V1GetOperationResponse
|
|
129
|
+
),
|
|
130
|
+
) -> "_TestCaseLibraryGetHandle":
|
|
131
|
+
"""Converts an API operation to prompt library handle."""
|
|
132
|
+
op: models.V1Operation | None = res.operation
|
|
133
|
+
if not op:
|
|
134
|
+
return _TestCaseLibraryGetHandle(name=None)
|
|
110
135
|
|
|
111
136
|
# progress
|
|
112
137
|
if hasattr(op, "metadata") and op.metadata:
|
|
@@ -114,14 +139,8 @@ class TestCaseGenerationHandle:
|
|
|
114
139
|
else:
|
|
115
140
|
meta_dict = {}
|
|
116
141
|
|
|
117
|
-
return
|
|
142
|
+
return _TestCaseLibraryGetHandle(
|
|
118
143
|
name=op.name,
|
|
119
|
-
create_time=op.create_time,
|
|
120
|
-
creator=op.creator,
|
|
121
|
-
update_time=op.update_time,
|
|
122
|
-
updater=op.updater,
|
|
123
|
-
delete_time=op.delete_time,
|
|
124
|
-
deleter=op.deleter,
|
|
125
144
|
progress=meta_dict.get("progress"),
|
|
126
145
|
progress_message=meta_dict.get("progressMessage"),
|
|
127
146
|
error=op.error,
|
|
@@ -129,6 +148,42 @@ class TestCaseGenerationHandle:
|
|
|
129
148
|
)
|
|
130
149
|
|
|
131
150
|
|
|
151
|
+
@dataclasses.dataclass
|
|
152
|
+
class TestCaseLibraryItem:
|
|
153
|
+
"""Represents a single test case library item - test suite."""
|
|
154
|
+
|
|
155
|
+
key: str
|
|
156
|
+
name: str
|
|
157
|
+
description: str
|
|
158
|
+
test_suite_url: str
|
|
159
|
+
test_count: int
|
|
160
|
+
test_case_count: int
|
|
161
|
+
evaluates: List[str]
|
|
162
|
+
categories: List[str]
|
|
163
|
+
|
|
164
|
+
@staticmethod
|
|
165
|
+
def _from_api_items(
|
|
166
|
+
api_items: List[models.V1PromptLibraryItem],
|
|
167
|
+
) -> List["TestCaseLibraryItem"]:
|
|
168
|
+
return (
|
|
169
|
+
[
|
|
170
|
+
TestCaseLibraryItem(
|
|
171
|
+
key=api_item.name or "",
|
|
172
|
+
name=api_item.display_name or "",
|
|
173
|
+
description=api_item.description or "",
|
|
174
|
+
test_suite_url=api_item.test_suite_url or "",
|
|
175
|
+
test_count=api_item.test_count or 0,
|
|
176
|
+
test_case_count=api_item.test_case_count or 0,
|
|
177
|
+
evaluates=list(api_item.evaluates) if api_item.evaluates else [],
|
|
178
|
+
categories=list(api_item.categories) if api_item.categories else [],
|
|
179
|
+
)
|
|
180
|
+
for api_item in api_items
|
|
181
|
+
]
|
|
182
|
+
if api_items
|
|
183
|
+
else []
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
132
187
|
@dataclasses.dataclass
|
|
133
188
|
class TestCase:
|
|
134
189
|
"""Represents a single test case, which contains tested prompt, expected answer
|
|
@@ -173,6 +228,31 @@ class TestCase:
|
|
|
173
228
|
)
|
|
174
229
|
|
|
175
230
|
|
|
231
|
+
@dataclasses.dataclass
|
|
232
|
+
class TestCaseRelationship:
|
|
233
|
+
source_test_case_key: str
|
|
234
|
+
target_test_case_key: str
|
|
235
|
+
relationship_type: str
|
|
236
|
+
|
|
237
|
+
def to_api_proto(self) -> models.V1TestCaseRelationship:
|
|
238
|
+
"""Converts the client TestCase to an API TestCase."""
|
|
239
|
+
return models.V1TestCaseRelationship(
|
|
240
|
+
source=self.source_test_case_key,
|
|
241
|
+
target=self.target_test_case_key,
|
|
242
|
+
type=self.relationship_type,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
@staticmethod
|
|
246
|
+
def _from_api_test_case_rel(
|
|
247
|
+
api_test_case_rel: models.V1TestCaseRelationship,
|
|
248
|
+
) -> "TestCaseRelationship":
|
|
249
|
+
return TestCaseRelationship(
|
|
250
|
+
source_test_case_key=api_test_case_rel.source or "",
|
|
251
|
+
target_test_case_key=api_test_case_rel.target or "",
|
|
252
|
+
relationship_type=api_test_case_rel.type or "",
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
176
256
|
@dataclasses.dataclass
|
|
177
257
|
class Test:
|
|
178
258
|
"""Represents a test, which contains a set of test cases and optionally
|
|
@@ -193,6 +273,8 @@ class Test:
|
|
|
193
273
|
create_time: Optional[datetime.datetime] = None
|
|
194
274
|
update_time: Optional[datetime.datetime] = None
|
|
195
275
|
_client: Optional[api.ApiClient] = None
|
|
276
|
+
_gen_tc_op_name: Optional[str] = None
|
|
277
|
+
_lib_tc_op_name: Optional[str] = None
|
|
196
278
|
|
|
197
279
|
def __post_init__(self):
|
|
198
280
|
if self._client:
|
|
@@ -200,6 +282,7 @@ class Test:
|
|
|
200
282
|
self._test_case_api = api.TestCaseServiceApi(self._client)
|
|
201
283
|
self._document_api = api.DocumentServiceApi(self._client)
|
|
202
284
|
self._operation_api = api.OperationServiceApi(self._client)
|
|
285
|
+
self._relationships_api = api.TestCaseRelationshipServiceApi(self._client)
|
|
203
286
|
|
|
204
287
|
@property
|
|
205
288
|
def test_cases(self) -> List[TestCase]:
|
|
@@ -210,6 +293,19 @@ class Test:
|
|
|
210
293
|
|
|
211
294
|
return []
|
|
212
295
|
|
|
296
|
+
@property
|
|
297
|
+
def test_case_relationships(self) -> List[TestCaseRelationship]:
|
|
298
|
+
"""Retrieves all relationships among test cases of the test."""
|
|
299
|
+
r_a = self._relationships_api
|
|
300
|
+
res = r_a.test_case_relationship_service_list_test_case_relationships(self.key)
|
|
301
|
+
if res and res.test_case_relationships:
|
|
302
|
+
return [
|
|
303
|
+
TestCaseRelationship._from_api_test_case_rel(r)
|
|
304
|
+
for r in res.test_case_relationships
|
|
305
|
+
]
|
|
306
|
+
|
|
307
|
+
return []
|
|
308
|
+
|
|
213
309
|
@property
|
|
214
310
|
def documents(self) -> List[d7s.Document]:
|
|
215
311
|
"""Retrieves all documents attached to the test."""
|
|
@@ -232,12 +328,12 @@ class Test:
|
|
|
232
328
|
perturbators: Union[p10s.Perturbator, str, List[Union[p10s.Perturbator, str]]],
|
|
233
329
|
new_test_description: str = "",
|
|
234
330
|
) -> "Test":
|
|
235
|
-
"""Creates new Test by perturbing this test using the given
|
|
331
|
+
"""Creates new Test by perturbing this test using the given perturbators.
|
|
236
332
|
|
|
237
333
|
Args:
|
|
238
334
|
new_test_name (str): Name of the newly created test.
|
|
239
|
-
perturbators (Perturbator, List[Perturbator], str or List[str]): List of
|
|
240
|
-
their keys used to perturbate this Test.
|
|
335
|
+
perturbators (Perturbator, List[Perturbator], str or List[str]): List of
|
|
336
|
+
perturbators or their keys used to perturbate this Test.
|
|
241
337
|
new_test_description (str): Optional description of the newly created test.
|
|
242
338
|
"""
|
|
243
339
|
|
|
@@ -258,13 +354,46 @@ class Test:
|
|
|
258
354
|
configs = [_PerturbatorConfiguration(p) for p in perturbators_to_run]
|
|
259
355
|
|
|
260
356
|
req = models.TestServicePerturbTestRequest(
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
357
|
+
perturbator_configurations=[c.to_api_proto() for c in configs],
|
|
358
|
+
new_test_display_name=new_test_name,
|
|
359
|
+
new_test_description=new_test_description,
|
|
264
360
|
)
|
|
265
361
|
resp = self._test_api.test_service_perturb_test(self.key, req)
|
|
266
362
|
return Test._from_api_test(resp.test, self._client)
|
|
267
363
|
|
|
364
|
+
def perturb_in_place(
|
|
365
|
+
self,
|
|
366
|
+
perturbators: Union[p10s.Perturbator, str, List[Union[p10s.Perturbator, str]]],
|
|
367
|
+
test_case_names: Optional[List[str]] = None,
|
|
368
|
+
) -> str:
|
|
369
|
+
"""In-place (in-test) perturbation of test cases using the given perturbators.
|
|
370
|
+
|
|
371
|
+
Args:
|
|
372
|
+
perturbators (Perturbator, List[Perturbator], str or List[str]): List of
|
|
373
|
+
perturbators or their keys used to perturbate this Test.
|
|
374
|
+
test_case_names (List[str]): List of test case names to perturbate.
|
|
375
|
+
"""
|
|
376
|
+
|
|
377
|
+
if self._client is None:
|
|
378
|
+
raise RuntimeError("Client is not set.")
|
|
379
|
+
|
|
380
|
+
if not perturbators:
|
|
381
|
+
raise ValueError("Perturbators must be provided.")
|
|
382
|
+
|
|
383
|
+
if isinstance(perturbators, (p10s.Perturbator, str)):
|
|
384
|
+
perturbators_to_run = [perturbators]
|
|
385
|
+
else:
|
|
386
|
+
perturbators_to_run = perturbators
|
|
387
|
+
|
|
388
|
+
configs = [_PerturbatorConfiguration(p) for p in perturbators_to_run]
|
|
389
|
+
|
|
390
|
+
req = models.TestServicePerturbTestInPlaceRequest(
|
|
391
|
+
perturbator_configurations=[c.to_api_proto() for c in configs],
|
|
392
|
+
test_case_names=test_case_names,
|
|
393
|
+
)
|
|
394
|
+
resp = self._test_api.test_service_perturb_test(self.key, req)
|
|
395
|
+
return resp.test.name
|
|
396
|
+
|
|
268
397
|
def generate_test_cases(
|
|
269
398
|
self,
|
|
270
399
|
count: int,
|
|
@@ -272,12 +401,12 @@ class Test:
|
|
|
272
401
|
base_llm_model: Optional[str] = None,
|
|
273
402
|
generators: Optional[List[TestCaseGenerator]] = None,
|
|
274
403
|
existing_collection: Optional[str] = None,
|
|
275
|
-
) ->
|
|
404
|
+
) -> None:
|
|
276
405
|
"""Generates test cases based on the documents of the Test.
|
|
277
406
|
|
|
278
407
|
Args:
|
|
279
408
|
count (int): Number of test cases to generate (generator may return fewer
|
|
280
|
-
|
|
409
|
+
prompts).
|
|
281
410
|
model (str): Model to use for generating the prompts.
|
|
282
411
|
base_llm_model (str): Base LLM model to use for generating the prompts.
|
|
283
412
|
generators (List[TestCaseGenerator]): Methods to use for generation.
|
|
@@ -296,28 +425,28 @@ class Test:
|
|
|
296
425
|
|
|
297
426
|
res = self._test_api.test_service_generate_test_cases(self.key, req)
|
|
298
427
|
|
|
299
|
-
|
|
428
|
+
op: models.V1Operation | None = res.operation
|
|
429
|
+
self._gen_tc_op_name = op.name if op else None
|
|
300
430
|
|
|
301
431
|
def wait_for_test_case_generation(
|
|
302
|
-
self,
|
|
303
|
-
|
|
304
|
-
timeout: Optional[float] = None,
|
|
305
|
-
verbose: bool = False,
|
|
306
|
-
) -> TestCaseGenerationHandle:
|
|
432
|
+
self, timeout: Optional[float] = None, verbose: bool = False
|
|
433
|
+
) -> None:
|
|
307
434
|
"""Waits for the test case generation to finish.
|
|
308
435
|
|
|
309
436
|
Args:
|
|
310
|
-
handle (TestCaseGenerationHandle): Handle of the test case generation.
|
|
311
437
|
timeout (float): The maximum time to wait in seconds.
|
|
312
438
|
verbose (bool): If True, prints the status of the handle while waiting.
|
|
313
439
|
"""
|
|
314
|
-
if not
|
|
315
|
-
raise ValueError(
|
|
316
|
-
|
|
317
|
-
|
|
440
|
+
if not self._gen_tc_op_name:
|
|
441
|
+
raise ValueError(
|
|
442
|
+
"There is no ongoing test case generation - the operation name is not "
|
|
443
|
+
"set."
|
|
444
|
+
)
|
|
318
445
|
|
|
319
446
|
if verbose:
|
|
320
|
-
print(
|
|
447
|
+
print(
|
|
448
|
+
f"Waiting for test case generation to finish ({self._gen_tc_op_name}):"
|
|
449
|
+
)
|
|
321
450
|
if self._client:
|
|
322
451
|
# exponential backoff
|
|
323
452
|
wait_time = 1.0
|
|
@@ -325,37 +454,151 @@ class Test:
|
|
|
325
454
|
wait_max = 8.0
|
|
326
455
|
wait_total = 0.0
|
|
327
456
|
timeout = timeout or float(2 * 24 * 60 * 60) # 2 days
|
|
328
|
-
|
|
329
|
-
p_max = 1.0
|
|
330
|
-
p_msg = ""
|
|
457
|
+
progress_bar = utils.ProgressBar()
|
|
331
458
|
while wait_total < timeout:
|
|
332
|
-
handle =
|
|
333
|
-
self._operation_api.operation_service_get_operation(
|
|
459
|
+
handle = _TestCaseGenerationHandle._from_operation(
|
|
460
|
+
self._operation_api.operation_service_get_operation(
|
|
461
|
+
self._gen_tc_op_name
|
|
462
|
+
)
|
|
334
463
|
)
|
|
335
464
|
|
|
336
465
|
if verbose:
|
|
337
|
-
|
|
338
|
-
if handle.progress or handle.progress_message:
|
|
339
|
-
try:
|
|
340
|
-
h_progress = float(str(handle.progress))
|
|
341
|
-
except ValueError:
|
|
342
|
-
h_progress = 0.0
|
|
343
|
-
h_msg = handle.progress_message or "Processing"
|
|
344
|
-
else:
|
|
345
|
-
h_progress = 0.0
|
|
346
|
-
h_msg = "Initializing"
|
|
347
|
-
p_progress = int(h_progress / p_max * 100)
|
|
348
|
-
p_hashes = p_progress // 5
|
|
349
|
-
p_msg = f" {p_progress:>3}% |{'#' * p_hashes:<20}| {h_msg}"
|
|
350
|
-
print(p_msg, end="\r")
|
|
466
|
+
progress_bar.update(handle.progress or 0, handle.progress_message)
|
|
351
467
|
|
|
352
468
|
if handle.done:
|
|
353
|
-
|
|
469
|
+
if handle.error:
|
|
470
|
+
raise RuntimeError(
|
|
471
|
+
f"Test case generation failed: {handle.error}"
|
|
472
|
+
)
|
|
473
|
+
return
|
|
354
474
|
|
|
355
475
|
wait_time *= wait_coef
|
|
356
476
|
time.sleep(min(wait_time, wait_max))
|
|
357
477
|
else:
|
|
358
|
-
raise ValueError(
|
|
478
|
+
raise ValueError(
|
|
479
|
+
"Unable to establish a connection to the Eval Studio host."
|
|
480
|
+
)
|
|
481
|
+
|
|
482
|
+
raise TimeoutError("Waiting timeout has been reached.")
|
|
483
|
+
|
|
484
|
+
def list_test_suite_library_items(
|
|
485
|
+
self,
|
|
486
|
+
filter_by_categories: Optional[List[str]] = None,
|
|
487
|
+
filter_by_purposes: Optional[List[str]] = None,
|
|
488
|
+
filter_by_evaluates: Optional[List[str]] = None,
|
|
489
|
+
filter_by_origin: Optional[str] = None,
|
|
490
|
+
filter_by_test_case_count: Optional[int] = None,
|
|
491
|
+
filter_by_test_count: Optional[int] = None,
|
|
492
|
+
filter_by_fts: Optional[str] = None,
|
|
493
|
+
) -> List[TestCaseLibraryItem]:
|
|
494
|
+
"""Retrieves a list of all available items - suites of tests - in the library.
|
|
495
|
+
|
|
496
|
+
Args:
|
|
497
|
+
filter_by_categories (List[str]): List of categories to filter
|
|
498
|
+
the library items.
|
|
499
|
+
filter_by_purposes (List[str]): List of purposes to filter
|
|
500
|
+
the library items.
|
|
501
|
+
filter_by_evaluates (List[str]): List of evaluates to filter
|
|
502
|
+
the library items.
|
|
503
|
+
filter_by_origin (str): Origin to filter the library items.
|
|
504
|
+
filter_by_test_case_count (int): Test case count to filter
|
|
505
|
+
the library items.
|
|
506
|
+
filter_by_test_count (int): Test count to filter the library items.
|
|
507
|
+
filter_by_fts (str): FTS to filter the library items - phrase to search for.
|
|
508
|
+
|
|
509
|
+
Returns:
|
|
510
|
+
List[TestCaseLibraryItem]: List of library items.
|
|
511
|
+
"""
|
|
512
|
+
req = models.TestServiceListTestCaseLibraryItemsRequest(
|
|
513
|
+
filter_by_categories=filter_by_categories,
|
|
514
|
+
filter_by_purposes=filter_by_purposes,
|
|
515
|
+
filter_by_evaluates=filter_by_evaluates,
|
|
516
|
+
filter_by_origin=filter_by_origin,
|
|
517
|
+
filter_by_test_case_count=filter_by_test_case_count,
|
|
518
|
+
filter_by_test_count=filter_by_test_count,
|
|
519
|
+
filter_by_fts=filter_by_fts,
|
|
520
|
+
)
|
|
521
|
+
|
|
522
|
+
res = self._test_api.test_service_list_test_case_library_items(self.key, req)
|
|
523
|
+
if res and res.prompt_library_items:
|
|
524
|
+
return TestCaseLibraryItem._from_api_items(res.prompt_library_items)
|
|
525
|
+
|
|
526
|
+
return []
|
|
527
|
+
|
|
528
|
+
def add_library_test_cases(
|
|
529
|
+
self, test_suite_url: str, count: int, test_document_urls: Optional[List[str]]
|
|
530
|
+
) -> None:
|
|
531
|
+
"""Sample test cases from the test suite library and add them to the test.
|
|
532
|
+
|
|
533
|
+
Args:
|
|
534
|
+
test_suite_url (str): The URL of the library test suite to get TestCases
|
|
535
|
+
from (sample).
|
|
536
|
+
count (int): The number of TestCases to get from the library.
|
|
537
|
+
test_document_urls (List[str]): The list of target Test corpus
|
|
538
|
+
document URLs to skip when returning library TestCases corpus.
|
|
539
|
+
"""
|
|
540
|
+
req = models.TestServiceImportTestCasesFromLibraryRequest(
|
|
541
|
+
test_suite_url=test_suite_url,
|
|
542
|
+
count=count,
|
|
543
|
+
test_document_urls=test_document_urls,
|
|
544
|
+
)
|
|
545
|
+
|
|
546
|
+
res = self._test_api.test_service_import_test_cases_from_library(self.key, req)
|
|
547
|
+
|
|
548
|
+
op: models.V1Operation | None = res.operation
|
|
549
|
+
self._lib_tc_op_name = op.name if op else None
|
|
550
|
+
|
|
551
|
+
def wait_for_library_test_case_get(
|
|
552
|
+
self, timeout: Optional[float] = None, verbose: bool = False
|
|
553
|
+
) -> None:
|
|
554
|
+
"""Waits for the library test cases(s) sampling to finish.
|
|
555
|
+
|
|
556
|
+
Args:
|
|
557
|
+
timeout (float): The maximum time to wait in seconds.
|
|
558
|
+
verbose (bool): If True, prints the status of the handle while waiting.
|
|
559
|
+
"""
|
|
560
|
+
if not self._lib_tc_op_name:
|
|
561
|
+
raise ValueError(
|
|
562
|
+
"There is no ongoing getting of test case(s) from the library - "
|
|
563
|
+
"the operation name is not set."
|
|
564
|
+
)
|
|
565
|
+
|
|
566
|
+
if verbose:
|
|
567
|
+
print(
|
|
568
|
+
f"Waiting for getting library test case(s) operation to finish "
|
|
569
|
+
f"({self._lib_tc_op_name}):"
|
|
570
|
+
)
|
|
571
|
+
if self._client:
|
|
572
|
+
# exponential backoff
|
|
573
|
+
wait_time = 1.0
|
|
574
|
+
wait_coef = 1.6
|
|
575
|
+
wait_max = 8.0
|
|
576
|
+
wait_total = 0.0
|
|
577
|
+
timeout = timeout or float(2 * 24 * 60 * 60) # 2 days
|
|
578
|
+
progress_bar = utils.ProgressBar()
|
|
579
|
+
while wait_total < timeout:
|
|
580
|
+
handle = _TestCaseLibraryGetHandle._from_operation(
|
|
581
|
+
self._operation_api.operation_service_get_operation(
|
|
582
|
+
self._lib_tc_op_name
|
|
583
|
+
)
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
if verbose:
|
|
587
|
+
progress_bar.update(handle.progress or 0, handle.progress_message)
|
|
588
|
+
|
|
589
|
+
if handle.done:
|
|
590
|
+
if handle.error:
|
|
591
|
+
raise RuntimeError(
|
|
592
|
+
f"Getting of library test case(s) failed: {handle.error}"
|
|
593
|
+
)
|
|
594
|
+
return
|
|
595
|
+
|
|
596
|
+
wait_time *= wait_coef
|
|
597
|
+
time.sleep(min(wait_time, wait_max))
|
|
598
|
+
else:
|
|
599
|
+
raise ValueError(
|
|
600
|
+
"Unable to establish a connection to the Eval Studio host."
|
|
601
|
+
)
|
|
359
602
|
|
|
360
603
|
raise TimeoutError("Waiting timeout has been reached.")
|
|
361
604
|
|
|
@@ -524,6 +767,28 @@ class _Tests:
|
|
|
524
767
|
|
|
525
768
|
return None
|
|
526
769
|
|
|
770
|
+
def clone(
|
|
771
|
+
self, key: str, name: Optional[str] = "", description: Optional[str] = ""
|
|
772
|
+
) -> Optional[Test]:
|
|
773
|
+
"""Clone an existing test in the Eval Studio.
|
|
774
|
+
|
|
775
|
+
Args:
|
|
776
|
+
key (str): Resource name of the test to be cloned.
|
|
777
|
+
name (str): Optional new name of the cloned test.
|
|
778
|
+
description (str): Optional new description of the cloned test.
|
|
779
|
+
"""
|
|
780
|
+
res = self._api.test_service_clone_test(
|
|
781
|
+
key,
|
|
782
|
+
body=clone_test_request.TestServiceCloneTestRequest(
|
|
783
|
+
new_test_display_name=name, new_test_description=description
|
|
784
|
+
),
|
|
785
|
+
)
|
|
786
|
+
|
|
787
|
+
if res and res.test:
|
|
788
|
+
return Test._from_api_test(res.test, self._client)
|
|
789
|
+
|
|
790
|
+
return None
|
|
791
|
+
|
|
527
792
|
def delete(self, key: str):
|
|
528
793
|
"""Deletes the test with given resource name.
|
|
529
794
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ProgressBar:
|
|
5
|
+
def __init__(self):
|
|
6
|
+
self.progress = 0.0
|
|
7
|
+
self.progress_message = "Initializing"
|
|
8
|
+
self._progress_max = 1.0
|
|
9
|
+
|
|
10
|
+
def update(self, progress: float, message: Optional[str] = None):
|
|
11
|
+
try:
|
|
12
|
+
self.progress = float(str(progress))
|
|
13
|
+
except ValueError:
|
|
14
|
+
self.progress = 0.0
|
|
15
|
+
|
|
16
|
+
if message:
|
|
17
|
+
self.progress_message = message or ""
|
|
18
|
+
|
|
19
|
+
self.print()
|
|
20
|
+
|
|
21
|
+
def print(self):
|
|
22
|
+
print(" " * len(self.progress_message), end="\r")
|
|
23
|
+
p_progress = int(self.progress / self._progress_max * 100)
|
|
24
|
+
p_hashes = p_progress // 5
|
|
25
|
+
p_msg = f" {p_progress:>3}% |{'#' * p_hashes:<20}| {self.progress_message}"
|
|
26
|
+
print(p_msg, end="\r")
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: eval-studio-client
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0a5
|
|
4
4
|
Project-URL: Source, https://github.com/h2oai/eval-studio/tree/main/client-py/src/
|
|
5
5
|
Project-URL: Issues, https://github.com/h2oai/eval-studio/issues
|
|
6
6
|
Author-email: "H2O.ai" <support@h2o.ai>
|
|
7
|
-
License: MIT
|
|
8
7
|
Classifier: Development Status :: 4 - Beta
|
|
9
8
|
Classifier: Programming Language :: Python
|
|
10
9
|
Classifier: Programming Language :: Python :: 3.9
|