ibm-watsonx-gov 1.3.3__cp313-cp313-macosx_11_0_arm64.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.
- ibm_watsonx_gov/__init__.py +8 -0
- ibm_watsonx_gov/agent_catalog/__init__.py +8 -0
- ibm_watsonx_gov/agent_catalog/clients/__init__.py +14 -0
- ibm_watsonx_gov/agent_catalog/clients/ai_agent_client.py +333 -0
- ibm_watsonx_gov/agent_catalog/core/__init__.py +8 -0
- ibm_watsonx_gov/agent_catalog/core/agent_loader.py +202 -0
- ibm_watsonx_gov/agent_catalog/core/agents.py +134 -0
- ibm_watsonx_gov/agent_catalog/entities/__init__.py +8 -0
- ibm_watsonx_gov/agent_catalog/entities/ai_agent.py +599 -0
- ibm_watsonx_gov/agent_catalog/utils/__init__.py +8 -0
- ibm_watsonx_gov/agent_catalog/utils/constants.py +36 -0
- ibm_watsonx_gov/agent_catalog/utils/notebook_utils.py +70 -0
- ibm_watsonx_gov/ai_experiments/__init__.py +8 -0
- ibm_watsonx_gov/ai_experiments/ai_experiments_client.py +980 -0
- ibm_watsonx_gov/ai_experiments/utils/__init__.py +8 -0
- ibm_watsonx_gov/ai_experiments/utils/ai_experiment_utils.py +139 -0
- ibm_watsonx_gov/clients/__init__.py +0 -0
- ibm_watsonx_gov/clients/api_client.py +99 -0
- ibm_watsonx_gov/clients/segment_client.py +46 -0
- ibm_watsonx_gov/clients/usage_client.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/clients/wx_ai_client.py +87 -0
- ibm_watsonx_gov/config/__init__.py +14 -0
- ibm_watsonx_gov/config/agentic_ai_configuration.py +225 -0
- ibm_watsonx_gov/config/gen_ai_configuration.py +129 -0
- ibm_watsonx_gov/config/model_risk_configuration.py +173 -0
- ibm_watsonx_gov/config/predictive_ai_configuration.py +20 -0
- ibm_watsonx_gov/entities/__init__.py +8 -0
- ibm_watsonx_gov/entities/agentic_app.py +209 -0
- ibm_watsonx_gov/entities/agentic_evaluation_result.py +185 -0
- ibm_watsonx_gov/entities/ai_evaluation.py +290 -0
- ibm_watsonx_gov/entities/ai_experiment.py +419 -0
- ibm_watsonx_gov/entities/base_classes.py +134 -0
- ibm_watsonx_gov/entities/container.py +54 -0
- ibm_watsonx_gov/entities/credentials.py +633 -0
- ibm_watsonx_gov/entities/criteria.py +508 -0
- ibm_watsonx_gov/entities/enums.py +274 -0
- ibm_watsonx_gov/entities/evaluation_result.py +444 -0
- ibm_watsonx_gov/entities/foundation_model.py +490 -0
- ibm_watsonx_gov/entities/llm_judge.py +44 -0
- ibm_watsonx_gov/entities/locale.py +17 -0
- ibm_watsonx_gov/entities/mapping.py +49 -0
- ibm_watsonx_gov/entities/metric.py +211 -0
- ibm_watsonx_gov/entities/metric_threshold.py +36 -0
- ibm_watsonx_gov/entities/model_provider.py +329 -0
- ibm_watsonx_gov/entities/model_risk_result.py +43 -0
- ibm_watsonx_gov/entities/monitor.py +71 -0
- ibm_watsonx_gov/entities/prompt_setup.py +40 -0
- ibm_watsonx_gov/entities/state.py +22 -0
- ibm_watsonx_gov/entities/utils.py +99 -0
- ibm_watsonx_gov/evaluators/__init__.py +26 -0
- ibm_watsonx_gov/evaluators/agentic_evaluator.py +2725 -0
- ibm_watsonx_gov/evaluators/agentic_traces_evaluator.py +115 -0
- ibm_watsonx_gov/evaluators/base_evaluator.py +22 -0
- ibm_watsonx_gov/evaluators/impl/__init__.py +0 -0
- ibm_watsonx_gov/evaluators/impl/evaluate_metrics_impl.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/evaluators/impl/evaluate_model_risk_impl.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/evaluators/metrics_evaluator.py +187 -0
- ibm_watsonx_gov/evaluators/model_risk_evaluator.py +89 -0
- ibm_watsonx_gov/evaluators/traces_evaluator.py +93 -0
- ibm_watsonx_gov/metric_groups/answer_quality/answer_quality_decorator.py +66 -0
- ibm_watsonx_gov/metric_groups/content_safety/content_safety_decorator.py +76 -0
- ibm_watsonx_gov/metric_groups/readability/readability_decorator.py +59 -0
- ibm_watsonx_gov/metric_groups/retrieval_quality/retrieval_quality_decorator.py +63 -0
- ibm_watsonx_gov/metric_groups/usage/usage_decorator.py +58 -0
- ibm_watsonx_gov/metrics/__init__.py +74 -0
- ibm_watsonx_gov/metrics/answer_relevance/__init__.py +8 -0
- ibm_watsonx_gov/metrics/answer_relevance/answer_relevance_decorator.py +63 -0
- ibm_watsonx_gov/metrics/answer_relevance/answer_relevance_metric.py +260 -0
- ibm_watsonx_gov/metrics/answer_similarity/__init__.py +0 -0
- ibm_watsonx_gov/metrics/answer_similarity/answer_similarity_decorator.py +66 -0
- ibm_watsonx_gov/metrics/answer_similarity/answer_similarity_metric.py +219 -0
- ibm_watsonx_gov/metrics/average_precision/__init__.py +0 -0
- ibm_watsonx_gov/metrics/average_precision/average_precision_decorator.py +62 -0
- ibm_watsonx_gov/metrics/average_precision/average_precision_metric.py +174 -0
- ibm_watsonx_gov/metrics/base_metric_decorator.py +193 -0
- ibm_watsonx_gov/metrics/context_relevance/__init__.py +8 -0
- ibm_watsonx_gov/metrics/context_relevance/context_relevance_decorator.py +60 -0
- ibm_watsonx_gov/metrics/context_relevance/context_relevance_metric.py +414 -0
- ibm_watsonx_gov/metrics/cost/__init__.py +8 -0
- ibm_watsonx_gov/metrics/cost/cost_decorator.py +58 -0
- ibm_watsonx_gov/metrics/cost/cost_metric.py +155 -0
- ibm_watsonx_gov/metrics/duration/__init__.py +8 -0
- ibm_watsonx_gov/metrics/duration/duration_decorator.py +59 -0
- ibm_watsonx_gov/metrics/duration/duration_metric.py +111 -0
- ibm_watsonx_gov/metrics/evasiveness/__init__.py +8 -0
- ibm_watsonx_gov/metrics/evasiveness/evasiveness_decorator.py +61 -0
- ibm_watsonx_gov/metrics/evasiveness/evasiveness_metric.py +103 -0
- ibm_watsonx_gov/metrics/faithfulness/__init__.py +8 -0
- ibm_watsonx_gov/metrics/faithfulness/faithfulness_decorator.py +65 -0
- ibm_watsonx_gov/metrics/faithfulness/faithfulness_metric.py +254 -0
- ibm_watsonx_gov/metrics/hap/__init__.py +16 -0
- ibm_watsonx_gov/metrics/hap/hap_decorator.py +58 -0
- ibm_watsonx_gov/metrics/hap/hap_metric.py +98 -0
- ibm_watsonx_gov/metrics/hap/input_hap_metric.py +104 -0
- ibm_watsonx_gov/metrics/hap/output_hap_metric.py +110 -0
- ibm_watsonx_gov/metrics/harm/__init__.py +8 -0
- ibm_watsonx_gov/metrics/harm/harm_decorator.py +60 -0
- ibm_watsonx_gov/metrics/harm/harm_metric.py +103 -0
- ibm_watsonx_gov/metrics/harm_engagement/__init__.py +8 -0
- ibm_watsonx_gov/metrics/harm_engagement/harm_engagement_decorator.py +61 -0
- ibm_watsonx_gov/metrics/harm_engagement/harm_engagement_metric.py +103 -0
- ibm_watsonx_gov/metrics/hit_rate/__init__.py +0 -0
- ibm_watsonx_gov/metrics/hit_rate/hit_rate_decorator.py +59 -0
- ibm_watsonx_gov/metrics/hit_rate/hit_rate_metric.py +167 -0
- ibm_watsonx_gov/metrics/input_token_count/__init__.py +8 -0
- ibm_watsonx_gov/metrics/input_token_count/input_token_count_decorator.py +58 -0
- ibm_watsonx_gov/metrics/input_token_count/input_token_count_metric.py +112 -0
- ibm_watsonx_gov/metrics/jailbreak/__init__.py +8 -0
- ibm_watsonx_gov/metrics/jailbreak/jailbreak_decorator.py +60 -0
- ibm_watsonx_gov/metrics/jailbreak/jailbreak_metric.py +103 -0
- ibm_watsonx_gov/metrics/keyword_detection/keyword_detection_decorator.py +58 -0
- ibm_watsonx_gov/metrics/keyword_detection/keyword_detection_metric.py +111 -0
- ibm_watsonx_gov/metrics/llm_validation/__init__.py +8 -0
- ibm_watsonx_gov/metrics/llm_validation/evaluation_criteria.py +84 -0
- ibm_watsonx_gov/metrics/llm_validation/llm_validation_constants.py +24 -0
- ibm_watsonx_gov/metrics/llm_validation/llm_validation_decorator.py +54 -0
- ibm_watsonx_gov/metrics/llm_validation/llm_validation_impl.py +525 -0
- ibm_watsonx_gov/metrics/llm_validation/llm_validation_metric.py +258 -0
- ibm_watsonx_gov/metrics/llm_validation/llm_validation_prompts.py +106 -0
- ibm_watsonx_gov/metrics/llmaj/__init__.py +0 -0
- ibm_watsonx_gov/metrics/llmaj/llmaj_metric.py +298 -0
- ibm_watsonx_gov/metrics/ndcg/__init__.py +0 -0
- ibm_watsonx_gov/metrics/ndcg/ndcg_decorator.py +61 -0
- ibm_watsonx_gov/metrics/ndcg/ndcg_metric.py +166 -0
- ibm_watsonx_gov/metrics/output_token_count/__init__.py +8 -0
- ibm_watsonx_gov/metrics/output_token_count/output_token_count_decorator.py +58 -0
- ibm_watsonx_gov/metrics/output_token_count/output_token_count_metric.py +112 -0
- ibm_watsonx_gov/metrics/pii/__init__.py +16 -0
- ibm_watsonx_gov/metrics/pii/input_pii_metric.py +102 -0
- ibm_watsonx_gov/metrics/pii/output_pii_metric.py +107 -0
- ibm_watsonx_gov/metrics/pii/pii_decorator.py +59 -0
- ibm_watsonx_gov/metrics/pii/pii_metric.py +96 -0
- ibm_watsonx_gov/metrics/profanity/__init__.py +8 -0
- ibm_watsonx_gov/metrics/profanity/profanity_decorator.py +60 -0
- ibm_watsonx_gov/metrics/profanity/profanity_metric.py +103 -0
- ibm_watsonx_gov/metrics/prompt_safety_risk/__init__.py +8 -0
- ibm_watsonx_gov/metrics/prompt_safety_risk/prompt_safety_risk_decorator.py +57 -0
- ibm_watsonx_gov/metrics/prompt_safety_risk/prompt_safety_risk_metric.py +128 -0
- ibm_watsonx_gov/metrics/reciprocal_rank/__init__.py +0 -0
- ibm_watsonx_gov/metrics/reciprocal_rank/reciprocal_rank_decorator.py +62 -0
- ibm_watsonx_gov/metrics/reciprocal_rank/reciprocal_rank_metric.py +162 -0
- ibm_watsonx_gov/metrics/regex_detection/regex_detection_decorator.py +58 -0
- ibm_watsonx_gov/metrics/regex_detection/regex_detection_metric.py +106 -0
- ibm_watsonx_gov/metrics/retrieval_precision/__init__.py +0 -0
- ibm_watsonx_gov/metrics/retrieval_precision/retrieval_precision_decorator.py +62 -0
- ibm_watsonx_gov/metrics/retrieval_precision/retrieval_precision_metric.py +170 -0
- ibm_watsonx_gov/metrics/sexual_content/__init__.py +8 -0
- ibm_watsonx_gov/metrics/sexual_content/sexual_content_decorator.py +61 -0
- ibm_watsonx_gov/metrics/sexual_content/sexual_content_metric.py +103 -0
- ibm_watsonx_gov/metrics/social_bias/__init__.py +8 -0
- ibm_watsonx_gov/metrics/social_bias/social_bias_decorator.py +62 -0
- ibm_watsonx_gov/metrics/social_bias/social_bias_metric.py +103 -0
- ibm_watsonx_gov/metrics/status/__init__.py +0 -0
- ibm_watsonx_gov/metrics/status/status_metric.py +113 -0
- ibm_watsonx_gov/metrics/text_grade_level/__init__.py +8 -0
- ibm_watsonx_gov/metrics/text_grade_level/text_grade_level_decorator.py +59 -0
- ibm_watsonx_gov/metrics/text_grade_level/text_grade_level_metric.py +127 -0
- ibm_watsonx_gov/metrics/text_reading_ease/__init__.py +8 -0
- ibm_watsonx_gov/metrics/text_reading_ease/text_reading_ease_decorator.py +59 -0
- ibm_watsonx_gov/metrics/text_reading_ease/text_reading_ease_metric.py +123 -0
- ibm_watsonx_gov/metrics/tool_call_accuracy/__init__.py +0 -0
- ibm_watsonx_gov/metrics/tool_call_accuracy/tool_call_accuracy_decorator.py +67 -0
- ibm_watsonx_gov/metrics/tool_call_accuracy/tool_call_accuracy_metric.py +162 -0
- ibm_watsonx_gov/metrics/tool_call_parameter_accuracy/__init__.py +0 -0
- ibm_watsonx_gov/metrics/tool_call_parameter_accuracy/tool_call_parameter_accuracy_decorator.py +68 -0
- ibm_watsonx_gov/metrics/tool_call_parameter_accuracy/tool_call_parameter_accuracy_metric.py +151 -0
- ibm_watsonx_gov/metrics/tool_call_relevance/__init__.py +0 -0
- ibm_watsonx_gov/metrics/tool_call_relevance/tool_call_relevance_decorator.py +71 -0
- ibm_watsonx_gov/metrics/tool_call_relevance/tool_call_relevance_metric.py +166 -0
- ibm_watsonx_gov/metrics/tool_call_syntactic_accuracy/__init__.py +0 -0
- ibm_watsonx_gov/metrics/tool_call_syntactic_accuracy/tool_call_syntactic_accuracy_decorator.py +66 -0
- ibm_watsonx_gov/metrics/tool_call_syntactic_accuracy/tool_call_syntactic_accuracy_metric.py +121 -0
- ibm_watsonx_gov/metrics/topic_relevance/__init__.py +8 -0
- ibm_watsonx_gov/metrics/topic_relevance/topic_relevance_decorator.py +57 -0
- ibm_watsonx_gov/metrics/topic_relevance/topic_relevance_metric.py +106 -0
- ibm_watsonx_gov/metrics/unethical_behavior/__init__.py +8 -0
- ibm_watsonx_gov/metrics/unethical_behavior/unethical_behavior_decorator.py +61 -0
- ibm_watsonx_gov/metrics/unethical_behavior/unethical_behavior_metric.py +103 -0
- ibm_watsonx_gov/metrics/unsuccessful_requests/__init__.py +0 -0
- ibm_watsonx_gov/metrics/unsuccessful_requests/unsuccessful_requests_decorator.py +66 -0
- ibm_watsonx_gov/metrics/unsuccessful_requests/unsuccessful_requests_metric.py +128 -0
- ibm_watsonx_gov/metrics/user_id/__init__.py +0 -0
- ibm_watsonx_gov/metrics/user_id/user_id_metric.py +111 -0
- ibm_watsonx_gov/metrics/utils.py +440 -0
- ibm_watsonx_gov/metrics/violence/__init__.py +8 -0
- ibm_watsonx_gov/metrics/violence/violence_decorator.py +60 -0
- ibm_watsonx_gov/metrics/violence/violence_metric.py +103 -0
- ibm_watsonx_gov/prompt_evaluator/__init__.py +9 -0
- ibm_watsonx_gov/prompt_evaluator/impl/__init__.py +8 -0
- ibm_watsonx_gov/prompt_evaluator/impl/prompt_evaluator_impl.py +554 -0
- ibm_watsonx_gov/prompt_evaluator/impl/pta_lifecycle_evaluator.py +2332 -0
- ibm_watsonx_gov/prompt_evaluator/prompt_evaluator.py +262 -0
- ibm_watsonx_gov/providers/__init__.py +8 -0
- ibm_watsonx_gov/providers/detectors_provider.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/providers/detectors_provider.py +415 -0
- ibm_watsonx_gov/providers/eval_assist_provider.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/providers/eval_assist_provider.py +266 -0
- ibm_watsonx_gov/providers/inference_engines/__init__.py +0 -0
- ibm_watsonx_gov/providers/inference_engines/custom_inference_engine.py +165 -0
- ibm_watsonx_gov/providers/inference_engines/portkey_inference_engine.py +57 -0
- ibm_watsonx_gov/providers/llmevalkit/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/ciso_agent/main.py +516 -0
- ibm_watsonx_gov/providers/llmevalkit/ciso_agent/preprocess_log.py +111 -0
- ibm_watsonx_gov/providers/llmevalkit/ciso_agent/utils.py +186 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/README.md +411 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/__init__.py +27 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/README.md +306 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/__init__.py +89 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/__init__.py +30 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/base.py +411 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/code_agent.py +1254 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/exact_match.py +134 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/fuzzy_string.py +104 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/hybrid.py +516 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/comparators/llm_judge.py +1882 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/pipeline.py +387 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/types.py +178 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/comparison/utils.py +298 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/consts.py +33 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/__init__.py +31 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/base.py +26 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_call/__init__.py +4 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_call/general.py +46 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_call/general_metrics.json +783 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_call/general_metrics_runtime.json +580 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_selection/__init__.py +6 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_selection/function_selection.py +28 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_selection/function_selection_metrics.json +599 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/function_selection/function_selection_metrics_runtime.json +477 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/loader.py +259 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/parameter/__init__.py +7 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/parameter/parameter.py +52 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/parameter/parameter_metrics.json +613 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/parameter/parameter_metrics_runtime.json +489 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/trajectory/__init__.py +7 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/trajectory/trajectory.py +43 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/metrics/trajectory/trajectory_metrics.json +161 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/adapters.py +102 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/pipeline.py +355 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/semantic_checker.py +816 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/static_checker.py +297 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/transformation_prompts.py +509 -0
- ibm_watsonx_gov/providers/llmevalkit/function_calling/pipeline/types.py +596 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/README.md +375 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/__init__.py +137 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/base.py +426 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/output_parser.py +364 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/consts.py +7 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/ibm_watsonx_ai/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/ibm_watsonx_ai/ibm_watsonx_ai.py +656 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/litellm/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/litellm/litellm.py +509 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/litellm/rits.py +224 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/litellm/watsonx.py +60 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/mock_llm_client.py +75 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/openai/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/openai/openai.py +639 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/wxo_ai_gateway/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/wxo_ai_gateway/wxo_ai_gateway.py +134 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/providers/wxo_ai_gateway/wxo_ai_gateway_inference.py +214 -0
- ibm_watsonx_gov/providers/llmevalkit/llm/types.py +136 -0
- ibm_watsonx_gov/providers/llmevalkit/metrics/__init__.py +4 -0
- ibm_watsonx_gov/providers/llmevalkit/metrics/field.py +255 -0
- ibm_watsonx_gov/providers/llmevalkit/metrics/metric.py +332 -0
- ibm_watsonx_gov/providers/llmevalkit/metrics/metrics_runner.py +188 -0
- ibm_watsonx_gov/providers/llmevalkit/metrics/prompt.py +403 -0
- ibm_watsonx_gov/providers/llmevalkit/metrics/utils.py +46 -0
- ibm_watsonx_gov/providers/llmevalkit/prompt/__init__.py +0 -0
- ibm_watsonx_gov/providers/llmevalkit/prompt/runner.py +144 -0
- ibm_watsonx_gov/providers/tool_call_metric_provider.py +455 -0
- ibm_watsonx_gov/providers/unitxt_provider.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/tools/__init__.py +10 -0
- ibm_watsonx_gov/tools/clients/__init__.py +11 -0
- ibm_watsonx_gov/tools/clients/ai_tool_client.py +405 -0
- ibm_watsonx_gov/tools/clients/detector_client.py +82 -0
- ibm_watsonx_gov/tools/core/__init__.py +8 -0
- ibm_watsonx_gov/tools/core/tool_loader.py +237 -0
- ibm_watsonx_gov/tools/entities/__init__.py +8 -0
- ibm_watsonx_gov/tools/entities/ai_tools.py +435 -0
- ibm_watsonx_gov/tools/onboarding/create/answer_relevance_detector.json +57 -0
- ibm_watsonx_gov/tools/onboarding/create/chromadb_retrieval_tool.json +63 -0
- ibm_watsonx_gov/tools/onboarding/create/context_relevance_detector.json +57 -0
- ibm_watsonx_gov/tools/onboarding/create/duduckgo_search_tool.json +53 -0
- ibm_watsonx_gov/tools/onboarding/create/google_search_tool.json +62 -0
- ibm_watsonx_gov/tools/onboarding/create/hap_detector.json +70 -0
- ibm_watsonx_gov/tools/onboarding/create/jailbreak_detector.json +70 -0
- ibm_watsonx_gov/tools/onboarding/create/pii_detector.json +36 -0
- ibm_watsonx_gov/tools/onboarding/create/prompt_safety_risk_detector.json +69 -0
- ibm_watsonx_gov/tools/onboarding/create/topic_relevance_detector.json +57 -0
- ibm_watsonx_gov/tools/onboarding/create/weather_tool.json +39 -0
- ibm_watsonx_gov/tools/onboarding/create/webcrawler_tool.json +34 -0
- ibm_watsonx_gov/tools/onboarding/create/wikipedia_search_tool.json +53 -0
- ibm_watsonx_gov/tools/onboarding/delete/delete_tools.json +4 -0
- ibm_watsonx_gov/tools/onboarding/update/google_search_tool.json +38 -0
- ibm_watsonx_gov/tools/ootb/__init__.py +8 -0
- ibm_watsonx_gov/tools/ootb/detectors/__init__.py +8 -0
- ibm_watsonx_gov/tools/ootb/detectors/hap_detector_tool.py +109 -0
- ibm_watsonx_gov/tools/ootb/detectors/jailbreak_detector_tool.py +104 -0
- ibm_watsonx_gov/tools/ootb/detectors/pii_detector_tool.py +83 -0
- ibm_watsonx_gov/tools/ootb/detectors/prompt_safety_risk_detector_tool.py +111 -0
- ibm_watsonx_gov/tools/ootb/detectors/topic_relevance_detector_tool.py +101 -0
- ibm_watsonx_gov/tools/ootb/rag/__init__.py +8 -0
- ibm_watsonx_gov/tools/ootb/rag/answer_relevance_detector_tool.py +119 -0
- ibm_watsonx_gov/tools/ootb/rag/context_relevance_detector_tool.py +118 -0
- ibm_watsonx_gov/tools/ootb/search/__init__.py +8 -0
- ibm_watsonx_gov/tools/ootb/search/duckduckgo_search_tool.py +62 -0
- ibm_watsonx_gov/tools/ootb/search/google_search_tool.py +105 -0
- ibm_watsonx_gov/tools/ootb/search/weather_tool.py +95 -0
- ibm_watsonx_gov/tools/ootb/search/web_crawler_tool.py +69 -0
- ibm_watsonx_gov/tools/ootb/search/wikipedia_search_tool.py +63 -0
- ibm_watsonx_gov/tools/ootb/vectordb/__init__.py +8 -0
- ibm_watsonx_gov/tools/ootb/vectordb/chromadb_retriever_tool.py +111 -0
- ibm_watsonx_gov/tools/rest_api/__init__.py +10 -0
- ibm_watsonx_gov/tools/rest_api/restapi_tool.py +72 -0
- ibm_watsonx_gov/tools/schemas/__init__.py +10 -0
- ibm_watsonx_gov/tools/schemas/search_tool_schema.py +46 -0
- ibm_watsonx_gov/tools/schemas/vectordb_retrieval_schema.py +55 -0
- ibm_watsonx_gov/tools/utils/__init__.py +14 -0
- ibm_watsonx_gov/tools/utils/constants.py +69 -0
- ibm_watsonx_gov/tools/utils/display_utils.py +38 -0
- ibm_watsonx_gov/tools/utils/environment.py +108 -0
- ibm_watsonx_gov/tools/utils/package_utils.py +40 -0
- ibm_watsonx_gov/tools/utils/platform_url_mapping.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/tools/utils/python_utils.py +68 -0
- ibm_watsonx_gov/tools/utils/tool_utils.py +206 -0
- ibm_watsonx_gov/traces/__init__.py +8 -0
- ibm_watsonx_gov/traces/span_exporter.py +195 -0
- ibm_watsonx_gov/traces/span_node.py +251 -0
- ibm_watsonx_gov/traces/span_util.py +153 -0
- ibm_watsonx_gov/traces/trace_utils.py +1074 -0
- ibm_watsonx_gov/utils/__init__.py +8 -0
- ibm_watsonx_gov/utils/aggregation_util.py +346 -0
- ibm_watsonx_gov/utils/async_util.py +62 -0
- ibm_watsonx_gov/utils/authenticator.py +144 -0
- ibm_watsonx_gov/utils/constants.py +15 -0
- ibm_watsonx_gov/utils/errors.py +40 -0
- ibm_watsonx_gov/utils/gov_sdk_logger.py +39 -0
- ibm_watsonx_gov/utils/insights_generator.py +1285 -0
- ibm_watsonx_gov/utils/python_utils.py +425 -0
- ibm_watsonx_gov/utils/rest_util.py +73 -0
- ibm_watsonx_gov/utils/segment_batch_manager.py +162 -0
- ibm_watsonx_gov/utils/singleton_meta.py +25 -0
- ibm_watsonx_gov/utils/url_mapping.cpython-313-darwin.so +0 -0
- ibm_watsonx_gov/utils/validation_util.py +126 -0
- ibm_watsonx_gov/visualizations/__init__.py +13 -0
- ibm_watsonx_gov/visualizations/metric_descriptions.py +57 -0
- ibm_watsonx_gov/visualizations/model_insights.py +1304 -0
- ibm_watsonx_gov/visualizations/visualization_utils.py +75 -0
- ibm_watsonx_gov-1.3.3.dist-info/METADATA +93 -0
- ibm_watsonx_gov-1.3.3.dist-info/RECORD +353 -0
- ibm_watsonx_gov-1.3.3.dist-info/WHEEL +6 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------------------------------
|
|
2
|
+
# IBM Confidential
|
|
3
|
+
# Licensed Materials - Property of IBM
|
|
4
|
+
# 5737-H76, 5900-A3Q
|
|
5
|
+
# © Copyright IBM Corp. 2025 All Rights Reserved.
|
|
6
|
+
# US Government Users Restricted Rights - Use, duplication or disclosure restricted by
|
|
7
|
+
# GSA ADPSchedule Contract with IBM Corp.
|
|
8
|
+
# ----------------------------------------------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
from typing import Union
|
|
11
|
+
|
|
12
|
+
from ibm_watsonx_gov.utils.python_utils import get
|
|
13
|
+
from ibm_watsonx_gov.utils.rest_util import RestUtil
|
|
14
|
+
|
|
15
|
+
from ..entities.ai_tools import ToolRegistrationPayload, ToolUpdatePayload
|
|
16
|
+
from ..utils import environment
|
|
17
|
+
from ..utils.constants import (Categories, ComponentTypes, CustomToolType,
|
|
18
|
+
Framework, ServiceProviderType)
|
|
19
|
+
from ..utils.python_utils import process_result
|
|
20
|
+
from ..utils.tool_utils import get_default_inventory, get_headers, get_token
|
|
21
|
+
|
|
22
|
+
environment.get_base_url() # This is used to validate the base_url at the initial stage.
|
|
23
|
+
|
|
24
|
+
# Creating AI Tool asset
|
|
25
|
+
def register_tool(payload: Union[dict, ToolRegistrationPayload]):
|
|
26
|
+
"""
|
|
27
|
+
Registers a new tool by converting the provided payload to an ToolRegistrationPayload instance.
|
|
28
|
+
And then call the tool registration endpoint.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
payload (Union[dict, ToolRegistrationPayload]): The payload to register the tool.
|
|
32
|
+
It can either be a dictionary or an instance of ToolRegistrationPayload.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
dict: The processed result from the tool registration API.
|
|
36
|
+
|
|
37
|
+
Examples:
|
|
38
|
+
---------
|
|
39
|
+
1. Using ToolRegistrationPayload model:
|
|
40
|
+
.. code-block:: python
|
|
41
|
+
|
|
42
|
+
from ibm_watsonx_gov.tools.clients import register_tool, ToolRegistrationPayload
|
|
43
|
+
post_payload = {
|
|
44
|
+
"tool_name": "add",
|
|
45
|
+
"description":"Use GooglSearch and return results for given query"
|
|
46
|
+
"code": {
|
|
47
|
+
"source_code_base64": '''
|
|
48
|
+
def add(num1: int, num2: int):
|
|
49
|
+
return num1 + num2
|
|
50
|
+
''',
|
|
51
|
+
"run_time_details": {
|
|
52
|
+
"engine": "python 3.11.0"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"schema":{
|
|
56
|
+
"properties": {
|
|
57
|
+
"num1": {
|
|
58
|
+
"description": "First number",
|
|
59
|
+
"title": "num1",
|
|
60
|
+
"type": "integer",
|
|
61
|
+
},
|
|
62
|
+
"query": {
|
|
63
|
+
"description": "Second number",
|
|
64
|
+
"title": "num2",
|
|
65
|
+
"type": "integer",
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
response = register_tool(ToolRegistrationPayload(**post_payload))
|
|
71
|
+
2. Using Dict:
|
|
72
|
+
.. code-block:: python
|
|
73
|
+
|
|
74
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import register_tool, Framework
|
|
75
|
+
post_payload = {
|
|
76
|
+
"tool_name": "add",
|
|
77
|
+
"code": {
|
|
78
|
+
"source_code_base64": '''
|
|
79
|
+
def add(num1: int, num2: int):
|
|
80
|
+
return num1 + num2
|
|
81
|
+
''',
|
|
82
|
+
"run_time_details": {
|
|
83
|
+
"engine": "python 3.11.0"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"schema":{
|
|
87
|
+
"properties": {
|
|
88
|
+
"num1": {
|
|
89
|
+
"description": "First number",
|
|
90
|
+
"title": "num1",
|
|
91
|
+
"type": "integer",
|
|
92
|
+
},
|
|
93
|
+
"query": {
|
|
94
|
+
"description": "Second number",
|
|
95
|
+
"title": "num2",
|
|
96
|
+
"type": "integer",
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
response = register_tool(payload=post_payload)
|
|
102
|
+
"""
|
|
103
|
+
if isinstance(payload, dict):
|
|
104
|
+
post_payload = ToolRegistrationPayload(**payload)
|
|
105
|
+
elif isinstance(payload, ToolRegistrationPayload):
|
|
106
|
+
post_payload = payload
|
|
107
|
+
else:
|
|
108
|
+
raise Exception(
|
|
109
|
+
"Invalid payload format. Only dict and ToolRegistrationPayload are allowed.")
|
|
110
|
+
|
|
111
|
+
# Consider default inventory if no inventory_id is supplied
|
|
112
|
+
if not post_payload.inventory_id:
|
|
113
|
+
post_payload.inventory_id = get_default_inventory()
|
|
114
|
+
|
|
115
|
+
verify = environment.get_ssl_verification()
|
|
116
|
+
payload = post_payload.model_dump(
|
|
117
|
+
mode="json", exclude_none=True, by_alias=True)
|
|
118
|
+
url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/tools"
|
|
119
|
+
response = RestUtil.request_with_retry(retry_count=2).post(
|
|
120
|
+
url, json=payload, headers=get_headers(), verify=verify)
|
|
121
|
+
|
|
122
|
+
if not response.ok:
|
|
123
|
+
message = f"Error occurred while registering tool:{post_payload.tool_name}. Status code: {response.status_code}, Error: {response.text}"
|
|
124
|
+
raise Exception(message)
|
|
125
|
+
|
|
126
|
+
return process_result(response)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
# Getting AI Tool asset
|
|
130
|
+
def get_tool(tool_id: str, inventory_id: str, **kwargs):
|
|
131
|
+
"""
|
|
132
|
+
Retrieves the details of a specific tool based on the given tool ID and inventory ID.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
tool_id (str): The ID of the tool to be retrieved.
|
|
136
|
+
inventory_id (str): The ID of the inventory to fetch the tool from.
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
dict: The processed result containing tool details.
|
|
140
|
+
|
|
141
|
+
Example:
|
|
142
|
+
--------
|
|
143
|
+
.. code-block:: python
|
|
144
|
+
|
|
145
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import get_tool
|
|
146
|
+
tool_id = '23dd7ec8-3d13-4f8f-a485-10278287bxxx'
|
|
147
|
+
inventory_id = '81b1b891-0ded-46ca-bc3f-155e98a15xxx'
|
|
148
|
+
response = get_tool(tool_id=tool_id, inventory_id=inventory_id)
|
|
149
|
+
"""
|
|
150
|
+
verify = environment.get_ssl_verification()
|
|
151
|
+
url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/tools/{tool_id}?inventory_id={inventory_id}"
|
|
152
|
+
response = RestUtil.request_with_retry(
|
|
153
|
+
etry_count=2).get(url=url, headers=get_headers(), verify=verify)
|
|
154
|
+
# Added for purpose of printing tool_name when called from get_tool_info
|
|
155
|
+
tool_name = kwargs.get("tool_name", tool_id)
|
|
156
|
+
|
|
157
|
+
if not response.ok:
|
|
158
|
+
message = f"Error occurred while getting tool {tool_name} details. Status code: {response.status_code}, Error: {response.text}"
|
|
159
|
+
raise Exception(message)
|
|
160
|
+
|
|
161
|
+
return process_result(response)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
# Updating AI Tool asset
|
|
165
|
+
def update_tool(tool_id: str, inventory_id: str, payloads: Union[list[dict], ToolUpdatePayload]):
|
|
166
|
+
"""
|
|
167
|
+
Patches the tool information based on the provided tool ID, inventory ID, and payloads.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
tool_id (str): The ID of the tool to be patched.
|
|
171
|
+
inventory_id (str): The ID of the inventory to which the tool contains.
|
|
172
|
+
payloads (list[Union[dict, ToolUpdatePayload]]): A list of dictionaries or `ToolUpdatePayload` instances containing the update information for the tool.
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
dict: The processed result from the tool update API.
|
|
176
|
+
|
|
177
|
+
Notes:
|
|
178
|
+
- Each item in the `payloads` list should be either a dictionary or an instance of `ToolUpdatePayload`.
|
|
179
|
+
- If a dictionary is provided, it is converted into an `ToolUpdatePayload` instance.
|
|
180
|
+
|
|
181
|
+
Examples:
|
|
182
|
+
---------
|
|
183
|
+
Using ToolUpdatePayload model:
|
|
184
|
+
.. code-block:: python
|
|
185
|
+
|
|
186
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import update_tool, ToolUpdatePayload, OPERATION_TYPE
|
|
187
|
+
patch_payload = [
|
|
188
|
+
{
|
|
189
|
+
"op": OPERATION_TYPE.REPLACE.value,
|
|
190
|
+
"path": "/reusable",
|
|
191
|
+
"value": False
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"op": OPERATION_TYPE.REPLACE.value,
|
|
195
|
+
"path": "/metrics",
|
|
196
|
+
"value": {
|
|
197
|
+
"roc": "64"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
update_payload = ToolUpdatePayload(**patch_payload)
|
|
202
|
+
response = update_tool(payload = update_payload)
|
|
203
|
+
Using Dict:
|
|
204
|
+
.. code-block:: python
|
|
205
|
+
|
|
206
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import update_tool, OPERATION_TYPE
|
|
207
|
+
patch_payload = [
|
|
208
|
+
{
|
|
209
|
+
"op": OPERATION_TYPE.REPLACE.value,
|
|
210
|
+
"path": "/reusable",
|
|
211
|
+
"value": False
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"op": OPERATION_TYPE.REPLACE.value,
|
|
215
|
+
"path": "/metrics",
|
|
216
|
+
"value": {
|
|
217
|
+
"roc": "64"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
response = update_tool(payload = patch_payload)
|
|
222
|
+
"""
|
|
223
|
+
|
|
224
|
+
if isinstance(payloads, list):
|
|
225
|
+
patch_payload = ToolUpdatePayload(**{"payload": payloads})
|
|
226
|
+
elif isinstance(payloads, ToolUpdatePayload):
|
|
227
|
+
patch_payload = payloads
|
|
228
|
+
else:
|
|
229
|
+
raise TypeError(
|
|
230
|
+
f"Invalid payload type: {type(payloads)}. Expected list[dict] or ToolUpdatePayload.")
|
|
231
|
+
|
|
232
|
+
verify = environment.get_ssl_verification()
|
|
233
|
+
payload = patch_payload.model_dump(mode="json")['payload']
|
|
234
|
+
tool_patch_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/tools/{tool_id}?inventory_id={inventory_id}"
|
|
235
|
+
response = RestUtil.request_with_retry(retry_count=2).patch(
|
|
236
|
+
url=tool_patch_url, headers=get_headers(), json=payload, verify=verify)
|
|
237
|
+
|
|
238
|
+
if not response.ok:
|
|
239
|
+
message = f"Error occurred while updating tool with id {tool_id}. Status code: {response.status_code}, Error: {response.text}"
|
|
240
|
+
raise Exception(message)
|
|
241
|
+
return process_result(response)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
# Deleting AI Tool asset
|
|
245
|
+
def delete_tool(tool_id: str, inventory_id: str, **kwargs):
|
|
246
|
+
"""
|
|
247
|
+
Delete the AI tool based on the tool_id and inventory_id
|
|
248
|
+
|
|
249
|
+
Args:
|
|
250
|
+
tool_id (str): The ID of the tool to be deleted.
|
|
251
|
+
inventory_id (str): The ID of the inventory to which the tool contains.
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
AI Tool Deleted Successfully
|
|
255
|
+
|
|
256
|
+
Example:
|
|
257
|
+
--------
|
|
258
|
+
.. code-block:: python
|
|
259
|
+
|
|
260
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import delete_tool
|
|
261
|
+
tool_id = '23dd7ec8-3d13-4f8f-a485-10278287bxxx'
|
|
262
|
+
inventory_id = '81b1b891-0ded-46ca-bc3f-155e98a15xxx'
|
|
263
|
+
response = delete_tool(tool_id=tool_id, inventory_id=inventory_id)
|
|
264
|
+
"""
|
|
265
|
+
|
|
266
|
+
verify = environment.get_ssl_verification()
|
|
267
|
+
url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components/tools/{tool_id}?inventory_id={inventory_id}"
|
|
268
|
+
response = RestUtil.request_with_retry(
|
|
269
|
+
retry_count=2).delete(url=url, headers=get_headers(), verify=verify)
|
|
270
|
+
# Added for purpose of printing tool_name when called from get_tool_info
|
|
271
|
+
tool_name = kwargs.get("tool_name", tool_id)
|
|
272
|
+
if not response.ok:
|
|
273
|
+
message = f"Error occurred while updating tool with id {tool_name}. Status code: {response.status_code}, Error: {response.text}"
|
|
274
|
+
raise Exception(message)
|
|
275
|
+
|
|
276
|
+
if response.text:
|
|
277
|
+
return process_result(response.text)
|
|
278
|
+
return "Tool Deleted Successfully"
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
# Listing all AI Tools
|
|
282
|
+
def list_tools(service_provider_type: Union[list[str], str] = None, category: Union[list[str], str] = None,
|
|
283
|
+
inventory_id: Union[list[str], str] = None, framework: Union[list[str], str] = None,
|
|
284
|
+
tool_name: Union[list[str], str] = None, run_time_details: Union[list[str], str] = None,
|
|
285
|
+
search_text: Union[list[str], str] = None, offset: int = None,
|
|
286
|
+
limit: int = None):
|
|
287
|
+
"""
|
|
288
|
+
Retrieves a list of registered AI tools based on the provided filter criteria.
|
|
289
|
+
|
|
290
|
+
All parameters are optional. If no filters are provided, all tools will be listed.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
service_provider_type (Union[list[str], str], optional): Filter tools by one or more service provider types.
|
|
294
|
+
category (Union[list[str], str], optional): Filter tools by one or more categories.
|
|
295
|
+
inventory_id (Union[list[str], str], optional): Filter tools by one or more inventory IDs.
|
|
296
|
+
framework (Union[list[str], str], optional): Filter tools by one or more frameworks (e.g., "langchain").
|
|
297
|
+
tool_name (Union[list[str], str], optional): Filter tools by one or more tool names.
|
|
298
|
+
run_time_details (Union[list[str], str], optional): Filter tools by specific runtime details.
|
|
299
|
+
search_text (Union[List[str], str], optional): Filters tools based on matching keywords.
|
|
300
|
+
offset (int, optional): The starting index of the tools to display
|
|
301
|
+
limit (int, optional): The maximum number of tools to display
|
|
302
|
+
|
|
303
|
+
Returns:
|
|
304
|
+
dict: A list of tools matching the filter criteria.
|
|
305
|
+
|
|
306
|
+
Examples:
|
|
307
|
+
-----------
|
|
308
|
+
.. code-block:: python
|
|
309
|
+
|
|
310
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import list_tools
|
|
311
|
+
inventory_ids = ['81b1b891-0ded-46ca-bc3f-155e98a15xxx']
|
|
312
|
+
response = list_tools(inventory_id=inventory_ids)
|
|
313
|
+
"""
|
|
314
|
+
component_type = ComponentTypes.AI_TOOL.value
|
|
315
|
+
|
|
316
|
+
params = {}
|
|
317
|
+
if component_type:
|
|
318
|
+
params["component_type"] = ",".join(component_type) if isinstance(component_type, list) else component_type
|
|
319
|
+
if service_provider_type:
|
|
320
|
+
params["service_provider_type"] = ",".join(service_provider_type) if isinstance(service_provider_type,
|
|
321
|
+
list) else service_provider_type
|
|
322
|
+
if category:
|
|
323
|
+
params["category"] = ",".join(category) if isinstance(category, list) else category
|
|
324
|
+
if inventory_id:
|
|
325
|
+
params["inventory_id"] = ",".join(inventory_id) if isinstance(inventory_id, list) else inventory_id
|
|
326
|
+
if framework:
|
|
327
|
+
params["framework"] = ",".join(framework) if isinstance(framework, list) else framework
|
|
328
|
+
if run_time_details:
|
|
329
|
+
params["run_time_details"] = ",".join(run_time_details) if isinstance(run_time_details,
|
|
330
|
+
list) else run_time_details
|
|
331
|
+
if tool_name:
|
|
332
|
+
params["asset_name"] = ",".join(tool_name) if isinstance(tool_name, list) else tool_name
|
|
333
|
+
if search_text:
|
|
334
|
+
params["match_text"] = ",".join(search_text) if isinstance(search_text, list) else search_text
|
|
335
|
+
if offset:
|
|
336
|
+
params["offset"] = offset
|
|
337
|
+
if limit:
|
|
338
|
+
params["limit"] = limit
|
|
339
|
+
|
|
340
|
+
verify = environment.get_ssl_verification()
|
|
341
|
+
tool_get_url = f"{environment.get_base_url()}/v1/aigov/factsheet/ai_components"
|
|
342
|
+
response = RestUtil.request_with_retry().get(
|
|
343
|
+
url=tool_get_url, headers=get_headers(), params=params, verify=verify)
|
|
344
|
+
if not response.ok:
|
|
345
|
+
message = f"Error while listing the tool details. Status code: {response.status_code}, Error: {response.text}"
|
|
346
|
+
raise Exception(message)
|
|
347
|
+
|
|
348
|
+
return process_result(response)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
# Get tool info based on tool_name
|
|
352
|
+
def get_tool_info(tool_name: str, inventory_id: str = None) -> dict:
|
|
353
|
+
"""
|
|
354
|
+
Method to retrieve tool information based on the tool name within the current inventory ID.
|
|
355
|
+
|
|
356
|
+
Args:
|
|
357
|
+
tool_name (str): Name of the tool
|
|
358
|
+
inventory_id (str, optional): Inventory id
|
|
359
|
+
|
|
360
|
+
Returns:
|
|
361
|
+
dict: Returns the tool details based on the tool name.
|
|
362
|
+
|
|
363
|
+
Example:
|
|
364
|
+
--------
|
|
365
|
+
.. code-block:: python
|
|
366
|
+
|
|
367
|
+
from ibm_watsonx_gov.tools.clients.ai_tool_client import get_tool_info
|
|
368
|
+
tool_name = 'Google_search'
|
|
369
|
+
inventory_id = '81b1b891-0ded-46ca-bc3f-155e98a15xxx'
|
|
370
|
+
response = get_tool_info(tool_name=tool_name,inventory_id=inventory_id)
|
|
371
|
+
"""
|
|
372
|
+
# Get the tool details using tool name
|
|
373
|
+
tool_details = (
|
|
374
|
+
list_tools
|
|
375
|
+
(
|
|
376
|
+
tool_name=[tool_name],
|
|
377
|
+
inventory_id=[inventory_id] if inventory_id else None,
|
|
378
|
+
)
|
|
379
|
+
)
|
|
380
|
+
if len(tool_details['tools']) > 0:
|
|
381
|
+
tool_id = get(tool_details['tools'][0], "metadata.id")
|
|
382
|
+
if inventory_id is None:
|
|
383
|
+
inventory_id = get(
|
|
384
|
+
tool_details['tools'][0], "entity.inventory_id")
|
|
385
|
+
|
|
386
|
+
# Now retain tool information using
|
|
387
|
+
get_response = get_tool(tool_id, inventory_id, tool_name=tool_name)
|
|
388
|
+
return get_response
|
|
389
|
+
raise Exception(f"Tool: {tool_name} does not exist.")
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
def delete_tool_with_name(tool_name):
|
|
393
|
+
"""Method to delete the tool with tool_name
|
|
394
|
+
|
|
395
|
+
Args:
|
|
396
|
+
tool_name (str): Name of the tool
|
|
397
|
+
"""
|
|
398
|
+
tool_details = list_tools(tool_name=[tool_name])
|
|
399
|
+
if len(tool_details['tools']) > 0:
|
|
400
|
+
tool_id = get(tool_details['tools'][0], "metadata.id")
|
|
401
|
+
inventory_id = get(tool_details['tools'][0], "entity.inventory_id")
|
|
402
|
+
delete_tool(tool_id=tool_id, inventory_id=inventory_id,
|
|
403
|
+
tool_name=tool_name)
|
|
404
|
+
return f"Tool {tool_name} deleted successfully."
|
|
405
|
+
raise Exception(f"Tool: {tool_name} does not exist.")
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------------------------------
|
|
2
|
+
# IBM Confidential
|
|
3
|
+
# Licensed Materials - Property of IBM
|
|
4
|
+
# 5737-H76, 5900-A3Q
|
|
5
|
+
# © Copyright IBM Corp. 2025 All Rights Reserved.
|
|
6
|
+
# US Government Users Restricted Rights - Use, duplication or disclosure restricted by
|
|
7
|
+
# GSA ADPSchedule Contract with IBM Corp.
|
|
8
|
+
# ----------------------------------------------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
|
|
12
|
+
import requests
|
|
13
|
+
|
|
14
|
+
import ibm_watsonx_gov.tools.utils.environment as env
|
|
15
|
+
from ibm_watsonx_gov.tools.utils import environment
|
|
16
|
+
from ibm_watsonx_gov.tools.utils.tool_utils import get_headers
|
|
17
|
+
from ibm_watsonx_gov.utils.url_mapping import WATSONX_REGION_URLS
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
#Detector URLs
|
|
21
|
+
DETECTIONS_URL = "{}/ml/v1/text/detection?version=2023-10-25"
|
|
22
|
+
DETECTIONS_GENRATE_URL = "{}/ml/v1/text/detection/generated?version=2023-10-25"
|
|
23
|
+
DETECTIONS_CONTEXT_URL = "{}/ml/v1/text/detection/context?version=2023-10-25"
|
|
24
|
+
DETECTIONS_CHAT_URL = "{}/ml/v1/text/detection/chat?version=2023-10-25"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#Detector names
|
|
28
|
+
PII = "pii"
|
|
29
|
+
HAP = "hap"
|
|
30
|
+
GRANITE_GUADIAN = "granite_guardian"
|
|
31
|
+
TOPIC_RELEVANCE = "topic_relevance"
|
|
32
|
+
PROMPT_SAFETY_RISK = "prompt_safety_risk"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def get_base_url():
|
|
36
|
+
is_cpd = env.get_is_cpd()
|
|
37
|
+
|
|
38
|
+
if is_cpd:
|
|
39
|
+
base_url = env.get_base_url()
|
|
40
|
+
else:
|
|
41
|
+
if env.get_wxai_url():
|
|
42
|
+
base_url = env.get_wxai_url()
|
|
43
|
+
elif env.get_watsonx_region():
|
|
44
|
+
region = env.get_watsonx_region()
|
|
45
|
+
base_url = WATSONX_REGION_URLS.get(region).wml_url
|
|
46
|
+
else:
|
|
47
|
+
raise Exception(f"Environment variable 'WATSONX_REGION' and 'WXAI_URL' is missing.")
|
|
48
|
+
|
|
49
|
+
return base_url
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def get_base_payload(detector_name: str, detector_params: dict = {}):
|
|
53
|
+
return {
|
|
54
|
+
"detectors": {
|
|
55
|
+
detector_name: detector_params
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def get_payload(base_payload:dict, detector_payload:dict):
|
|
61
|
+
return {**base_payload,**detector_payload}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def call_detections(url: str, payload: dict):
|
|
66
|
+
#Set headers
|
|
67
|
+
headers = get_headers()
|
|
68
|
+
headers["x-governance-instance-id"] = env.get_service_instance_id()
|
|
69
|
+
|
|
70
|
+
# Getting the `WATSONX_DISABLE_SSL` Value from the Environment Variable
|
|
71
|
+
verify = environment.get_ssl_verification()
|
|
72
|
+
|
|
73
|
+
#Call the detections api
|
|
74
|
+
response = requests.post(url=url, headers=headers, json=payload, verify=verify)
|
|
75
|
+
response_status = response.status_code
|
|
76
|
+
if response_status != 200:
|
|
77
|
+
response = response.text if not isinstance(
|
|
78
|
+
response, str) else response
|
|
79
|
+
raise Exception(f"""Error while calling the detections endpoint. Details: status {response_status}
|
|
80
|
+
{str(json.loads(str(response)))}""")
|
|
81
|
+
else:
|
|
82
|
+
return json.loads(response.text)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------------------------------
|
|
2
|
+
# IBM Confidential
|
|
3
|
+
# Licensed Materials - Property of IBM
|
|
4
|
+
# 5737-H76, 5900-A3Q
|
|
5
|
+
# © Copyright IBM Corp. 2025 All Rights Reserved.
|
|
6
|
+
# US Government Users Restricted Rights - Use, duplication or disclosure restricted by
|
|
7
|
+
# GSA ADPSchedule Contract with IBM Corp.
|
|
8
|
+
# ----------------------------------------------------------------------------------------------------
|